【问题标题】:Why Does Text Markup Size Varies Based on Zoom?为什么文本标记大小因缩放而异?
【发布时间】:2019-07-05 09:48:00
【问题描述】:

从数据库加载文本标记时,文本标记会根据查看器的当前缩放以不同的大小显示。无论缩放如何,如何使文本标记以静态大小显示?

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

【问题讨论】:

    标签: autodesk-forge autodesk-viewer


    【解决方案1】:

    这是因为相机更改事件附加了一个处理程序,当发生导航(缩放/平移)时,该处理程序根据当前视图的更新边界调整 SVG 的 viewbox

    要克服这个问题,您可以搭载 MarkupCore 扩展的 onCameraChange 处理程序(确保在事件绑定到进入编辑模式之前的上链之前执行此操作)并根据当前相机轴心值和添加标记时记录的轴心值:

    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

    将由您来实现计算,甚至是更好的方法来转换标记以响应导航。

    【讨论】:

    • 您在代码 sn-p 中使用了一个名为 originalPivot 的变量和一个名为 calculateScale 的函数。变量是我在创建标记时需要存储的东西,还是 Forge API 的一部分?该功能是我需要创建的还是 API 的一部分?
    • 是的,您需要实现 calculateScale 以将枢轴值更改映射为相机放大/缩小到 SVG 缩放设置,并将原始枢轴值记录为 originalPivot(或任何您想要的后命名变量)
    • 感谢您的帮助,通过深入研究 MarkupsCore 扩展的源代码,我实际上能够找到更简单的解决方法来解决此问题
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-01-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-31
      • 2014-10-16
      • 2018-06-18
      相关资源
      最近更新 更多