Преобразование плоскостей сечения navisworks в кузницу

Я делаю интеграцию кузницы для Navisworks и не могу понять, как перенести плоскости сечения из Navisworks в Forge. Я следовал инструкциям в этот пост в блоге, чтобы установить секущие плоскости, но я не вижу, чтобы они отображались в средстве просмотра. Чтобы установить плоскости, я извлекаю SectionData из Navisworks ActiveView и извлекаю вектор нормали и расстояние из возвращенного объекта json, а затем передаю данные через параметры URL-адреса моему средству просмотра forge. Код ниже:

                  //set cut planes
                    if (planes.length > 0)
                    {
                        var three_planes = [];

                        var i;
                        for (i = 0; i < planes.length; i += 4)
                        {
                            var a = String(planes[i]);
                            var b = String(planes[i+1]);
                            var c = String(planes[i+2]);
                            var distance = String(planes[i+3]);
                            if (a.includes("E") || a.includes("e"))
                            {
                                a = "0.00";
                            }

                            if (b.includes("E") || b.includes("e"))
                            {
                                b = "0.00";
                            }

                            if (c.includes("E") || c.includes("e"))
                            {
                                c = "0.00";
                            }

                            if (distance.includes("E") || distance.includes("e"))
                            {
                                distance = "0.00";
                            }

                            var afloat = parseFloat(a);
                            var bfloat = parseFloat(b);
                            var cfloat = parseFloat(c);
                            var distancefloat = parseFloat(distance);
                             // create a THREE.Vector4
                              var vector4 = new THREE.Vector4(
                                afloat, bfloat,
                                cfloat, distancefloat);

                              three_planes.push(vector4);
                        }

                       viewer.setCutPlanes(three_planes);
                    }

Состояние просмотра показывает, что самолеты есть, но не может их видеть. Требуются ли какие-либо специальные преобразования координат, чтобы это работало?

Обновлено: я попробовал решение, приведенное ниже, но я все еще не вижу плоскости разреза в Forge. Я убедился, что переменные плоскости разреза из Navis (afloat, bfloat, cfloat, Distancefloat) вводятся правильно. Мой измененный код ниже. Любая идея, что я могу делать неправильно?

 //set cut planes
                        if (planes.length > 0)
                        {
                            var three_planes = [];

                            var i;
                            for (i = 0; i < planes.length; i += 4)
                            {
                                var a = String(planes[i]);
                                var b = String(planes[i+1]);
                                var c = String(planes[i+2]);
                                var distance = String(planes[i+3]);
                                if (a.includes("E") || a.includes("e"))
                                {
                                    a = "0.00";
                                }

                                if (b.includes("E") || b.includes("e"))
                                {
                                    b = "0.00";
                                }

                                if (c.includes("E") || c.includes("e"))
                                {
                                    c = "0.00";
                                }

                                if (distance.includes("E") || distance.includes("e"))
                                {
                                    distance = "0.00";
                                }

                                var afloat = parseFloat(a);
                                var bfloat = parseFloat(b);
                                var cfloat = parseFloat(c);
                                var distancefloat = parseFloat(distance);

                                var forge_model_offset = NOP_VIEWER.model.getData().globalOffset;

                                //calculate exact distance in Forge Viewer
                                var dis_in_forge = (forge_model_offset.x * afloat + forge_model_offset.y * bfloat + forge_model_offset.z * cfloat) - 
                                                distancefloat;


                                //build the plane for Forge Viewer sectioning.

                                var vector4 = new THREE.Vector4(-afloat, -bfloat, -cfloat, -dis_in_forge);
                                three_planes.push(vector4);
                            }

                           NOP_VIEWER.setCutPlanes(three_planes);
                        }

Обновлено еще раз: Получил работу. Размещение здесь, если кто-то столкнется с этой проблемой. setCutPlanes необходимо вызывать в конце процесса загрузки. Мой код изначально вызывал его из onModelLoadSuccess, что не сработало. Но когда я переместил его в событие TEXTURES_LOADED, все заработало нормально.

Сомневаюсь, что это проблема конкретной модели. Не могли бы вы поделиться демонстрационной моделью Navisworks? если он содержит конфиденциальную информацию, отправьте его по адресу [email protected] (ограничение размера файла 1 МБ, поэтому установите облачный драйвер и поделитесь с нами ссылкой для скачивания). Кроме того, будет полезен снимок Navisworks, на котором показано, какое сечение (и точку обзора) вы хотите увидеть.

Xiaodong Liang 11.04.2019 03:38

Я послал по электронной почте. Если бы я мог получить видимые плоскости сечения, это было бы хорошо. Я делал разрез прямо через здание, чтобы проверить. Спасибо.

jacobmlovelace 11.04.2019 15:12
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
2
223
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я провел некоторые исследования и нашел некоторые хитрости в отображении секущей плоскости между Navisworks и Forge Viewer. Это блог на тему: https://forge.autodesk.com/blog/map-sectioning-plane-navisworks-forge-viewer-2

основной код

//get offset of the model
let forge_model_offset = NOP_VIEWER.model.getData().globalOffset

 // assume the param of Navisworks clip plane is available 
//I copied from the XML file
let navis_clip_plane = 
   {x:0.1368226246,y:0.4334009763,z:0.8907542664,d:886.2418151801}

//calculate exact distance in Forge Viewer
dis_in_forge =( forge_model_offset.x * navis_clip_plane.x  +   
                    forge_model_offset.y * navis_clip_plane.y + 
                    forge_model_offset.z * navis_clip_plane.z) - 
                navis_clip_plane.d

//build the plane for Forge Viewer sectioning.
cutplanes = [
new THREE.Vector4( -navis_clip_plane.x, 
                   -navis_clip_plane.y, 
                   - navis_clip_plane.z, -dis_in_forge) 
  ];

 //apply the plane to sectioning
 NOP_VIEWER.setCutPlanes(cutplanes)

Другие вопросы по теме