669423907 发表于 2023-5-24 22:36:59

删除对象时,老是提示 选择集:xxxx

cad2018,删除或复制对象的时候,老是提示   选择集:xxxx
需要确定(其实已经删除完毕),2008的时候没有这种现象,不知道是什么原因造成的?
;标角度
(defun c:bjd()
(if (ssget "i")
(vl-cmdf "_erase" (ssget "i") "") ;删除
(vl-cmdf "dimangular") ;标角度
)
(princ))

jun353835273 发表于 2023-5-24 23:19:29


(defun c:bjd( / i ss )
(if (setq ss (ssget ":L" ))
(progn
   (setq i 0)
   (repeat (sslength ss)
   (entdel (ssname ss i))
   (setq i (+ 1 i))
   )
    )
)
)
这样删吧
你的(ssget "i")啥意思呢,没有这种用法吧

669423907 发表于 2023-5-24 23:53:52

jun353835273 发表于 2023-5-24 23:19
这样删吧
你的(ssget "i")啥意思呢,没有这种用法吧

http://bbs.mjtd.com/forum.php?mod=viewthread&tid=175755&highlight=ssget


I 隐含窗口选择
参数语法:(ssget "i" )
CAD 命令有两种执行方式,第一种先命令后选择,第二种先选择后命令。所以在 Lisp 中也允许先选择后命令,
而且这方式可以通过系统变量 pickfirst 来关闭(值为 0),此时 I 参数将失效,(ssget "i") 将返回 nil。
选择对象后,选择集呈现亮显状态,可以用 (sssetfirst nil) 取消选择集的亮显。

X 整个文件
在当前打开的CAD文件中选择所有对象,包括关闭、冻结图层中的图元和可见屏幕外的图元,不分大小写。
参数语法: (ssget "x" )
X 用法与 A 用法等价,(ssget “A”) 也是选择所有对象,但是 A 模式不返回冻结图层上的对象。

:E 拾取框
用鼠标拾取框选择对象,此时 ssget 将不再拉出一个矩形窗口,直到点右键结束选择。此模式可与 “+” 组合使用。
参数语法: (ssget ":E" )
与 :E 对应的 :N 参数为只能拉出一个矩形窗口选择,而不能通过点选拾取对象。

:S 仅允许单一选择集
使用:s参数时,ssget 将点选对象一次就会结束,无论是否选中对象,未选中则返回 nil,可节省一次回车确认。
参数语法: (ssget ":S" )
说明: “:S” 参数和 “:E” 可以同时使用,例如: (ssget "_:S:e"),此时 ssget 与 entsel 作用相同,但是返回值不同。
以下参数可以组合使用, “+” 或 “-“,例如:(ssget "_:S+D")

:D 重复选择
允许同一个对象多次加入选择集,每选择一次,则加入一次。
参数语法:   (ssget ":D" )
例如:画两条直线,然后运行代码 (setq ss (ssget ":d")),框选3次直线后 (sslength ss) 返回 6

:L 不选择锁定图层对象
注意: L、:L、-L 的参数是不同的。
参数语法: (ssget ":L" )
ssget 默认选择所有图层对象,这样在程序中需判断图层是否锁定,才能编辑,否则 lisp 对选择集操作时将返回错误

程序有两个功能:
1:如果先选择对象,则删除对象
2:如果没有选择对象,则执行角度标注

jun353835273 发表于 2023-5-25 14:05:46

669423907 发表于 2023-5-24 23:53
http://bbs.mjtd.com/forum.php?mod=viewthread&tid=175755&highlight=ssget


这样试一试
(defun c:bjd( / i ss )
(if (setq ss (ssget "i"))
(progn
   (setq i 0)
   (repeat (sslength ss)
   (entdel (ssname ss i))
   (setq i (+ 1 i))
   )
    )
(progn
(vl-cmdf "dimangular") ;标角度
    )
)
(princ)
)

669423907 发表于 2023-5-25 21:48:42

jun353835273 发表于 2023-5-25 14:05
这样试一试
(defun c:bjd( / i ss )
(if (setq ss (ssget "i"))


非常感谢你回复,这样的确可以,没有提示了。
究竟是什么原因呢?很多地方都用到 (setq ss (ssget "i")),
在08版用一直都是没有问题,18,20版都不行,不知道问题出在哪…

jun353835273 发表于 2023-5-26 07:47:46

669423907 发表于 2023-5-25 21:48
非常感谢你回复,这样的确可以,没有提示了。
究竟是什么原因呢?很多地方都用到 (setq ss (ssget "i")) ...

(vl-cmdf "_erase" (ssget "i") "") ;应该是command的原因

669423907 发表于 2023-5-26 21:17:37

jun353835273 发表于 2023-5-26 07:47
(vl-cmdf "_erase" (ssget "i") "") ;应该是command的原因

多谢大师指点
页: [1]
查看完整版本: 删除对象时,老是提示 选择集:xxxx