为什么文本标记大小会基于缩放而变化?

时间:2019-02-11 20:10:47

标签: 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,
    text: $(`#freeText`).val(),
    urn_id: urn[`id`],
    active: ACTIVE
  };
  $.ajax({
    ... send markupObject to database ...
  });
}
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.updateStyle(true);
}

2 个答案:

答案 0 :(得分:0)

这是因为在发生导航(缩放/平移)时,摄像机更改事件附带有一个处理程序,该处理程序会根据当前视图的更新边界来调整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转换的详细信息,请参见here

将由您自己来执行计算,甚至更好的方法来转换标记以响应导航。

答案 1 :(得分:0)

我可以通过将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_SIZE_SCALE;