詞典與擴(kuò)展

(defun att-xdata(appname en fldname lst)

;fullname: attach xdata

;usage: to add field and initiate its contents in the entity in the appname

;for prevent the appname was abused, in "attach XData" function, the using of regapp

;is limited

? (if (and (= (type en) 'ENAME) (= (type appname) 'STR) (/= appname "*"));whether input legal

? ? (if (setq xlsts (cdr (assoc -3 (setq ent (entget en (list appname))))));whether run the "get-or-make-xdata" to create xdata of appname in the entity

? ? ? (if (and (= (type fldname) 'STR) (null (getxdfield fldname (cdar xlsts))));whether field already exists, if it's, refer to "add-xdata-field"

? ? ? ? (if (>

? ? ? (xdroom en)

? ? ? ? (xdsize

? ? (setq xlst (list (cons appname (setxdfield fldname lst))))

? ? ? ? )

? ? );whether overflow

? (entmod

? ? (subst

? ? ? (list -3 (cons appname (append (cdadr (assoc -3 ent)) (cdar xlst))))

? ? ? (assoc -3 ent)

? ? ? ent

? ? )

? )

? nil

? ? ? ? )

nil

? ? ? )

? ? ? nil

? ? )

? ? nil

? )

)

(defun get-or-make-xdata(appname en fldname)

? (if (= (type en) 'ENAME);whether input legal

? ? (progn

? ? ? (setq ent (entget en '("*")))

? ? ? (setq ent_attapp (mapcar 'car (setq xlsts (cdr (assoc -3 ent)))))

? ? ? (if (= (type appname) 'STR);whether input legal

? ? ? ? (cond

? ((= appname "*") xlsts);to get all xdata of the entity

? ((member appname ent_attapp);whether xdata of appname has been created

? ? ? ? ? ? (setq xlst (cdar (plstkread appname xlsts)))

? ? (cond

? ? ? ((= fldname "*") xlst);to get xdata of appname in all fields

? ? ? ((and (= (type fldname) 'STR) (/= fldname "*"));to get xdata of appname in the field

? ? ? (get-xdata-field fldname xlst)

? ? ? )

? ? ? (T nil)

? ? )

? )

? ((and (null fldname);to make xdata of appname at the entity

(not (entmod (append ent (list (list -3 (list appname))))))

? )

? (regapp appname)

? (entmod (append ent (list (list -3 (list appname)))))

? )

? (T nil)

)

? ? ? ? nil?

? ? ? )

? ? )

? ? nil

? )

)

(defun getxdfield(fldname xlst);to decode the xdata point list which form was defined

? (if (not (zerop (length (setq lst (member (cons 1000 fldname) xlst)))))

? ? (if (= (cadr lst) '(1002 . "{"))

? ? ? (progn

(setq flag nil lst (cddr lst))

(vl-remove-if

? '(lambda(xi)

? ? (if (= xi '(1002 . "}"))

? ? ? (setq flag (not flag))

? ? ? flag))

? lst

)

(mapcar 'cdr lst)

? ? ? )

? ? ? (getxdfield fldname (cdr lst))

? ? )

? ? nil

? )

)

(defun setxdfield(fldname lst);to encode the xdata point list which form was defined

? (if (and (= (type fldname) 'STR) (listp lst))

? ? (progn

? ? ? (setq xlst (list (cons 1002 "}")))

? ? ? (setq lst (reverse lst))

? ? ? (while lst

(cond

? ((= (type (setq e (car lst))) 'STR)

? (if (handent e)

? ? (setq xlst (cons (cons 1005 e) xlst))

? ? (setq xlst (cons (cons 1000 e) xlst))

? )

? )

? ((= (type e) 'LIST)

? (if (and (= (length e) 3) (apply 'and (mapcar '(lambda(x)(= (type x) 'REAL)) e)))

? ? (setq xlst (cons (cons 1010 e) xlst))

? )

? )

? ((= (type e) 'REAL)

? (setq xlst (cons (cons 1040 e) xlst))

? )

? ((= (type e) 'INT)

? (setq xlst (cons (cons 1071 e) xlst))

? )

)

(setq lst (cdr lst))

? ? ? )

? ? ? (setq xlst (append (list (cons 1000 fldname) (cons 1002 "{")) xlst))

? ? )

? ? nil

? )

)

(defun plstkread(key plst / drlst)

? (cond

? ? ((setq drlst (member (assoc key plst) plst))

? ? (append (list (car drlst)) (plstkread key (cdr drlst)))

? ? )

? ? ((null drlst)

? ? nil

? ? )

? )

)

(defun get-or-make-dict(d_name)

? (if (and (= (type d_name) 'STR)

? (null

? ? (setq dict_epty (dictsearch (namedobjdict) d_name))

? )

? ? ? )

? ? (cond

? ? ? ((setq dict_en (entmakex '(0 . "DICTIONARY")(100 . "AcDbDictionary")))

? ? ? (setq dict_en (dictadd (namedobjdict) d_name dict_en))

? ? ? )

? ? )

? ? (cdr (assoc -1 dict_epty))

? )

)

(defun get-or-make-Xrecord(dict_key xrec_key)

? (cond

? ? ((and (= (type xrec_key) 'STR)

? (setq dict_en (get-dict dict_key))

? ? )

? ? (cond

? ? ? ((setq xerc_epty (dictsearch dict_en xrec_key))

(setq xrec_en (cdr (assoc -1 xerc_epty)))

? ? ? )

? ? ? (T

(setq anXrec (entmakex '((0 . "XRECORD") (100 . "AcDbXrecord") )))

;DXF code:280 is0=1=2=...see freelancer

(if anXrec

? (setq enXrec (dictadd dict_en xrec_key anXrec))

? nil

)

? ? ? )

? ? )

? ? )

? ? (T nil)

? )

)

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末擒抛,一起剝皮案震驚了整個(gè)濱河市十减,隨后出現(xiàn)的幾起案子韧拒,更是在濱河造成了極大的恐慌再姑,老刑警劉巖丁逝,帶你破解...
    沈念sama閱讀 218,941評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異袁滥,居然都是意外死亡驱富,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,397評論 3 395
  • 文/潘曉璐 我一進(jìn)店門凿试,熙熙樓的掌柜王于貴愁眉苦臉地迎上來排宰,“玉大人,你說我怎么就攤上這事红省《罡鳎” “怎么了国觉?”我有些...
    開封第一講書人閱讀 165,345評論 0 356
  • 文/不壞的土叔 我叫張陵吧恃,是天一觀的道長。 經(jīng)常有香客問我麻诀,道長痕寓,這世上最難降的妖魔是什么傲醉? 我笑而不...
    開封第一講書人閱讀 58,851評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮呻率,結(jié)果婚禮上硬毕,老公的妹妹穿的比我還像新娘。我一直安慰自己礼仗,他們只是感情好吐咳,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,868評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著元践,像睡著了一般韭脊。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上单旁,一...
    開封第一講書人閱讀 51,688評論 1 305
  • 那天沪羔,我揣著相機(jī)與錄音,去河邊找鬼象浑。 笑死蔫饰,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的愉豺。 我是一名探鬼主播篓吁,決...
    沈念sama閱讀 40,414評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼粒氧!你這毒婦竟也來了越除?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,319評論 0 276
  • 序言:老撾萬榮一對情侶失蹤外盯,失蹤者是張志新(化名)和其女友劉穎摘盆,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體饱苟,經(jīng)...
    沈念sama閱讀 45,775評論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡孩擂,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,945評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了箱熬。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片类垦。...
    茶點(diǎn)故事閱讀 40,096評論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖城须,靈堂內(nèi)的尸體忽然破棺而出蚤认,到底是詐尸還是另有隱情,我是刑警寧澤糕伐,帶...
    沈念sama閱讀 35,789評論 5 346
  • 正文 年R本政府宣布砰琢,位于F島的核電站,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏陪汽。R本人自食惡果不足惜训唱,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,437評論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望挚冤。 院中可真熱鬧况增,春花似錦、人聲如沸训挡。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,993評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽澜薄。三九已至宴凉,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間表悬,已是汗流浹背弥锄。 一陣腳步聲響...
    開封第一講書人閱讀 33,107評論 1 271
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留蟆沫,地道東北人籽暇。 一個(gè)月前我還...
    沈念sama閱讀 48,308評論 3 372
  • 正文 我出身青樓,卻偏偏與公主長得像饭庞,于是被迫代替她去往敵國和親戒悠。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,037評論 2 355

推薦閱讀更多精彩內(nèi)容