[分享]系統櫃門板V線繪製程式
4 posters
AutoCAD顧問 :: 技術(發言等級:一般會員) :: :: 進階討論
第1頁(共1頁)
[分享]系統櫃門板V線繪製程式
在LISP學習資源相對缺乏的台灣
感謝論壇的蘋果爸及各大神前輩分享各種學習資源
讓小弟受用無窮
分享我嘗試撰寫的第3個LISP程式
用於節省計繪製系統櫃門板的V線的時間
同時附帶自動計算分割櫃體數量
在此拋磚引玉,希望能有更多人分享討論,一同進步
感謝蘋果爸提出程式錯誤
程式已經修改好囉
感謝論壇的蘋果爸及各大神前輩分享各種學習資源
讓小弟受用無窮
分享我嘗試撰寫的第3個LISP程式
用於節省計繪製系統櫃門板的V線的時間
同時附帶自動計算分割櫃體數量
在此拋磚引玉,希望能有更多人分享討論,一同進步
- 代碼:
;;;;;本程式為系統櫃拉門繪製V線程式
;;;;;支援軟體版本("AutoCAD")
;;;;;設計者:Larry Wu
;;;;;版權所有,歡迎使用
;;;;;Rev.2 (2017/01/18)
(defun c:VX()
(setq os (getvar "osmode")) ;;紀錄物件鎖點初始值
(setq pa (getpoint "\n請點選門板左下角")) ;左下角
(setq pb (getpoint "\n請點選門板右上角")) ;右上角
(setq pc (list (car pb) (cadr pa))) ;pc是右下角,car是求X值,cadr是求Y值
(setq ww (distance pa pc))
(setq hh (distance pc pb))
;;;底下if是以高度有沒有超過270判斷是cm還是mm,給後面自動計算等分參考用
;;;一般系統櫃板材最大尺寸是7尺x9尺(210cmx270cm),所以用270來判斷單位
(if (> hh 270)
(progn
(setq au1 500);;;au1是最大門板寬,一般不會超過50cm
)
(progn
(setq au1 50)
)
) ;;;if判斷式結束
(setq num (/ ww au1)) ;;;設定num為(總寬/最大門板寬)
(if (< num 1)(setq num 0)) ;;;當num(總寬/最大門板寬)小於1時,設定num為0避免後面計算多1個門
(setq ar (getreal "\n請輸入門板數目<自動計算>:")) ;;;ar是門板陣列數量
(if (null ar)(setq ar (+ (fix num) 1))) ;;;fix的功能是去掉小數,後面再加1是讓陣列數量無條件進位
(setq w1 (/ ww ar)) ;;;設定w1為門板寬
(setq w2 (* w1 2)) ;;;設定w2一個桶身寬
(setq v1 (polar pa 0 w1)) ;;;v1是V線的第1點
(setq v2 (polar pa (/ pi 2) (/ hh 2))) ;;;v2是V線第2點
(setq v3 (polar v1 (/ pi 2) hh)) ;;;v3是V線第3點
(setq v4 (polar v2 0 w2)) ;;;v4是對稱V線的第2點
(setq rec5 (polar v3 0 w1)) ;;;rec5是第二片版的矩形右上角
(setq lv1 (polar pa 0 (- ww w1))) ;;;lv1是最後一個門板V線的第1點
(setq lv2 (polar pc (/ pi 2) (/ hh 2))) ;;;lv2是最後一個門板V線的第2點
(setq lv3 (polar lv1 (/ pi 2) hh)) ;;;lv3是最後一個門板V線的第3點
(setq ar2 (/ ar 2)) ;;;因為門是對開的,所以陣列V線時陣列數量要除2
(cond ;;;多重判斷式,如果ar=1畫一個V線,如果ar=2畫一對V線,如果ar>2畫V線後陣列再畫對稱V線後陣列
((= ar 1) ;;;一片門板
;;;左V線
(command "-color" "8")
(command "-lweight" "0.09")
(command "-linetype" "s" "CENTER" "")
(setvar "osmode" 0)
(command "pline" v1 v2 v3 "")
(command "-color" "bylayer")
(command "-lweight" "bylayer")
(command "-linetype" "s" "bylayer" "")
(command "rectang" pa v3)
(setvar "osmode" os)
)
((= ar 2) ;;;一對門板
;;;左V線
(command "-color" "8")
(command "-lweight" "0.09")
(command "-linetype" "s" "CENTER" "")
(setvar "osmode" 0)
(command "pline" v1 v2 v3 "")
(setvar "osmode" os)
(command "-color" "bylayer")
(command "-lweight" "bylayer")
(command "-linetype" "s" "bylayer" "")
;;;右V線
(command "-color" "8")
(command "-lweight" "0.09")
(command "-linetype" "s" "CENTER" "")
(setvar "osmode" 0)
(command "pline" lv1 lv2 lv3 "")
(setvar "osmode" os)
(command "-color" "bylayer")
(command "-lweight" "bylayer")
(command "-linetype" "s" "bylayer" "")
;;;門板外框
(setvar "osmode" 0)
(command "rectang" pa v3)
(command "rectang" lv1 pb "")
(setvar "osmode" os)
)
((= ar 3) ;;;2+1門板
(command "-color" "8")
(command "-lweight" "0.09")
(command "-linetype" "s" "CENTER" "")
(setvar "osmode" 0)
(command "pline" v1 v2 v3 "")
(setvar "osmode" os)
(command "-color" "bylayer")
(command "-lweight" "bylayer")
(command "-linetype" "s" "bylayer" "")
(command "-color" "8")
(command "-lweight" "0.09")
(command "-linetype" "s" "CENTER" "")
(setvar "osmode" 0)
(command "pline" v1 v4 v3 "")
(setvar "osmode" os)
(command "-color" "bylayer")
(command "-lweight" "bylayer")
(command "-linetype" "s" "bylayer" "")
(command "-color" "8")
(command "-lweight" "0.09")
(command "-linetype" "s" "CENTER" "")
(setvar "osmode" 0)
(command "pline" lv1 lv2 lv3 "")
(setvar "osmode" os)
(command "-color" "bylayer")
(command "-lweight" "bylayer")
(command "-linetype" "s" "bylayer" "")
;;;門板外框
(setvar "osmode" 0)
(command "rectang" pa v3)
(command "rectang" v1 rec5)
(command "rectang" lv1 pb "")
(setvar "osmode" os)
)
((> ar 3) ;;;一堆門板
;;;左V線
(command "-color" "8")
(command "-lweight" "0.09")
(command "-linetype" "s" "CENTER" "")
(setvar "osmode" 0)
(command "pline" v1 v2 v3 "")
(setvar "osmode" os)
(command "-color" "bylayer")
(command "-lweight" "bylayer")
(command "-linetype" "s" "bylayer" "")
(command "-array" "L" "" "R" 1 (fix ar2) w2)
;;;右V線
(command "-color" "8")
(command "-lweight" "0.09")
(command "-linetype" "s" "CENTER" "")
(setvar "osmode" 0)
(command "pline" v1 v4 v3 "")
(setvar "osmode" os)
(command "-color" "bylayer")
(command "-lweight" "bylayer")
(command "-linetype" "s" "bylayer" "")
(command "-array" "L" "" "R" 1 (fix ar2) w2)
;;;收尾V線
(command "-color" "8")
(command "-lweight" "0.09")
(command "-linetype" "s" "CENTER" "")
(setvar "osmode" 0)
(command "pline" lv1 lv2 lv3 "")
(setvar "osmode" os)
(command "-color" "bylayer")
(command "-lweight" "bylayer")
(command "-linetype" "s" "bylayer" "")
;;;門板外框
(setvar "osmode" 0)
(command "rectang" pa v3 "")
(setvar "osmode" os)
(command "-array" "L" "" "R" 1 ar w1)
)
)
(prompt "\n門板寬度:")
(prin1 w1)(if (> hh 270)(prompt "mm")(prompt "cm"))
(prompt "\n門板高度:")
(prin1 hh)(if (> hh 270)(prompt "mm")(prompt "cm"))
(prompt "\n門板數量:")
(prin1 ar)(prompt "片")
(princ)
)
感謝蘋果爸提出程式錯誤
程式已經修改好囉
- 附件
沉默 在 2017-01-19, 00:03 作了第 2 次修改
沉默- 初級會員
- 文章總數 : 18
年齡 : 33
來自 : 台北
職業 : 家具設計
愛好 : 電腦
個性 : 古板
使用年資 : 10
使用版本 : 2014
積分 : 1
經驗值 : 3195
威望值 : 30
注冊日期 : 2016-06-15
wl02437060@gmail.com likes this post
回復: [分享]系統櫃門板V線繪製程式
謝謝 沉默 熱心分享,還製作操作影片~
我測試過輸入3片以上程式就出錯了,請再檢核一下~
感恩!
我測試過輸入3片以上程式就出錯了,請再檢核一下~
感恩!
____________________________________________________________________________________
👉快速比例設定與出圖技巧-線上課程(點我)👈
回復: [分享]系統櫃門板V線繪製程式
哎呀
我少了一個門片等於3的判斷
3個門片時不需要陣列
我再修改一下
謝謝蘋果爸
我少了一個門片等於3的判斷
3個門片時不需要陣列
我再修改一下
謝謝蘋果爸
沉默- 初級會員
- 文章總數 : 18
年齡 : 33
來自 : 台北
職業 : 家具設計
愛好 : 電腦
個性 : 古板
使用年資 : 10
使用版本 : 2014
積分 : 1
經驗值 : 3195
威望值 : 30
注冊日期 : 2016-06-15
回復: [分享]系統櫃門板V線繪製程式
超過三個門板,不就又超過相同的狀況…
雖然說門板的片數不可能太多片,
但程式若能改善成任意數量為佳。
有興趣投入研究可以更盡善盡美,
謝謝你的創作分享,好好加油吧!!
雖然說門板的片數不可能太多片,
但程式若能改善成任意數量為佳。
有興趣投入研究可以更盡善盡美,
謝謝你的創作分享,好好加油吧!!
HEMOS- 榮譽顧問
- 文章總數 : 896
年齡 : 51
來自 : 台北
職業 : 土木結構
愛好 : 攝影×音樂×電影
個性 : 和善
使用年資 : 20 years ↑
使用版本 : 老手待忘!
積分 : 27
最佳解答 : 3
經驗值 : 10329
威望值 : 1664
回帖精華 : 1
注冊日期 : 2009-02-23
回復: [分享]系統櫃門板V線繪製程式
不好意思 造成您誤解了
小弟說明一下我寫這個程式的邏輯
因為我從事家具設計製圖相關工作
常需要畫系統櫃的立面圖,而每件案子配合空間不同
系統櫃的門板分割及尺寸也不盡相同
但以下有幾點通則是比較常見的:
1.最左側的門板通常是左開(西德鉸鍊位於左側)
2.最右側的門板通常是右開(西德鉸鍊位於右側)
3.受限於系統櫃板材尺寸,單一板材長度不會超過270cm
4.為避免門板過重,導致門板下垂,單一門板寬度不會超過50cm
不過也是會遇到部分較特殊的專案不適用上列規則
另外以下是我在撰寫程式時,一些思考邏輯:
1.我希望這程式能像畫矩形一樣,點選左下及右上就能確定門板範圍
2.因上列通則,程式的第一片門板為左開,最後一片門板為右開
3.大部分專案業主提供的都是櫃體總寬,我希望程式能幫我判斷分幾片門板比較合適
4.業主提供的CAD檔案,圖面單位有時是mm有時是cm,我希望程式能依圈選範圍判斷單位
所以程式是這樣運作的
1.點選櫃體左下和右上,得出櫃體的總寬與總高
2.用if判斷高度超過270單位即為mm,反之cm
3.手動輸入門板數量,或自動計算門板數量
;;;以下是自動計算的邏輯
4.用總寬除以50或500(以第2點決定)再無條件進位,求出門板數量
依據手動輸入或自動計算門板數量的值會有以下幾種應對
if 門板數量=1
畫一個左開門 → 結束程式
if 門板數量=2
畫一個左開門 → 畫最後一個右開門 → 結束程式
;;;我最初上傳的程式就是少這組判斷式,因為這組不需要陣列
if 門板數量=3
畫一個左開門→ 畫第二個個右開門 → 畫最後一個右開門 → 結束程式
if 門板數量>3
畫一個左開門 → 矩形陣列n/2個 → 畫1個右開門 → 矩形陣列n/2個 →畫最後一個右開門 → 結束程式
以上說明希望您能理解,因為是自學LISP,程式內可能很多問題,請您多多指教,謝謝
小弟說明一下我寫這個程式的邏輯
因為我從事家具設計製圖相關工作
常需要畫系統櫃的立面圖,而每件案子配合空間不同
系統櫃的門板分割及尺寸也不盡相同
但以下有幾點通則是比較常見的:
1.最左側的門板通常是左開(西德鉸鍊位於左側)
2.最右側的門板通常是右開(西德鉸鍊位於右側)
3.受限於系統櫃板材尺寸,單一板材長度不會超過270cm
4.為避免門板過重,導致門板下垂,單一門板寬度不會超過50cm
不過也是會遇到部分較特殊的專案不適用上列規則
另外以下是我在撰寫程式時,一些思考邏輯:
1.我希望這程式能像畫矩形一樣,點選左下及右上就能確定門板範圍
2.因上列通則,程式的第一片門板為左開,最後一片門板為右開
3.大部分專案業主提供的都是櫃體總寬,我希望程式能幫我判斷分幾片門板比較合適
4.業主提供的CAD檔案,圖面單位有時是mm有時是cm,我希望程式能依圈選範圍判斷單位
所以程式是這樣運作的
1.點選櫃體左下和右上,得出櫃體的總寬與總高
2.用if判斷高度超過270單位即為mm,反之cm
3.手動輸入門板數量,或自動計算門板數量
;;;以下是自動計算的邏輯
4.用總寬除以50或500(以第2點決定)再無條件進位,求出門板數量
依據手動輸入或自動計算門板數量的值會有以下幾種應對
if 門板數量=1
畫一個左開門 → 結束程式
if 門板數量=2
畫一個左開門 → 畫最後一個右開門 → 結束程式
;;;我最初上傳的程式就是少這組判斷式,因為這組不需要陣列
if 門板數量=3
畫一個左開門→ 畫第二個個右開門 → 畫最後一個右開門 → 結束程式
if 門板數量>3
畫一個左開門 → 矩形陣列n/2個 → 畫1個右開門 → 矩形陣列n/2個 →畫最後一個右開門 → 結束程式
以上說明希望您能理解,因為是自學LISP,程式內可能很多問題,請您多多指教,謝謝
沉默- 初級會員
- 文章總數 : 18
年齡 : 33
來自 : 台北
職業 : 家具設計
愛好 : 電腦
個性 : 古板
使用年資 : 10
使用版本 : 2014
積分 : 1
經驗值 : 3195
威望值 : 30
注冊日期 : 2016-06-15
回復: [分享]系統櫃門板V線繪製程式
這個程式很受用,
謝謝沉默大大!!
我也是剛接觸
一起加油喔!!
謝謝沉默大大!!
我也是剛接觸
一起加油喔!!
Banson- 一般會員
- 文章總數 : 2
年齡 : 29
來自 : 宜蘭縣
職業 : 室內設計
愛好 : 筆
個性 : 開朗
使用年資 : 5
使用版本 : 2018
經驗值 : 2364
威望值 : 6
注冊日期 : 2018-06-18
AutoCAD顧問 :: 技術(發言等級:一般會員) :: :: 進階討論
第1頁(共1頁)
這個論壇的權限:
您 無法 在這個版面回復文章