明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 5493|回复: 22

[源码] 输入模糊距离合并线,弧和多义线

[复制链接]
发表于 2013-12-1 23:06 | 显示全部楼层 |阅读模式
  1. ;;; 用模糊距离连接线,弧和多义线
  2. (defun c:jf () (c:pljoinfuzz)) ; this line can be commented out if there is an existing command called jf
  3. (defun c:pljoinfuzz (/ ss1 entLine objType oldcmdecho oldpeditaccept fuzz okObjects)
  4.   (setq oldcmdecho (getvar "cmdecho"))
  5.   (setq oldpeditaccept (getvar "PEDITACCEPT"))
  6.   (setvar "cmdecho" 0)
  7.   (setq A2k4 (>= (substr (getvar "ACADVER") 1 2) "16"))
  8.   (if A2k4 (setvar "PEDITACCEPT" 0))
  9.   (setq  okObjects '((0 . "LINE,ARC,POLYLINE,LWPOLYLINE")))
  10.   (princ "\nSelect object to join: ")
  11.   (setq ss1 (ssget okObjects))
  12.   (setq fuzz (getdist "\nFuzz distance <0>: "))
  13.   (if (= fuzz nil) (setq fuzz 0))
  14.   (if (/= ss1 nil)
  15.       (progn
  16.   (setq objType (cdr (assoc 0 (entget (setq entLine (ssname ss1 0))))))
  17.   (if (= (sslength ss1) 1) (setq ss1 (ssget "X" okObjects)))
  18.   (if (member objType '("LINE" "ARC"))
  19.     (command "_.pedit" "_M" ss1 "" "_Y" "_J" "_J" "_B" fuzz "")
  20.     (command "_.pedit" "_M" ss1 "" "_J" "_J" "_B" fuzz "")
  21.   )
  22.       )
  23.   )
  24.   (setq ss1 nil)
  25.   (setvar "cmdecho" oldcmdecho)
  26.   (if A2k4 (setvar "PEDITACCEPT" oldpeditaccept))
  27.   (princ)
  28. )

点评

此程序若误选一根线,会造成死机,需要价格判断,单选一根的选项。。。。。。  发表于 2019-6-15 00:56
"觉得好,就打赏"
    共1人打赏
发表于 2018-9-22 07:06 | 显示全部楼层
最小距离为3.0



;;; **********用模糊距离连接线,弧和多义线***************
(defun c:jf ()
(c:pljoinfuzz)
)
(defun c:pljoinfuzz (/ ss1 entLine objType oldcmdecho oldpeditaccept fuzz okObjects)
(setq oldcmdecho (getvar "cmdecho"))
(setq oldpeditaccept (getvar "PEDITACCEPT"))
(setvar "cmdecho" 0)
(setq A2k4 (>= (substr (getvar "ACADVER") 1 2) "16"))
(if A2k4 (setvar "PEDITACCEPT" 0))
(setq  okObjects '((0 . "LINE,ARC,POLYLINE,LWPOLYLINE")))
(princ "\nSelect object to join: ")
(setq ss1 (ssget okObjects))
(setq fuzz (getdist "\n模糊距离为<3.0>: "))
(if (= fuzz nil)
  (setq fuzz (* (getvar "DIMSCALE") 3.0))
)
(if (/= ss1 nil)
  (progn
   (setq objType (cdr (assoc 0 (entget (setq entLine (ssname ss1 0))))))
   (if (= (sslength ss1) 1)
    (setq ss1 (ssget "X" okObjects))
   
   )
   (if (member objType '("LINE" "ARC"))
    (command "_.pedit" "_M" ss1 "" "_Y" "_J" "_J" "_B" fuzz "")
    (command "_.pedit" "_M" ss1 "" "_J" "_J" "_B" fuzz "")
   )
  )
)
(setq ss1 nil)
(setvar "cmdecho" oldcmdecho)
(if A2k4 (setvar "PEDITACCEPT" oldpeditaccept))
(princ)
)
发表于 2019-2-26 13:24 | 显示全部楼层
;; 感觉高版本的有问题
  1. ;; 用模糊距离连接线,弧和多义线
  2. (defun c:tt ()
  3.   (setvar "PEDITACCEPT" 1)
  4.   (setq fuzz (Udist 5 "" "距离<输入或鼠标直接量取>" fuzz nil))
  5.   (setq qf '((0 . "LINE,ARC,*POLYLINE")))
  6.   (princ "\n选择实体<退出>: ")
  7.   (if (setq ss (ssget qf))
  8.     (command "_.pedit" "_M" ss "" "_J" "_J" "_B" fuzz "")
  9.   )
  10.   (princ)
  11. )
发表于 2019-6-19 08:40 | 显示全部楼层
xyp1964 发表于 2019-2-26 13:24
;; 感觉高版本的有问题

命令 pm - j - j 下面合并类型中 添加(A) 及两者都(B) 对模糊距离不起作用,不知道版主能不能给支个招?
说明白点,就是设置了模糊距离只对合并类型中的 延伸 有效,试了好久都这样,不知道是什么原因?
发表于 2013-12-2 08:14 | 显示全部楼层
支持分享
发表于 2014-11-13 17:33 | 显示全部楼层
经过使用,这个lisp是相当的霸气啊,好用!
发表于 2014-11-14 12:14 | 显示全部楼层
谢谢楼主分享,正需要这种程序
发表于 2015-8-9 16:01 | 显示全部楼层
支持,这个好使!
发表于 2015-8-9 16:06 | 显示全部楼层
好像只有“0”,和非“0”两种模式样的。
发表于 2015-8-11 20:23 | 显示全部楼层
非常不错,能不能去掉模糊输入直接链接成一条线?而非像补丁起来的线。
发表于 2015-8-13 11:48 | 显示全部楼层
楼主这合并多段线确实强大,顶上,让大家受惠~
发表于 2015-10-12 23:37 | 显示全部楼层
这个程序能不能再改一下?现在多线相交时会分别组成两部分,我想全部线都闭合在一起。

本帖子中包含更多资源

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

x
发表于 2015-11-13 21:08 | 显示全部楼层
老师能不能不要输入距离,把距离固定直接选线合并  我要的是距离300以下的都合并
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-4-23 19:58 , Processed in 0.432500 second(s), 34 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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