Создание однотипных макросов для Pro/ENGINEER (Creo)

Этот пост посвящён скорее программированию, а не конкретному программному продукту типа ProE. Хотя и программирование тут самого начального уровня, но для автоматизации работы в САПР такое очень даже пригодится.

Статья рассчитана для тех, кто мало знаком с процессом программирования. Поэтому я сначала опишу, какие программы, на мой взгляд, целесообразно использовать в наших целях, потом рассмотрим то, как создаются макросы в Pro/ENGINEER, составим пробный макрос и размножим его с помощью C++.

Сейчас задача вполне тривиальная, и для неё вполне достаточно системных средств – от обычных .bat, до VBScript и JavaScript и макросов в ворде. Но задачи бывают разные, и я считаю, что иметь на компьютере компилятор и уметь делать хитрые и нехитрые штуки инженеру, который профессионально работает в различных САПР, просто обязательно.

Выбор среды

Итак, мы не суровые программисты, мы не пишем программы, которые весят гигабайты, нам достаточно чего-нибудь простого. Более того, не хочется засорять систему тяжеловесными штуками вроде Visual Studio.

Мой выбор пал на Pocket C++ – простой и удобный редактор и компилятор, объединяющий в себе Notepad++ и MinGW. То есть фактически мы будем писать в Notepad++, а нажатиями F9 (компилировать) и Ctrl-F9 (запустить) будем вызывать соответствующие макросы, которые обращаются уже к компилятору.

Более того, что немаловажно, программа не требует установки (portable). После распаковки имеем bat-файл, который запускает модифицированный Notepad++. На момент написания статьи архив с программой весит 56Мб, что очень даже неплохо.

Макросы в Pro/ENGINEER

Макросы в ProE – это набор определённых команд, соответствующий действиям в самом Pro/ENGINEER, будь то выбор определённого меню, нажатие кнопки или ввод текста. Написаны они на собственном языке, который, кстати, нигде официально не описан. Несмотря на это, в ProE присутствуют другие, очень мощные возможности для автоматизации работы: от VBScript, для которого, начиная с WildFire 4, появились ProE VB API, до Pro/Weblink и Pro/Toolkit. С последним ещё не разбирался, но вещь многообещающая.

Но сейчас не совсем об этом. Самые простые макросы можно записать из самой программы с помощью окна Mapkeys. Там есть кнопка Record, позволяющая начать запись макроса, и кнопка Save changed, позволяющая сохранить макрос после окончания записи. Все макросы, как и основные настройки, хранятся в файле config.pro в рабочей папке (Working directory) Pro/ENGINEER’а.

(c) http://engineerblog.ru

Задача

Есть 51 различная сборка, пускай они называются 01_000000.asm, 01_010000.asm, 01_020000.asm и так далее до 01_500000.asm. Нам нужно на открытие каждой сборки написать отдельный макрос. К примеру я хочу, чтобы для открытия определенной сборки нужно было ввести точку и двузначное число, отвечающее за номер сборки. Например, комбинация .23 для открытия 01_230000.asm.

Шаг первый – создаем макрос

Сперва нам необходимо подготовить полный адрес сборки. Например, d:\proe\01\01_000000.asm. Скопировали в буфер обмена? Отлично, идём Tools–Mapkeys. Открывается окно Mapkeys:

Mapkeys – макросы в Pro/ENGINEER

Жмем на New. В появившемся окне «Record mapkey» вводим .00 в «Key Sequence», вводим какое-нибудь имя для макроса и нажимаем на Record. Теперь все наши действия записываются. Нажимаем Open, в диалоге открытия файла вставляем наш скопированный адрес сборки, открываем. Теперь можно нажать Stop: макрос записан.

Осталось нажать Save Changed и выйти из ProE.

Открываем config.pro, ищем в конце наш макрос:

mapkey .00 @MAPKEY_LABELmod00;~ Command `ProCmdModelOpen` ;
mapkey(continued) ~ Trail `UI Desktop` `UI Desktop` `DLG_PREVIEW_POST` `file_open`;
mapkey(continued) ~ Update `file_open` `Inputname` `d:\proe\01\01_000000.asm`;
mapkey(continued) ~ Activate `file_open` `Inputname`;~ Activate `main_dlg_cur` `main_dlg_cur`;

Делаем много макросов

Открываем PocketC++. Как я уже упоминал, это Notepad++, объединенный с компилятором:
PocketC++

Сверху исходный код, снизу консоль, куда выводится лог компилятора и вывод написанной и запущенной из среды программы. Если программу запускать отдельно, то открывается обычное консольное окно.

Сперва мы создаем новый файл и сохраняем с расширением cpp. Чтобы Notepad++ правильно подсвечивал синтаксис языка, нужно установить язык: Language–C–C++.

Я не буду никого сейчас обучать C++ (блог всё-таки инженерный), но вот то, что каждый инженер, по моему скромному мнению, знать обязан:

  • функция int main() в C,
  • функция printf и управляющие последовательности (знак процента с чем-нибудь),
  • цикл for в С/С++.

И теперь всё, что нам необходимо, – написать программу, которая выводит в цикле нужные нам 50 макросов.

Не буду особо вдаваться в подробности, всё доступно по ссылкам выше:

#include <iostream>

int main() {
  for (int i=1;i<=50;i++) {
    printf("mapkey .%02i @MAPKEY_LABELmod%02i;~ Command `ProCmdModelOpen` ;\\\n",i,i);
    printf("mapkey(continued) ~ Trail `UI Desktop` `UI Desktop` `DLG_PREVIEW_POST` `file_open`;\\\n");
    printf("mapkey(continued) ~ Update `file_open` `Inputname` `d:\\proe\\01\\01_%02i0000.asm`;\\\n",i);
    printf("mapkey(continued) ~ Activate `file_open` `Inputname`;~ Activate `main_dlg_cur` `main_dlg_cur`;\n\n");
  }
}

Компилируем, запускаем и в консоли получаем необходимые 50 макросов:

mapkey .01 @MAPKEY_LABELmod01;~ Command `ProCmdModelOpen` ;\
mapkey(continued) ~ Trail `UI Desktop` `UI Desktop` `DLG_PREVIEW_POST` `file_open`;\
mapkey(continued) ~ Update `file_open` `Inputname` `d:\proe\01\01_010000.asm`;\
mapkey(continued) ~ Activate `file_open` `Inputname`;~ Activate `main_dlg_cur` `main_dlg_cur`;
mapkey .02 @MAPKEY_LABELmod02;~ Command `ProCmdModelOpen` ;\
...

Результат в PocketC++

 

Итог

Всё, теперь можно работать. Я точно так себе на работе сделал – значительно ускоряет процесс работы, особенно когда нужно несколько узлов оперативно открыть. Хочу ещё макросов для вставки подсборки в основную сборку наплодить.

Только необходимо помнить, что чрезмерное количество макросов вызывает относительно медленную загрузку ProE. На всё остальное особо не влияет.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Можно использовать следующие HTML-теги и атрибуты: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>