當前位置:成語大全網 - 漢語詞典 - 如何用lisp獲取插入中子對象的元名

如何用lisp獲取插入中子對象的元名

;;;首先,獲取插頁的兩組編碼信息:

(setq?@iName?(cdr(assoc?-2(ent get(CAR(ent sel " \ n選擇圖形上的塊:"))))

;;;例如,返回值是“myBlock”

然後查詢塊中具有相同組碼的信息:

(setq?@bEnt?(tblobjname?“屏蔽”?@iName))

;;;因此,獲得了對應於insert的塊圖元名稱。

然後使用entget獲取@bEnt group code -2中包含的原語。

(setq?@孩子?(cdr(assoc?-2(entget?@bEnt))))

;;;此時,@child是插入中第壹個原語的名稱。繼續使用entget獲取更多信息:

(entget?@孩子)

;;;如果您想獲得由多個圖形組成的鑲件,您想獲得第二個或第三個或更多的實體:

;;;第二個原語的名稱:(entnext?@孩子)

;;;第三個原語原語名:(entnext?(entnext?@child))

;;;第四個原語原語名:(entnext(entnext?(entnext?@child)))

;;;……

;;;根據這個規則,我們可以寫壹個簡單的函數來得到固定圖元的圖元名。

(德潤?GETOBJ(#num?/?@@gtEt)

(setq?@@gtEt?“@ child”);定義壹個基本字符串。

(如果?(& gt=?#num?1)(修復?#num)(退出));錯誤處理部分,如果# num

(重復?#num?;循環次數“整數部分”次數

(setq?@@gtEt?(strcat?”(entnext)?@@gtEt?")"));在字符串@@gtEt前添加“(entnext)”,然後“)”。

)

(eval?(閱讀?@ @ gtEt));用read將@@gtEt轉換成表,用eval執行表。

)

;;;於是,(GETOBJ?10)可以得到@child之後第10個圖元的圖元名。如果您想查看詳細信息:

(entget(GETOBJ?10))

;;;====================================================================================

;;;總結整個代碼:

(德潤?GETOBJ(#num?/?@@gtEt)

(setq?@@gtEt?“@孩子”)

(重復?#數量

(setq?@@gtEt?(strcat?”(entnext)?@@gtEt?")"))

)

(eval?(閱讀?@@gtEt))

)

(德潤?c:INSOBJ(/?@num?@iName?@bEnt?)

(setq?@iName?(cdr(assoc?-2(ent get(CAR(ent sel " \ n選擇圖形上的塊:"))))

(setq?@bEnt?(tblobjname?“屏蔽”?@iName))

(setq?@孩子?(cdr(assoc?-2(entget?@bEnt))))

(setq?@num?(getint?" \ n輸入獲得的元素序列號:"))

(如果?(& lt?@num?0)

(程序

(princ?"序列號必須不小於0。")

(退出)

)

)

(如果?(=?@num?0)(entget?@child))

(如果?(& gt?@num?0)(entget(GETOBJ?@num)))

(princ)

)

;;;以上,呼叫結束後,CAD可以進入INSOBJ。