dxf-viewer文本高亮方案
我们最近使用ezdxf后端实现复杂dxf图纸。(工业一次系统图)
遇到一个问题,使用各类cad软件打开文字显示正常,但是放入前端dxf-viewer框架中档图缩小时候,文字是完全模糊不见的。
方案1:尝试切换各类字体、包括黑体。(无用)
方案2:切换各类其他前端dxf展示,作用也不大。
方案3:自己查看 dxf-viewer 源码,想通过了解底层实现逻辑来实现文本的高亮。
dxf-viewer:
使用three.js 来实现渲染的。
three.js 是可以通过修改字体、修改渲染效果的。
从这里入手:
1:监听dxf-viewer 渲染事件,
2:重新渲染和文本有关的entity。
首先,我们得自定义three.js 使用的字体,three.js 使用json格式字体,你需要自己在官网通过脚本等,转化为json字体。
this.dxfViewer = new DxfViewer(this.$refs.canvasContainer, this.options);
let scene = this.dxfViewer.GetScene();
// let orgin = new three.Vector3();
let origin = new three.Vector2();
origin = this.dxfViewer.GetOrigin();
this.dxfViewer.Subscribe('loaded', () => {
console.log("dxf loaded event triggered! yxp");
// 当文件加载完成后处理文本对象
this.processTextObjects(scene, origin);
});
const Subscribe = eventName => {
this.dxfViewer.Subscribe(eventName, e => this.$emit("dxf-" + eventName, e))
}
for (const eventName of ["loaded", "cleared", "destroyed", "resized", "pointerdown",
"pointerup", "viewChanged", "message"]) {
Subscribe(eventName)
}
重点就是 processTextObjects函数
object.material = new three.MeshBasicMaterial({ color: highlightColor, fog: false,
wireframe: true, // 启用线框模式
wireframeLinewidth: 1, // 线条宽度
});
这样,文本就不在模糊不清了,
最后重新渲染即可。
this.dxfViewer.Render(); // 重新渲染