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);
}