ADN Open CIS
Сообщество программистов Autodesk в СНГ

30/04/2019

Forge Viewer: Настраиваем единицы измерения в Measure tool

В случае, если исходный файл не содержит информацию о единицах измерения (я обнаружил это для файлов STL), то Measure tool в Forge Viewer использует по умолчанию метры. Я же сохранил STL-файл из Inventor-а, у которого внутренними единицами измерения являются сантиметры. Для дюймового кубика (2,54x2,54x2,54 см) Measure tool показывает:

Фактически, на картинке выше я уже немножко поменял настройки, а именно, поставил точность Measure tool в 2 знака. Чтобы это сделать программно, нужно получить само расширение Measure tool и присвоить значения свойства:

Код - JavaScript: [Выделить]
  1. var ext = viewer.getExtension("Autodesk.Measure")
  2. ext.sharedMeasureConfig.precision = 2

Примечание: для удобства отладки при работе с Forge Viewer можно использовать глобальную переменную NOP_VIEWER прямо в консоли отладки браузера.

Я также поменял единицы измерения Measure tool на дюймы:

Код - JavaScript: [Выделить]
  1. ext.sharedMeasureConfig.units = "in"

До сих пор это не тот результат, которого мы хотим добиться (2,54 метра вместо 2,54 см), нам нужно откалибровать Measure tool, чтобы он выводил результаты в 100 раз меньше текущих (т.е. умножал результат на 0,01):

Код - JavaScript: [Выделить]
  1. ext.calibrateByScale('in', 0.01)

То, что нужно! Теперь давайте посмотрим модель, где дюймовый куб в STL представлен уже с размерами 1x1x1:

Чтобы перевести в дюймы нужно умножать текущее значение на 0,0254:

Код - JavaScript: [Выделить]
  1. ext.sharedMeasureConfig.units = "in"
  2. ext.calibrateByScale('in', 0.0254)

Результат:

Если Вы хотите вносить изменения сразу после загрузки модели, то это можно сделать с помощью подписки на событие загрузки extension-а:

Код - JavaScript: [Выделить]
  1. const onExtensionLoaded = (e) => {
  2.  
  3.   if (e.extensionId === 'Autodesk.Measure') {
  4.  
  5.     // customize the extension
  6.  
  7.     // no need to listen to this event anymore
  8.     viewer.removeEventListener(
  9.       Autodesk.Viewing.EXTENSION_LOADED_EVENT,
  10.       onExtensionLoaded)
  11.   }
  12. }
  13.  
  14. viewer.addEventListener(
  15.   Autodesk.Viewing.EXTENSION_LOADED_EVENT,
  16.   onExtensionLoaded)
  17.  
  18. viewer.start()

Источник: https://forge.autodesk.com/blog/calibrate-measure-tool-other-units

Автор перевода: Александр Игнатович

Обсуждение: http://adn-cis.org/forum/index.php?topic=

Опубликовано 30.04.2019