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

[已解決]LISP中的EXTEND的寫法?

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

[已解決]LISP中的EXTEND的寫法?

發表 由 windqqqq 于 2010-03-11, 13:45

各位先進,小弟初學AUTOLISP,
想讓一條線段A (command "line" pa pb "")
(setq en1(entlast))

EXTEND到另一條建構線B(command "xline""h" pg "")
(setq en2(entlast))

最後寫到(COMMAND "EXTEND" "en2" "" "en1" "?")

問號的部分該怎麼寫呢?

指定pa或pb都是點好像不行

請各位先進指導一下,感謝 竊喜
謝謝judyyai幫我修改主題顏色,謝謝


windqqqq 在 2010-03-18, 12:46 作了第 2 次修改
avatar
windqqqq
一般會員
一般會員

文章總數 : 11
年齡 : 38
來自 : 台中
職業 : 機械製圖
愛好 : 游泳
個性 : 隨和
使用年資 : 3
使用版本 : 2002
經驗值 : 2831
威望值 : 0
注冊日期 : 2010-03-02
男 巨蟹座 羊

回頂端 向下

回復: [已解決]LISP中的EXTEND的寫法?

發表 由 judyyai 于 2010-03-11, 14:01

發表問題時,請在主題前請加入[問題],顏色請指定為[藍色],論壇管理顧問會將您的主題置頂,方便大家即時討論。


[說明]發表主題前,請遵守相關要領!
http://www.autocad-tw.com/forum-f12/topic-t1521.htm

已幫你改過!

____________________________________________________________________________________
avatar
judyyai
管理顧問
管理顧問

文章總數 : 7642
年齡 : 40
來自 : 台南
職業 : 機械製圖
愛好 : 電腦相關
個性 : think too much...
使用年資 : 10↑
使用版本 : AC2014(開始於2015九月底)
AutoCAD基礎篇等級 : 10星級
積分 : 392
最佳解答 : 1
經驗值 : 27173
威望值 : 3454
發帖精華 : 2
回帖精華 : 4
注冊日期 : 2008-11-19
2D基礎函授 3D基礎函授 顧問外掛程式 經典問與答讀者 藍鵲2號
2009聚會勳章 串連貼紙成功 女 巨蟹座 蛇

回頂端 向下

回復: [已解決]LISP中的EXTEND的寫法?

發表 由 明~ 于 2010-03-14, 06:26

(COMMAND "EXTEND" "en2" "" "en1" "?")
更改成如下:
(COMMAND "EXTEND" en2 "" en1 "")

測試程式:


影片:




讚啦!! 謝謝熱心圖文回覆~< 積分 +1>

[公告]關於團隊成員的回文及貢獻


Tiger&蘋果爸 在 2010-03-15, 01:43 作了第 1 次修改 (原因 : 積分+1)
avatar
明~
高級會員
高級會員

文章總數 : 307
年齡 : 37
來自 : 彰化
職業 : 機械
愛好 : 打球 騎車 健行 音樂 電影 (說不完...)
個性 : 不與人爭
使用年資 : 從學生時代接觸到現在(工作中不一定使用)
使用版本 : 2004和2008
積分 : 17
經驗值 : 4611
威望值 : 670
注冊日期 : 2009-12-24
藍鵲292號
男 雙魚座 猴

回頂端 向下

回復: [已解決]LISP中的EXTEND的寫法?

發表 由 windqqqq 于 2010-03-14, 11:11

謝謝明~大提供的方法,可是還是無法連線
可能是除了pa是直接點選外,其他點都是設定好跑出來的

我後來測試只要寫成
(COMMAND "EXTEND" en2 "" en1 pa "")
線段A就會連到建構線上,但是還是會顯示一次{在該方向內沒有邊緣}。
這部分我之前是寫錯,選pa時加上""所以都失敗;但寫"en2"和"en1"好像沒差

但是若寫成:
(COMMAND "EXTEND" en2 "" en1 pb "")
則不會連上,且會顯示兩次{在該方向內沒有邊緣}。

雖然最後是連上了,但總覺得程式怪怪的,先貼出來請各位幫忙看看,謝謝
程式其實未完成,應該對一些需要輸入的變數作if或是cond或是while,否則會有錯
但是我才學到那邊而已,還沒寫入,所以大大們要輸入可以先輸入
行程:5
直徑:30
旋轉角度:90
槽寬:4
擴孔角度:8

代碼:

(defun c:cam()
  (setvar "cmdecho" 0)
  (setvar "blipmode" 0)
  (setq pa(getpoint "請輸入原點"))
  (setq x(getreal "\n 請輸入行程"))
  (setq d(getreal "\n 請輸入直徑"))
  (setq ang1(getreal "\n 請輸入旋轉角度"))
  (setq r1(getreal "\n 請輸入槽寬"))
  (setq ang3(getreal "\n 請輸入擴孔角度="))
  (setq y(polar pa (* pi 1.5) (* d (/ ang1 360) pi)))
  (setq pb(polar y 0 x))
  (command "line" pa pb "")
  (setq en1(entlast))
  (setq ang2(atan x (* d (/ ang1 360) pi)))
  (setq pc(polar pa ang2 (/ r1 2)))
  (setq pd(polar pa (+ ang2 pi) (/ r1 2)))
  (command "arc" "c" pa pc pd)
  (setq pe(polar pb ang2 (/ r1 2)))
  (setq pf(polar pb (+ ang2 pi) (/ r1 2)))
  (command "arc" "c" pb pf pe)
  (command "line" pc pe "")
  (command "line" pd pf "")
  ;以下是擴孔
  (setq pg(polar pa (/ pi 2) (* pi (/ ang3 360) d)))
  (command "xline""h" pg "")
  (setq en3(entlast))
  ;;(setvar "osmode" 0)
  (command "extend" en3 "" en1 pa "")
  ;;(setvar "osmode" 1)
   
  (prin1)
)

謝明~大,補上圖片 感動


windqqqq 在 2010-03-14, 15:29 作了第 2 次修改
avatar
windqqqq
一般會員
一般會員

文章總數 : 11
年齡 : 38
來自 : 台中
職業 : 機械製圖
愛好 : 游泳
個性 : 隨和
使用年資 : 3
使用版本 : 2002
經驗值 : 2831
威望值 : 0
注冊日期 : 2010-03-02
男 巨蟹座 羊

回頂端 向下

回復: [已解決]LISP中的EXTEND的寫法?

發表 由 明~ 于 2010-03-14, 13:42

我是依你提供的條件寫的~

你還是貼出你要的圖形和標示出各點的變數名稱
讓別人來檢察,你程式有些地方錯誤~
avatar
明~
高級會員
高級會員

文章總數 : 307
年齡 : 37
來自 : 彰化
職業 : 機械
愛好 : 打球 騎車 健行 音樂 電影 (說不完...)
個性 : 不與人爭
使用年資 : 從學生時代接觸到現在(工作中不一定使用)
使用版本 : 2004和2008
積分 : 17
經驗值 : 4611
威望值 : 670
注冊日期 : 2009-12-24
藍鵲292號
男 雙魚座 猴

回頂端 向下

回復: [已解決]LISP中的EXTEND的寫法?

發表 由 windqqqq 于 2010-03-16, 13:07

剛剛看了一些例題,總算是解決了
關於extend的用法,其實和trim類似
(command "extend" en3 "" en1 pa "")
這行改為
(command "extend" en3 "" (list en1 pa) "")
多個list就沒有{在該方向內沒有邊緣}的訊息了

雖然知道這樣寫,但對於list這個函數的用法還是不太明白
書上是寫list是{將任意數目或元素的表示式組合成一個串列}
所以我大概是這麼解釋的:
使用extend會先選要延伸到的物件en3,再選需要延伸的物件en1
但由於需要選en1要延伸的方向,所以要再點靠pa附近才會延伸
所以extend要有2個元素
若沒有list寫成(command "extend" en3 "" en1 pa "")
就有en3,en1,pa等3個元素
所以要利用list將en1和pa結合成1個元素(串列?)就沒問題了

不知道我這樣解釋對不對?請各位指導,謝謝.
avatar
windqqqq
一般會員
一般會員

文章總數 : 11
年齡 : 38
來自 : 台中
職業 : 機械製圖
愛好 : 游泳
個性 : 隨和
使用年資 : 3
使用版本 : 2002
經驗值 : 2831
威望值 : 0
注冊日期 : 2010-03-02
男 巨蟹座 羊

回頂端 向下

回復: [已解決]LISP中的EXTEND的寫法?

發表 由 明~ 于 2010-03-16, 17:00

你的程式我整理了一下:
代碼:

(defun c:cam(/ pa x d ang1 r1 ang3 y pb en1 ang2 pc pd pe pf pg en3)
  (setvar "cmdecho" 0)
  (setvar "blipmode" 0)
  (setq pa(getpoint "請輸入原點:"))
  (setq x(getreal "\n 請輸入行程:"))
  (setq d(getreal "\n 請輸入直徑:"))
  (setq ang1(getreal "\n 請輸入旋轉角度="))
  (setq r1(getreal "\n 請輸入槽寬:"))
  (setq ang3(getreal "\n 請輸入擴孔角度="))
  (setq y(polar pa (* pi 1.5) (* d (/ ang1 360) pi)))
  (setq pb(polar y 0 x))
  (setq ang2(atan x (* d (/ ang1 360) pi)))
  (setq pc(polar pa ang2 (/ r1 2)))
  (setq pd(polar pa (+ ang2 pi) (/ r1 2)))
  (setq pe(polar pb ang2 (/ r1 2)))
  (setq pf(polar pb (+ ang2 pi) (/ r1 2)))
  ;以下是擴孔
  (setq pg(polar pa (/ pi 2) (* pi (/ ang3 360) d)))
  (setvar "osmode" 0)
  (command "line" pa pb "")
  ;(setq en1(entlast));;不需要寫
  (command "arc" "c" pa pc pd)
  (command "arc" "c" pb pf pe)
  (command "line" pc pe "")
  (command "line" pd pf "")
  (command "xline" "h" pg "")
  (setq en3(entlast))
  (command "extend" en3 "" pa "")
  (setvar "osmode" 1)
  (setvar "cmdecho" 1)
  (princ)
)

執行影片:
avatar
明~
高級會員
高級會員

文章總數 : 307
年齡 : 37
來自 : 彰化
職業 : 機械
愛好 : 打球 騎車 健行 音樂 電影 (說不完...)
個性 : 不與人爭
使用年資 : 從學生時代接觸到現在(工作中不一定使用)
使用版本 : 2004和2008
積分 : 17
經驗值 : 4611
威望值 : 670
注冊日期 : 2009-12-24
藍鵲292號
男 雙魚座 猴

回頂端 向下

回復: [已解決]LISP中的EXTEND的寫法?

發表 由 windqqqq 于 2010-03-18, 12:38

謝謝明~大的整理和實際操作的影片
原來也可以不點線,直接選點去extend
又多了一種方法
主要extend寫法的問題已經解決了,謝謝 謝謝囉
avatar
windqqqq
一般會員
一般會員

文章總數 : 11
年齡 : 38
來自 : 台中
職業 : 機械製圖
愛好 : 游泳
個性 : 隨和
使用年資 : 3
使用版本 : 2002
經驗值 : 2831
威望值 : 0
注冊日期 : 2010-03-02
男 巨蟹座 羊

回頂端 向下

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


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