При выполнении перемещения или поворота модель возвращается к своему первоначальному масштабу

#autodesk-forge #autodesk-viewer

Вопрос:

Я использовал эту meters опцию при загрузке модели. И хотите переместить модель здания с помощью setplacementтрансформации. Все прошло хорошо для моей модели, которая находится в .skp формате. Но кажется , что когда я пытаюсь переместить модель в другой формат, например .rvt , модель возвращается к исходному размеру. Это можно прояснить, посмотрев на сравнение сетки на сцене. Как это могло случиться ?

Файл в формате SKP, перенесен и все в порядке

введите описание изображения здесь

 // Option viewer  .loadDocumentNode(doc, viewables, {  applyScaling: { to: "meters" },  globalOffset: { x: 0, y: 0, z: 0 },  keepCurrentModels: true,  })   this.translation = new THREE.Matrix4().makeTranslation(  this.valueX,  this.valueY,  this.valueZ  );  const angleRadian = CoordinateConverter.degreeToRadian(this.valueRot);  let rotate = new THREE.Matrix4().makeRotationZ(angleRadian);  this.viewer.model.setPlacementTransform(  this.translation.multiply(rotate)  );  

Ответ №1:

Я верю, что происходит вот что:

  • Когда вы загружаете файл *.skp, в нем уже используются метры в качестве единиц измерения, поэтому программа просмотра никоим образом не изменяет модель.
  • Когда вы загружаете файл *.rvt (в котором обычно используются футы в качестве единиц измерения), средство просмотра применит соответствующий масштаб к преобразованию размещения модели, поэтому, когда вы позже переопределите преобразование размещения своей собственной матрицей, вы в основном удаляете коэффициент масштабирования.

Чтобы решить эту проблему, я бы предложил применить любое пользовательское преобразование к существующему преобразованию размещения вместо его переопределения.

Комментарии:

1.Привет, Петр, Да, ты прав. и я стараюсь использовать ваше предложение. Я в основном хочу ввести номер, предназначенный для местоположения позиции. Так что с вашим предложением я не могу вернуться на свою прежнюю должность const xform = this.viewer.model.getPlacementTransform().clone(); xform.multiply(translation); xform.multiply(rotation); this.viewer.model.setPlacementTransform(xform);

2. Этого может быть недостаточно. Если модель уже перемещена куда-то в сторону от источника, применение любого масштаба или поворота также повлияет на ее положение. Вероятно, вам сначала потребуется применить обратное исходному преобразованию или, по крайней мере, его компонент преобразования (чтобы переместить объект обратно в исходное состояние), затем применить пользовательский масштаб и/или поворот, а затем повторно применить исходное преобразование.