Почему размер разметки текста зависит от масштаба? - PullRequest
0 голосов
/ 11 февраля 2019

При загрузке текстовых разметок из базы данных текстовые разметки отображаются в другом размере в зависимости от текущего масштаба просмотра.Как сделать так, чтобы текстовые разметки отображались в статическом размере независимо от масштаба?

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 голосов
/ 14 февраля 2019

Мне удалось решить проблему, изменив функцию 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;)

0 голосов
/ 12 февраля 2019

Это связано с тем, что к событию смены камеры подключен обработчик, который корректирует viewbox SVG в соответствии с обновленными границами текущего вида при навигации (масштабировании / панорамировании).

Чтобы преодолеть этоВы можете добавить обработчик onCameraChange расширения MarkupCore (обязательно сделайте это до привязки события к верхней цепочке перед входом в режим редактирования) и применить масштабирование к 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 см. здесь .

Вам останется выполнить вычисления или дажелучший подход для преобразования разметки в ответ на навигацию.

...