明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2359|回复: 7

[求助]如何实指定图元从选择集中清除并且删除此实体?

[复制链接]
发表于 2004-2-22 15:50 | 显示全部楼层 |阅读模式
(setq ss (ssget))
(setq cc (entget(ssname ss d)))
(entmake cc) (setq name0(ssname ss d))
(ssdel name0 ss) 用(entdel name0)发生错误


发表于 2004-2-22 16:26 | 显示全部楼层
(entmake cc)是错误的,有些DXF组码是不能指定的,


后面的应该不会有错,你可以把完整点的程序放上来
 楼主| 发表于 2004-2-23 10:57 | 显示全部楼层
(defun c:testr()
(command "-layer" "n" "order" "s" "order" "c" "0" "" "")
(setq ss (ssget))
(setq nname "")
(setq pp '(0.0 0.0 0.0))
(setq point '(0.0 0.0 0.0))
(setq k 0)
(setq d 0)
(while (> (sslength ss) 0)
(print (sslength ss))
(setq k 0)
(setq dis 2000.0)
(setq cha_pe 0)
(while (< k (sslength ss))

(setq name (ssname ss k))
(setq enta (entget name))
(setq shap (cdr (assoc 0 enta)))
(if (= shap "LINE")
(progn
(setq ps (cdr (assoc 10 enta)))
(setq pe (cdr (assoc 11 enta)))
)
)
(if (= shap "ARC")
(progn
(setq center (cdr (assoc 10 enta)))
(setq astart (cdr (assoc 50 enta)))
(setq rad (cdr (assoc 40 enta)))
(setq aend (cdr (assoc 51 enta)))
(setq ps (mapcar '+ center (list (* rad (cos astart)) (* rad (sin astart)))))
(setq pe (mapcar '+ center (list (* rad (cos aend)) (* rad (sin aend)))))
)
)
(setq change 0)
(if (or (/= dis 0.0) (or (= shap "LINE") (= shap "ARC")))
(progn
(if (> dis (distance point ps))
(progn
(setq dis (distance point ps))
;(print dis)
(setq pp pe)
(setq d k)
(setq cha_pe 0)
(setq change 1)
)
)
(if (> dis (distance point pe))
(progn
(setq dis (distance point pe))
;(print dis)
(setq pp ps)
(setq d k)
(setq cha_pe 1)
(setq change 1)
)
)

)
)

(if (= change 1) (setq obj enta))
(if (= dis 0)
(setq k (sslength ss))
(setq k (1+ k))
)
)

(setq cc (entget(ssname ss d)))
(if (= cha_pe 1)
(progn
(setq shap (cdr (assoc 0 cc)))
(if (= shap "LINE")
(progn
(setq aa (cdr(assoc 10 cc)))
(setq bb (cdr(assoc 11 cc)))
(setq cc (subst '(list 11 aa) '(list 11 bb) cc))
(setq cc (subst '(list 10 bb) '(list 10 aa) cc))
)
(if (= shap "ARC")
(progn
;(print "pass2")
(setq aa (cdr(assoc 50 cc)))
(setq bb (cdr(assoc 51 cc)))
;(print (cons 50 bb))
(if (> aa 0.0)
(setq aa (- aa 6.2831853))
(setq aa (+ aa 6.2831853))
)
(if (> bb 0.0)
(setq bb (- bb 6.2831853))
(setq bb (+ bb 6.2831853))
)
(setq cc (subst (cons 50 bb) (cons 50 aa) cc))
(setq cc (subst (cons 51 aa) (cons 51 bb) cc))
)
)
)
)
)
(setq cc (subst (cons 8 "order") (assoc 8 cc) cc))
(entmake cc)
(setq name0 (ssname ss d) )
(ssdel name0 ss)
(entdel name0)
(setq point pp)
) (princ "错误 = ")(princ (getvar "errno"))
(command "-layer" "off" "order" "y" "")
(command "-layer" "on" "order" "")
(princ)
) 原来用 (command "erase" "p" "")代替 (entdel name0)

发表于 2004-2-23 11:26 | 显示全部楼层
只要删除了实体,选集不处理也不要紧
发表于 2004-2-23 11:34 | 显示全部楼层
对,实体删除之后,选择集大小等是动态变化的,若你用了repeat         n——选择集长度,应相应调整。
发表于 2004-2-23 11:44 | 显示全部楼层
楼上这是错误的,


首先,对象删除了,并不会从选择集中去掉,


另外repeat函数循环的次数是由原始n值决定,循环过程中即使n做任何改变,repeat的循环次数也不会随着改变
 楼主| 发表于 2004-2-23 13:55 | 显示全部楼层
谢谢!!大家我自己已搞定。
发表于 2006-1-21 11:01 | 显示全部楼层
cqnj023发表于2004-2-23 11:34:00对,实体删除之后,选择集大小等是动态变化的,若你用了repeat  n——选择集长度,应相应调整。

好像不对吧,选择集能自己动态变化?比如一个选择集中有两条直线,我删除了一条,选择集并没有变的啊,那又如何动态?

我现在想知道,我删除一条线后的选择集如何在不重新选择的情况下SSLENGTH=1?如何能做到?

如果做不到,我又怎么避免循环到该删除掉的图元时不出错,继续下去?

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

本版积分规则

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

GMT+8, 2024-5-19 11:11 , Processed in 0.233538 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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