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



0 個意見:
張貼留言
訂閱 張貼留言 [Atom]
<< 首頁