Программное построение развертки

Автор Тема: Программное построение развертки  (Прочитано 5473 раз)

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

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

  • ADN OPEN
  • Сообщений: 17
  • Карма: 0
Доброго времени суток!
Подскажите пожалуйста с таким вопросом!
Порой, при преобразовании Обычной.ipt в Листовой материал, из за неправильного выбора главной стороны, развертка формируется не корректно
т.е., при вызове метода Unfold, главная сторона выбирается рандомно и зачастую не правильно. Далее по не правильной стороне строится неправильная развертка

Подскажите пожалуйста, как с помощью API осуществить правильное построение развертки?

Оффлайн mikazakov

  • ADN
  • *
  • Сообщений: 752
  • Карма: 195
  • Skype: mikazakov@mail.ru
Re: Программное построение развертки
« Ответ #1 : 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.  

Но одно дело когда это делает человек, а другое дело как программа сможет выбрать какая грань должна быть главной?

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

  • ADN OPEN
  • Сообщений: 17
  • Карма: 0
Re: Программное построение развертки
« Ответ #2 : 27-05-2019, 12:09:44 »
Пробовал тестировать на данном примере(во вложении)
За главную стороны выбираю любую из "больших" поверхностей
Создаю развертку, а в итоге получается лажа:)
При использовании инструмента Определить главную сторону, как будто, есть предопределенные грани, которые можно выбирать. Т.е. программа сама не дает тебе выбирать что попало, а лишь плоскости одной грани
как программно поменять эти грани?

Оффлайн mikazakov

  • ADN
  • *
  • Сообщений: 752
  • Карма: 195
  • Skype: mikazakov@mail.ru
Re: Программное построение развертки
« Ответ #3 : 27-05-2019, 12:38:03 »
как программно поменять эти грани?

Ну собственно эта строчка в предыдущем макросе и меняет грань:
Код - Visual Basic [Выбрать]
  1. Call CompDef.ASideDefinitions.Add(f)

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

  • ADN OPEN
  • Сообщений: 17
  • Карма: 0
Re: Программное построение развертки
« Ответ #4 : 27-05-2019, 13:30:24 »
Цитировать
Ну собственно эта строчка в предыдущем макросе и меняет грань
Не меняет
Точнее, программно инвентор его меняет, фантомно. Т.е. он в дереве модели создает сущность "Определить главную сторону" и на вид кажется что все ОК, но!
от того что мы "поменяли" таким образом главную сторону развертки, развертка как была не правильной, так и осталась
Так же, при выделении объекта "Определить главную сторону", в дереве построения, он не выделяет выбранную грань в модели. Хотя в нормальном состоянии она должна быть выделена (примеры показаны во вложении)




Оффлайн mikazakov

  • ADN
  • *
  • Сообщений: 752
  • Карма: 195
  • Skype: mikazakov@mail.ru
Re: Программное построение развертки
« Ответ #5 : 27-05-2019, 19:31:27 »
Старую главную грань попробуйте удалить сначала
Код - Visual Basic [Выбрать]
  1. CompDef.ASideDefinitions(1).Delete

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

  • ADN OPEN
  • Сообщений: 17
  • Карма: 0
Re: Программное построение развертки
« Ответ #6 : 28-05-2019, 15:50:56 »
Нет, не помогает(
Но пришел к выводу, что данный метод не помогает,если пользователь не указывает толщину при преобразовании Обычной.ipt в Листовую деталь
из за этого программа берет толщину по умолчанию и главную сторону от балды

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

Подскажите пожалуйста, как программно, по выбранной плоскости, получить расстояние между плоскостью параллельно выбранной:)

Оффлайн mikazakov

  • ADN
  • *
  • Сообщений: 752
  • Карма: 195
  • Skype: mikazakov@mail.ru
Re: Программное построение развертки
« Ответ #7 : 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

Что бы понять толщину листа это нужно какой то анализ изобретать,
  • выбрать сначала всё грани нормаль у которых повёрнута на 180 градусов к выбранной 
  • найти среди выбранных граней ту грань у которой расстояние наименьшее до выбранной
  • сравнить площадь найденной грани с выбранной, если не совпадает поискать среди оставшихся ближайших по расстоянию