BDYCAD 发表于 2003-10-17 08:41:00

二條斷線變成一條線的程序源代碼.

我們經常在畫圖時, 會因為需要而將線切斷.可是又會因為編輯變更的原因,又希望將在同一線上的線連接起身. 以減少存盤容量工操作. 所以以下這個程序可以完成這方面的工作. 希望我這程序可以幫到大家點工作. 我現以把這個程序的源代碼給大家分享.




















---------------------------------------------------------------
我愛Auto CAD 多多學習. 多多交流 , 多多進步.

mccad 发表于 2003-10-17 19:55:00

程序的思路是:
如果两条线在同一图层,而且是平行的,而且有交点,则两条线是在同一延长线上。
这样就可以取得线的起点和终点来得到新的线条,并把两条线删除。

meflying 发表于 2003-10-17 20:26:00

这样的线能有交点吗?好象不行吧?

meflying 发表于 2003-10-17 20:26:00

这样的线能有交点吗?好象不行吧?

BDYCAD 发表于 2003-10-17 21:50:00

當然如果有交點的可能, 請大家不防用把倒圓角的半徑設為 0 再進行倒角處理. 就可以把兩條線接住啦.









----------------------------------------------------------------
    我愛CAD /多多多多地向廣大人民群眾學CAD.

twinpen 发表于 2003-10-19 08:02:00

如果兩條線重疊,但長度不一樣,能將其合為一條嗎?
為好想她有此功能!!!!!!!!!!!!!!!!!!!!

龙龙仔 发表于 2003-10-20 12:55:00

本帖最后由 作者 于 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 执行程序功能.....")

雅明 发表于 2003-10-21 21:40:00

一楼的程序在哪本书上见过......

BDYCAD 发表于 2003-10-22 09:05:00

在<<程序設計實作>>中有這個程序....

雅明 发表于 2003-10-22 22:01:00

哦!是的!我就有这本书。
页: [1] 2 3
查看完整版本: 二條斷線變成一條線的程序源代碼.