Сообщество программистов Autodesk в СНГ

ADN Club => Inventor API => Тема начата: Vladislav от 18-05-2020, 14:28:08

Название: Создание элементов с произвольной геометрией
Отправлено: Vladislav от 18-05-2020, 14:28:08
Добрый день!
Есть ли возможность, используя Inventor API создавать элементы с геометрией,
представляющей собой обычный меш (сетку вершин и треугольников)?
Если есть, то как это сделать?
Благодарю за информацию.
Название: Re: Создание элементов с произвольной геометрией
Отправлено: mikazakov от 18-05-2020, 20:46:07
Подразумеваю, что нужно SurfaceBody.CalculateFacets?
Вот скриншот из встроенного хэлпа

(https://i.postimg.cc/xNDLCxxC/1.png) (https://postimg.cc/xNDLCxxC)
Название: Re: Создание элементов с произвольной геометрией
Отправлено: Vladislav от 18-05-2020, 21:23:06
Не совсем.
А могу ли я создать SurfaceBody со своими треугольниками, загрузив их, например, из файла?
Название: Re: Создание элементов с произвольной геометрией
Отправлено: mikazakov от 19-05-2020, 06:11:56
Для клиентской графики можно так сделать.
Только у неё есть один недостаток, она не сохраняется, поэтому её нужно воспроизводить при загрузки модели
вот пример из хэлпа, немного замудрёный правда
Извините, вам запрещён просмотр содержимого спойлеров.
Название: Re: Создание элементов с произвольной геометрией
Отправлено: Vladislav от 19-05-2020, 11:27:47
Спасибо большое.
 А почему не сохраняется? И нет никакой возможности включить
такие объекты в модель?
В Inventor API нет аналогов DirectShape и TesselatedShapeBuilder из Revit API?
Название: Re: Создание элементов с произвольной геометрией
Отправлено: mikazakov от 19-05-2020, 13:34:01
 А почему не сохраняется? И нет никакой возможности включить
такие объекты в модель?

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

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

Название: Re: Создание элементов с произвольной геометрией
Отправлено: Vladislav от 19-05-2020, 14:34:50
Нет.
Нужно сделать передачу готовых геометрических объектов из другой программы.
Там они хранятся в виде меша(сетка треугольников:вершины, индексы).
Но после этого результат нужно сохранить.
Также объекты могут храниться в виде SAT-данных.
Есть ли в API возможность загружать объекты из SAT-данных?
Название: Re: Создание элементов с произвольной геометрией
Отправлено: Александр Ривилис от 19-05-2020, 14:38:53
Есть ли в API возможность загружать объекты из SAT-данных?
https://modthemachine.typepad.com/my_weblog/2011/02/importing-non-native-models-into-inventor.html
Название: Re: Создание элементов с произвольной геометрией
Отправлено: mikazakov от 19-05-2020, 21:15:23
Есть ли в API возможность загружать объекты из SAT-данных?
Ну тут Александр уже дал ссылку. В хэлпе по API тоже есть пример импорта SAT файлов, там и комментарии есть дополнительно.
Название: Re: Создание элементов с произвольной геометрией
Отправлено: Vladislav от 19-05-2020, 22:38:02
Большое спасибо за информацию. Буду пробовать.
Посмотрю, что получится.
Название: Re: Создание элементов с произвольной геометрией
Отправлено: mikazakov от 20-05-2020, 05:54:55
Вот описание опций для импорта, а то в хэлпе их трудно найти:

(https://i.postimg.cc/bD64prMc/1.png) (https://postimg.cc/bD64prMc)
Название: Re: Создание элементов с произвольной геометрией
Отправлено: Vladislav от 20-05-2020, 15:10:30
Еще один вопрос.
А как поступить, если SAT-данные читаются не из файла на диске,
а из базы данных непосредственно в виде массива байтов?
Сохранять их в файл перед импортом для всех объектов будет очень долго.
Объектов может быть достаточно много.
Спасибо.
Название: Re: Создание элементов с произвольной геометрией
Отправлено: Александр Ривилис от 20-05-2020, 15:15:45
Сохранять их в файл перед импортом для всех объектов будет очень долго.
Это уже проверено? Думаю, что задержка в этой операции будет минимальной из всех задержек, которые возникнут при операции импорта. В любом случае я не вижу средств для чтения из потока байт.
Название: Re: Создание элементов с произвольной геометрией
Отправлено: Vladislav от 28-05-2020, 15:26:04
Добрый день!
Импорт из 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?
Спасибо за информацию.
Название: Re: Создание элементов с произвольной геометрией
Отправлено: mikazakov от 28-05-2020, 17:11:31
Как назначить цвет импортированным 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.  

(https://i.postimg.cc/7JDY1JGh/1.png) (https://postimg.cc/7JDY1JGh)
Название: Re: Создание элементов с произвольной геометрией
Отправлено: Vladislav от 31-05-2020, 16:03:34
Добрый день! Делаю по аналогии
Код - 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);            
  11.        
  12.             //Get definition of current document    
  13.             PartComponentDefinition PartDef = doc.ComponentDefinition;    
  14.             PartFeatures Features = PartDef.Features;
  15.             NonParametricBaseFeatureDefinition NPFD = Features.NonParametricBaseFeatures.CreateDefinition();
  16.  
  17.             //Назначение цвета
  18.             if (!IsNullColor) {
  19.                 //Create the ClientGraphics object.
  20.                 ClientGraphics oClientGraphics = PartDef.ClientGraphicsCollection.Add("Sample3DGraphicsID");
  21.  
  22.                 Color color = m_Application.TransientObjects.CreateColor(0, 0, 255);
  23.                
  24.                 //Create a new graphics node within the client graphics objects.    
  25.                 GraphicsNode oSurfacesNode = oClientGraphics.AddNode(SBs.Count);
  26.                 foreach (SurfaceBody SB in SBs)
  27.                 {
  28.                     // Create client graphics based on the transient body    
  29.                     SurfaceGraphics oSurfaceGraphics = oSurfacesNode.AddSurfaceGraphics(SB);
  30.                     oSurfaceGraphics.Color = color;
  31.                 }                                
  32.             }
  33.  
  34.             //Assign the ObjectCollection to the definition.
  35.             NPFD.BRepEntities = ObjColl;            
  36.  
  37.             //Set the output type
  38.             NPFD.OutputType = BaseFeatureOutputTypeEnum.kSolidOutputType;
  39.  
  40.             //Create the NonParametricBaseFeature using the definition.
  41.             PartDef.Features.NonParametricBaseFeatures.AddByDefinition(NPFD);
Но цвет почему-то не назначается. IsNullColor = false.
Правильно ли я назначаю цвет в случае нескольких SurfaceBody?
Спасибо.
Название: Re: Создание элементов с произвольной геометрией
Отправлено: mikazakov от 31-05-2020, 17:55:37
Выложите тестовый импортируемый файл и "причёсанный" макрос на VBA (что б в макросе ничего лишнего).
Я посмотрю и если не разберусь то задам вопрос в девхэлп.
Название: Re: Создание элементов с произвольной геометрией
Отправлено: Vladislav от 02-06-2020, 22:28:42
А на C# не подойдет? Я просто на нем пишу.
Название: Re: Создание элементов с произвольной геометрией
Отправлено: mikazakov от 03-06-2020, 05:05:30
А на C# не подойдет? Я просто на нем пишу.
С VBA удобнее разбираться с проблемой, лучше видно состояние объектов. Плюс будет сама проблема, а не кусок кода выдранный непонятно откуда.
Ни кто же не просит кучу кода конвертировать в ВБА, только саму проблему.
Да и если запрос делать в девхэлп там им тоже проще будет, по этим же причинам. И соответственно с большей вероятностью они что то позитивное скажут.
Название: Re: Создание элементов с произвольной геометрией
Отправлено: Vladislav от 08-06-2020, 22:21:00
Хорошо. Как освобожусь, попробую подготовить VBA.
Пока что переключился на другие задачи.