Создание однотипных макросов для 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. На всё остальное особо не влияет.

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

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