myjping 发表于 2014-8-13 17:18:35

求个端点合并的东东

一堆直线,如果有端点距离小于设定值,比如3mm时,端点就合到最近的一个点

fan_zh 发表于 2014-8-13 17:30:29

高飞鸟有个神作,模糊归整,不知对你有没有用

myjping 发表于 2014-9-9 10:44:12

自已整了一个,笨办法,一个个的找,我不熟悉算法,希望有大侠能优化
(defun c:mint(/ CurDoc ient n if_txt);取得最近点
(vl-load-com)
(setq ss (ssget   '((0 . "line"))))

(setq n 0 i (sslength ss) pt_lst '())
(repeat i
   (setq ss_ent (entget (ssname ss n)))
   (setq pt_start (cdr (assoc 10 ss_ent)) pt_end (cdr (assoc 11 ss_ent)))
   (setq pt_lst (append pt_lst (list pt_start pt_end)))
   (setq n (1+ n)))
(setq pt_lst (MJ:delsame pt_lst   ))
;(princ "--------")
(setq n 0j 0ss_n 0)
(repeat (length pt_lst)
   (setq pt01 (nth n pt_lst))
    (setq j 0)
    (repeat (sslength ss)
         (setq ss_ent (entget (ssname ss j)))
         (setq pt_start (cdr (assoc 10 ss_ent)) pt_end (cdr (assoc 11 ss_ent)))
         (if(< (distance pt_startpt01) 5)
                (progn
                  (setq   ss_ent (subst   (cons 10 pt01)(assoc 10ss_ent) ss_ent))
                  (entmod(setq   ss_ent (subst   (cons 62 4)(assoc 62ss_ent) ss_ent)))
                  (setqss_n (1+ss_n))
                  ))
         (if(< (distance pt_endpt01) 5)
               (progn
                (setq   ss_ent (subst   (cons 11 pt01)(assoc 11ss_ent) ss_ent))
                (entmod(setq   ss_ent (subst   (cons 62 4)(assoc 62ss_ent) ss_ent)))
                (setqss_n (1+ss_n))
                  ))
         (setq j (1+ j)))
   
       (setq n (1+ n)))

(princ (strcat "\n共有 " (itoa ss_n) " 个对象微调..."))
(princ)
)

myjping 发表于 2014-9-9 11:33:46

比哪两根线,共用一个点,但实际上这个点有一个小误差,得把这个点合并成一个点;

dingtiedt 发表于 2016-5-24 20:58:09

myjping 发表于 2014-9-9 10:44 static/image/common/back.gif
自已整了一个,笨办法,一个个的找,我不熟悉算法,希望有大侠能优化
(defun c:mint(/ CurDoc ient n if ...

大侠,少函数啊。求提供

dingtiedt 发表于 2016-5-24 21:02:19

本帖最后由 dingtiedt 于 2016-5-24 21:05 编辑

删除(setq pt_lst (MJ:delsame pt_lst   )) ,也能执行,有重复的线也能执行

weijiewen 发表于 2023-3-26 18:16:48

解决了吗 谢谢解答
页: [1]
查看完整版本: 求个端点合并的东东