別執(zhí)念ChatGPT,基礎(chǔ)更重要,來(lái)看看怎么用lisp編寫(xiě)一個(gè)查詢對(duì)象周長(zhǎng)的插件
插件會(huì)提高繪圖效率,這是毋庸置疑的。我們總希望,它能更快速,更簡(jiǎn)單一點(diǎn),甚至,更符合自己要求一點(diǎn)。
然后將對(duì)象長(zhǎng)度數(shù)值結(jié)果可以直接插入到圖紙中的代碼。那么沿用上一次的思路,這次我們編寫(xiě)一個(gè)可以查詢對(duì)象周長(zhǎng),并將周長(zhǎng)數(shù)值可以插入到圖紙中的。
lisp代碼針對(duì)同一個(gè)問(wèn)題,并不唯一,存在不同的代碼但都可以解決同一個(gè)問(wèn)題。
如下圖,是之前編寫(xiě)的測(cè)量對(duì)象長(zhǎng)度,并插入到圖紙中的代碼。那么這其中有些代碼是我們本文也可以繼續(xù)沿用的。
如果不想折騰,想省時(shí)間,還沒(méi)有號(hào)的可以看看這里:https://ai.sqxwsy.com/

即插入數(shù)值到圖紙中的代碼行。
(setq ch1 (strcat "長(zhǎng)度:" ch "mm"))?? ;輸出長(zhǎng)度
(setq ch2 (getpoint "\n屏幕單擊插入點(diǎn)")) ;屏幕中指定插入點(diǎn)
(entmake (list '(0 . "text") ;建立文字圖元屬性列表,文字,插入點(diǎn),內(nèi)容,字高
(cons 10 ch2)
(cons 11 ch2)
(cons 1 ch1)
'(40 . 350)
)
)
那么,我們要解決的就是測(cè)量對(duì)象周長(zhǎng)的代碼了。

代碼如下:
(defun C:zc()
;查詢對(duì)象周長(zhǎng)
(setq a (vlax-ename->vla-object (car (entsel "\選擇對(duì)象: "))))
(setq b (vla-get-length a))
(setq c (rtos b ))
;將周長(zhǎng)插入到圖紙中
(setq ch1 (strcat "周長(zhǎng):" c "mm"))?? ;輸出周長(zhǎng)
(setq ch2 (getpoint "\n屏幕單擊插入點(diǎn)")) ;屏幕中指定插入點(diǎn)
(entmake (list '(0 . "text")???????;建立文字圖元屬性列表,文字,插入點(diǎn),內(nèi)容,字高
(cons 10 ch2)
(cons 11 ch2)
(cons 1 ch1)
'(40 . 350)
)
)
(prin1)??
)
這里著重說(shuō)一下查詢周長(zhǎng)的幾行代碼。
第一行:entsel是為了讀取圖形的內(nèi)容,car是獲取圖形的圖元號(hào)??衫斫鉃閑ntsel把圖形轉(zhuǎn)換成了代碼,car是讀取了圖形在代碼中的名字。
vlax-ename->vla-object這個(gè)是lisp函數(shù),實(shí)現(xiàn)的是,將圖形變成了另一種形式,即vla對(duì)象。之所以轉(zhuǎn)變成vla對(duì)象是,為了第二行的代碼,為了使用讀取圖形周長(zhǎng)數(shù)值的函數(shù)做鋪墊。
第二行:vla-get-length函數(shù)功能是,獲取圖形的周長(zhǎng)數(shù)值。根據(jù)函數(shù)名也可以推出含義,get獲取,length長(zhǎng)度。合起來(lái)就是讀取長(zhǎng)度。
第三行:rtos是為了將數(shù)值轉(zhuǎn)換成字符串。以便于之后輸出字符串。因?yàn)樽址拍鼙惠敵觥?/p>
之后的插入周長(zhǎng)數(shù)值到圖紙中的幾行代碼,就比較容易理解了。即指定插入點(diǎn),指定插入的周長(zhǎng)數(shù)值的文字字高等。
具體效果詳見(jiàn)動(dòng)圖:

以上,你學(xué)會(huì)了嗎?代碼其實(shí),就是將語(yǔ)言變成了另一種語(yǔ)言,變成了軟件能聽(tīng)懂的語(yǔ)言而已。所以,如果社交感覺(jué)吃力,很可能因?yàn)槟氵€沒(méi)找到,對(duì)方能夠聽(tīng)懂的語(yǔ)言而已。