明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2281|回复: 9

[已解答] 为什么批量wipeout后会出现这种效果

[复制链接]
发表于 2013-12-14 13:21:43 | 显示全部楼层 |阅读模式
  1. (defun c:Jx ()
  2. (setvar "CMDECHO" 0)
  3. (setq i 0)
  4. (if (setq ss (ssget '((0 . "LWPOLYLINE"))))
  5.   (repeat (sslength ss)
  6.    (setq ent (ssname ss i)
  7.        ent-lst (entget ent)
  8.        p1 (cadr (assoc 10 ent-lst))
  9.        p2 (caddr (assoc 10 ent-lst))
  10.    )
  11.    (setq pt1 (list p1 p2)
  12.        pt2 (list (+ p1 20.8333) p2)
  13.        pt3 (list (+ p1 20.8333) (- p2 12.5))
  14.        pt4 (list p1 (- p2 12.5))
  15.    )
  16.    (command "_.wipeout" pt1 pt2 pt3 pt4 "")
  17.    (setq i (1+ i))
  18.   );end repeat
  19. );end if
  20. (command "_.ERASE" ss "")
  21. (setvar "CMDECHO" 1)
  22. (princ)
  23. )

本帖子中包含更多资源

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

x
发表于 2013-12-14 18:20:48 | 显示全部楼层
感觉被对象捕捉过去一样
发表于 2013-12-14 20:12:46 | 显示全部楼层
初步结论,算法问题。
发表于 2013-12-14 21:34:30 | 显示全部楼层
试试这个
  1. (defun c:Jx ()
  2. (setvar "CMDECHO" 0)
  3. (setvar "osmode" 0)
  4. (setq i 0)
  5. (if (setq ss (ssget '((0 . "LWPOLYLINE"))))
  6.   (repeat (sslength ss)
  7.    (setq ent (ssname ss i)
  8.        ent-lst (entget ent) )
  9.         (setq ptlist (vl-remove-if '(lambda (x) (/= 10 (car x))) ent-lst))
  10.   (setq ptlist (mapcar 'cdr ptlist))

  11.   (setq   ptlist (vl-sort ptlist (function
  12.                     (lambda (e1 e2)
  13.                       (< (+ (car e1) (cadr e1)) (+ (car e2) (cadr e2))) ))))
  14. (setq   pt1  (nth 0 ptlist)
  15.         pt2  (nth 1 ptlist)
  16.         pt3  (nth 3 ptlist)
  17.         pt4  (nth 2 ptlist)   )
  18.    (command "_.wipeout" pt1 pt2 pt3 pt4 "")
  19.    (setq i (1+ i))
  20.   );end repeat
  21. );end if
  22. (command "_.ERASE" ss "")
  23. (setvar "osmode" 4133)
  24. (setvar "CMDECHO" 1)
  25. (princ)
  26. )
发表于 2013-12-14 21:34:40 | 显示全部楼层
1\你取的10的组吗只是一个顶点,不能确认是哪个顶点!你应该把顶点都取出来,然后按顺时针或者逆时针排序!
 楼主| 发表于 2013-12-15 08:24:16 | 显示全部楼层
楚留香 发表于 2013-12-14 21:34
1\你取的10的组吗只是一个顶点,不能确认是哪个顶点!你应该把顶点都取出来,然后按顺时针或者逆时针排序! ...

但是wiprout只需要第三个顶点,再说矩形的4个顶点都是10组码怎么区分嘛,请指教
发表于 2013-12-15 09:15:28 | 显示全部楼层
1、kwok程序中已经将组码10的顶点提取出来了。
2、实际上提取的顶点是有序的,不用排序。
3、wipeout可以直接转换PLINE。
直接应用顶点:
  1. (defun c:Jx ()
  2. (setvar "CMDECHO" 0)
  3. (setvar "osmode" 0)
  4. (setq i 0)
  5. (if (setq ss (ssget '((0 . "LWPOLYLINE"))))
  6.   (repeat (sslength ss)
  7.    (setq ent (entget (ssname ss i)))
  8.    (command "_.wipeout")
  9.    (foreach x ent (if (= (car x) 10) (command (cdr x))))
  10.    (command "")
  11.    (setq i (1+ i))
  12.   );end repeat
  13. );end if
  14. (command "_.ERASE" ss "")
  15. (setvar "osmode" 4133)
  16. (setvar "CMDECHO" 1)
  17. (princ)
  18. )
直接转换:
  1. (defun c:Jx ()
  2. (setvar "CMDECHO" 0)
  3. (setvar "osmode" 0)
  4. (setq i -1)
  5. (if (setq ss (ssget '((0 . "LWPOLYLINE"))))
  6.   (repeat (sslength ss)
  7.    (setq en (ssname ss (setq i (1+ i))))
  8.    (command "_.wipeout" "P" en "Y")
  9.   )
  10. )
  11. (setvar "osmode" 4133)
  12. (setvar "CMDECHO" 1)
  13. (princ)
  14. )
 楼主| 发表于 2013-12-16 12:23:31 | 显示全部楼层
ZZXXQQ 发表于 2013-12-15 09:15
1、kwok程序中已经将组码10的顶点提取出来了。
2、实际上提取的顶点是有序的,不用排序。
3、wipeout可以 ...

受教了,看来是我考虑的复杂了,随便问一下,区域覆盖后文字辈盖住了,如何让文字上浮一层,仔细找了一下图元上没找到影响的参数。只能用笨方法集体移动后再还原
发表于 2013-12-22 00:54:49 | 显示全部楼层
偏爱云~小吴 发表于 2013-12-16 12:23
受教了,看来是我考虑的复杂了,随便问一下,区域覆盖后文字辈盖住了,如何让文字上浮一层,仔细找了一下 ...

可以用DRAWORDER命令让它前置。。。
 楼主| 发表于 2013-12-26 09:09:41 | 显示全部楼层
llsheng_73 发表于 2013-12-22 00:54
可以用DRAWORDER命令让它前置。。。

是的我也这样想的,我再想是借用之前的ssget还是重新选择好一点,以什么样的一个形式嵌进去
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-5-26 01:08 , Processed in 0.200194 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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