本帖最后由 d1742647821 于 2025-8-20 14:18 编辑

虽然不建议使用command,但是某些情况,比如你的用户要使用某 T正 软件时,不得不使用command来进行一些操作。


现象
首先这是一段为了测试而写的代码,它的内容是随便画一个对象,然后调用cad的command将它删除


可以尝试一下,这段代码跑到中间的时候,会弹出“调用的目标发生了异常”的错误,然后cad的选择集就无法使用了。
原因是cad的选择集不能超过128个,但是可以看到我的代码里加了dispose也释放了变量,但是仍然不行,c#也没有提供释放选择集的api。
我尝试使用com接口获取文档中的选择集,发现数量居然是0。
此问题只会在使用 SelectionSet.FromObjectIds 函数时才会出现,使用editor.GetSelection拿到的选择集不会出现此问题。
并且只有使用editor.Command后才会出现,单纯的创建选择集无论创建多少个也不会出现错误,可能是非拖管对象发送到c++端使用后没有释放,这很可能是cad的一个bug。

解决方法
暂无解决办法,只能不用选择集,采用替代写法。
ed.Command的时候不传选择集,将id一个一个传进去也是一样的
这样要先构建一个commandList,添加完参数之后ToArray转为数组再传到editor.Command的参数里
麻烦了那么一点点,效果是一样的。



网友答:
gzxl 发表于 2025-8-20 12:52
那就用四叉树选择(2J 不是有嘛),见到 command 就头疼。
遍历数据库很快的,再加过滤需要图 ...

看都不看是吧,拿起嘴就评论,这跟选择有半毛钱关系吗

网友答:
d1742647821 发表于 2025-8-20 14:15
看都不看是吧,拿起嘴就评论,这跟选择有半毛钱关系吗

您六次提到“选择集”,所以才有所误会。

网友答:
edata 发表于 2025-8-20 16:56
id构建选择集,可以通过GetSelection配合设置预选构建

从稳定性上感觉还不如一个一个传进去

网友答: 本帖最后由 gzxl 于 2025-8-20 12:56 编辑

那就用四叉树选择(2J 不是有嘛),见到 command 就头疼。
遍历数据库很快的,再加过滤需要图元、再加盒子四个角点


网友答: 其实也不一定一个一个传,可以用GetSelection构建选择集.

网友答:
edata 发表于 2025-8-20 14:57
其实也不一定一个一个传,可以用GetSelection构建选择集.

问题是实际上不需要选择

网友答: 面对这种问题估计要学windbg才能分析到底是哪里的问题.

网友答:
d1742647821 发表于 2025-8-20 16:22
问题是实际上不需要选择

id构建选择集,可以通过GetSelection配合设置预选构建

网友答: 我撤回之前信息,你这吊毛就不配是版主
  • 上一篇:像这种“U-1”的匿名块是怎么创建的?
  • 下一篇:没有了