Сечение в NavisWorks

Автор Тема: Сечение в NavisWorks  (Прочитано 6817 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Леонид СеменовАвтор темы

  • ADN Club
  • Сообщений: 44
  • Карма: 2
  • Леонид Семенов. Ведущий инженер-программист
Сечение в NavisWorks
« : 14-07-2015, 07:39:00 »
Здравствуйте дорогие форумчане!
Мне нужно построить в NavisWorks сечение в виде прямоугольника через API.
Это вообще реализуемо или нет?

Или хотя бы сечение плоскостью, дальше я уже что-нибудь придумал бы

Оффлайн Виктор Чекалин

  • Administrator
  • *****
  • Сообщений: 694
  • Карма: 111
  • Skype: chekalin-v
Re: Сечение в NavisWorks
« Ответ #1 : 14-07-2015, 12:49:43 »
Leo_fmf, какое API интересует: .NET или COM?

С помощью COM я такое реализовывал. Поищу и дам пример.

Оффлайн Леонид СеменовАвтор темы

  • ADN Club
  • Сообщений: 44
  • Карма: 2
  • Леонид Семенов. Ведущий инженер-программист
Re: Сечение в NavisWorks
« Ответ #2 : 14-07-2015, 13:23:49 »
Виктор Чекалин, .NET или COM не имеет значения, главное нужно реализовать.
Постарайтесь пожалуйста найти.

Оффлайн Виктор Чекалин

  • Administrator
  • *****
  • Сообщений: 694
  • Карма: 111
  • Skype: chekalin-v
Re: Сечение в NavisWorks
« Ответ #3 : 14-07-2015, 13:46:53 »
Вот, нашел:
Код - Javascript [Выбрать]
  1.             function switchToPlanMode() {
  2.  
  3.                 var state = navisViewer.viewer.State;
  4.  
  5.                 var camera = state.CurrentView.ViewPoint.Camera;
  6.  
  7.                 cameraPosition = camera.Position.Copy();
  8.                 cameraRotation = camera.Rotation.Copy();
  9.  
  10.                 // create a geometry vector as the normal of section plane
  11.                 var sectionPlaneNormal = state.ObjectFactory(state.GetEnum("eObjectType_nwLUnitVec3f"), null, null);
  12.  
  13.                 sectionPlaneNormal.SetValue(0, 0, -1);
  14.  
  15.                 // create a geometry plane
  16.                 var sectionPlane = state.ObjectFactory(state.GetEnum("eObjectType_nwLPlane3f"), null, null);
  17.  
  18.                 //get collection of sectioning planes
  19.                 var clipColl = state.CurrentView.ClippingPlanes();
  20.  
  21.                 // get the count of current sectioning planes
  22.                 var planeCount = clipColl.Count + 1;
  23.  
  24.                 // create a new sectioning plane
  25.                 // it forces creation of planes up to this index.
  26.                 clipColl.CreatePlane(planeCount);
  27.  
  28.                 // get the last sectioning plane which are what we created
  29.                 var cliPlane = state.CurrentView.ClippingPlanes().Last();
  30.  
  31.                 //assign the geometry vector with the plane
  32.  
  33.                 var z = camera.Position.data3;
  34.  
  35.                 sectionPlane.SetValue(sectionPlaneNormal, -z);
  36.  
  37.                 // ask the sectioning plane uses the new geometry plane
  38.                 cliPlane.Plane = sectionPlane;
  39.  
  40.                 state.BeginEdit("Camera");
  41.  
  42.                 var x = camera.Position.data1;
  43.                 var y = camera.Position.data2;
  44.  
  45.                 var rotationVector =
  46.                      state.ObjectFactory(state.GetEnum("eObjectType_nwLUnitVec3f"), null, null);
  47.  
  48.                 rotationVector.SetValue(0, 0, -1);
  49.  
  50.                 camera.Rotation.SetValue(rotationVector, 0);
  51.  
  52.                 camera.Position.SetValue(x, y, z + 50);
  53.  
  54.                 // enable this sectioning plane
  55.                 cliPlane.Enabled = true;
  56.  
  57.  
  58.                 camera.Projection = state.GetEnum("eProjection_ORTHOGRAPHIC");
  59.  
  60.                 var viewPoint = state.CurrentView.ViewPoint;
  61.                 viewPoint.Viewer.CameraMode = state.GetEnum("eCameraMode_ThirdPerson");
  62.  
  63.                 state.EndEdit();
  64.  
  65.                 //state.CurrentView.ViewPoint.Paradigm = state.GetEnum("eParadigm_PAN_LOCAL");
  66.             };

Идея заключалась с следующем. Берется текущая позиция камеры и по этой точке делается сечение по плоскости XZ. Верхняя часть при этом отсекается, нижняя остается видимой.

Думаю это должно вам помочь.

Оффлайн Леонид СеменовАвтор темы

  • ADN Club
  • Сообщений: 44
  • Карма: 2
  • Леонид Семенов. Ведущий инженер-программист
Re: Сечение в NavisWorks
« Ответ #4 : 14-07-2015, 14:58:29 »
Спасибо большое :), сейчас попробую разобраться и внедрить к себе в код

Оффлайн Леонид СеменовАвтор темы

  • ADN Club
  • Сообщений: 44
  • Карма: 2
  • Леонид Семенов. Ведущий инженер-программист
Re: Сечение в NavisWorks
« Ответ #5 : 12-08-2015, 10:49:57 »
Виктор Чекалин, Спасибо за помощь, ваш пример помог мне решить проблему