AutoCAD顧問
還沒有註冊嗎...即日起免費註冊,所有最完整的AutoCAD討論、教學及資源都在論壇裡喔~

[討論]lisp撰寫問題

上一篇主題 下一篇主題 向下

[討論]lisp撰寫問題

發表 由 阿希 于 2015-01-30, 05:29

想請教幾個lisp撰寫問題

1.平常執行複製.移動指令時, 選取物件 - 基準點 - 目標點 ,在未點選目標點時,所選的物件會跟隨十字軸移動, 這在程式內該如何做到 ?

2.複製完的物件該如何取得?

阿希
高級會員
高級會員

文章總數 : 335
年齡 : 36
來自 : 台北
職業 : 水電設計
愛好 : autolisp
個性 : 和平主義者
使用年資 : 5
使用版本 : 2008
積分 : 19
經驗值 : 4139
威望值 : 196
發帖精華 : 1
注冊日期 : 2008-09-22
男 摩羯座 猴

回頂端 向下

回復: [討論]lisp撰寫問題

發表 由 adslwang 于 2015-01-30, 21:13

個人淺見

1.平常執行複製.移動指令時, 選取物件 - 基準點 - 目標點 ,在未點選目標點時,所選的物件會跟隨十字軸移動, 這在程式內該如何做到
有可能是:
(ssget "p")
netmake、entlast 搭配 grread

2.複製完的物件該如何取得?
(entlast)
avatar
adslwang
高級會員
高級會員

文章總數 : 372
年齡 : 39
來自 : 台南
職業 : 自由業
愛好 : 電腦、旅行
個性 : 樂觀
使用年資 : 1年
使用版本 : 2009
積分 : 17
經驗值 : 4599
威望值 : 355
回帖精華 : 1
注冊日期 : 2008-10-02
藍鵲88號
男 處女座 馬

回頂端 向下

回復: [討論]lisp撰寫問題

發表 由 阿希 于 2015-02-02, 04:28

adslwang 寫到:個人淺見

1.平常執行複製.移動指令時, 選取物件 - 基準點 - 目標點 ,在未點選目標點時,所選的物件會跟隨十字軸移動, 這在程式內該如何做到
有可能是:
(ssget "p")
netmake、entlast 搭配 grread

2.複製完的物件該如何取得?
(entlast)


第一個問題尚未解決 ~ 再試試大大給的意見 ~~
第二個問題 , ENTLAST 是取得上一個完成的"物件",並無法取得所有選集
我的解決方式是,先設立一個空選集SSA, 複製所要的物件SSB, 再計算SSB選集內的數量,利用REPEAT去將SSB選集內的物件放置SSA選集內
最後複製或移動SSA選集 即可

阿希
高級會員
高級會員

文章總數 : 335
年齡 : 36
來自 : 台北
職業 : 水電設計
愛好 : autolisp
個性 : 和平主義者
使用年資 : 5
使用版本 : 2008
積分 : 19
經驗值 : 4139
威望值 : 196
發帖精華 : 1
注冊日期 : 2008-09-22
男 摩羯座 猴

回頂端 向下

回復: [討論]lisp撰寫問題

發表 由 shenhung 于 2015-02-04, 10:46

目前動態顯示很多都用 express tool 內的acetutil.arx 內的公共程式. 如果你有用express tools 的話.就可以直接呼叫函數使用..我附上help讓你下載.
並寫個範圍程式給你參考.  
複製後的圖元選集取得.的概念.是先在複製前用entlast .取得圖面上的最後一個圖元..
因為複製後的圖元是新增圖元.所以圖元序會排在 entlast最後一個圖元後面..所以只要搜尋最後一個圖元之後的圖元.
就是你複製後的圖元了.~!! 這個概念.也可用在爆炸後的圖元取得.!!

acetutil 幫助
https://db.tt/VIwVvYPz

acetutil 幫助備用載點:
https://app.box.com/s/s17yyfanurxad3avxkqf7o9yggrhok5x

help幫助用法.


代碼:

;問題1
(defun c:tt()
(setvar "cmdecho" 0)
(setq sn1 (entlast)) ;取得複製前最後一個圖元
(setq p2 (acet-ss-drag-move (setq ss (ssget)) (setq p1 (getpoint "\n基準點")) "\n指定第二點" 1))
(command "copy" ss "" p1 p2)
(setvar "cmdecho" 0)
(setq co-ss (ssadd))
(setq en (entnext sn1)) ;開始尋找最後一個圖元的下一個.
(while (/= en nil) ;如果找到.加入選集.一直到最後.
       (setq co-ss (ssadd en co-ss))
       (setq en (entnext en))
)  
(if co-ss (print (sslength co-ss)))
)  
avatar
shenhung
高級會員
高級會員

文章總數 : 238
年齡 : 50
來自 : 新北市
職業 : 塑膠模具設計.AUTOLISP
愛好 : 音樂
個性 : 隨和
使用年資 : 18年
使用版本 : 2010
積分 : 15
經驗值 : 5002
威望值 : 913
注冊日期 : 2009-06-03
男 摩羯座 馬

回頂端 向下

回復: [討論]lisp撰寫問題

發表 由 adslwang 于 2015-02-11, 14:29

shenhung 寫到:目前動態顯示很多都用 express tool 內的acetutil.arx 內的公共程式. 如果你有用express tools 的話.就可以直接呼叫函數使用..我附上help讓你下載.
並寫個範圍程式給你參考.  
複製後的圖元選集取得.的概念.是先在複製前用entlast .取得圖面上的最後一個圖元..
因為複製後的圖元是新增圖元.所以圖元序會排在 entlast最後一個圖元後面..所以只要搜尋最後一個圖元之後的圖元.
就是你複製後的圖元了.~!! 這個概念.也可用在爆炸後的圖元取得.!!

acetutil 幫助
https://db.tt/VIwVvYPz

acetutil 幫助備用載點:
https://app.box.com/s/s17yyfanurxad3avxkqf7o9yggrhok5x

help幫助用法.


代碼:

;問題1
(defun c:tt()
(setvar "cmdecho" 0)
(setq sn1 (entlast)) ;取得複製前最後一個圖元
(setq p2 (acet-ss-drag-move (setq ss (ssget)) (setq p1 (getpoint "\n基準點")) "\n指定第二點" 1))
(command "copy" ss "" p1 p2)
(setvar "cmdecho" 0)
(setq co-ss (ssadd))
(setq en (entnext sn1)) ;開始尋找最後一個圖元的下一個.
(while (/= en nil) ;如果找到.加入選集.一直到最後.
       (setq co-ss (ssadd en co-ss))
       (setq en (entnext en))
)  
(if co-ss (print (sslength co-ss)))
)  

前輩研究了解很深 學習中 謝謝
avatar
adslwang
高級會員
高級會員

文章總數 : 372
年齡 : 39
來自 : 台南
職業 : 自由業
愛好 : 電腦、旅行
個性 : 樂觀
使用年資 : 1年
使用版本 : 2009
積分 : 17
經驗值 : 4599
威望值 : 355
回帖精華 : 1
注冊日期 : 2008-10-02
藍鵲88號
男 處女座 馬

回頂端 向下

上一篇主題 下一篇主題 回頂端


 
這個論壇的權限:
無法 在這個版面回復文章