乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 259|回复: 12

网上收集来的重线删除程序望改进

[复制链接]

19

主题

93

帖子

7

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
169
发表于 2013-6-17 18:46:00 | 显示全部楼层 |阅读模式
;希望整合成对话对话框的多功能版,并支持,块,弧,直线,多段线,圆,还有除块以外能转换成多段线。
  1. ;;修正了一个错误。
  2. ;;这个更快,可以连接线条。
  3. ;;消除合并重复线条
  4. (defun c:ovl (/ old_osmode old_cmdecho ss ssLine ssArc)
  5.   (vl-load-com)
  6.   (setq *AcadDocument* (vla-get-activeDocument (vlax-Get-Acad-Object)))
  7.   (vla-StartUndoMark *AcadDocument*)
  8.   (setq old_osmode  (getvar "osmode")
  9. old_cmdecho (getvar "cmdecho")
  10.   )
  11. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  12.   (setq ss     (GetSelToUnite)
  13. ssLine (car ss)
  14. ssArc  (cadr ss)
  15.   )
  16.   (setvar "osmode" 0)
  17.   (command ".ucs" "w")
  18.   (if (> (sslength ssLine) 1)
  19.     (UniteLine ssLine)
  20.   )
  21.   (if (> (sslength ssArc) 1)
  22.     (UniteArc ssArc)
  23.   )
  24. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  25.   (if (> (sslength ssLine) 0)
  26.     (pEdit ssLine)
  27.   )
  28.   (if (> (sslength ssArc) 0)
  29.     (pEdit ssArc)
  30.   )
  31. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  32.   (setvar "osmode" old_osmode)
  33.   (setvar "cmdecho" old_cmdecho)
  34.   (vla-EndUndoMark *AcadDocument*)
  35.   (prin1)
  36. )
  37. (defun pedit (ss / i en vn startPt endPt ss1 ss2)
  38.   (setq i 0)
  39.   (repeat (sslength ss)
  40.     (setq en (ssname ss i)
  41.    i  (1+ i)
  42.     )
  43.     (if (and (not (null (entget en))) (not (vlax-curve-isClosed (setq vn (vlax-ename->vla-object en)))))
  44.       (progn
  45. (setq startPt (vlax-curve-GetStartPoint vn)
  46.        endPt   (vlax-curve-GetEndPoint vn)
  47. )
  48. (setq ss1 (ssget "_c" (polar startPt (* pi 0.25) 0.01) (polar startPt (* pi 1.25) 0.01)))
  49. (setq ss2 (ssget "_c" (polar endPt (* pi 0.25) 0.01) (polar endPt (* pi 1.25) 0.01)))
  50. (if (equal (strcase (vla-Get-ObjectName vn)) (strcase "AcDbPolyline"))
  51.    (vl-cmdf "pedit" en "j" ss1 ss2 "")
  52.    (vl-cmdf "pedit" en "y" "j" ss1 ss2 "" "")
  53. )
  54.       )
  55.     )
  56.   )
  57. )
  58. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  59. (defun GetSelToUnite (/ ss1 ssArc ssLine ss1 ss i en ss2)
  60.   (setq ss1    (ssget "x")
  61. ssArc  (ssadd)
  62. ssLine (ssadd)
  63. ss     (ssget '((0 . "line,lwpolyline,arc")))
  64. i      -1
  65.   )
  66.   (setvar "cmdecho" 0)
  67.   (repeat (sslength ss)
  68.     (setq en (ssname ss (setq i (1+ i))))
  69.     (if (equal (strcase (cdr (assoc 0 (entget en)))) (strcase "lwpolyline"))
  70.       (command "explode" en)
  71.     )
  72.   )
  73.   (setq ss2 (ssget "x")
  74. i   -1
  75.   )
  76.   (repeat (sslength ss2)
  77.     (setq en (ssname ss2 (setq i (1+ i))))
  78.     (if (or (not (ssmemb en ss1)) (ssmemb en ss))
  79.       (cond ((equal (cdr (assoc 0 (entget en))) (strcase "line")) (ssadd en ssLine))
  80.      ((equal (cdr (assoc 0 (entget en))) (strcase "arc")) (ssadd en ssArc))
  81.      (t (princ "\n There is a error occured"))
  82.       )
  83.     )
  84.   )
  85.   (list ssLine ssArc)
  86. )
  87. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  88. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  89. (defun UniteArc (ss / i en)
  90.   (vla-StartUndoMark *AcadDocument*)
  91. ;;;  (while (not (setq ss (ssget '((0 . "arc"))))))
  92.   (setq i 0)
  93.   (repeat (sslength ss)
  94.     (setq en (ssname ss i)
  95.    i  (1+ i)
  96.     )
  97.     (if (not (null (entget en)))
  98.       (JoinArc en)
  99.     )
  100.   )
  101.   (vla-EndUndoMark *AcadDocument*)
  102. )
  103. ;;;;;;;;;
  104. (defun JoinArc (en / vn cenPt Radius AngLst i ss MinPt MaxPt StartAngle EndAngle em vm)
  105.   (setq vn     (vlax-ename->vla-object en)
  106. cenPt  (cdr (assoc 10 (entget en)))
  107. Radius (vla-get-radius vn)
  108. AngLst '()
  109. i      -1
  110. ss     (ssadd)
  111.   )
  112.   (vla-GetBoundingBox vn 'MinPt 'MaxPt)
  113.   (setq MinPt (vlax-safearray->list MinPt)
  114. MaxPt (vlax-safearray->list MaxPt)
  115.   )
  116.   (setq ss (ssget "c" MinPt MaxPt (list '(0 . "arc") (append (list 10) cenPt) (cons 40 Radius)))
  117. ss (ssdel en ss)
  118.   )
  119.   (if ss
  120.     (progn
  121.       (setq StartAngle (vla-Get-StartAngle vn)
  122.      EndAngle   (vla-Get-EndAngle vn)
  123.       )
  124.       (if (vla-object em)
  125.        StartAngle (vla-Get-StartAngle vm)
  126.        EndAngle  (vla-Get-EndAngle vm)
  127. )
  128. (if ( (last AngLst) (* pi 2))
  129.    (- (last AngLst) (* pi 2))
  130.    (last AngLst)
  131. )
  132.       )
  133.     )
  134.   )
  135. )
  136. ;;;;;;;;;(setq aa (vlax-ename->vla-object (car (entsel))))
  137. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  138. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  139. (defun UniteLine (ss / i en)
  140.   (vla-StartUndoMark *AcadDocument*)
  141. ;;;  (while (not (setq ss (ssget '((0 . "line"))))))
  142.   (setq i 0)
  143.   (repeat (sslength ss)
  144.     (setq en (ssname ss i)
  145.    i  (1+ i)
  146.     )
  147.     (if (not (null (entget en)))
  148.       (JoinLine en)
  149.     )
  150.   )
  151.   (vla-EndUndoMark *AcadDocument*)
  152.   (prin1)
  153. )
  154. (defun JoinLine (en / i lst_pt ang_en se ss em ang_em ssErase)
  155.   (setq i      0
  156. lst_pt '()
  157. ang_en (RetAng (angle (cdr (assoc 10 (entget en))) (cdr (assoc 11 (entget en)))))
  158. ;;; lst_pt (append lst_pt (list (cdr (assoc 10 (entget en)))) (list (cdr (assoc 11 (entget en)))))
  159.   )
  160.   (setq lst_pt (car (setq tmp (GetPtLst en)))
  161. ssErase (cadr tmp)
  162.   )
  163.   (if (> (length lst_pt) 2)
  164.     (progn
  165.       (cond ((or (equal ang_en 0.0 0.001) (equal ang_en 180.0 0.001))
  166.       (setq lst_pt (vl-sort lst_pt '(lambda (e1 e2) (vla-object en) (vlax-3d-point (car lst_pt)))
  167.       (vla-put-endPoint (vlax-ename->vla-object en) (vlax-3d-point (last lst_pt)))
  168.       (vl-cmdf "erase" ssErase "")
  169.     )
  170.   )
  171. )
  172. ;;;;;;;;;;;
  173. (defun GetPtLst (en / en_10 en_11 ang_en ptLst ss i em em_10 em_11 ang_em ang_10 ang_11)
  174.   (setq en_10 (cdr (assoc 10 (entget en)))
  175. en_11 (cdr (assoc 11 (entget en)))
  176. ang_en (RetAng (angle en_10 en_11))
  177. ptLst (list en_10 en_11)
  178. ssErase (ssadd)
  179.   )
  180.   (setq ss (ssget "c" en_10 en_11 '((0 . "line"))))
  181.   (if (> (sslength ss) 1)
  182.     (progn
  183.       (setq i -1)
  184.       (ssdel en ss)
  185.       (repeat (sslength ss)
  186. (setq em     (ssname ss (setq i (1+ i)))
  187.        em_10  (cdr (assoc 10 (entget em)))
  188.        em_11  (cdr (assoc 11 (entget em)))
  189.        ang_em (RetAng (angle em_10 em_11))
  190.        ang_10 (RetAng (angle en_10 em_10))
  191.        ang_11 (RetAng (angle en_10 em_11))
  192. )
  193. (if (and (equal ang_en ang_em 0.001) (or (equal ang_en ang_10 0.001) (equal ang_en ang_11 0.001)))
  194.    (setq ptLst (append ptLst (list em_10) (list em_11))
  195.   ssErase (ssadd em ssErase)
  196.    )
  197. )
  198.       )
  199.     )
  200.   )
  201.   (list ptLst ssErase)
  202. )
  203. ;;;;;;;;;;;
  204. (defun RetAng (ang)
  205.   (if (>= ang (- pi 0.0001))
  206.     (atof (angtos (- ang pi) 0 4))
  207.     (atof (angtos ang 0 4))
  208.   )
  209. )
回复

使用道具 举报

0

主题

1

帖子

1

银币

初来乍到

Rank: 1

铜币
1
发表于 2018-4-2 10:50:00 | 显示全部楼层
express tools 里面不是有overkill命令么,这个和overkill的区别是?
回复

使用道具 举报

1

主题

14

帖子

3

银币

初来乍到

Rank: 1

铜币
18
发表于 2019-5-2 22:37:00 | 显示全部楼层
好东西,谢谢楼主
回复

使用道具 举报

0

主题

3

帖子

2

银币

初来乍到

Rank: 1

铜币
3
发表于 2018-2-25 16:56:00 | 显示全部楼层
可以用,研究一下
回复

使用道具 举报

3

主题

50

帖子

7

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
62
发表于 2013-6-21 12:43:00 | 显示全部楼层
高手请出手,这个功能还是很实用的。
回复

使用道具 举报

18

主题

67

帖子

7

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
139
发表于 2013-11-21 20:30:00 | 显示全部楼层
这个非常好用!比那些故作高深发带一大堆自己函数的所谓源码的高手好多了,谢谢了!
回复

使用道具 举报

36

主题

330

帖子

19

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
467
发表于 2013-12-21 19:29:00 | 显示全部楼层
这个程序好!!!
回复

使用道具 举报

1

主题

3

帖子

2

银币

初来乍到

Rank: 1

铜币
7
发表于 2014-2-10 22:12:00 | 显示全部楼层
这个正好需要
回复

使用道具 举报

167

主题

525

帖子

109

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1193
发表于 2014-11-16 22:00:00 | 显示全部楼层
这个最大的遗憾就是,分解了多段线,丢失了宽度!!!!!
回复

使用道具 举报

0

主题

8

帖子

3

银币

初来乍到

Rank: 1

铜币
8
发表于 2015-8-24 10:22:00 | 显示全部楼层
新人学习中
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-3-4 05:45 , Processed in 0.847046 second(s), 72 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表