Макрос поочередного перестроения деталей (обновления переменных) в сборке...

Автор EngAV, 11.04.12, 13:05:58

« назад - далее »

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

EngAV

Всем доброго дня.
Помогите пожалуйста в создании следующего макроса.
Цели и задачи: в существующей сборке необходимо поочередно начиная с первой до последней детали выполнить следующие действия (детали в т.ч. ЛОКАЛЬНЫЕ):
(описываю необходимые нажатия кнопок интерфейса и происходящие события вследствие данного действия)

Выделил первую деталь в дереве сборки...
1. "Редактировать на месте" --- вход в режим редактирования на месте;
2. "Перестроить (F5)" --- обновились переменные редактируемой детали;
3. "Свойства модели" --- требуемое значение переменной (обновленной) передалось в нужное поле свойств модели;
4. "Создать объект (Ctrl+Enter)" --- требуемое значение переменной (обновленной) зафиксировалось в нужном поле свойств модели;
5. "Сохранить (Ctrl+S) --- сохраняется обновленная деталь, в т.ч. ЛОКАЛЬНАЯ;
6. "Редактировать на месте" --- выход из режима редактирования детали на месте;
7. "Перестроить (F5)" --- перестроение всей сборки --> обновление информации в "Редакторе свойств";
Далее по циклу к следующей детали до последней.

Данная процедура необходима для корректного обновления внутренних переменных каждой детали, значения которых по ссылке передаются в поля свойств документа. Никакого другого способа корректного обновления переменных КАЖДОЙ детали, после перестроения всей сборки, я не нашел. Эти значения из полей свойств далее передаются в сводный отчет.

Очень признателен за поддержку.

chelkar

Соображения.
1. Входить в режим Редактирования на месте, думаю не обязательно.
Программно к переменным и свойствам и так можно
2. Вам нужна помощь в создании макроса или нужно чтобы Вам его написали?
3. Хорошо бы приложить тестовую сборку. Чтобы было на чем отлаживать.

EngAV

ХРИСТОС ВОСКРЕСЕ!
Здравствуйте.
Спасибо за ответ.
К сожалению описанный мной алгоритм пока единственный найденный мной в решении данной проблемы (см. влож.)
Стандартным способом (КОМПАС-Макро) макрос указанных действий не записывается.?
Прикладываю тестовую сборку и скриншоты проблемы (копия отосланного в АСКОН).
С уважением.

P.S. Тех. поддержка АСКОНА пока молчит...

chelkar

Первый вариант макроса.
Порядок работы.
После редактирования траекторий труб, выходим в головную сборку, перестраиваем по F5 и запускаем макрос.
Пока работать будет только на вышеуказанной тестовой сборке. Если не найдет переменную L то будет ругаться.
Для начала хочется понять правильное ли направление?

EngAV

Здравствуйте.
Отлично. Направление абс. правильное.
Только один момент, после запуска макроса, в каждой детали искомая переменная теряет связь с источником.
Т.е. макрос придется запускать после редактирования любой детали (связь с L отсутствует).
Возможно ли эту связь сохранять?
И если есть необходимость ввести вторую переменную в деталь - нужно создать еще один макрос, исправив в нем "имя переменной" и "индекс свойства"?
Спасибо.

chelkar

Цитата: EngAV от 25.04.12, 09:45:26
Возможно ли эту связь сохранять?
Увы не получается  :`(
Но макрос не обязательно выполнять после каждого редактирования. Можно один раз, перед получением отчета. Выполняется он быстро.
Цитата: EngAV от 25.04.12, 09:45:26
И если есть необходимость ввести вторую переменную в деталь - нужно создать еще один макрос, исправив в нем "имя переменной" и "индекс свойства"?
Доработал макрос.
Можно задать список переменных и индексов.
См. строки 15 и 17.
Если чего не получится, пишите сюда.

EngAV

Добрый день.
Непонятен один момент см. архив...
При изм. только "L" - обновления переменных после запуска макроса не происходит.
Обновляются только в том случае, если изменить переменную "D"...?
Видимо вопрос в порядке следования переменных в списке?   :~
С уважением.

chelkar

Порядок следования переменных в списке не должен влиять.
Есть какая то странность с обновлением переменой в самой модели.
Если изменить длину траектории в ломаной, то переменная L не обновляется и макрос забирает старое значение.
Добавил принудительное перестроение компонентов.
Вроде-бы заработало.
Попробуйте у себя.

EngAV

Да, вроде как заработало.
Правда скорость обработки макроса заметно снизилась...
Ни и ладно - главное обновляется.
Потом попробую на больших сборках и с третьей переменной (толщина стенки)....
Спасибо Вам огромное.

chelkar

Цитата: EngAV от 28.04.12, 00:07:26
Правда скорость обработки макроса заметно снизилась...
Теперь сборка перестраивается столько раз, сколько компонентов. Плюс вход на редактирование.
Можно запускать на ночь или пока в цехе :)

EngAV

ЦитироватьМожно запускать на ночь или пока в цехе
под рюмочку чая ...

EngAV

Добрый день.
Возможно ли в макросе прописать обновление переменных в массивах?
Пример сборки во вложении.
С уважением.

chelkar

Изменил формирования списка компонентов для обработки.
Использую другую функцию, которая учитывает массивы.

Заменить в макросе текст начиная со строки:
# Коллекция компонентов в сборке, первый уровень
на вот такой:
-----------------
# Коллекция компонентов в сборке, первый уровень, с учетом массивов
Parts = TopPart.PartsEx (0)

# Цикл переноса значений
for Part in Parts:
    PartAPI5 = iKompasObject.TransferInterface (Part, 1, 0)
    PartAPI5.BeginEdit ()
    Part.RebuildModel (1)
    PartAPI5.EndEdit (1)

    for V, P in zip(VarNames, PropertyIndexes):
        VarToProp (Part, V, P)
-------------
+ Благодарностей: 1