明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 9284|回复: 21

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

  [复制链接]
发表于 2003-10-17 08:41:00 | 显示全部楼层 |阅读模式
我們經常在畫圖時, 會因為需要而將線切斷.可是又會因為編輯變更的原因,又希望將在同一線上的線連接起身. 以減少存盤容量工操作. 所以以下這個程序可以完成這方面的工作. 希望我這程序可以幫到大家點工作. 我現以把這個程序的源代碼給大家分享.




















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

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
发表于 2003-10-17 19:55:00 | 显示全部楼层
程序的思路是:
如果两条线在同一图层,而且是平行的,而且有交点,则两条线是在同一延长线上。
这样就可以取得线的起点和终点来得到新的线条,并把两条线删除。
发表于 2003-10-17 20:26:00 | 显示全部楼层
这样的线能有交点吗?好象不行吧?
发表于 2003-10-17 20:26:00 | 显示全部楼层
这样的线能有交点吗?好象不行吧?
 楼主| 发表于 2003-10-17 21:50:00 | 显示全部楼层
當然如果有交點的可能, 請大家不防用把倒圓角的半徑設為 0 再進行倒角處理. 就可以把兩條線接住啦.









----------------------------------------------------------------
    我愛CAD /  多多多多地向廣大人民群眾學CAD.
发表于 2003-10-19 08:02:00 | 显示全部楼层
如果兩條線重疊,但長度不一樣,能將其合為一條嗎?
為好想她有此功能!!!!!!!!!!!!!!!!!!!!
发表于 2003-10-20 12:55:00 | 显示全部楼层
本帖最后由 作者 于 2003-10-21 7:52:46 编辑

twinpen发表于2003-10-19 8:02:00如果兩條線重疊,但長度不一樣,能將其合為一條嗎?
為好想她有此功能!!!!!!!!!!!!!!!!!!!!



;;断线接合
;;以第一条线为连接基准
;;BY 龙龙仔(LUCAS)
(defun C:2IN1 (/        VLINE1         VLINE2          VLINE1_10            VLINE1_11
               VLINE2_10         VLINE2_11           PT_LIST  PT1
               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 | 显示全部楼层
一楼的程序在哪本书上见过......
 楼主| 发表于 2003-10-22 09:05:00 | 显示全部楼层
在<<程序設計實作>>中有這個程序....
发表于 2003-10-22 22:01:00 | 显示全部楼层
哦!是的!我就有这本书。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-11-25 17:49 , Processed in 0.191432 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表