2 - 2014

JavaScript — эффективный инструмент конструктора-технолога для расширения функциональности САПР БАЗИС (часть 1)

Павел Бунаков

Несмотря на многообразие возможностей и развитость инструментов проектирования в современных САПР, у любого пользователя всегда найдутся проблемы и задачи, для решения которых их будет недостаточно. Здесь может быть несколько различных вариантов: либо используемая система предлагает слишком «громоздкий» способ, либо она неэкономична в плане компьютерных ресурсов, либо требуется приобретение достаточно дорогих программных модулей, предназначенных для решения более общих проблем. Одним словом, причин для «неудовлетворенности» работой любой САПР может быть достаточно много, несмотря на то, что в целом существенных претензий к ней нет. Просто по мере приобретения профессионального опыта и опыта автоматизированного проектирования пользователь часто «вырастает» из используемой системы. Возникает противоречие: он понимает, как можно быстро и «красиво» решать стоящие перед ним задачи, но не находит для этого адекватных инструментов.

Перейти на другую систему — не вариант. Даже в том случае, если в ней окажутся инструменты для эффективного решения некоторой конкретной задачи, через какое­то время возникнут другие, и всё вернется на круги своя. Ни одна система не сможет учесть пожелания и запросы всех своих потенциальных пользователей. Затраты же на адаптацию к новой системе и перевод в нее уже наработанных проектов могут оказаться весьма существенными. Хорошо, если предприятие небольшое, а конструктор и технолог — это один и тот же человек. В противном случае может оказаться, что далеко не всем сотрудникам новая система по нраву…

Гораздо более перспективным является другой вариант: «найти» в системе средства расширения функциональности и реализовать с их помощью свои идеи. Безусловно, для этого придется изучить основы программирования, но, как известно, дорогу осилит идущий. Тем более что это не такая уж «страшная» штука, и в этом автор постарается убедить, по крайней мере, одну часть великого сообщества инженеров­проектировщиков — конструкторов и технологов мебельных предприятий. Если же в используемой САПР нет никаких средств расширения функциональности или хотя бы перспектив их появления — это может говорить только об одном: критерии выбора системы были в свое время недостаточно продуманы. Но это тема отдельного разговора.

Параметризация — путь к успеху

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

Одной из особенностей проектирования корпусной мебели является необходимость выполнения целого ряда типовых операций для различных изделий, например установка полкодержателей, штанг или пантографов, фрезеровка кухонных фасадов, облицовка кромок панелей. При этом на разных предприятиях алгоритмы их выполнения могут быть различными. Это зависит от технологии изготовления, используемого оборудования, особенностей применяемой фурнитуры и других моментов. Реализовать все эти нюансы в коммерческой САПР, ориентированной на массовое применение, невозможно. Значит, «спасение утопающих — дело рук самих утопающих».

Именно параметризация предоставляет неограниченные возможности для автоматизации специфических проектных операций. Важным ее преимуществом является то, что разработка параметрических моделей, алгоритмов и пользовательских диалогов осуществляется штатными средствами базовой САПР — теми привычными средствами, с которыми пользователь работает в режиме диалога при традиционном проектировании изделий. Меняется только способ обращения к ним.

Параметризация позволяет выполнять сложные проектные операции и вносить изменения в модель несколькими простыми движениями. Это существенно экономит время создания проектов и вносит определенную упорядоченность в работу конструктора или технолога.

Скриптовые языки программирования

Как отмечалось выше, для того чтобы в полной мере ощутить всю прелесть параметризации, необходимо научиться программировать. В системе БАЗИС средством расширения функциональности является скриптовый язык программирования JavaScript.

Скриптом, как известно, называется некоторый программный сценарий выполнения определенной последовательности действий. Синтаксис и семантика команд в скрипте определяются соответствующей предметной областью. Другими словами, «мебельные» скрипты системы БАЗИС оперируют объектами, из которых создается корпусная мебель, — панелями, крепежной и декоративной фурнитурой, конструкционными и облицовочными материалами и т.д. При этом команды языка соответствуют привычным проектным операциям, например установить панель в заданном месте, облицевать торец панели, скрепить две панели определенным образом. Помимо этого скриптовый язык включает простые алгоритмические структуры управления, такие как присвоение значений, ветвления и циклы, а также ряд вспомогательных функций.

Скриптовые языки являются прекрасным инструментом для людей, которые только начинают изучать программирование. Для написания неплохих прикладных программ достаточно знать только структуру языка и, естественно, уметь работать в базовой САПР.

Рис. 1. Проектируемая модель

Рис. 1. Проектируемая модель

Скриптовые языки идеально сочетают простоту программирования с высокой гибкостью. К тому же скрипты имеют открытый код, то есть всегда можно взять разработанный кем­то модуль и без особого труда подстроить его для решения собственных задач.

В силу того что в скриптах САПР БАЗИС практически отсутствуют какие­либо ограничения на доступ к возможностям системы, уровню вложенности формируемых объектов и сложности геометрических форм, можно создавать программы любого уровня подробности и детализации, вплоть до автоматического построения целого мебельного ансамбля.

Однако из­за большого количества возможных вариаций необходимы определенные ограничения на сложность скриптов, компромиссные решения между усложнением программы и разделением ее на более простые фрагменты.

В системе БАЗИС разработана универсальная среда создания параметрических моделей. Тем не менее следует четко представлять себе, что первостепенное значение имеют все­таки знания предметной области и навыки проектирования. Скрипты — это мощный инструмент, который при грамотном использовании открывает практически неограниченные возможности для повышения производительности труда конструкторов и технологов.

Язык JavaScript настолько прост в изучении, что можно немедленно приступить к написанию более­менее сложного скрипта.

Как написать свой скрипт

Для демонстрации принципов создания скриптов разработаем программу построения параметрической модели тумбочки, показанной на рис. 1. Программу можно набрать в любом текстовом редакторе, сохранить в файле и загружать по мере необходимости. Однако более удобным является использование встроенного редактора (рис. 2).

Рис. 2. Окно встроенного редактора скриптов

Рис. 2. Окно встроенного редактора скриптов

Создадим скрипт для построения тумбочки из двух основных функций:

MakeProperties() — определение параметров;

Make() — построение тумбочки с заданными параметрами.

Основное тело скрипта будет выглядеть так:

FileOptions = ‘Настройки.xml’;

MakeProperties();

Action.Properties.Load(FileOptions);

Action.OnFinish = function() {

 Action.Properties.Save(FileOptions);

}

BtnMake = NewButtonInput(‘Закончить’);

BtnMake.OnChange = function() {

 Make();

 Action.Finish();

}

Make();

Action.Continue();

Дадим краткие комментарии к командам:

  • строка FileOptions = ‘Настройки.xml’; — задает имя файла для сохранения текущих значений параметров тумбочки;
  • вызов функции MakeProperties(); — активирует окно ввода параметров построения;
  • Action.Properties.Load(FileOptions); — загрузка заданных параметров из файла с именем FileOptions в активный скрипт, который определяется ключевым словом Action;
  • свойство OnFinish активного скрипта определяет действие, которое необходимо выполнить после построения объекта с заданными параметрами. В данном случае они будут сохраняться для последующего использования;
  • строка BtnMake = NewButtonInput(‘Закончить’); — позволяет создать кнопку для управления построением тумбочки. Последующие строчки определяют действия, выполняемые при нажатии на эту кнопку: построение тумбочки — Make(), завершение работы — Action.Finish(), то есть результат построения добавляется в текущую модель редактора БАЗИС­Мебельщик, после чего работа скрипта заканчивается. После этого построенная модель тумбочки становится частью проектируемого изделия, к которой применимы любые операции графического редактора;
  • Make(); — построение тумбочки с текущими параметрами в области скрипта;
  • Action.Continue(); — ожидание реакции пользователя. К моменту выполнения данной команды на экране монитора расположены модель тумбочки, окно ввода параметров и кнопка Закончить. Пользователь может изменять те или иные параметры и визуально оценивать результаты перестроения. При получении требуемого варианта он нажимает на кнопку, и модель передается в БАЗИС­Мебельщик.

Это весь код основной части скрипта.

Функция ввода параметров

Для ввода параметров скрипта используется стандартное окно свойств редактора БАЗИС­Мебельщик, которое состоит из двух столбцов: первый — название параметра, второй — его значение. Конфигурацию окна, то есть необходимый набор параметров и их значений, определяет пользователь при помощи обращения к определенным функциям (рис. 3).

Рис. 3. Окно свойств скрипта

Рис. 3. Окно свойств скрипта

Описание любой функции начинается с ключевого слова и ее имени. В рассматриваемом случае — function MakeProperties(). Далее создается объект, соответствующий окну свойств, в который последовательно добавляются нужные свойства:

 Prop = Action.Properties;

 Image = Prop.NewImage(‘Схема изделия’, ‘Схема.jpg’);

 Image.MaxHeight = 250;

Результатом выполнения этих команд будет отображение окна свойств и вывод свойства с именем Схема изделия и значением в виде изображения с максимальной высотой 250 пикселов, загруженного из файла Схема.jpg.

Основными конструктивными размерами тумбочки являются габариты, отступ от уровня пола до дна и размер фаски под плинтус на боковинах. Для формирования соответствующих объектов задаются команды:

 Dl = Prop.NewNumber(‘Ширина’, 500);

 Gl = Prop.NewNumber(‘Глубина’, 400);

 H = Prop.NewNumber(‘Высота’, 700);

 Hd = Prop.NewNumber(‘Размер до дна’, 50);

 Fas = Prop.NewNumber(‘Размер фаски’, 50);

В этом случае, например, ширина тумбочки будет задаваться в строке с соответствующим параметром, а ее значение по умолчанию равняться 500 мм. В программу значение ширины передается через свойство Value объекта Dl, то есть Dl.Value.

Далее определяем материал панелей корпуса и внутренней полки, а также облицовочные материалы для видимых и невидимых кромок панелей, объединяя эти свойства в группу с названием Корпус:

 Korpus = Prop.NewGroup(‘Корпус’)

 MatKorp = Korpus.NewMaterial(‘Материал корпуса’);

 KrVidimKorp = Korpus.NewButt(‘Видимая кромка’);

 KrNotVidimKorp = Korpus.NewButt(‘Невидимая кромка’);

По умолчанию в качестве материалов будут установлены те материалы, которые определены в системе БАЗИС­Мебельщик в качестве текущих для построения. Для их изменения необходимо соответствующую строку сделать активной и нажать кнопку выбора. После этого появится стандартное окно со списком материалов, в котором назначается новый текущий материал (рис. 4).

Рис. 4. Ввод материала корпуса

Рис. 4. Ввод материала корпуса

Аналогичным образом определяем группу для задания материала задней стенки:

BackWall = Prop.NewGroup(‘Задняя стенка’);

MatBackWall = BackWall.NewMaterial(‘Материал’);

Последняя группа свойств определяет параметры двери:

Door = Prop.NewGroup(‘Дверь’)

MatDoor = Door.NewMaterial(‘Материал’);

KrDoor = Door.NewButt(‘Кромка’);

Petli = Door.NewFurniture(‘Петли’);

Назначение первых трех команд очевидно. Четвертая команда активирует стандартный диалог выбора фурнитуры (рис. 5).

Рис. 5. Окно выбора фурнитуры

Рис. 5. Окно выбора фурнитуры

Далее формируем профиль и контур фрезерования. Профиль (сечение) фрезы представляет собой замкнутый контур, который создается средствами редактора БАЗИС­Мебельщик и записывается в файл в виде фрагмента. Следовательно, для определения профиля фрезы надо вызвать диалог открытия файла. После выбора нужного файла его имя будет присвоено свойству Value объекта фурнитуры Freza и отображено в строке Профиль фрезы.

Это делается следующей группой команд:

Freza = Dver.NewSelector(‘Профиль фрезы’);

Freza.OnClick = function() {

Freza.Value = system.askFileName(‘frw’);

};

Далее переходим к определению контура, по которому будет выполняться фрезерование. В мебельной промышленности фасады с фрезеровкой называют филенчатыми, или, кратко, филенкой. Предположим, что создаваемый скрипт будет иметь возможность формировать четыре типа различных контуров. В этом случае для выбора нужного типа контура надо предусмотреть раскрывающийся список из четырех строк (комбинация символов \n является разделителем строк):

TipFilenki = Dver.NewCombo(‘Тип филенки’, ‘Тип1\nТип2\nТип3\nТип4’);

Для построения контура и его позиционирования на фасаде задаются еще два числовых параметра: радиус сопряжения и расстояние от края панели до соответствующей стороны:

 OtstupFil = Dver.NewNumber(‘Отступ филенки от края’, 80);

 Rad = Dver.NewNumber(‘Радиус сопряжений’, 80);

В завершение определения структуры окна свойств добавим кнопку, которая будет управлять передачей в редактор БАЗИС­Мебельщик модели построенной тумбочки, а также определим те действия, которые будут выполняться при ее нажатии:

 OkBtn = Prop.NewButton(‘Построить’);

 OkBtn.OnClick = function() {

 Make();

 Action.Finish();

 }

Данными командами формирование конфигурации окна свойств можно закончить. Однако в этом случае для контроля того, как изменение какого­либо параметра влияет на вид тумбочки, придется нажимать кнопку Построить. Это не очень удобно. Организуем перестроение модели при любом изменении параметров с одновременным анализом их корректности. В качестве примера такого анализа приведем проверку, не превышает ли размер фаски отступа от пола:

Prop.OnChange = function() {

if (Fas.Value > Hd.Value) alert (‘Фаска больше отступа от пола.’)

Make();

 }

При некорректном соотношении высоты фаски и отступа от пола вызывается системная функция alert, которая выдает предупреждающее сообщение. Естественно, что для корректной работы скрипта необходимо проверять все взаимозависимые комбинации параметров и выполнять перестроение модели только при отсутствии ошибок.

Рабочая область скрипта

Все построения посредством команд скрипта выполняются в его рабочей области, которая автоматически формируется при запуске скрипта, и по умолчанию параллельно передаются в графический редактор БАЗИС­Мебельщик. Это далеко не всегда удобно. Так, в рассматриваемом примере построения тумбочки логичнее было бы сначала изменением параметров добиться желаемого результата, а только потом передать модель в редактор.

Для управления рабочей областью скрипта и ее взаимодействия с редактором БАЗИС­Мебельщик существуют следующие инструменты:

  • свойство активного скрипта Action.Continue() — позволяет отобразить содержимое рабочей области скрипта и остановить его выполнение в ожидании реакции пользователя. Если результаты построения правильны, то для их передачи в редактор БАЗИС­Мебельщик и завершения работы скрипта достаточно выполнить любую команду редактора, например установить панель. Если же правой кнопкой мыши вызвать контекстное меню и в выпадающем списке выбрать строку Отменить команду, то скрипт завершится без передачи информации в редактор. В обоих случаях рабочая область скрипта будет очищена;
  • метод активного скрипта Action.Commit() — предназначен для передачи всех объектов, созданных на данный момент из рабочей области скрипта, в область редактора БАЗИС­Мебельщик. При этом рабочая область скрипта очищается, но скрипт продолжает работать;
  • метод активного скрипта Action.Finish() — работает аналогично предыдущему, только он завершает работу скрипта;
  • метод активного скрипта Action.Cancel() — завершение работы скрипта с очисткой его рабочей области, но без передачи информации в редактор;
  • функция DeleteNewObjects() — очистка рабочей области скрипта.

Заключение

Таким образом, реализация возможности разработки встроенных программ на языке JavaScript позволяет создавать приложения, расширяющие функциональность САПР БАЗИС, интерфейс которых полностью соответствует интерфейсу системы. Для завершения формирования скрипта построения тумбочки осталось только запрограммировать сам процесс построения. Это не более сложная задача, чем программирование интерфейса, но об этом — в следующей статье.

САПР и графика 2`2014

Популярные статьи

Будущее CAM-систем

Статья знакомит с современным состоянием функционала CAM-систем, делает своеобразный экскурс в прошлое программного обеспечения для станков с ЧПУ, дает прогноз развития технологий, рынка и возможностей CAM-систем к 2020 году

Новая линейка профессиональной графики NVIDIA Quadro — в центре визуальных вычислений

Компания NVIDIA обновила линейку своих профессиональных графических карт Quadro. Новая архитектура Maxwell и увеличенный объем памяти позволяют продуктивно работать с более сложными моделями в самых высоких разрешениях. Производительность приложений и скорость обработки данных стали вдвое выше по сравнению с предыдущими решениями Quadro

OrCAD Capture. Методы создания библиотек и символов электронных компонентов

В этой статье описаны различные приемы и способы создания компонентов в OrCAD Capture, которые помогут как опытному, так и начинающему пользователю значительно сократить время на разработку библиотек компонентов и повысить их качество