簡體   English   中英

為什么文本標記大小會基於縮放而變化?

[英]Why Does Text Markup Size Varies Based on Zoom?

從數據庫加載文本標記時,文本標記會根據查看器的當前縮放比例以不同的大小顯示。 無論縮放如何,如何使文本標記以靜態大小顯示?

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

這是因為在發生導航(縮放/平移)時,攝像機更改事件附帶有一個處理程序,該處理程序會根據當前視圖的更新邊界來調整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_SIZE_SCALE;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM