Autodesk forge 为什么文本标记大小会随缩放而变化?
从数据库加载文本标记时,文本标记将根据查看器的当前缩放以不同的大小显示。如何使文本标记以静态大小显示,而不考虑缩放Autodesk forge 为什么文本标记大小会随缩放而变化?,autodesk-forge,autodesk-viewer,Autodesk Forge,Autodesk Viewer,从数据库加载文本标记时,文本标记将根据查看器的当前缩放以不同的大小显示。如何使文本标记以静态大小显示,而不考虑缩放 function saveFreeformMarkup(markup){ let markupObject = { x: markup.position.x, y: markup.position.y, width: markup.size.x, height:markup.size.y, type: TEXT_MARKUP_TYPE,
function saveFreeformMarkup(markup){
let markupObject = {
x: markup.position.x,
y: markup.position.y,
width: markup.size.x,
height:markup.size.y,
type: TEXT_MARKUP_TYPE,
text: $(`#freeText`).val(),
urn_id: urn[`id`],
active: ACTIVE
};
$.ajax({
... send markupObject to database ...
});
}
这是因为在发生导航(缩放/平移)时,摄影机更改事件附带了一个处理程序,该处理程序可以根据当前视图的更新边界调整SVG的
viewbox
为了克服这一问题,您可以搭载MarkupCore扩展的onCameraChange
处理程序(确保在进入编辑模式之前将事件绑定到上链之前执行此操作),并基于当前相机轴值和添加标记时记录的值对SVG应用缩放:
MarkupsCore.originalOnCameraChange = MarkupsCore.onCameraChange;
MarkupsCore.onCameraChange = function(event){
let scaleString = calculateScale(originalPivot, viewer.autocam.pivot);
this.svg.setAttribute('transform', scaleString);
this.originalOnCameraChange(event)
}
有关SVG转换的详细信息,请参见
将留给您来实现计算,或者甚至是更好的方法来转换标记以响应导航。我可以通过将
loadSingleMarkup()
函数更改为以下内容来解决此问题
const FONT_SIZE_SCALE = 90;
function loadSingleMarkup(markup, markupTool){
let MarkupsCore = Autodesk.Viewing.Extensions.Markups.Core;
let text = new MarkupsCore.MarkupText(markup.id + ID_INCREMENT, markupTool, markup.text);
markupTool.addMarkup(text);
text.setSize({ x: markup.x, y: markup.y}, markup.width, markup.height);
text.setText(markup.text);
text.style[`font-size`] = 12 / FONT_SIZE_SCALE;
text.updateStyle(true);
}
(添加
text.style[`font size`]=12/font\u size\u SCALE;
)在代码段中使用名为originalPivot
的变量和名为calculateScale
的函数。这个变量是我创建标记时需要存储的还是Forge API的一部分?该函数是我需要创建的还是API的一部分?是的,您需要实现calculateScale
来映射轴值随摄影机放大/缩小到SVG缩放设置而发生的变化,并将原始轴值记录为originalPivot
(或您在后面命名的变量)谢谢您的帮助,事实上,通过深入研究MarkupsCore扩展的源代码,我找到了一个更简单的解决方法
const FONT_SIZE_SCALE = 90;
function loadSingleMarkup(markup, markupTool){
let MarkupsCore = Autodesk.Viewing.Extensions.Markups.Core;
let text = new MarkupsCore.MarkupText(markup.id + ID_INCREMENT, markupTool, markup.text);
markupTool.addMarkup(text);
text.setSize({ x: markup.x, y: markup.y}, markup.width, markup.height);
text.setText(markup.text);
text.style[`font-size`] = 12 / FONT_SIZE_SCALE;
text.updateStyle(true);
}