A/VLisp的吉檀迦利 拾遺之路

【base1.1】創(chuàng)建常用常數

?? (defun __PRD@INITCONST__()
? ? ? (vl-load-com)
? ? ? (setq *En2Obj* vlax-ename->vla-object
? ? ? ? ? ? ?? *Obj2En* vlax-vla-object->ename
? ? ? ? ? ? ?? *ACAD* (vlax-get-acad-object)
? ? ? ? ? ? ?? *ADOC* (vla-get-ActiveDocument *ACAD*);關于跨文件操作lisp另考慮
? ? ? ? ? ? ?? *DOCS* (vla-get-Documents *ACAD*)
? ? ? ? ? ? ?? *ADMS* (vla-get-modelSpace *ADOC*);active doc's model space
? ? ? ? ? ? ?? *ADPS* (vla-get-paperSpace *ADOC*);active? doc's paper space
? ? ? ? ? ? ?? *ABLKS* (vla-get-Blocks *ADOC*);
? ? ? ? ? ? ?? *ALAYS* (vla-get-Layers *ADOC*)
? ? ? ? ? ? ?? *ADICS* (vla-getDictionaries *ADOC*)
? ? ? ? ? ? ?? *ALTPS* (vla-get-Linetypes *ADOC*)
? ? ? ? ? ? ?? *ATXTS* (vla-get-TextStyles *ADOC*)
? ? ? ? ? ? ?? *AGRPS* (vla-get-groups *ADOC*)
? ? ? ? ? ? ?? *ADIMS* (vla-get-DimStyles *ADOC*)
? ? ? ? ? ? ?? *LOUTS* (vla-get-Layouts *ADOC*)
? ? ? ? ? ? ?? *AVWPS* (vla-get-Viewports *ADOC*)
? ? ? ? ? ? ?? *AVIEW* (vla-get-Views *ADOC*)
? ? ? )
? ? ? (setq *PSHELL* (vlax-get-or-create-object "Shell.Application")
? ? ? ? ? ? ?? *REGEXP* (vlax-get-or-create-object "VBScript.RegExp")
? ? ? ? ? ? ?? *WSSHEL*(vlax-get-or-create-object "wscript.shell")
? ? ? ? ? ? ?? *SCPCON* (vlax-get-or-create-object "ScriptControl")
? ? ? ? ? ? ?? *WBEMSL* (vlax-get-or-create-object "WbemScripting.SWbemLocator")
?? );常用外部接口對象 考慮regexp的一類版本判斷

【base1.2】獲取任意對象句柄的所有屬性和方法

(defun VGET_OBJ_CONTENT(obj)
?? (if (= (type obj) 'VLA-OBJECT)
? ?? (if (not (vlax-object-released-p obj));待完善
? ? ?? (vlax-dump-object obj T)
? ? ?? "NaN"
? ?? )
? ?? "NaN"
?? )
)

【base1.3】安全獲取任意對象句柄的屬性

? (defun VGET_PTY_X(obj pty)
? ?? (if (= (type obj) 'VLA-OBJECT)
? ? ?? (if (vlax-property-available-p obj pty)
? ? ? ?? (vlax-get-property obj pty)
? ? ? ?? nil
? ? ?? )
? ? ?? nil
? ?? )?
? )

【base1.4】獲取集合成員的名稱列表

(defun VGET_OBJ_NAME(obj)
?? (if (vlax-property-available-p obj 'Name)
? ?? (vlax-get-property obj 'Name)
? ?? "NaN"
?? )
)??
(defun VGET_COL_ITEM_NAME(collection / out)
? ?? (vlax-for each collection
? ? ? ? (setq out (cons (VGET_OBJ_NAME each) out))
? ?? )
? ?? (reverse out)
)

【base1.4】獲取acad的preferences對象句柄

? (defun __PRD@ADOCPREF__()
? ?? (VGET_PTY_X *ACAD* 'Preferences)
? )

【base1.5】獲取指定的preferences的對象句柄

? (defun GETPREFKEY(tab key / prefs)
? ? ?(setq prefs (__PRD@ADOCPREF__))
? ?? (if perfs
? ? ?? (VGET_PTY_X prefs key)
? ? ?? nil
? ?? )
? )

【base1.6】設置preferences對象中的屬性

? (defun PUTPREFKEY(tab key val)
? ?? (setq prefi?(VGET_PTY_X (__PRD@ADOCPREF__) tab))
? ?? (if prefi
? ? ?? (if (vlax-property-available-p?
? ? ? ? ? ? ? prefi
? ? ? ? ? ? ? key
? ? ? ? ? ? ? T
? ? ? ? ?? )
? ? ? ?? (vlax-put-property prefi key val)
? ? ? ?? "NaN"
? ? ?? )
? ? ?? "NaN"
? ?? )
? )

【base1.7】返回詞典集合成員名稱列表

? (defun )

【base5.1】獲取對象XRECORD

? (defun GETXRECORD(obj name / e dicts xt xd lst _getxrecord)
? ?? (defun _getxrecord(dc / xt xd)
? ? ? ? (if (= (vla-get-objname dc) "AcDbXrecord")
? ? ? ? ? (progn (vla-getxrecorddata dc 'xt 'xd)
? ? ? ? ? ?? (if (and xt xd)
? ? ? ? ? ? ?? (setq lst?
? ? ? ? ? ? ? ? ? (cons?
? ? ? ? ? ? ? ? ? ?? (cons (vla-get-name dc)
? ? ? ? ? ? ? ? ? ? ? ? (mapcar '(lambda (x y) (cons x y))
? ? ? ? ? ? ? ? ? ? ? ? ?? (safearray-value xt)?
? ? ? ? ? ? ? ? ? ? ? ? ?? (mapcar 'variant-value (safearray-value xd))
? ? ? ? ? ? ? ? ? ? ? ? );<end/mapcar>
? ? ? ? ? ? ? ? ? ?? );<end/cons>
? ? ? ? ? ? ? ? ? ?? lst
? ? ? ? ? ? ? ? ? );<end/cons lst>
? ? ? ? ? ? ?? );<end/setq lst>
? ? ? ? ? ? ?? (setq lst (cons (vla-get-name dc) lst))
? ? ? ? ? ?? );<end/if xt xd>
? ? ? ? ? );<end/progn>
? ? ? ? );<end/if =>
? ?? );<end/defun _getxrecord>
? ?? (if (= (vla-get-objectname obj) "AcDbDictionary")
? ? ?? (vlax-for dict obj?
? ? ? ? ? (_getxrecord dict)
? ? ?? )
? ? ?? (if (= (vla-get-hasExtensionDictionary obj) :vlax-true)
? ? ? ?? (progn (setq dicts (vla-getExtensionDictionary obj))
? ? ? ? ? ? (vlax-for dict dicts
? ? ? ? ? ? ?? (_getxrecord dict)
? ? ? ? ? ? )
? ? ? ?? )
? ? ?? )
? ?? )
? ?? (if (= name "*")
? ? ?? lst
? ? ?? (vl-remove-if-not?
? ? ? ? ? '(lambda(x) (= (strcase (car x)) (strcase name)))
? ? ? ? ? lst
? ? ?? )
? ?? )
? )

【base5.2】為對象貼附XRECORD

(defun PUTXRECORD(obj name values / _setxrecord xlst xrec dicts xd xt)
?? (defun _setxrecord(obj lst)
? ? ? (vla-setxrecorddata obj
? ? ? ?? (list->vbarray (mapcar 'car lst) vlax-vbinteger)
? ? ? ?? (list->vbarray (mapcar 'cdr lst) vlax-vbvariant)
? ? ? )
?? )
?? (if (= (vla-get-objectname obj) "AaDbDictionary")
? ?? (progn?
? ? ? ? (vlax-for d obj
? ? ? ? ?? (if (and (= (vla-get-objectname d) "AcDbXrecord")
? ? ? ? ? ? ? ? ? (= (strcase (vla-get-name d)) (strcase name))
? ? ? ? ? ? ?? )
? ? ? ? ? ?? (setq xrec d)
? ? ? ? ?? )
? ? ? ? )
? ? ? ? (if xrec
? ? ? ? ? (progn (vla-getxrecorddata xrec 'xt 'xd)
? ? ? ? ? ?? (if xt
? ? ? ? ? ? ?? (_setxrecord xrec?
? ? ? ? ? ? ? ? ? (append?
? ? ? ? ? ? ? ? ? ?? (mapcar '(lambda (x y) (cons x y))?
? ? ? ? ? ? ? ? ? ? ? ?? (safearray-value xt)
? ? ? ? ? ? ? ? ? ? ? ?? (mapcar 'variant-value (safearray-value xd))
? ? ? ? ? ? ? ? ? ?? )
? ? ? ? ? ? ? ? ? ?? values
? ? ? ? ? ? ? ? ? );<end/append>
? ? ? ? ? ? ?? );<end/_setxrecord>
? ? ? ? ? ? ?? (_setxrecord xrec values)
? ? ? ? ? ?? );<end/if xt>
? ? ? ? ? );<end/progn vla-getxrecord>
? ? ? ? ? (progn (setq xrec (vla-addxrecord obj name))
? ? ? ? ? ?? (_setxrecord xrec values)
? ? ? ? ? )
? ? ? ? );<end/if xrec>
? ?? );<end/progn>
? ?? (if (= (vla-get-hasExtensionDictionary obj) :vlax-true)
? ? ?? (progn
? ? ? ? ? (setq dicts (vla-GetExtensionDictionary obj))
? ? ? ? ? (vlax-for dict dicts
? ? ? ? ? ?? (if (and (= (vla-get-objname dict) "AcDbXrecord")
? ? ? ? ? ? ? ? ? ? (= (strcase (vla-get-name dict)) (strcase name))
? ? ? ? ? ? ? ?? )
? ? ? ? ? ? ?? (setq xrec dict)
? ? ? ? ? ?? )
? ? ? ? ? )
? ? ? ? ? (if xrec
? ? ? ? ? ? (progn (vla-getxrecorddata xrec 'xt 'xd)
? ? ? ? ? ? ?? (_setrecord xrec?
? ? ? ? ? ? ? ? ? (append?
? ? ? ? ? ? ? ? ? ?? (mapcar '(lambda (x y) (cons x y))
? ? ? ? ? ? ? ? ? ? ? ? (safearray-value xt)
? ? ? ? ? ? ? ? ? ? ? ? (mapcar 'variant-value (safearray-value xd))
? ? ? ? ? ? ? ? ? ?? )
? ? ? ? ? ? ? ? ? ?? values
? ? ? ? ? ? ? ? ? )
? ? ? ? ? ? ?? )
? ? ? ? ? ? )
? ? ? ? ? );<end/if xrec>
? ? ?? );<end/progn>
? ? ?? (progn?
? ? ? ? ? (setq dict (vla-getextensiondictionary obj)
? ? ? ? ? ?? xrec (vla-addrecord dict name)
? ? ? ? ? )
? ? ? ? ? (_setxrecord xrec values)
? ? ?? )
? ?? );<end/if hasextesiondict>
?? );<end/if = objname AcDbDict>
);<end/defun PUTXRECORD>

【base5.3】刪除對象的XRECORD (刪除對象是否徹底呢?)

(defun DELXRECORD(obj name /)
?? (if (= (vla-get-objname obj) "AcDbDictionary")
? ?? (vlax-for d obj
? ? ? ? (if (= (vla-get-objname d) "AcDbXrecord")
? ? ? ? ? ;(progn///////?有嗎
? ? ? ? ? ? ? (if (= name "*")
? ? ? ? ? ? ? ? (vla-delete d)
? ? ? ? ? ? ? )
? ? ? ? ? ? ? (if (= (strcase (vla-get-name d)) (strcase name))
? ? ? ? ? ? ? ? (vla-delete d)
? ? ? ? ? ? ? )
? ? ? ? ? ;)////////?有嗎
? ? ? ? )
? ?? )
? ?? (if (vla-get-hasexteinsiondictionary obj)
? ? ?? (vlax-for d (vla-getextensiondictionary obj)
? ? ? ? ? (if (= (vla-get-objectname d) "AcDbXrecord")
? ? ? ? ?? ;(progn////////?有嗎
? ? ? ? ? ? (if (= name "*")
? ? ? ? ? ? ? (vla-delete d)
? ? ? ? ? ? )
? ? ? ? ? ? (if (= (strcase (vla-get-name d)) (strcase name))
? ? ? ? ? ? ? (vla-delete d)
? ? ? ? ? ? )
? ? ? ? ?? ;)//////////有嗎
? ? ? ? ? )
? ? ?? )
? ?? )
?? )
)

【base5.4】替換對象的相同名稱的XRECORD

(defun REPLACEXRECORD(obj name vars / oldvars lst tf)
?? (if (setq lst (GETXRECORD obj name))
? ?? (progn
? ? ? ? (setq oldvars (mapcar 'car vars))
? ? ? ? (setq lst
? ? ? ? ?? (mapcar?
? ? ? ? ? ? ?? '(lambda (x / ll nx)
? ? ? ? ? ? ? ? ? (if (setq ll (vl-member-if '(lambda (a) (equal a x 1e-3)) oldvars))
? ? ? ? ? ? ? ? ? ? (progn
? ? ? ? ? ? ? ? ? ? ?? (setq nx (cons (car x) (cadr (assoc (car ll) vars))))
? ? ? ? ? ? ? ? ? ? ?? (setq tf T)
? ? ? ? ? ? ? ? ? ? ?? (setq vars (vl-remove (car ll) vars))
? ? ? ? ? ? ? ? ? ? ?? nx
? ? ? ? ? ? ? ? ? ? )
? ? ? ? ? ? ? ? ? ? x
? ? ? ? ? ? ? ? ? )
? ? ? ? ? ? ? ? )
? ? ? ? ? ? ? ? lst
? ? ? ? ?? )
? ? ? ? )
? ? ? ? (if tf?
? ? ? ? ? (SETXRECORD obj name lst)
? ? ? ? )
? ? ? ? T
? ?? )
?? )
)

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末邑跪,一起剝皮案震驚了整個濱河市信不,隨后出現的幾起案子,更是在濱河造成了極大的恐慌檐春,老刑警劉巖况芒,帶你破解...
    沈念sama閱讀 217,734評論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件唠椭,死亡現場離奇詭異跳纳,居然都是意外死亡,警方通過查閱死者的電腦和手機贪嫂,發(fā)現死者居然都...
    沈念sama閱讀 92,931評論 3 394
  • 文/潘曉璐 我一進店門寺庄,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人力崇,你說我怎么就攤上這事斗塘。” “怎么了亮靴?”我有些...
    開封第一講書人閱讀 164,133評論 0 354
  • 文/不壞的土叔 我叫張陵馍盟,是天一觀的道長。 經常有香客問我茧吊,道長贞岭,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,532評論 1 293
  • 正文 為了忘掉前任搓侄,我火速辦了婚禮瞄桨,結果婚禮上,老公的妹妹穿的比我還像新娘讶踪。我一直安慰自己芯侥,他們只是感情好,可當我...
    茶點故事閱讀 67,585評論 6 392
  • 文/花漫 我一把揭開白布乳讥。 她就那樣靜靜地躺著柱查,像睡著了一般。 火紅的嫁衣襯著肌膚如雪雏婶。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,462評論 1 302
  • 那天白指,我揣著相機與錄音留晚,去河邊找鬼。 笑死,一個胖子當著我的面吹牛错维,可吹牛的內容都是我干的奖地。 我是一名探鬼主播,決...
    沈念sama閱讀 40,262評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼赋焕,長吁一口氣:“原來是場噩夢啊……” “哼参歹!你這毒婦竟也來了?” 一聲冷哼從身側響起隆判,我...
    開封第一講書人閱讀 39,153評論 0 276
  • 序言:老撾萬榮一對情侶失蹤犬庇,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后侨嘀,有當地人在樹林里發(fā)現了一具尸體臭挽,經...
    沈念sama閱讀 45,587評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,792評論 3 336
  • 正文 我和宋清朗相戀三年咬腕,在試婚紗的時候發(fā)現自己被綠了欢峰。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,919評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡涨共,死狀恐怖纽帖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情举反,我是刑警寧澤懊直,帶...
    沈念sama閱讀 35,635評論 5 345
  • 正文 年R本政府宣布,位于F島的核電站照筑,受9級特大地震影響吹截,放射性物質發(fā)生泄漏。R本人自食惡果不足惜凝危,卻給世界環(huán)境...
    茶點故事閱讀 41,237評論 3 329
  • 文/蒙蒙 一波俄、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧蛾默,春花似錦懦铺、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,855評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至牧挣,卻和暖如春急前,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背瀑构。 一陣腳步聲響...
    開封第一講書人閱讀 32,983評論 1 269
  • 我被黑心中介騙來泰國打工裆针, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 48,048評論 3 370
  • 正文 我出身青樓世吨,卻偏偏與公主長得像澡刹,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子耘婚,可洞房花燭夜當晚...
    茶點故事閱讀 44,864評論 2 354

推薦閱讀更多精彩內容