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

ADN Club => Inventor API => Тема начата: Nickolaev_P от 25-05-2019, 09:19:37

Название: Программное построение развертки
Отправлено: Nickolaev_P от 25-05-2019, 09:19:37
Доброго времени суток!
Подскажите пожалуйста с таким вопросом!
Порой, при преобразовании Обычной.ipt в Листовой материал, из за неправильного выбора главной стороны, развертка формируется не корректно
т.е., при вызове метода Unfold, главная сторона выбирается рандомно и зачастую не правильно. Далее по не правильной стороне строится неправильная развертка

Подскажите пожалуйста, как с помощью API осуществить правильное построение развертки?
Название: Re: Программное построение развертки
Отправлено: mikazakov от 25-05-2019, 20:30:23
как с помощью API осуществить правильное построение развертки
переопределить главную грань программно не сложно:
Код - Visual Basic [Выбрать]
  1. Sub ff()
  2. Dim doc As PartDocument: Set doc = ThisApplication.ActiveDocument
  3. Dim CompDef As SheetMetalComponentDefinition: Set CompDef = doc.ComponentDefinition
  4.  
  5. Dim f As Face
  6. Set f = ThisApplication.CommandManager.Pick(kPartFacePlanarFilter, "Pick face")
  7. Call CompDef.ASideDefinitions.Add(f)
  8.  
  9. End Sub
  10.  

Но одно дело когда это делает человек, а другое дело как программа сможет выбрать какая грань должна быть главной?
Название: Re: Программное построение развертки
Отправлено: Nickolaev_P от 27-05-2019, 12:09:44
Пробовал тестировать на данном примере(во вложении)
За главную стороны выбираю любую из "больших" поверхностей
Создаю развертку, а в итоге получается лажа:)
При использовании инструмента Определить главную сторону, как будто, есть предопределенные грани, которые можно выбирать. Т.е. программа сама не дает тебе выбирать что попало, а лишь плоскости одной грани
как программно поменять эти грани?
Название: Re: Программное построение развертки
Отправлено: mikazakov от 27-05-2019, 12:38:03
как программно поменять эти грани?

Ну собственно эта строчка в предыдущем макросе и меняет грань:
Код - Visual Basic [Выбрать]
  1. Call CompDef.ASideDefinitions.Add(f)
Название: Re: Программное построение развертки
Отправлено: Nickolaev_P от 27-05-2019, 13:30:24
Цитировать
Ну собственно эта строчка в предыдущем макросе и меняет грань
Не меняет
Точнее, программно инвентор его меняет, фантомно. Т.е. он в дереве модели создает сущность "Определить главную сторону" и на вид кажется что все ОК, но!
от того что мы "поменяли" таким образом главную сторону развертки, развертка как была не правильной, так и осталась
Так же, при выделении объекта "Определить главную сторону", в дереве построения, он не выделяет выбранную грань в модели. Хотя в нормальном состоянии она должна быть выделена (примеры показаны во вложении)
(https://i.postimg.cc/ftFjPL5y/img-2019-05-27-13-22-59.png) (https://postimg.cc/ftFjPL5y)

(https://i.postimg.cc/5HysKZ1P/img-2019-05-27-13-27-08.png) (https://postimg.cc/5HysKZ1P)
Название: Re: Программное построение развертки
Отправлено: mikazakov от 27-05-2019, 19:31:27
Старую главную грань попробуйте удалить сначала
Код - Visual Basic [Выбрать]
  1. CompDef.ASideDefinitions(1).Delete
Название: Re: Программное построение развертки
Отправлено: Nickolaev_P от 28-05-2019, 15:50:56
Нет, не помогает(
Но пришел к выводу, что данный метод не помогает,если пользователь не указывает толщину при преобразовании Обычной.ipt в Листовую деталь
из за этого программа берет толщину по умолчанию и главную сторону от балды

В связи с этим вопрос!
Выбрав допустим плоскость с самой большой площадью (допустим она у меня будет главной стороной развертки), как я могу узнать толщину листа?
если я узнаю точную толщину листа и поправлю значение параметра Thickness.Value, то развертка создастся верно

Подскажите пожалуйста, как программно, по выбранной плоскости, получить расстояние между плоскостью параллельно выбранной:)
Название: Re: Программное построение развертки
Отправлено: mikazakov от 28-05-2019, 16:47:34
если пользователь не указывает толщину при преобразовании Обычной.ipt в Листовую деталь
Вчера тестил на вашем файле, но толщину листа задал корректную, все срабатывало.
вот пример измерения между двух плоскостей:
Код - Visual Basic [Выбрать]
  1. Sub measureBetweenFaces()
  2.     Dim Face1 As Face
  3.     Dim Face2 As Face
  4.     Dim DistPoints As Double
  5.    
  6.     Dim oDoc As PartDocument
  7.     Set oDoc = ThisApplication.ActiveDocument
  8.     Set Face1 = ThisApplication.CommandManager.Pick(SelectionFilterEnum.kPartFaceFilter, "Pick Face 1 : ")
  9.     Set Face2 = ThisApplication.CommandManager.Pick(SelectionFilterEnum.kPartFaceFilter, "Pick Face 2 : ")
  10.     DistPoints = ThisApplication.MeasureTools.GetMinimumDistance(Face1, Face2)
  11.     MsgBox ("Distance=" & DistPoints)
  12. End Sub

Что бы понять толщину листа это нужно какой то анализ изобретать,