Управление адаптивностью через API

Автор Тема: Управление адаптивностью через API  (Прочитано 5754 раз)

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

Тема содержит сообщение с Решением. Нажмите здесь чтобы посмотреть его.

Оффлайн R.I.ChernovАвтор темы

  • ADN Club
  • *****
  • Сообщений: 568
  • Карма: 18
Добрый день, уважаемые форумчане! Честно говоря, не знаю, как верно сформулировать вопрос, просьба не судить за кривословие :)
При копировании сборочной единицы с помощью Vault, полученная копия не могла быть использована как "адаптивная". Стал разбираться.

Написал следующий код,попробовал изменить им статус адаптивности, но он также не сработал
(полагаю, я просто повторил этим кодом мои манипуляции сделанные ранее вручную):

Код - Visual Basic [Выбрать]
  1. Sub adaptivnost()
  2. Dim oCompDef As AssemblyComponentDefinition
  3. Set oCompDef = ThisApplication.ActiveDocument.ComponentDefinition
  4. Dim oCOcc As ComponentOccurrence
  5. Set oCOcc = oCompDef.Occurrences.Item(1)
  6. oCOcc.Adaptive = 1
  7. End Sub

В итоге я справился с задачей: отключал адаптивность, перед возвращением в Vault, и только после этого копировал сборку...

Отсюда напросились выводы, что свойство сборки, условно назовем его "возможность быть адаптивной" хранится в самой сборке. Если кому-то известно, как докапаться с помощью API до этого свойства, очень прошу поделиться. Совсем не хочется проводить вышеуказанную манипуляцию, каждый раз, когда потребуется скопировать подобный элемент.
« Последнее редактирование: 01-12-2014, 17:02:43 от Александр Ривилис »
В программировании я новичок...но ненадолго! ;)

Оффлайн Владимир Ананьев

  • ADN DevHelp
  • *
  • Сообщений: 148
  • Карма: 8
Re: Управление адаптивностью через API
« Ответ #1 : 02-12-2014, 13:14:00 »
Адаптивность задается на уровне компонента сборки как логическое свойство объекта ComponentOccurrence:
ComponentOccurrence.Adaptive() As Boolean

Оффлайн R.I.ChernovАвтор темы

  • ADN Club
  • *****
  • Сообщений: 568
  • Карма: 18
Re: Управление адаптивностью через API
« Ответ #2 : 03-12-2014, 13:31:24 »
Адаптивность задается на уровне компонента сборки как логическое свойство объекта ComponentOccurrence:
ComponentOccurrence.Adaptive() As Boolean

Спасибо, Владимир Николаевич! Но либо я не понял Ваш ответ, либо Вы не поняли мой вопрос :)
Еще раз попытаюсь объяснить мою ситуацию:
У меня есть сборка, назовем ее "Главная №1". В ней есть подсборка, назовем ее "лестница 1", и эта подсборка адаптивна. С помощью Vault я делаю копию "лестница 1" и получаю новую сборку "лестница 2". Так вот при вставке "лестницы 2" в главную сборку (или любую другую), нельзя сделать ее (лестницу) адаптивной: если делать это руками (правая кнопка мыши) , то там "адаптивность" не активна, если делать с помощью кода "ComponentOccurrence.Adaptive",  то выскакивает ошибка. Причем с любыми другими подсборками мой код работает, и успешно активизирует и снимает адаптивность элементов.
Я не уверен , в чем именно причина, потому и не могу сформулировать свой вопрос корректно :(
Я вижу ситуацию так:
Если я создам новую сборку "Главная №2" и вставлю туда "лестницу 1", то не получится поставить на нее (лестницу) "адаптивность", потому что лестница адаптивна в "Главная №1". И ,казалось бы, все логично: сборка может быть зависимой всего один раз: если она адаптивна в "Главная №1", то адаптивность неактивна в "Главная №2", и наоборот, как только я сниму адаптивность в "Главная №1" - эта функция станет активной в "Главная №2"... Но это абсолютно нелогично в случае с копированием, получается что я возвращаю в Vault сборку, внутри которой где-то указано, что она уже адаптивна один раз и не может быть адаптивной второй... сборка копируется, сохраняя это свойство (хотя ВСЕ элементы скопированы: т.е. ни один из них никак не связан с исходной сборкой). На основе всего этого я предположил, что это свойство "адаптивность" хранится в самой сборке (т.е. именно в той сборке, которую мы делаем адаптивной, или отменяем ее адаптивноть)... Например аналогичный логический параметр, если он "true", то сборку нельзя сделать адаптивной с помощью "ComponentOccurrence.Adaptive = true" ... если он false, то вышеуказанный код сможет его поменять.
Прошу прощения за огромное количество написанных буковок, короче сформулировать я не смог. В общем если подытожить, то я пытаюсь найти свойство внутри сборки, которое хранит информацию о "возможности или невозможности сборки быть адаптивной"
Заранее большое спасибо... даже за одно только терпение при прочтении! :)

Update: Покопался в английских интернетах и таки понял, что именно я искал..ниже расположены скрин шоты для детали и для сборки сделанные в меню "Инструменты-Процесс моделирования".  Пытаюсь найти код, чтобы иметь возможность менять нижеуказанную настройку.
Не разобрался, как вставить их с нормальным разрешением, необходимо кликнуть по изображению :)






« Последнее редактирование: 03-12-2014, 16:14:13 от R.I.Chernov »
В программировании я новичок...но ненадолго! ;)

Отмечено как Решение R.I.Chernov 05-12-2014, 11:22:52

Оффлайн Владимир Ананьев

  • ADN DevHelp
  • *
  • Сообщений: 148
  • Карма: 8
Re: Управление адаптивностью через API
« Ответ #3 : 04-12-2014, 16:25:33 »
Наверное, вот это:
ModelingSettings.AdaptivelyUsedInAssembly() as Boolean

Ссылку на этот объект можно получить как из документа детали, так и сборки.

Оффлайн R.I.ChernovАвтор темы

  • ADN Club
  • *****
  • Сообщений: 568
  • Карма: 18
Re: Управление адаптивностью через API
« Ответ #4 : 05-12-2014, 11:22:47 »
Спасибо, Владимир Николаевич! Это именно то, что я искал. Ниже привожу мой итоговый код (ну может кому пригодится :) )
Код - Visual Basic [Выбрать]
  1. Sub adaptivnost_1()
  2. Dim oDoc As Inventor.Document
  3. Set oDoc = ThisApplication.ActiveDocument
  4. oDoc.ModelingSettings.AdaptivelyUsedInAssembly = 0
  5. End Sub
Хочу отметить, что данным кодом параметр можно изменить лишь на значение "false", попытка присвоить ему значение "true" заканчивается ошибкой... как я понимаю, элемент можно сделать адаптивным лишь тогда, когда он вставлен в другую сборку, используя код:
Код - Visual Basic [Выбрать]
  1.     Sub adaptivnost()
  2.     Dim oCompDef As AssemblyComponentDefinition
  3.     Set oCompDef = ThisApplication.ActiveDocument.ComponentDefinition
  4.     Dim oCOcc As ComponentOccurrence
  5.     Set oCOcc = oCompDef.Occurrences.Item(1)
  6.     oCOcc.Adaptive = 1
  7.     End Sub
« Последнее редактирование: 05-12-2014, 14:25:01 от R.I.Chernov »
В программировании я новичок...но ненадолго! ;)