Создание элементов с произвольной геометрией

Автор Тема: Создание элементов с произвольной геометрией  (Прочитано 6453 раз)

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

Оффлайн VladislavАвтор темы

  • ADN OPEN
  • ***
  • Сообщений: 210
  • Карма: 0
Добрый день!
Есть ли возможность, используя Inventor API создавать элементы с геометрией,
представляющей собой обычный меш (сетку вершин и треугольников)?
Если есть, то как это сделать?
Благодарю за информацию.

Оффлайн mikazakov

  • ADN
  • *
  • Сообщений: 751
  • Карма: 195
  • Skype: mikazakov@mail.ru
Подразумеваю, что нужно SurfaceBody.CalculateFacets?
Вот скриншот из встроенного хэлпа



Оффлайн VladislavАвтор темы

  • ADN OPEN
  • ***
  • Сообщений: 210
  • Карма: 0
Не совсем.
А могу ли я создать SurfaceBody со своими треугольниками, загрузив их, например, из файла?

Оффлайн mikazakov

  • ADN
  • *
  • Сообщений: 751
  • Карма: 195
  • Skype: mikazakov@mail.ru
Для клиентской графики можно так сделать.
Только у неё есть один недостаток, она не сохраняется, поэтому её нужно воспроизводить при загрузки модели
вот пример из хэлпа, немного замудрёный правда
Извините, вам запрещён просмотр содержимого спойлеров.

Оффлайн VladislavАвтор темы

  • ADN OPEN
  • ***
  • Сообщений: 210
  • Карма: 0
Спасибо большое.
 А почему не сохраняется? И нет никакой возможности включить
такие объекты в модель?
В Inventor API нет аналогов DirectShape и TesselatedShapeBuilder из Revit API?

Оффлайн mikazakov

  • ADN
  • *
  • Сообщений: 751
  • Карма: 195
  • Skype: mikazakov@mail.ru
 А почему не сохраняется? И нет никакой возможности включить
такие объекты в модель?

Ну потому что клиентская графика используется как вспомогательная графика, только для визуализации и создания интерфейсов.

Я так понимаю нужно сделать триангуляция облаку точек?


Оффлайн VladislavАвтор темы

  • ADN OPEN
  • ***
  • Сообщений: 210
  • Карма: 0
Нет.
Нужно сделать передачу готовых геометрических объектов из другой программы.
Там они хранятся в виде меша(сетка треугольников:вершины, индексы).
Но после этого результат нужно сохранить.
Также объекты могут храниться в виде SAT-данных.
Есть ли в API возможность загружать объекты из SAT-данных?

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн mikazakov

  • ADN
  • *
  • Сообщений: 751
  • Карма: 195
  • Skype: mikazakov@mail.ru
Есть ли в API возможность загружать объекты из SAT-данных?
Ну тут Александр уже дал ссылку. В хэлпе по API тоже есть пример импорта SAT файлов, там и комментарии есть дополнительно.

Оффлайн VladislavАвтор темы

  • ADN OPEN
  • ***
  • Сообщений: 210
  • Карма: 0
Большое спасибо за информацию. Буду пробовать.
Посмотрю, что получится.

Оффлайн mikazakov

  • ADN
  • *
  • Сообщений: 751
  • Карма: 195
  • Skype: mikazakov@mail.ru
Вот описание опций для импорта, а то в хэлпе их трудно найти:



Оффлайн VladislavАвтор темы

  • ADN OPEN
  • ***
  • Сообщений: 210
  • Карма: 0
Еще один вопрос.
А как поступить, если SAT-данные читаются не из файла на диске,
а из базы данных непосредственно в виде массива байтов?
Сохранять их в файл перед импортом для всех объектов будет очень долго.
Объектов может быть достаточно много.
Спасибо.

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Сохранять их в файл перед импортом для всех объектов будет очень долго.
Это уже проверено? Думаю, что задержка в этой операции будет минимальной из всех задержек, которые возникнут при операции импорта. В любом случае я не вижу средств для чтения из потока байт.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн VladislavАвтор темы

  • ADN OPEN
  • ***
  • Сообщений: 210
  • Карма: 0
Добрый день!
Импорт из SAT, вроде, стабильно работает. Но в продолжение темы возник такой вопрос.
Есть фрагмент кода из примера
Код - C# [Выбрать]
  1.             //Get transient Brep            
  2.             TransientBRep Brep = m_Application.TransientBRep;
  3.  
  4.             //Get the surfacebodies    
  5.             SurfaceBodies SBs = Brep.ReadFromFile(fileName);            
  6.            
  7.             TransientObjects TransObjs = m_Application.TransientObjects;
  8.             ObjectCollection ObjColl = TransObjs.CreateObjectCollection();
  9.             //Add each surfacebody of imported file to ObjectCollection
  10.             foreach (SurfaceBody SB in SBs) ObjColl.Add(SB);          
Как назначить цвет импортированным SurfaceBody?
Спасибо за информацию.

Оффлайн mikazakov

  • ADN
  • *
  • Сообщений: 751
  • Карма: 195
  • Skype: mikazakov@mail.ru
Как назначить цвет импортированным SurfaceBody?
Будет синим цветом:
Код - Visual Basic [Выбрать]
  1. Public Sub ClientGraphicsFromSATFileBody()
  2.     ' Set a reference to the TransientBRep object
  3.    Dim oTransientBRep As TransientBRep
  4.     Set oTransientBRep = ThisApplication.TransientBRep
  5.  
  6.     ' Get the first body from the specified sat file
  7.    Dim oBody As SurfaceBody
  8.     Set oBody = oTransientBRep.ReadFromFile("D:\123.sat").Item(1)
  9. 'oBody.Faces(1).
  10.  
  11.     ' Create a new Part document.
  12.    Dim oPartDoc As PartDocument
  13.     Set oPartDoc = ThisApplication.Documents.Add(kPartDocumentObject)
  14.  
  15.     ' Set a reference to the compdef.
  16.    Dim oCompDef As PartComponentDefinition
  17.     Set oCompDef = oPartDoc.ComponentDefinition
  18.  
  19.     ' Create the ClientGraphics object.
  20.    Dim oClientGraphics As ClientGraphics
  21.     Set oClientGraphics = oCompDef.ClientGraphicsCollection.Add("Sample3DGraphicsID")
  22.  
  23.     ' Create a new graphics node within the client graphics objects.
  24.    Dim oSurfacesNode As GraphicsNode
  25.     Set oSurfacesNode = oClientGraphics.AddNode(1)
  26.  
  27.     ' Create client graphics based on the transient body
  28.    Dim oSurfaceGraphics As SurfaceGraphics
  29.     Set oSurfaceGraphics = oSurfacesNode.AddSurfaceGraphics(oBody)
  30.  
  31. Dim color As color: Set color = ThisApplication.TransientObjects.CreateColor(0, 0, 255)
  32. oSurfaceGraphics.color = color
  33.  
  34.     ' Update the view to see the resulting curves.
  35.    ThisApplication.ActiveView.Update
  36. End Sub
  37.