2013年1月30日 星期三

Autolisp 欄位轉成多行文字 Field to MText

寫這個程式的原因是之前寫了將標註尺寸對應到欄位的程式,在繪圖下料時使用,能減少許多錯誤 (尺寸變化文字就變化)。

問題是有些人使用免費的CAD 如 DraftSight,在讀取 AutoCAD 檔案時,附加的欄位屬性會變成文字公式......



網路上找了許多版本,好像都蠻失敗的,欄位轉成多行文字,這轉換上似乎有點困難。但是如果使用MText 做為加入資料自動計算的欄位,炸開就可以了很簡單的回復成一般的文字物件,而且很正常,缺點是會變成單行文字。

那需要做的事簡單的說就是

1. 在選取時僅選中欄位文字 ( FieldMText )
2. 炸開欄位文字 ( FieldMText ) 並取回被炸開的 ( Text ) 物件
3. 再將  ( Text ) 物件 轉回 MText



(defun c:exf ()
  (prompt
    "\n注意!!這程式會炸開所有欄位"
  )
  (setq ss (ssget))
  (setq ss (SSEntTyp ss 0 "MTEXT"))
  (setq ss (SSEntTyp ss 102 "{ACAD_XDICTIONARY")) ;;選取欄位文字物件
  (setvar "qaflags" 1)
  (if (and (/= nil ss) (/= 0 (sslength ss)))
    (setq ss (ExplodeAndGetExplodedObject ss)) ;;炸開並取回炸開物件
  )
  (SScvMtext ss) ;;將被炸開的物件轉回多行文字
  (setvar "qaflags" 0)
  (princ)
)


;;;*************************   只選取欄位文字物件    **********************
(defun SSEntTyp (SSrex index entype /  n endata enNamen ssExcluded result)
   (if (/= SSrex nil)
     (progn
       (setq ssExcluded (ssadd))
       (setq n 0)
       (repeat (sslength SSrex)
     (setq enNamen (ssname SSrex n))
     (setq endata (entget enNamen))
     (if (= (cdr (assoc index endata)) entype)
       (progn
        (print entype)
        (print (cdr (assoc index endata)))
            (setq ssExcluded (ssadd enNamen ssExcluded))
       )
     )
     (setq n (+ n 1))
       )
     )
   )
          (setq result ssExcluded)
)

;;;***********************  炸開並取回炸開物件 **************************
(defun ExplodeAndGetExplodedObject (SS          /         i
                   n          enNameI     enNameN
                   ssuni      ssuni2     ssExclude
                   ssexploded result
                  )
  (if (/= SS nil)
    (progn
      (setq ssuni (ssget "x"))
      (setq i 0)
      (repeat (sslength SS)
    (setq enNameI (ssname SS i))
    (setq ssExclude (ssdel enNameI ssuni))
    (setq i (+ 1 i))
      )
      (setvar "qaflags" 1)
      (command "explode" SS "")
      (setvar "qaflags" 2)
      (setq ssuni2 (ssget "x"))
      (setq n 0)
      (repeat (sslength ssExclude)
    (setq enNameN (ssname ssExclude n))
    (setq ssexploded (ssdel enNameN ssuni2))
    (setq n (+ 1 n))
      )
    )
    (exit)
  )
  (setq result ssexploded)
)


;; ********* 轉換成 Mtext 副程式 ************
(defun SScvMtext( SS / )
  (if (/= ss nil)
    (progn
      (setq len (sslength ss))
      (while (> len -1)
 (setq txtName (ssname ss len))
 (command "txt2mtxt" txtName "");; 呼叫 express 程式
 (setq len (- len 1))
      )
     )
   )
)


就是這樣間接的將欄位 ( Field-MText ) 轉成多行文字 ( MText )

相關文章

http://wildkidblog.blogspot.tw/2012/10/autocad.html
http://wildkidblog.blogspot.tw/2010/07/autocad.html
http://wildkidblog.blogspot.tw/2010/08/autolisp-exclude-entites-from-selection.html

標籤: , ,

2011年12月22日 星期四

完全安裝手冊 -- 在 linuxMint12 x64 下安裝 draftsight



1.兩個套件要先安裝起來 libxcb-render-util0(0.3.6-1) 注意要用 0.3.6-1 如果找不到可在這下載 , libdirectfb-extra (1.2.10.0-4ubuntu2)
sudo apt-get install libdirectfb-extra libxcb-render-util0

2.將 draftsight.deb 下載下來放家目錄
3.開啟終端機dpkg-deb -x DraftSight.deb tmp
4.dpkg-deb --control DraftSight.deb tmp/DEBIAN
5.gedit tmp/DEBIAN/control
6.找到 Architecture: i386 改成 Architecture: all 存檔
再重新打包
7.dpkg -b tmp DraftSight_x64.deb

8.點選家目錄下 DraftSight_x64.deb 直接安裝





PS .如果還是不能安裝打開synaptic ,逐檢查下列檔案是不是有安裝


libdirectfb-extra
libxcb-render-util0
libaudio2

sendmail-base (8.14.4-2)
sendmail-bin (8.14.4-2+b1)
sendmail-cf (8.14.4-2)
sendmail (8.14.4-2)
 

sensible-mda (8.14.4-2+b1)

ia32-libs
ia32-libs-gtk
nvidia-glx-ia32 (跟顯示驅動程式有關版本不一定)
libexpat1:i386



如果有缺請先安裝上列檔案再試著安裝 DraftSight_x64.deb  也用下列命令一次檢查
**********************************************************************************************************
* 我發現一個很有趣的問題,如果你先安裝 Teamviewer 大部份缺少的套件都有了。
* 接著再用下面的命令檢查一下,把缺少的再裝起來就可以順利安裝了。                   
* 因為是偶然的發現,所以我下次重安裝時我再把套件差異列出。                               
**********************************************************************************************************

sudo apt-get install libexpat1 libglib2.0-0 libpcre3 libselinux1 zlib1g libc6 libx11-6 libxau6 libxcomposite1 libxcursor1 libxdamage1 libxdmcp6 libxext6 libxfixes3 libxi6 libxinerama1 libxrandr2 libxrender1 libatk1.0-0 libcairo2 libdirectfb-extra libfontconfig1 libfreetype6 libgtk2.0-0 libpango1.0-0 libpixman-1-0 libpng12-0 libxcb-render-util0 libxcb-render0 libxcb1 debconf

sudo apt-get install libcomerr2 libdbus-1-3 libexpat1 libgcc1 libgcrypt11 libglib2.0-0 libgpg-error0 libkeyutils1 libpcre3 libuuid1 zlib1g libc6 libgl1-mesa-glx libglu1-mesa libice6 libsm6 libx11-6 libxau6 libxdamage1 libxdmcp6 libxext6 libxfixes3 libxrender1 libxt6 libxxf86vm1 libaudio2 libavahi-client3 libavahi-common3 libcups2 libdrm2 libfontconfig1 libgnutls26 libgssapi-krb5-2 libk5crypto3 libkrb5-3 libkrb5support0 libstdc++6 libtasn1-3 libxcb1 sendmail




如果還是不行請檢查一下錯誤訊息,試著安裝缺少的函式庫在重新安裝

還有就是「標楷體」這個微軟字型可以用「文泉譯微米黑」
代替顯示就會正常。

標籤: , ,