二條斷線變成一條線的程序源代碼.
我們經常在畫圖時, 會因為需要而將線切斷.可是又會因為編輯變更的原因,又希望將在同一線上的線連接起身. 以減少存盤容量工操作. 所以以下這個程序可以完成這方面的工作. 希望我這程序可以幫到大家點工作. 我現以把這個程序的源代碼給大家分享.---------------------------------------------------------------
我愛Auto CAD 多多學習. 多多交流 , 多多進步. 程序的思路是:
如果两条线在同一图层,而且是平行的,而且有交点,则两条线是在同一延长线上。
这样就可以取得线的起点和终点来得到新的线条,并把两条线删除。 这样的线能有交点吗?好象不行吧? 这样的线能有交点吗?好象不行吧? 當然如果有交點的可能, 請大家不防用把倒圓角的半徑設為 0 再進行倒角處理. 就可以把兩條線接住啦.
----------------------------------------------------------------
我愛CAD /多多多多地向廣大人民群眾學CAD. 如果兩條線重疊,但長度不一樣,能將其合為一條嗎?
為好想她有此功能!!!!!!!!!!!!!!!!!!!! 本帖最后由 作者 于 2003-10-21 7:52:46 编辑
twinpen发表于2003-10-19 8:02:00static/image/common/back.gif如果兩條線重疊,但長度不一樣,能將其合為一條嗎?
為好想她有此功能!!!!!!!!!!!!!!!!!!!!
;;断线接合
;;以第一条线为连接基准
;;BY 龙龙仔(LUCAS)
(defun C:2IN1 (/ VLINE1 VLINE2 VLINE1_10 VLINE1_11
VLINE2_10 VLINE2_11 PT_LISTPT1
PT2 DIST DIST1 N NN ENT
ANG1 ANG2 ANG3
)
(defun GETLINE (MSG / A1)
(while (= NIL (setq A1 (car (entsel MSG))))
(if (and (/= A1 NIL)
(= "LINE" (cdr (assoc 0 (entget A1))))
)
A1
(progn
(prompt "\n您选的不是线图素,请再选一次...")
(setq A1 NIL)
)
)
)
A1
)
(prompt "\n请选取二条断线来接合....")
(setq VLINE1 (GETLINE "\n请选取第一条线: "))
(while (or (= VLINE2 NIL) (equal VLINE1 VLINE2))
(if (equal VLINE1 VLINE2)
(prompt "\n重复选取第一条线,请再选一次...")
)
(setq VLINE2 (GETLINE "\n请选取第二条线: "))
)
(setq VLINE1_10 (cdr (assoc 10 (entget VLINE1))))
(setq VLINE1_11 (cdr (assoc 11 (entget VLINE1))))
(setq VLINE2_10 (cdr (assoc 10 (entget VLINE2))))
(setq VLINE2_11 (cdr (assoc 11 (entget VLINE2))))
(setq ANG1 (angle VLINE1_10 VLINE1_11))
(setq ANG2 (angle VLINE1_10 VLINE2_10))
(setq ANG3 (+ pi ANG1))
(if (or (equal ANG1 ANG2 0.000000001)
(equal ANG1 (+ ANG2 pi) 0.000000001)
(equal ANG3 ANG2 0.000000001)
(equal ANG3 (+ ANG2 pi) 0.000000001)
)
(progn
(setq PT_LIST (list VLINE1_10 VLINE1_11 VLINE2_10 VLINE2_11))
(setq PT1 (nth 0 PT_LIST))
(setq PT2 (nth 1 PT_LIST))
(setq DIST (distance PT1 PT2))
(setq N 0)
(repeat 3
(setq NN 1)
(repeat 3
(if
(> (setq DIST1 (distance (nth N PT_LIST) (nth NN PT_LIST)))
DIST
)
(setq DIST DIST1
PT1 (nth N PT_LIST)
PT2 (nth NN PT_LIST)
)
)
(setq NN (1+ NN))
)
(setq N (1+ N))
)
(setq ENT (entget VLINE1))
(setq ENT (subst (cons 10 PT1) (assoc 10 ENT) ENT))
(setq ENT (subst (cons 11 PT2) (assoc 11 ENT) ENT))
(entmod ENT)
(entdel VLINE2)
)
(prompt (strcat "\n这二条线无法连结."))
)
(princ)
)
(princ "\n断线接合程序加载完成. 输入2IN1 执行程序功能.....") 一楼的程序在哪本书上见过...... 在<<程序設計實作>>中有這個程序.... 哦!是的!我就有这本书。