CAD中自動(dòng)畫(huà)管線(xiàn)圖的LISP程序
/ 2021/6/5 10:43:45
次
畫(huà)一些管路
原理圖時(shí),當代表不同管路的直線(xiàn)在圖中相交時(shí),需將在交點(diǎn)處的某一直線(xiàn)斷開(kāi),再用一半圓連接兩斷點(diǎn),使用下面這個(gè)LISP
編寫(xiě)的
程序,只用鍵入"brel"的
命令,其它的就由
電腦去完成了。
程序中使用"break"命令截斷需要被斷開(kāi)的管線(xiàn),再用"
arc"命令畫(huà)一半圓連接兩斷點(diǎn)。變量p讀取管線(xiàn)交點(diǎn);p1、p2為點(diǎn)p的左右或上下兩點(diǎn);p3為連接p1、p2半圓的中點(diǎn)。由于使用"break"命令時(shí)若
AUTOCAD環(huán)境處于對象捕捉方式
(OSMODE≠0),則"break"命令截斷的p1、p2兩點(diǎn)可能為變?yōu)閜1、p2附近的捕捉點(diǎn)。所以程序
開(kāi)始時(shí)用變量myosmode記錄
系統變量OSMODE,而后
設置OSMODE為0,程序結束后再設置還原OSMODE。變量horn判斷用戶(hù)需要斷開(kāi)的是
水平線(xiàn)還是
垂直線(xiàn)。
(defun c:brel(/myosmode horv p p1 p2 p3)
(setq myosmode (getvar "OSMODE"))
(setvar "OSMODE" 0)
(setq p (getpoint "\nselect
point to break:"))
(initget 1 "H V")
(setq horv (getkword " Direction[H/V]?
"))
(if (= horv "H")
(progn
(setq p1 (list (- (car p) 1.5) (cadr p)))
(setq p2 (list (+ (car p) 1.5) (cadr p)))
(setq p3 (list (car p) (+ (cadr p) 1.5)))
)
(progn
(setq p1 (list (car p) (- (cadr p) 1.5)))
(setq p2 (list (car p) (+ (cadr p) 1.5)))
(setq p3 (list (+ (car p) 1.5) (cadr p)))
)
)
(command "break" p1 p2)
(command "arc" p1 p3 p2)
(setvar "OSMODE" myosmode)
(princ)
)
(princ "\nStart command with brel which will break a line and join it with an arc.")