Создайте плоскость сечения, опирающуюся на один объект - PullRequest
0 голосов
/ 07 мая 2020

Мне нужно создать вертикальную секущую плоскость, опирающуюся на выбранный объект. Например, выбирая такой объект, как этот selected object

Мне нужно получить плоскость сечения, опирающуюся на самую длинную сторону объекта the section plane in place

Я использую программу просмотра версии 7.16, которая предлагает параметр «Плоскость сечения» при выборе правой кнопкой мыши, но работает некорректно. section plane option enter image description here

Я использую метод frags.getWordBounds, чтобы получить рамку "вокруг" объекта, и, используя небольшую тригонометрию, у меня есть рассчитал ориентацию, но я думаю, что это неправильный подход, потому что я не могу определить правильное направление объекта:

+-------------+
|.           *|
| .         * |
|  .       *  |
|   .     *   |
|    .   *    |
|     . *     | is my object the dot or the asterisk?
|      *      |
|     * .     |
|    *   .    |
|   *     .   |
|  *       .  |
| *         . |
|*           .|
+-------------+

Заранее спасибо за любую поддержку.

Ответы [ 2 ]

0 голосов
/ 15 мая 2020

У меня была аналогичная проблема при создании собственного инструмента плоскости сечения. Здесь вы можете увидеть вопрос: Получение глобального нормального состояния из hitTest.face.normal

Не уверен, создаете ли вы свою собственную, но если вы обнаружите, что для меня были важны две вещи:

onst normal = this.hitTest.face.normal.clone();
normal.transformDirection( this.hitTest.object.matrixWorld );

и

const currentFragId = this.hitTest.fragId;
const renderProxy = this.viewer.impl.getRenderProxy(this.viewer.model,currentFragId);

Первый фрагмент получает нормальный мир из пространства объектов в пространство мира, второй фрагмент, кажется, пересчитывает фрагмент, полученный в hitTest.

0 голосов
/ 08 мая 2020

Я использую программу просмотра версии 7.16, которая предлагает параметр «Плоскость сечения» при выборе правой кнопкой мыши, но работает некорректно.

Спасибо, что сообщили нам о проблеме - Возможно ли для вас загрузить модель, вызывающую нарушение, на онлайн-диск и оставить ссылку для загрузки на forge. help@autodesk.com с небольшим дополнительным описанием того, как это не работал правильно, поэтому мы можем попытаться исправить это?

И похоже, что вы пытаетесь реализовать что-то свое, чтобы заменить параметр секционирования, почему бы не фиксировать события щелчка мыши на холсте, реализовав свой собственный инструмент и go отсюда для расчета секущих плоскостей с использованием результатов проверки удара? Что-то вроде:

 const hitTest = viewer.hitTest(event.x,event.y)
 const SectionTool = viewer.getExtension("Autodesk.Section")
 SectionTool.activate()
 SectionTool.tool.setSectionPlane(hitTest.face.normal, hitTest.point)
...