本帖最后由 d1742647821 于 2025-8-20 14:18 编辑
虽然不建议使用command,但是某些情况,比如你的用户要使用某 T正 软件时,不得不使用command来进行一些操作。
现象
首先这是一段为了测试而写的代码,它的内容是随便画一个对象,然后调用cad的command将它删除
![]()
看都不看是吧,拿起嘴就评论,这跟选择有半毛钱关系吗网友答:
您六次提到“选择集”,所以才有所误会。
网友答:
从稳定性上感觉还不如一个一个传进去网友答: 本帖最后由 gzxl 于 2025-8-20 12:56 编辑
那就用四叉树选择(2J 不是有嘛),见到 command 就头疼。
遍历数据库很快的,再加过滤需要图元、再加盒子四个角点
网友答: 其实也不一定一个一个传,可以用GetSelection构建选择集.网友答:
问题是实际上不需要选择网友答: 面对这种问题估计要学windbg才能分析到底是哪里的问题.网友答:
id构建选择集,可以通过GetSelection配合设置预选构建网友答: 我撤回之前信息,你这吊毛就不配是版主
虽然不建议使用command,但是某些情况,比如你的用户要使用某 T正 软件时,不得不使用command来进行一些操作。
现象
首先这是一段为了测试而写的代码,它的内容是随便画一个对象,然后调用cad的command将它删除
可以尝试一下,这段代码跑到中间的时候,会弹出“调用的目标发生了异常”的错误,然后cad的选择集就无法使用了。
原因是cad的选择集不能超过128个,但是可以看到我的代码里加了dispose也释放了变量,但是仍然不行,c#也没有提供释放选择集的api。
我尝试使用com接口获取文档中的选择集,发现数量居然是0。
此问题只会在使用 SelectionSet.FromObjectIds 函数时才会出现,使用editor.GetSelection拿到的选择集不会出现此问题。
并且只有使用editor.Command后才会出现,单纯的创建选择集无论创建多少个也不会出现错误,可能是非拖管对象发送到c++端使用后没有释放,这很可能是cad的一个bug。
并且只有使用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配合设置预选构建网友答: 我撤回之前信息,你这吊毛就不配是版主