Copyright © CAD/CAM/CAE Observer # 2 (15)/2004

"Умные" блоки для AutoCAD

Vaidas Guogis (Вильнюсский технический университет им. Гедиминаса) vg@kitox.com

Поговорим о реакторах

Давным-давно в очень популярной и любимой народом системе AutoCAD появился интересный компонент - реактор (ничего общего не имеющий с атомной энергетикой). За этим термином кроется всего лишь способность системы следить за ситуацией и реагировать на действия пользователя согласно заданному сценарию. Можно даже поставить задачу следить за временем и сообщать, когда пора идти на обед. Впрочем, нагружать чертеж такими безделушками не стоит, ведь реактор будет активизироваться при каждом вызове команды или щелчке мышью.

В принципе, этот инструмент дает возможность создавать специализированные программы нового типа: приложения-эксперты, знающие, что нужно делать после каждого действия пользователя. По крайней мере, такое будущее я увидел пару лет назад, когда занялся первыми экспериментами. Правда, есть некоторые сложности. Сам процесс создания приложений довольно прост, он описан в специальной литературе. Из-за специфики реакторов, выявление ошибок и отладка приложения занимает значительно больше времени, чем при программировании обычного приложения.

Реакторы - это связи между объектами AutoCAD и функциями, которые автоматически вызываются при определенных действиях или ситуациях работы над чертежом. Реактор и функция реакции (callback function) определяют своего рода сценарий, как должен себя вести объект.

Есть несколько видов реакторов:

  • управления документами (Document Reactors)
  • базы данных чертежа (Database Reactors)
  • командного редактора (Editor Reactors)
  • связки приложений (Linker Reactors)
  • объектные (Object Reactors).
  • Именно объектный реактор (он автоматически вызывает заранее определённую функцию реакции при модификации объекта) навел меня на мысль поэкспериментировать c решением одной реальной проблемы, с которой сталкиваются пользователи САПР. К сожалению, прекрасная возможность копирования, редактирования, подготовки стандартных деталей и объединения их в библиотеки имеет и "другой конец палки". Наверное, многим знакома ситуация, когда после редактирования чертежа остаются своего рода "бермудские треугольники" (полумистические ошибки и опечатки) в спецификациях, комментариях, размерных величинах, которых "касалась рука" текстового редактора. Казалось бы, всё пять раз проверено и перепроверено, - а ошибка остается и проявляется уже на заводе или стройплощадке, лишний раз подтверждая справедливость законов Мэрфи ("Если неприятность может произойти, она происходит" и т. п.).

    Как избежать такой ситуации? Возможность AutoCAD реагировать на изменения в чертеже побудила меня заняться разработкой "умных" блоков. Что это такое, рассмотрим на примере блока отметки уровня.

    Блок отметки уровня

    Первым делом поставим задачу. Наш блок должен не только взять отметку уровня при вставке его в чертеж, но и отредактировать свой численный атрибут отметки после изменения местоположения блока. А как быть с блоком нулевой отметки, если его вид несколько отличается от стандартного блока? Значит, программа должна следить за величиной отметки и, когда блок будет установлен на нулевой уровень, изменить его вид.

    Технология отсчета уровня при заданной системе (от нулевой отметки по оси Y в WCS) не представляет трудностей. Нужно только предусмотреть пересчет численного значения отметки, если чертеж выполнен в миллиметрах, а уровень показывается в метрах. Подчеркну, очень важно с самого начала предусмотреть, что станет делать программа в том случае, если блок будет удален с чертежа, скопирован или же сеанс работы над чертежом будет закончен.

    Дальше идет уже техническая работа программирования. Выделю некоторые особенности работы с реакторами. Нельзя редактировать объект, указанный в функции реакции. Нельзя вызывать в ней интерактивные функции типа (get…), а также диалоговые окна (они могут быть связаны с такими функциями). Не следует также программно изменять объект таким способом, который может вызвать функцию реакции. Всё это может привести к зацикливанию программы.

    Настало время проследить на простой модели, как действует законченная программа (точнее, условно законченная, так как доводить и улучшать её можно до бесконечности). Этапы работы наглядно отражены на иллюстрациях (рис. 1...5).


    Рис. 1. Вставляем блоки отметки уровня в чертеж

    Рис. 2. Изменяем геометрию крыши

    Рис. 3. Значение отметки автоматически отредактировалось в соответствии с геометрией

    Рис. 4. Изменение нижней отметки окна

    Рис. 5. Программа обнаружила отметку 0.000 и поменяла блок уровня на другой. При дальнейших изменениях возможен обратный ход – с возвращением к обычному виду блока

    Другие опции нашего приложения доступны через диалоговое окно (рис. 6):

  • выбор вида блока (переключатель Block);
  • установка единиц измерения (Units settings) для черчения и измерения уровня (в том числе с переходом от дюймовой системы к метрической);
  • управление точностью результатов (Output precision);
  • режим размещения блоков в линию (Alignment line);
  • свободно указываемый нулевой уровень (Zero line);
  • автоматическое сохранение параметров команды в чертеже.

  • Рис. 6. Диалоговое окно вставки блока уровня

    Заключение

    Рассказ получился недлинным, но ведь это еще не конец сказки. "Умные" блоки и программы ждут внедрения в практику. А начинается всё с простого - с мысли, что они могут облегчить нам жизнь. Конечно, возможности AutoCAD растут, но каждый пользователь в своей работе всегда может найти задачи, которые лучше решать индивидуально. Что же касается языка Visual LISP, то бытует мнение, что он не выдержит испытания временем, и его вытеснят VBA и ARX. Надеюсь, такого не случится. Это интересный инструмент с большими возможностями, хорошо приспособленный для разработки приложений, подобных описанному.

    Ближе познакомиться со смарт-блоком отметки уровня и с другими полезными разработками можно на сайте www.kitox.com. В сентябре 2003 г. CADdepot.com отметил набор пользовательских команд KitoX Тools как лучший инструмент недели (заметим, что на этом портале собраны утилиты не только для AutoCAD, но и для других систем. - Прим. ред.). Попробуйте!

    Copyright © CAD/CAM/CAE Observer # 2 (15)/2004