Этот пост посвящён скорее программированию, а не конкретному программному продукту типа 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:
Жмем на 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++, объединенный с компилятором:
Сверху исходный код, снизу консоль, куда выводится лог компилятора и вывод написанной и запущенной из среды программы. Если программу запускать отдельно, то открывается обычное консольное окно.
Сперва мы создаем новый файл и сохраняем с расширением 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` ;\ ...
Итог
Всё, теперь можно работать. Я точно так себе на работе сделал – значительно ускоряет процесс работы, особенно когда нужно несколько узлов оперативно открыть. Хочу ещё макросов для вставки подсборки в основную сборку наплодить.
Только необходимо помнить, что чрезмерное количество макросов вызывает относительно медленную загрузку ProE. На всё остальное особо не влияет.