2D эскиз детали из сборки

Автор Тема: 2D эскиз детали из сборки  (Прочитано 444 раз)

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

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

  • ADN OPEN
  • ***
  • Сообщений: 101
  • Карма: 1
2D эскиз детали из сборки
« : 07-11-2018, 08:32:53 »
Добрый день,
Пытаюсь сделать эскиз из сборки во входящей детали:
Код - vb.net [Выбрать]
  1. Dim selFace As Face = InvApp.CommandManager.Pick(SelectionFilterEnum.kPartFaceFilter, "Выберите плоскость детали")
  2. Dim oOcc As ComponentOccurrence = selFace.ContainingOccurrence
  3. oOcc.Edit()
  4. Dim oPartCompDef As PartComponentDefinition = oOcc.Definition
  5. Dim oSketch As PlanarSketch = oPartCompDef.Sketches.Add(selFace, True)
Но выдает ошибку на добавлении эскиза, подозреваю что не нравится плоскость. В чем может быть проблема?

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

  • ADN OPEN
  • ***
  • Сообщений: 101
  • Карма: 1
Re: 2D эскиз детали из сборки
« Ответ #1 : 07-11-2018, 10:50:18 »
Не понял почему, но при FaceProxy работает:
Код - vb.net [Выбрать]
  1. Dim oFace As FaceProxy = InvApp.CommandManager.Pick(SelectionFilterEnum.kPartFaceFilter, "Выберите плоскость детали")
  2. Dim oOcc As ComponentOccurrence = oFace.ContainingOccurrence
  3. oOcc.Edit()
  4. Dim oPartCompDef As PartComponentDefinition = oOcc.Definition
  5. Dim oSketch As Sketch = oPartCompDef.Sketches.Add(oFace.NativeObject, True)
Но работает если деталь находится непосредственно в сборке, если она находится в подсборке, ошибка такая же - не правильный аргумент.

Оффлайн mikazakov

  • ADN
  • *
  • Сообщений: 298
  • Карма: 79
  • Skype: mikazakov@mail.ru
Re: 2D эскиз детали из сборки
« Ответ #2 : 07-11-2018, 12:49:19 »
Не понял почему, но при FaceProxy работает:
Ключевое слово "в сборке"
запустите свой код на отдельно открытой детали и будет срабатывать обычный Face.
Причина вот в чем, когда деталь вставляется в сборку, то работа с ней идет через производные объекты
FaceProxy как раз является производным относительно Face
Просто видимо нужно делать проверку возвращаемого типа в функции:
InvApp.CommandManager.Pick(SelectionFilterEnum.kPartFaceFilter, "Выберите плоскость детали")
Я думаю, что если вы по кликаете по очереди на все что вас интересует и посмотрите получаемый тип данных,
то можно будет дальше сделать проверку по типу данных и принять решение что дальше с этим делать

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

  • ADN OPEN
  • ***
  • Сообщений: 101
  • Карма: 1
Re: 2D эскиз детали из сборки
« Ответ #3 : 07-11-2018, 13:39:58 »
Спасибо за разъяснения, по детали стало понятно.
Но если деталь находится как в сборке, так и в подсборке, то возвращается тип FaceProxy. Однако при нахождении детали непосредственно в сборке - все работает, а если она на уровень ниже, то уже нет.

Оффлайн mikazakov

  • ADN
  • *
  • Сообщений: 298
  • Карма: 79
  • Skype: mikazakov@mail.ru
Re: 2D эскиз детали из сборки
« Ответ #4 : 07-11-2018, 13:52:58 »
Ну варианта два, либо Face либо FaceProxy

Однако при нахождении детали непосредственно в сборке - все работает, а если она на уровень ниже, то уже нет.
А что возвращает Pick в "глубоко зарытой" детали?

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

  • ADN OPEN
  • ***
  • Сообщений: 101
  • Карма: 1
Re: 2D эскиз детали из сборки
« Ответ #5 : 07-11-2018, 13:57:11 »
Pick возвращает FaceProxy при любой степени "зарытости". )

Оффлайн mikazakov

  • ADN
  • *
  • Сообщений: 298
  • Карма: 79
  • Skype: mikazakov@mail.ru
Re: 2D эскиз детали из сборки
« Ответ #6 : 07-11-2018, 14:18:03 »
Pick возвращает FaceProxy при любой степени "зарытости". )
Логично, значит либо Face либо FaceProxy просто потом проверку полученного типа сделать.

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

  • ADN OPEN
  • ***
  • Сообщений: 101
  • Карма: 1
Re: 2D эскиз детали из сборки
« Ответ #7 : 07-11-2018, 14:33:53 »
Логично, но почему код:
Код - vb.net [Выбрать]
  1. Dim oFace As FaceProxy = InvApp.CommandManager.Pick(SelectionFilterEnum.kPartFaceFilter, "Выберите плоскость детали")
  2. Dim oOcc As ComponentOccurrence = oFace.ContainingOccurrence
  3. oOcc.Edit()
  4. Dim oPartCompDef As PartComponentDefinition = oOcc.Definition
  5. Dim oSketch As Sketch = oPartCompDef.Sketches.Add(oFace.NativeObject, True)
не работает для "зарытых" деталей?

Оффлайн mikazakov

  • ADN
  • *
  • Сообщений: 298
  • Карма: 79
  • Skype: mikazakov@mail.ru
Re: 2D эскиз детали из сборки
« Ответ #8 : 07-11-2018, 20:54:53 »
Попробовал зарыл деталь на третий уровень внутрь подсборки, все србатывает, эскиз появляется

Код - vb.net [Выбрать]
  1. Imports Inventor
  2. Module Module1
  3.     Private m_InvApp As Inventor.Application
  4.     Sub Main()
  5.         Try 'Попытка получить существующий экземпляр Inventor
  6.             m_InvApp = CType(Runtime.InteropServices.Marshal.
  7.             GetActiveObject("Inventor.Application"), Inventor.Application)
  8.         Catch ex As Exception 'Загрузка Inventor
  9.             m_InvApp = CType(Activator.CreateInstance(Type.GetTypeFromProgID _
  10.             ("Inventor.Application")), Inventor.Application)
  11.             m_InvApp.Visible = True
  12.         End Try
  13.  
  14.         Dim oFace As FaceProxy = m_InvApp.CommandManager.Pick(SelectionFilterEnum.kPartFaceFilter, "Выберите плоскость детали")
  15.         Dim oOcc As ComponentOccurrence = oFace.ContainingOccurrence
  16.         oOcc.Edit()
  17.         Dim oPartCompDef As PartComponentDefinition = oOcc.Definition
  18.         Dim oSketch As Sketch = oPartCompDef.Sketches.Add(oFace.NativeObject, True)
  19.  
  20.         Console.ReadKey()
  21.     End Sub
  22.  
  23. End Module
  24.  

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

  • ADN OPEN
  • ***
  • Сообщений: 101
  • Карма: 1
Re: 2D эскиз детали из сборки
« Ответ #9 : 08-11-2018, 09:18:37 »
Разобрался в чем дело и даже не знаю что с этим делать.
Код перестает работать, если добавить какой либо элемент, задевающий деталь, в пространстве сборки (например выдавливание на рисунке во вложении) и от "зарытости" детали это не зависит.

Оффлайн mikazakov

  • ADN
  • *
  • Сообщений: 298
  • Карма: 79
  • Skype: mikazakov@mail.ru
Re: 2D эскиз детали из сборки
« Ответ #10 : 08-11-2018, 09:42:25 »
дак если объект существует только в сборке, ясно что в самой детали его нет.
А что за задача стоит?

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

  • ADN OPEN
  • ***
  • Сообщений: 101
  • Карма: 1
Re: 2D эскиз детали из сборки
« Ответ #11 : 08-11-2018, 10:12:32 »
Основная задача это спроецировать на эскиз детали точки, которые выберет конструктор, это будут проекции точек других элементов сборки. На месте этих точек будут построены небольшие отверстия по всем точкам. Как я себе это видел, конструктор запускает инструмент, выбирает плоскость детали, куда все это будет проецироваться, открывается эскиз на редактирование, "накликиваются" точки с других элементов, которые нужно спроецировать на этот эскиз и по нажатии ОК строятся отверстия по всем этим точкам на детали. Как видите увяз уже в начале. )
Дополнительная задача, как раз перенести элементы построенные в пространстве сборки в пространство детали. Что то похожее на addin featureMigrator, но указанный addin нам не подходит.

Оффлайн mikazakov

  • ADN
  • *
  • Сообщений: 298
  • Карма: 79
  • Skype: mikazakov@mail.ru
Re: 2D эскиз детали из сборки
« Ответ #12 : 09-11-2018, 07:04:41 »
"накликиваются" точки с других элементов, которые нужно спроецировать на этот эскиз и по нажатии ОК строятся отверстия по всем этим точкам на детали.
Эдакая адаптивность похоже. Подразумеваю, это мебельное производство?

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

  • ADN OPEN
  • ***
  • Сообщений: 101
  • Карма: 1
Re: 2D эскиз детали из сборки
« Ответ #13 : 09-11-2018, 09:01:09 »
Почти, шкафы электрораспределительные. ) Отверстия символические (керновка) показать границы привариваемых деталей.

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

  • ADN OPEN
  • ***
  • Сообщений: 101
  • Карма: 1
Re: 2D эскиз детали из сборки
« Ответ #14 : 15-11-2018, 10:39:41 »
Удалось собрать что-то рабочее по основной задаче.
Осталась последняя проблема, как раз вот эта - при наличии элемента в сборке, задевающего деталь, на этой детали не рисуется эскиз. Подавление этих отверстий в сборке не помогает.
Была идея исключать эти детали из элемента, выполнять эскиз, потом включать обратно, но у этого решения есть несколько недостатков. Во первых придется сперва выбирать деталь, проверять и исключать из всех элементов, а затем выбирать плоскость эскиза. А второе это то, что элемент удаляется при отсутствии в нем деталей обрабатываемых в сборе, и в случае если в элементе присутствует только одна эта деталь придется добавлять любую деталь из сборки в качестве "заглушки", а потом возвращать все обратно, после отрисовки эскиза. И такое решение кажется слишком "костыльным".
Может что-то еще посоветуете попробовать?