本帖最后由 你有种再说一遍 于 2025-11-3 02:22 编辑
众所周知,C#有个瞬态图元,并且有个main模式是刷新不消失的.
有什么功能是我们必须要用瞬态实现而不是普通图元呢?
1,无加载插件和加载后下次打开,都不应该显示的.
如果用普通图元,虽然命令事件拦截保存命令也可以删除普通图元,不过如果有其他插件通过函数保存`doc.CloseAndSave()`就出现幽灵图元污染了数据库,这是极其不专业的行为.
2,数据库进出事件不触发.
3,选择事件不触发.
4,非打印.
满足上述这种情况的有:bo命令,边界不闭合时候的圆圈提示.
似乎有点寡淡,为什么只有这个bo命令用到,还有啥情况是必须用到呢?有什么时候是必须放弃JIG用瞬态呢?
今天给大家带来一个功能就很好的用到以上特性.
用布局画图的人会频繁切换布局,然后一旦切换就令视口重绘,如何降低这种重绘带来的卡顿呢?
那就是把布局的图元chspace过来.
chspace哪个视口呢?
我们提前把所有视口的边界用瞬态映射到模型,然后通过交互视口影子就可以实现了.
chspace什么范围的图元呢?
1,整个布局拷贝过来.
2,根据影子的视口获取图框,把图框内范围拷贝过来,此时需要倒序索引?要多少个索引?岂不是要维护?
mapA[瞬态id]=(布局id,视口id,图框id)
mapB[图框id]=图框内图元?
备注:图框名称需要配置中设置.
视口影子:鼠标钩子+四叉树定位瞬态图元.
影子刷新:如果视口显示位置变化了就用数据库对象改变事件进行改变视口影子.
如此一来,单击视口影子就可以显示图元(chspace布局to模型),再次单击就可以回收图元.
唉!既然有这个效果了,为什么我们不直接加一个功能,把chspace过来的图元给改完之后,再联动回布局那边呢?也就是"在位编辑".
在位编辑大家都知道原理吧,就是一个HashSet而已.
就可以set.Add(chspaceCloneObjectIds).
然后"添加"和"删除"就自己封装咯,我不想触发全局刷新,因此不采用褪色度,而是采用"动态块参数"一样挂一个图标在图元旁边.
唉!既然是这样,为什么不加一个ctrl+单击视口影子,此时进行跳转到布局,定位到视口本体.
可选配置:
1,跳转后把其他视口全部关闭,实现快速查看.并且双击ctrl后显示全部视口.命令事件保存实现打开全部视口.
2,跳转后显示全部视口.
3,跳转后不变.
逆跳:
视口本体可以用ctrl+单击跳转到视口影子.
实现回收"在位编辑"的HashSet普通图元:
A,命令事件:
拦截原本是保存,替换为自己的保存,在保存前移除LayoutWorkSet,保存就相当于折叠显示,这样就不会保存到数据库里面了.
B,加载后执行接口,文档打开事件:
防止`doc.CloseAndSave()`我们仍然需要打开时候清理.
b1,打开后遍历一次全图,查看被标记xdata的普通图元.
b2,把LayoutWorkSet的普通图元全部加入规则重定义重绘.
b3,在主字典记录这些普通图元,然后打开后直接删了.
C,共享内存
其他软件也可以通过共享内存直接获取我的HashSet,约定名称为:"LayoutWorkSet",第一个int32作为长度.
D:提供命令
命令清理可以给某种情况下清理.
命令配置启用停用.
悬停事件:
视口影子可以用悬停显示图片技术提示用户:
在博客最下面有C#相关的: https://www.cnblogs.com/edata/p/17311897.html
鼠标钩子:
在位编辑块期间:
1,不允许点击视口影子.会导致模型的块"添加"了LayoutWorkSet成员到块内.出现一种"双编辑器模式".
(允许也只是在模型块中添加模型对象入块内,然后回写布局时候发现没有任何对象回写,发生删除布局标注.逻辑上面是没有问题的,只是一个安全防护)
2,LayoutWorkSet之间可以组块,再次在位编辑就会互斥,要求先退出在位编辑.
视口绑定:
平移/旋转/(缩放,好像没有意义)
可以利用一个专用命令或者替换原本命令,要先执行后选择,利用四叉树选择视口影子的瞬态图元.平移向量/旋转角度就得到对应矩阵,此时联动更改布局视口.
这一切都那么环环相扣,真是一个设计感十足的功能.
(完)网友答: 确实,很多人一开始觉得瞬态图元“可有可无”,无非就是画个临时辅助线。但你点出了它的不可替代性——只要涉及“临时可视化但绝不进数据库”的需求,普通图元就是个雷。尤其是插件生态复杂的情况下,谁也不敢保证别人会不会偷偷调个 CloseAndSave(),一不小心就留下幽灵图元,模型就脏了。
你提到的“视口影子 + 双击跳转 + 在位编辑”这套组合拳,简直是布局工作流的痛点精准打击!
期待你把这个功能做出来!如果真能开源或分享,绝对能提升一大波布局用户的幸福感
网友答:
这个需求点我没看懂网友答: 本帖最后由 你有种再说一遍 于 2025-11-1 21:58 编辑
就是小改一点布局图元的时候,不想切换布局引发刷新.
通常发生在已经画好图之后,再微调图纸时候,此时材质标注箭头没有点中图纸.
以及作为平移视口的联动依据.
网友答:
簡單點說就是在模型可以直接修改佈局上的圖元位置,或者模型上顯示佈局上視口到底是套的哪個區域,讓佈局里的內容在模型上直接可視化操作。
众所周知,C#有个瞬态图元,并且有个main模式是刷新不消失的.
有什么功能是我们必须要用瞬态实现而不是普通图元呢?
1,无加载插件和加载后下次打开,都不应该显示的.
如果用普通图元,虽然命令事件拦截保存命令也可以删除普通图元,不过如果有其他插件通过函数保存`doc.CloseAndSave()`就出现幽灵图元污染了数据库,这是极其不专业的行为.
2,数据库进出事件不触发.
3,选择事件不触发.
4,非打印.
满足上述这种情况的有:bo命令,边界不闭合时候的圆圈提示.
似乎有点寡淡,为什么只有这个bo命令用到,还有啥情况是必须用到呢?有什么时候是必须放弃JIG用瞬态呢?
今天给大家带来一个功能就很好的用到以上特性.
用布局画图的人会频繁切换布局,然后一旦切换就令视口重绘,如何降低这种重绘带来的卡顿呢?
那就是把布局的图元chspace过来.
chspace哪个视口呢?
我们提前把所有视口的边界用瞬态映射到模型,然后通过交互视口影子就可以实现了.
chspace什么范围的图元呢?
1,整个布局拷贝过来.
2,根据影子的视口获取图框,把图框内范围拷贝过来,此时需要倒序索引?要多少个索引?岂不是要维护?
mapA[瞬态id]=(布局id,视口id,图框id)
mapB[图框id]=图框内图元?
备注:图框名称需要配置中设置.
视口影子:鼠标钩子+四叉树定位瞬态图元.
影子刷新:如果视口显示位置变化了就用数据库对象改变事件进行改变视口影子.
如此一来,单击视口影子就可以显示图元(chspace布局to模型),再次单击就可以回收图元.
唉!既然有这个效果了,为什么我们不直接加一个功能,把chspace过来的图元给改完之后,再联动回布局那边呢?也就是"在位编辑".
在位编辑大家都知道原理吧,就是一个HashSet而已.
就可以set.Add(chspaceCloneObjectIds).
然后"添加"和"删除"就自己封装咯,我不想触发全局刷新,因此不采用褪色度,而是采用"动态块参数"一样挂一个图标在图元旁边.
唉!既然是这样,为什么不加一个ctrl+单击视口影子,此时进行跳转到布局,定位到视口本体.
可选配置:
1,跳转后把其他视口全部关闭,实现快速查看.并且双击ctrl后显示全部视口.命令事件保存实现打开全部视口.
2,跳转后显示全部视口.
3,跳转后不变.
逆跳:
视口本体可以用ctrl+单击跳转到视口影子.
实现回收"在位编辑"的HashSet普通图元:
A,命令事件:
拦截原本是保存,替换为自己的保存,在保存前移除LayoutWorkSet,保存就相当于折叠显示,这样就不会保存到数据库里面了.
B,加载后执行接口,文档打开事件:
防止`doc.CloseAndSave()`我们仍然需要打开时候清理.
b1,打开后遍历一次全图,查看被标记xdata的普通图元.
b2,把LayoutWorkSet的普通图元全部加入规则重定义重绘.
b3,在主字典记录这些普通图元,然后打开后直接删了.
C,共享内存
其他软件也可以通过共享内存直接获取我的HashSet,约定名称为:"LayoutWorkSet",第一个int32作为长度.
D:提供命令
命令清理可以给某种情况下清理.
命令配置启用停用.
悬停事件:
视口影子可以用悬停显示图片技术提示用户:
在博客最下面有C#相关的: https://www.cnblogs.com/edata/p/17311897.html
鼠标钩子:
在位编辑块期间:
1,不允许点击视口影子.会导致模型的块"添加"了LayoutWorkSet成员到块内.出现一种"双编辑器模式".
(允许也只是在模型块中添加模型对象入块内,然后回写布局时候发现没有任何对象回写,发生删除布局标注.逻辑上面是没有问题的,只是一个安全防护)
2,LayoutWorkSet之间可以组块,再次在位编辑就会互斥,要求先退出在位编辑.
视口绑定:
平移/旋转/(缩放,好像没有意义)
可以利用一个专用命令或者替换原本命令,要先执行后选择,利用四叉树选择视口影子的瞬态图元.平移向量/旋转角度就得到对应矩阵,此时联动更改布局视口.
这一切都那么环环相扣,真是一个设计感十足的功能.
(完)网友答: 确实,很多人一开始觉得瞬态图元“可有可无”,无非就是画个临时辅助线。但你点出了它的不可替代性——只要涉及“临时可视化但绝不进数据库”的需求,普通图元就是个雷。尤其是插件生态复杂的情况下,谁也不敢保证别人会不会偷偷调个 CloseAndSave(),一不小心就留下幽灵图元,模型就脏了。
你提到的“视口影子 + 双击跳转 + 在位编辑”这套组合拳,简直是布局工作流的痛点精准打击!
- 用瞬态图元映射视口边界,既不影响模型,又能快速定位;
- 双击交互配合四叉树,性能也稳;
- 再加上“在位编辑”的临时缓存机制,改完还能回写,体验直接拉满;
- 甚至考虑到 Ctrl+双击 跳布局的多种策略(关其他视口 / 全显 / 不变),这种细节才是专业插件该有的样子。
期待你把这个功能做出来!如果真能开源或分享,绝对能提升一大波布局用户的幸福感
网友答:
"用布局画图的人会频繁切换布局,然后一旦切换就令视口重绘,如何降低这种重绘带来的卡顿呢?
那就是把布局的图元chspace过来."
这个需求点我没看懂网友答: 本帖最后由 你有种再说一遍 于 2025-11-1 21:58 编辑
Throne 发表于 2025-11-1 18:26
这个需求点我没看懂
就是小改一点布局图元的时候,不想切换布局引发刷新.
通常发生在已经画好图之后,再微调图纸时候,此时材质标注箭头没有点中图纸.
以及作为平移视口的联动依据.
网友答:
Throne 发表于 2025-11-1 18:26
这个需求点我没看懂
簡單點說就是在模型可以直接修改佈局上的圖元位置,或者模型上顯示佈局上視口到底是套的哪個區域,讓佈局里的內容在模型上直接可視化操作。