Перестал работать импорт SAT файлов через API

Автор Тема: Перестал работать импорт SAT файлов через API  (Прочитано 9987 раз)

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

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

  • ADN OPEN
  • ***
  • Сообщений: 210
  • Карма: 0
Добрый день! В моём плагине перестал работать импорт SAT-файлов.
До этого всё работало хорошо. Плагин под Inventor 2019.
Никаких обновлений на него не ставил.
Раньше похожая проблема решалась удалением папок
C:\Users\Владислав\AppData\Roaming\Autodesk\Inventor 2019 и
C:\Users\Владислав\AppData\Local\Autodesk\Inventor 2019.
Сейчас не помогает.
Аварийный дамп прилагаю.
Спасибо.

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

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

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

  • ADN OPEN
  • ***
  • Сообщений: 210
  • Карма: 0
Нет, rd.dll  не мой. Это библиотека Инвентор.
И ошибка там в функции API Инвентора.

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

  • Administrator
  • *****
  • Сообщений: 13830
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Код - XML [Выбрать]
  1. <BugAlerts>
  2.  <BugAlertTotal logged="2"/>
  3.  <BugAlert message="API method NonParametricBaseFeatures.AddByDefinition called by Add-in CadLibToInventor caught an unhandled  exception. Memory may have been left in an inconsistent state."/>
  4.  <BugAlert message="API method caught an unhandled exception. Memory may have been left in an inconsistent state."/>
  5. </BugAlerts>
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN OPEN
  • ***
  • Сообщений: 210
  • Карма: 0
А где Инвентор хранит информацию о последних открытых документах?
Хочу попробовать вычистить эту папку.
Самое интересное - что раньше всё прекрасно работало.

Оффлайн mikazakov

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

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

  • Administrator
  • *****
  • Сообщений: 13830
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
А где Инвентор хранит информацию о последних открытых документах?
А причем это здесь? Информация хранится в реестре:


Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN OPEN
  • ***
  • Сообщений: 210
  • Карма: 0
Я подумал, что я какие-то настройки удалить смогу.
Раньше тоже были проблемы похожие, но удаление папок, которые
я указал выше, помогало. Сейчас - нет.
Попробую Инвентор переустановить.

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

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

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

  • Administrator
  • *****
  • Сообщений: 13830
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
А нет ли в Инвенторе какого-то ограничения на размер импортируемого SAT-файла?
Просто если я разбиваю ту же самую модель на большее количество  SAT и потом
импортирую их, то всё работает.
Официальных ограничений нет.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн mikazakov

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

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

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

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

  • ADN OPEN
  • ***
  • Сообщений: 210
  • Карма: 0
 Да, именно в импорте.
Вот код, который производит импорт
Код - 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.             //Assign the ObjectCollection to the definition.
  18.             NPFD.BRepEntities = ObjColl;            
  19.  
  20.             //Set the output type
  21.             NPFD.OutputType = BaseFeatureOutputTypeEnum.kSolidOutputType;
  22.  
  23.             //Create the NonParametricBaseFeature using the definition.
  24.             PartDef.Features.NonParametricBaseFeatures.AddByDefinition(NPFD);

Также прилагаю SAT-файлы, на которых Инвентор падает при импорте.
При импорте через меню все хорошо. Импорт происходит даже с цветами и сразу в виде сборок.
« Последнее редактирование: 10-07-2020, 17:02:12 от Vladislav »

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

  • ADN OPEN
  • ***
  • Сообщений: 210
  • Карма: 0
А вот SAT-файлы той же модели подетально.
Их этот код прекрасно импортирует

Оффлайн mikazakov

  • ADN
  • *
  • Сообщений: 751
  • Карма: 195
  • Skype: mikazakov@mail.ru
На сколько точно я воспроизвел код ?:
Код - C# [Выбрать]
  1.     static void Main(string[] args)
  2.     {
  3.      
  4.         Application m_Application=getInventorApplication();
  5.  
  6.         PartDocument doc = m_Application.ActiveDocument as PartDocument;
  7.         TransientBRep Brep = m_Application.TransientBRep;
  8.  
  9.         //Get the surfacebodies    
  10.         SurfaceBodies SBs = Brep.ReadFromFile(@"C:\Users\mikaz\Desktop\Новая папка\Stapler-2.SAT");
  11.  
  12.         TransientObjects TransObjs = m_Application.TransientObjects;
  13.         ObjectCollection ObjColl = TransObjs.CreateObjectCollection();
  14.         //Add each surfacebody of imported file to ObjectCollection
  15.         foreach (SurfaceBody SB in SBs) ObjColl.Add(SB);
  16.  
  17.         //Get definition of current document    
  18.         PartComponentDefinition PartDef = doc.ComponentDefinition;
  19.         PartFeatures Features = PartDef.Features;
  20.         NonParametricBaseFeatureDefinition NPFD = Features.NonParametricBaseFeatures.CreateDefinition();
  21.  
  22.         //Assign the ObjectCollection to the definition.
  23.         NPFD.BRepEntities = ObjColl;
  24.  
  25.         //Set the output type
  26.         NPFD.OutputType = BaseFeatureOutputTypeEnum.kSolidOutputType;
  27.  
  28.         //Create the NonParametricBaseFeature using the definition.
  29.         PartDef.Features.NonParametricBaseFeatures.AddByDefinition(NPFD);
  30.  
  31.  
  32.         return;}

Я пока вижу что в строке
PartDef.Features.NonParametricBaseFeatures.AddByDefinition(NPFD);
Инвентор выпадает

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

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

Оффлайн mikazakov

  • ADN
  • *
  • Сообщений: 751
  • Карма: 195
  • Skype: mikazakov@mail.ru
Думаю что тебе следует переадресовать этот вопрос в ADN DevHelp - возможно это баг Inventor.
ну если приведенный мной код Vladislav подтвердит, то я так и сделаю.

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

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

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

  • ADN OPEN
  • ***
  • Сообщений: 210
  • Карма: 0
Да, код воспроизведен верно.
У Вас тоже падение Инвентор на файлах Stapler-1 и Stapler-2?
И нормально работает на других?

Оффлайн mikazakov

  • ADN
  • *
  • Сообщений: 751
  • Карма: 195
  • Skype: mikazakov@mail.ru
У Вас тоже падение Инвентор на файлах Stapler-1 и Stapler-2?
И нормально работает на других?
Да,
написал в тех. поддержку. Но даже если поправят глюк то не скоро.

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

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

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

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

Оффлайн mikazakov

  • ADN
  • *
  • Сообщений: 751
  • Карма: 195
  • Skype: mikazakov@mail.ru
А нет ли каких-то альтернативных (по отношению к приведенному коду)
путей импорта или вставки SAT-файла в деталь или сборку через API?
Порылся в хэлпе и нашел еще два способа импорта. Через использования транслятора и через DataIO.  На скрине, внизу сообщения, я нарисовал как можно посмотреть дополнительную инфу.

Попробовал импортировать через транслятор, вроде импортирует. Там только нужно нужные опции подобрать при трансляции из хелпа со страницы Translator Options

Код - Visual Basic [Выбрать]
  1. Sub ImportSATFunc()
  2.     ' Set SAT translator's CLSID and STL file name.
  3.    Dim strCLSID As String
  4.     Dim strFileName As String
  5.     strCLSld = "{89162634-02B6-11D5-8E80-0010B541CD80}"
  6.     strFileName = "D:\Stapler-1.SAT"
  7.      
  8.     Dim oAddIns As ApplicationAddIns
  9.     Set oAddIns = ThisApplication.ApplicationAddIns
  10.    
  11.     ' Find the SAT translator, get the CLSID and activate it.
  12.    Dim oTransAddIn As TranslatorAddIn
  13.     Set oTransAddIn = oAddIns.ItemById(strCLSld)
  14.     'oTransAddIn.Activate
  15.    
  16.     ' Get the transient object and take it as a factory to produce other objects
  17.    Dim transientObj As TransientObjects
  18.     Set transientObj = ThisApplication.TransientObjects
  19.    
  20.     ' Prepare the first parameter for Open(), the file name
  21.    Dim file As DataMedium
  22.     Set file = transientObj.CreateDataMedium
  23.     file.FileName = strFileName
  24.    
  25.     ' Prepare the second parameter for Open(), the open type.
  26.    Dim context As TranslationContext
  27.     Set context = transientObj.CreateTranslationContext
  28.     context.Type = kDataDropIOMechanism
  29.    
  30.     ' Prepare the 3rd parameter for Open(), the options.
  31.    Dim options As NameValueMap
  32.     Set options = transientObj.CreateNameValueMap
  33.     options.Value("SaveComponentDuringLoad") = False
  34.     options.Value("SaveLocationIndex") = 0
  35.     options.Value("ComponentDestFolder") = ""
  36.     options.Value("ImportUnit") = 1
  37.     options.Value("ImportColor") = True
  38.     options.Value("ImportColorIndex") = 0
  39.    
  40.     ' Prepare the fourth parameter for Open(), the final document.
  41.    Dim sourceObj As Object
  42.    
  43.     ' Open the SAT file.
  44.    oTransAddIn.Open file, context, options, sourceObj
  45. End Sub




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

  • ADN OPEN
  • ***
  • Сообщений: 210
  • Карма: 0
Большое спасибо.
А sourceObj должен представлять собой AssemblyDocument или PartDocument?
Или как его вставлять далее в модель?
Благодарю за информацию.

Оффлайн mikazakov

  • ADN
  • *
  • Сообщений: 751
  • Карма: 195
  • Skype: mikazakov@mail.ru
А sourceObj должен представлять собой AssemblyDocument или PartDocument?
Ну в этом нетрудно убедится просто потестив код.

Или как его вставлять далее в модель?
копируем в буфер обмена, берем нужную сборку и вставляем туда, пример из хэлпа правда для скетча

Код - Visual Basic [Выбрать]
  1. Public Sub CopySketch()
  2.     ' Set a reference to the active document.
  3.    ' This assumes a part document is active.
  4.    Dim oDoc As PartDocument
  5.     Set oDoc = ThisApplication.ActiveDocument
  6.    
  7.     ' Set a reference to the component definition.
  8.    Dim oDef As PartComponentDefinition
  9.     Set oDef = oDoc.ComponentDefinition
  10.    
  11.     ' Set a reference to the first sketch in the part.
  12.    Dim oSketchToCopy As PlanarSketch
  13.     Set oSketchToCopy = oDef.Sketches.Item(1)
  14.    
  15.     ' Select the sketch to copy.
  16.    Call oDoc.SelectSet.Clear
  17.     Call oDoc.SelectSet.Select(oSketchToCopy)
  18.    
  19.     ' Execute the copy command.
  20.    Dim oCopyControlDef As ControlDefinition
  21.     Set oCopyControlDef = ThisApplication.CommandManager.ControlDefinitions.Item("AppCopyCmd")
  22.     oCopyControlDef.Execute
  23.    
  24.     ' Create a new sketch on the XY plane.
  25.    Dim oNewSketch As PlanarSketch
  26.     Set oNewSketch = oDef.Sketches.Add(oDef.WorkPlanes.Item(3))
  27.    
  28.     ' Put the sketch in edit mode.
  29.    oNewSketch.Edit
  30.    
  31.     ' Execute the paste command.
  32.    Dim oPasteControlDef As ControlDefinition
  33.     Set oPasteControlDef = ThisApplication.CommandManager.ControlDefinitions.Item("AppPasteCmd")
  34.     oPasteControlDef.Execute
  35.    
  36.     Dim oSketchEnts As ObjectCollection
  37.     Set oSketchEnts = ThisApplication.TransientObjects.CreateObjectCollection
  38.    
  39.     Dim oSketchEnt As SketchEntity
  40.     For Each oSketchEnt In oNewSketch.SketchEntities
  41.         Call oSketchEnts.Add(oSketchEnt)
  42.     Next
  43.    
  44.     ' Translate all sketch entities in the new sketch.
  45.    Call oNewSketch.MoveSketchObjects(oSketchEnts, ThisApplication.TransientGeometry.CreateVector2d(1, 0))
  46. End Sub

По описанию хэлпа с буфером можно работать через CommandManager.PostPrivateEvent

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

  • ADN OPEN
  • ***
  • Сообщений: 210
  • Карма: 0
Почему-то у меня при импорте создается файл Stapler-1.ipt.
Но он пустой...
Соответственно, если я выполняю код
Код - C# [Выбрать]
  1.             doc.SelectSet.Clear();
  2.             doc.SelectSet.Select(sourceObj);
  3.  
  4.             //Execute the copy command.    
  5.             ControlDefinition oCopyControlDef = m_inventorApplication.CommandManager.ControlDefinitions["AppCopyCmd"];
  6.             oCopyControlDef.Execute();
  7.  
  8.             //Execute the paste command.    
  9.             ControlDefinition oPasteControlDef = m_inventorApplication.CommandManager.ControlDefinitions["AppPasteCmd"];
  10.             oPasteControlDef.Execute();
тоже ничего не происходит.

Оффлайн mikazakov

  • ADN
  • *
  • Сообщений: 751
  • Карма: 195
  • Skype: mikazakov@mail.ru
тоже ничего не происходит.
Вот на этом макросе в инвенторе 2021 все нормально копируется:
Код - Visual Basic [Выбрать]
  1. Sub cc()
  2. Dim doc As Document: Set doc = ThisApplication.ActiveDocument
  3.  
  4.     'Execute the copy command.
  5.     Dim oCopyControlDef As ControlDefinition: Set oCopyControlDef = ThisApplication.CommandManager.ControlDefinitions("AppCopyCmd")
  6.      oCopyControlDef.Execute
  7.  
  8.      'Execute the paste command.
  9.     Dim oPasteControlDef As ControlDefinition: Set oPasteControlDef = ThisApplication.CommandManager.ControlDefinitions("AppPasteCmd")
  10.      oPasteControlDef.Execute
  11. End Sub
  12.  




Может просто одна модель точно легла на другую и её не видно?

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

  • ADN OPEN
  • ***
  • Сообщений: 210
  • Карма: 0
Что-то я совсем запутался... :-\
Я правильно понимаю, что при выполнении этого кода
должен создаваться ipt-файл, в котором должна появиться импортированная sat-модель?
Код - C# [Выбрать]
  1.             String strCLSID = "";
  2.             String strFileName = "";
  3.             strCLSID = "{89162634-02B6-11D5-8E80-0010B541CD80}";
  4.             strFileName = "C:\\Users\\Владислав\\Desktop\\Новая папка (2)\\Stapler-1.SAT";
  5.  
  6.             ApplicationAddIns oAddIns = m_inventorApplication.ApplicationAddIns;
  7.             TranslatorAddIn oTransAddIn = oAddIns.ItemById[strCLSID] as TranslatorAddIn;
  8.  
  9.             TransientObjects transientObj = m_inventorApplication.TransientObjects;
  10.  
  11.             DataMedium file = transientObj.CreateDataMedium();
  12.             file.FileName = strFileName;
  13.  
  14.             //Prepare the second parameter for Open(), the open type.    
  15.             TranslationContext context = transientObj.CreateTranslationContext();
  16.             context.Type = IOMechanismEnum.kDataDropIOMechanism;
  17.  
  18.             //Prepare the 3rd parameter for Open(), the options.    
  19.             NameValueMap options = transientObj.CreateNameValueMap();
  20.             options.Value["SaveComponentDuringLoad"] = false;
  21.             options.Value["SaveLocationIndex"] = 0;
  22.             options.Value["ComponentDestFolder"] = "";
  23.             options.Value["ImportUnit"] = 1;
  24.             options.Value["ImportColor"] = true;
  25.             options.Value["ImportColorIndex"] = 0;
  26.  
  27.             // Prepare the fourth parameter for Open(), the final document.
  28.             Object sourceObj;
  29.  
  30.             //Open the SAT file.
  31.             oTransAddIn.Open(file, context, options, out sourceObj);

В моем случае сам файл создается, но он пуст. И в Inventor 2019, и в Inventor 2021...

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

  • ADN OPEN
  • ***
  • Сообщений: 210
  • Карма: 0
Почему-то, если путь к файлу содержит русские буквы, то не импортирует.
Если файл, например, просто на диске C:\, то все ОК.
Что-то с кодировкой? Или в чем может быть проблема?
Отчет об импорте прилагаю.
Путь к файлу указываю в коде напрямую. Он
такой:
Код - C# [Выбрать]
  1. strFileName = "C:\\Users\\Владислав\\Desktop\\Новая папка (2)\\Stapler-1.SAT";
Спасибо.

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

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

Оффлайн mikazakov

  • ADN
  • *
  • Сообщений: 751
  • Карма: 195
  • Skype: mikazakov@mail.ru
Что-то с кодировкой? Или в чем может быть проблема?
Потестил, у меня всё сработало на Inv 2021, значит с юникодом всё в порядке.
Попробуйте на другом компе запустить.



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

  • Administrator
  • *****
  • Сообщений: 13830
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Vladislav,
Только сейчас обратил внимание.
1. А какая локализация Windows?
2. Какая файловая система диска C: ?
3. Похоже, что путь задан в неправильной кодировке. В какой-то западно-европейской.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн mikazakov

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

Код - Visual Basic [Выбрать]
  1. Sub CreateNPFWithDefinition()
  2.  
  3.     Dim m_Application As Inventor.Application
  4.     Set m_Application = ThisApplication
  5.  
  6.     Dim doc    As PartDocument
  7.     Set doc = ThisApplication.Documents.Add(kPartDocumentObject)
  8.    
  9.     Dim Brep As TransientBRep
  10.     Set Brep = m_Application.TransientBRep
  11.  
  12.     Dim TransObjs As TransientObjects
  13.     Set TransObjs = m_Application.TransientObjects
  14.  
  15.     Dim SBs As SurfaceBodies
  16.     Set SBs = Brep.ReadFromFile("D:\Stapler-1.SAT")
  17.  
  18.     Dim ObjColl As ObjectCollection
  19.     Set ObjColl = TransObjs.CreateObjectCollection
  20.  
  21.     Dim PartDef As PartComponentDefinition
  22.     Set PartDef = doc.ComponentDefinition
  23.  
  24.     Dim Features As PartFeatures
  25.     Set Features = PartDef.Features
  26.  
  27.     Dim NPFD  As NonParametricBaseFeatureDefinition
  28.    Dim oSB As SurfaceBody
  29.     For Each oSB In SBs
  30.         Call ObjColl.Add(oSB)
  31.         Set NPFD = Features.NonParametricBaseFeatures.CreateDefinition
  32.         NPFD.BRepEntities = ObjColl
  33.         NPFD.OutputType = BaseFeatureOutputTypeEnum.kSolidOutputType
  34.         Call PartDef.Features.NonParametricBaseFeatures.AddByDefinition(NPFD)
  35.         ObjColl.Clear
  36.     Next
  37. End Sub
Потестите у себя

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

  • ADN OPEN
  • ***
  • Сообщений: 210
  • Карма: 0
mikazakov, Большое спасибо!