cad.net 编辑器和在位编辑器,原理猜测及找到在位编辑状态的图元

以下文章是分析,想要拿到在位编辑块内图元另见:cad.net 动态编译生成命令+获取在位编辑块内图元

原文:

在位编辑的时候会产生一个名为 0-RefEdit0 的图层,估计是用来作为长事务返回使用的.

在位编辑的本质是一个长事务,长事务是使用编辑库的对象替换源对象,相当于剪辑.
不理解没关系,请看下面的聊天记录....

【贵妃】惊惊 2019/7/13 17:52:02
我遇到了一个问题,如果是在位编辑的时候,当前空间是模型空间,那么我用函数克隆一个块外的东西到模型空间,实际上会克隆到在位编辑的内部...
我都不知道怎么处理这个情况了..莫非要关闭用户的在位编辑状态么..

【才人】edata 2019/7/13 17:57:15
在位编辑是这样的.

【贵妃】惊惊 2019/7/13 17:58:08
那桌子是怎么控制在位编辑-减出去块外的?

【才人】edata 2019/7/13 17:58:20
在位编辑实际上是对当前空间的修改,然后移动回块定义..

【才人】edata 2019/7/13 17:58:44
这个就不是很清楚了...

【贵妃】惊惊 2019/7/13 17:58:47
也就是长事务上面记录了要移动回去的id?
如果减选了就是剔除了id?

【才人】edata 2019/7/13 17:59:27
你能卡到这个长事务吗?

【贵妃】惊惊 2019/7/13 17:59:39
net貌似无法控制长事务呀
应该桌子有考虑到的,只是我还没有挖出来具体怎么处理的..

【才人】edata 2019/7/13 18:08:59
用命令去移除当前在位编辑.

跟e大聊完之后,大概就知道了
1,桌子的长事务通过某个集合来储存复制出来的图元id,这个地方貌似我们拿不到,也改不了.
2,也可能是用褪色度来控制的,不过偶尔cad会发生褪色度错误的情况,也没见在位编辑出现错误.但是褪色度有没有作用呢?这个只有桌子自己知道了.

如果获得在位编辑状态的图元,是否是块内图元,这个实际上困扰了我很久(大概两年),直到koz帮忙了,
他在一个外国的网站搜索到:
在位编辑命令触发时,选择全图的图元id, ed.SelectAll这样选
在位编辑命令触发后,选择全图的图元id, ed.SelectAll这样选
触发后的图元必然比触发前多,然后进行差集运算,得出多余的就是块内的.
要使用多个反应器来操作,就可以得到了.
你必须要知道的是,反应器的操作要注意锁文档,防止致命错误,但同时要防止你调用了命令,而它内锁了文档,你再锁就会出错.

cad编辑器,不是在位编辑,而是编辑器编辑块的时候,有个现象是,如果你用代码克隆一个块表记录进来,按道理来说是会更新的,

这在普通块上面只需要刷新一下就可以了.但是在动态块上面就不一样了.

我是通过编辑器移动某个图元0距离就可以更新,而不能打开编辑器之后直接保存,可能这是块编辑器内置了一个flag,看某个图元是不是有改过....

直接保存会导致

posted @ 2019-07-14 18:51  惊惊  阅读(1022)  评论(0编辑  收藏  举报