明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2313|回复: 5

[图形系统] cad.net [渲染篇]更快的文字编辑器

  [复制链接]
发表于 2025-5-22 19:01:32 | 显示全部楼层 |阅读模式
本帖最后由 你有种再说一遍 于 2025-5-26 04:57 编辑

我知道怎么实现一个更快的Acad文字编辑器了.
青蛙觉得用winform输入框没有可观可测,
尤其是多行文字的数学公式渲染.

首先我们知道了
Acad10之后有图元重定义,
图元重定义实际上就是应用层的渲染管线,
可以让你原本的文字渲染为不显示,可以把触发新渲染的文字也加入这里,判断是平移还是摄像机变换.这并非数据库内容更改,不涉及事务保护等耗时操作.
夹点重定义本质上就是交互.
包围盒重定义可以把渲染后的新字体大小提供给选择集,这样你才能够选中目标.

实现软件光栅化渲染字体:
解析多行文字格式,提取文字轮廓点,文字间距,
用不同的库解析ttf和shx字体就可以了,
还得实现字体回退功能,
然后把轮廓点用贝塞尔曲线描边,
利用共享内存缓存字体轮廓在非Acad进程上.
曲线和射线求交点,然后用并行SIMD求填充中间部分,
渲染器改用SIMD实现冷启动,避免调用显卡出现延迟.
注意字体不能使用有向距离场,要用传统动态采样密度,
因为我们不是游戏渲染,抗锯齿要比较高.

用Skia库实现就好了,它跨平台,而且同时实现了SIMD和GPU,
你选中其中之一就可以很方便测试速度.
实在不行可以选择重头写渲染,反正也不难

数学公式渲染:
我首先想到md的渲染器,
用KaTeX渲染公式为SVG,通过IPC传递到CAD.
它的C#版本叫做:TexMath
它可以下标和上标分别字体,贴合CAD多行文字.

编辑器功能对着抄就行,
编辑器本体也可以矩阵变换,是按照单行文字的MVP矩阵.

重点其实只是把渲染器和字体做成1:1,
然后记得设置系统缩放,看看是否出现模糊和错乱.

整个过程有点复杂,但是并非做不出来.
渲染管线只需要了解顶点着色和片元着色,
然后你就可以对比GPU和CPU在什么情况下渲染效率更高.
(嘻嘻,真踏马难)
回复

使用道具 举报

发表于 2025-5-22 20:23:15 | 显示全部楼层
恭喜楼主,敬候佳音呢。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2025-5-22 20:26:57 | 显示全部楼层
shirker 发表于 2025-5-22 20:23
恭喜楼主,敬候佳音呢。

没钱,不做,只是原理性讨论,嘻嘻.
回复 支持 反对

使用道具 举报

发表于 2025-5-23 21:48:07 | 显示全部楼层
你懂的太多了,小心进小黑屋
回复 支持 反对

使用道具 举报

 楼主| 发表于 2025-5-23 22:15:09 | 显示全部楼层
zilong136 发表于 2025-5-23 21:48
你懂的太多了,小心进小黑屋

不会的,坛主会保我
回复 支持 反对

使用道具 举报

 楼主| 发表于 2025-5-25 19:21:16 | 显示全部楼层
本帖最后由 你有种再说一遍 于 2025-5-26 22:47 编辑

那么acad2008怎么做捏?在.net没有重定义...
如果用ARX就容易了,它有自定义图元.

方案一:
要把文字通过数据库进行
dbtext.Visibie =false;
我不知道可见性设置是否会导致包围盒产生,
求块参照包围盒时候若有图元隐藏应该会忽略.
但是可以lisp遍历出来...

例如把宋体渲染为惊体,
我要提供惊体包围盒,才可以被选择集选中.
感觉不太安全,尤其是lisp遍历的话,它得到旧的包围盒,而我们是想提供新的.
这个似乎无解.

方案二:
还记得那个带*名称隐藏图层吗?这样就选不中了
甚至要开隐藏层表才可以遍历得到.
旧图层就用xdata进行附着,以便还原.

方案三:
如果克隆并删掉原始文字,设置为主字典下面的对象,
这会破坏数据库结构,例如块中单行文字.

若遍历时候遗忘补充对象,造成遍历块表记录失效?
需要在遍历时候需要改用专用接口,
提供块中字典文字对象,
那么Lisp的遍历逻辑就要改了,似乎是一个"鱼与熊掌"的问题.


感觉在数据层上面实现真的不如在显示层拦截.

绘制时候是通过叠加一层winform,
然后在winform上面进行自绘.
选择集事件上面是自建一层四叉树缓存,
这样才可以选择到"我定义"的winform文字.

这个方案更困难,要同步鼠标旋转,
进行"我定义"文字的MVP矩阵变换,
保存和打印要还原原始文字.
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-11-26 14:21 , Processed in 0.192064 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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