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]
<< 首頁