明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 937|回复: 6

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

[复制链接]
发表于 2023-5-24 22:36:59 | 显示全部楼层 |阅读模式
cad2018,删除或复制对象的时候,老是提示   选择集:xxxx
需要确定(其实已经删除完毕),2008的时候没有这种现象,不知道是什么原因造成的?
;标角度
(defun c:bjd()
(if (ssget "i")
(vl-cmdf "_erase" (ssget "i") "") ;删除
(vl-cmdf "dimangular") ;标角度
)
(princ))

"觉得好,就打赏"
还没有人打赏,支持一下
发表于 2023-5-24 23:19:29 | 显示全部楼层

  1. (defun c:bjd( / i ss )
  2. (if (setq ss (ssget ":L" ))
  3.   (progn
  4.    (setq i 0)
  5.    (repeat (sslength ss)
  6.      (entdel (ssname ss i))
  7.      (setq i (+ 1 i))
  8.      )
  9.     )
  10.   )
  11. )

这样删吧
你的(ssget "i")啥意思呢,没有这种用法吧
 楼主| 发表于 2023-5-24 23:53:52 | 显示全部楼层
jun353835273 发表于 2023-5-24 23:19
这样删吧
你的(ssget "i")啥意思呢,没有这种用法吧

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

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

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

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

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

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

程序有两个功能:
1:如果先选择对象,则删除对象
2:如果没有选择对象,则执行角度标注
发表于 2023-5-25 14:05:46 | 显示全部楼层
这样试一试
(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)
)
 楼主| 发表于 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版都不行,不知道问题出在哪…
发表于 2023-5-26 07:47:46 | 显示全部楼层
669423907 发表于 2023-5-25 21:48
非常感谢你回复,这样的确可以,没有提示了。
究竟是什么原因呢?很多地方都用到 (setq ss (ssget "i")) ...

(vl-cmdf "_erase" (ssget "i") "") ;应该是command的原因
 楼主| 发表于 2023-5-26 21:17:37 | 显示全部楼层
jun353835273 发表于 2023-5-26 07:47
(vl-cmdf "_erase" (ssget "i") "") ;应该是command的原因

多谢大师指点
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-16 18:54 , Processed in 0.194317 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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