偏爱云~小吴 发表于 2013-12-14 13:21:43

为什么批量wipeout后会出现这种效果

(defun c:Jx ()
(setvar "CMDECHO" 0)
(setq i 0)
(if (setq ss (ssget '((0 . "LWPOLYLINE"))))
(repeat (sslength ss)
   (setq ent (ssname ss i)
       ent-lst (entget ent)
       p1 (cadr (assoc 10 ent-lst))
       p2 (caddr (assoc 10 ent-lst))
   )
   (setq pt1 (list p1 p2)
       pt2 (list (+ p1 20.8333) p2)
       pt3 (list (+ p1 20.8333) (- p2 12.5))
       pt4 (list p1 (- p2 12.5))
   )
   (command "_.wipeout" pt1 pt2 pt3 pt4 "")
   (setq i (1+ i))
);end repeat
);end if
(command "_.ERASE" ss "")
(setvar "CMDECHO" 1)
(princ)
)

风树 发表于 2013-12-14 18:20:48

感觉被对象捕捉过去一样

edata 发表于 2013-12-14 20:12:46

初步结论,算法问题。

kwok 发表于 2013-12-14 21:34:30

试试这个(defun c:Jx ()
(setvar "CMDECHO" 0)
(setvar "osmode" 0)
(setq i 0)
(if (setq ss (ssget '((0 . "LWPOLYLINE"))))
(repeat (sslength ss)
   (setq ent (ssname ss i)
       ent-lst (entget ent) )
      (setq ptlist (vl-remove-if '(lambda (x) (/= 10 (car x))) ent-lst))
(setq ptlist (mapcar 'cdr ptlist))

(setq   ptlist (vl-sort ptlist (function
                  (lambda (e1 e2)
                      (< (+ (car e1) (cadr e1)) (+ (car e2) (cadr e2))) ))))
(setq   pt1(nth 0 ptlist)
      pt2(nth 1 ptlist)
      pt3(nth 3 ptlist)
      pt4(nth 2 ptlist)   )
   (command "_.wipeout" pt1 pt2 pt3 pt4 "")
   (setq i (1+ i))
);end repeat
);end if
(command "_.ERASE" ss "")
(setvar "osmode" 4133)
(setvar "CMDECHO" 1)
(princ)
)

楚留香 发表于 2013-12-14 21:34:40

1\你取的10的组吗只是一个顶点,不能确认是哪个顶点!你应该把顶点都取出来,然后按顺时针或者逆时针排序!

偏爱云~小吴 发表于 2013-12-15 08:24:16

楚留香 发表于 2013-12-14 21:34 static/image/common/back.gif
1\你取的10的组吗只是一个顶点,不能确认是哪个顶点!你应该把顶点都取出来,然后按顺时针或者逆时针排序! ...

但是wiprout只需要第三个顶点,再说矩形的4个顶点都是10组码怎么区分嘛,请指教

ZZXXQQ 发表于 2013-12-15 09:15:28

1、kwok程序中已经将组码10的顶点提取出来了。
2、实际上提取的顶点是有序的,不用排序。
3、wipeout可以直接转换PLINE。
直接应用顶点:(defun c:Jx ()
(setvar "CMDECHO" 0)
(setvar "osmode" 0)
(setq i 0)
(if (setq ss (ssget '((0 . "LWPOLYLINE"))))
(repeat (sslength ss)
   (setq ent (entget (ssname ss i)))
   (command "_.wipeout")
   (foreach x ent (if (= (car x) 10) (command (cdr x))))
   (command "")
   (setq i (1+ i))
);end repeat
);end if
(command "_.ERASE" ss "")
(setvar "osmode" 4133)
(setvar "CMDECHO" 1)
(princ)
)
直接转换:(defun c:Jx ()
(setvar "CMDECHO" 0)
(setvar "osmode" 0)
(setq i -1)
(if (setq ss (ssget '((0 . "LWPOLYLINE"))))
(repeat (sslength ss)
   (setq en (ssname ss (setq i (1+ i))))
   (command "_.wipeout" "P" en "Y")
)
)
(setvar "osmode" 4133)
(setvar "CMDECHO" 1)
(princ)
)

偏爱云~小吴 发表于 2013-12-16 12:23:31

ZZXXQQ 发表于 2013-12-15 09:15 static/image/common/back.gif
1、kwok程序中已经将组码10的顶点提取出来了。
2、实际上提取的顶点是有序的,不用排序。
3、wipeout可以 ...

受教了,看来是我考虑的复杂了,随便问一下,区域覆盖后文字辈盖住了,如何让文字上浮一层,仔细找了一下图元上没找到影响的参数。只能用笨方法集体移动后再还原

llsheng_73 发表于 2013-12-22 00:54:49

偏爱云~小吴 发表于 2013-12-16 12:23 static/image/common/back.gif
受教了,看来是我考虑的复杂了,随便问一下,区域覆盖后文字辈盖住了,如何让文字上浮一层,仔细找了一下 ...

可以用DRAWORDER命令让它前置。。。

偏爱云~小吴 发表于 2013-12-26 09:09:41

llsheng_73 发表于 2013-12-22 00:54 static/image/common/back.gif
可以用DRAWORDER命令让它前置。。。

是的我也这样想的,我再想是借用之前的ssget还是重新选择好一点,以什么样的一个形式嵌进去
页: [1]
查看完整版本: 为什么批量wipeout后会出现这种效果