end;
Сохраните и скомпилируйте проект, после чего запустите библиотеку и выполните ее единственную команду. В результате библиотека выдаст первое приветственное сообщение (рис. 6.23).
Рис. 6.23. Сообщение, посланное библиотекой
Внимание!
При компиляции проекта прикладная библиотека должна быть обязательно отключена в менеджере библиотек, иначе компилятор сообщит об ошибке.
Исходные файлы этой простейшей библиотеки, а также сам исполняемый файл приложения Hello_KOMPAS.rtw находятся на прилагаемом к книге компакт-диске в папке ExamplesГлава 6Delphi ProgrammingFirstLib. При попытке компиляции исходных файлов на своем компьютере вы должны учитывать, что куда бы ни были скопированы исходники с диска, пути к файлам библиотек КОМПАС, указанные в настройках проекта, будут отличаться. По этой причине перед компиляцией обязательно отредактируйте эти пути (см. рис. 6.22) и лишь после этого выполняйте сборку библиотеки.
Разработка мини-САПР зубчатых колес
Для лучшего усвоения прочитанного материала разработаем мини-САПР, создающую по минимальному количеству исходных данных 3D-модель зубчатого колеса (как прямозубого, так и косозубого). В общих чертах задача такова: после вызова библиотеки пользователем появляется диалоговое окно, в котором он задает модуль, количество зубьев, ширину зубчатого венца, а также угол наклона зубьев колеса. По введенным параметрам, после нажатия кнопки Построение, библиотека должна сгенерировать трехмерную модель колеса.
Выполните заготовку конструкторской библиотеки, как это было описано в предыдущем разделе. Чтобы немного облегчить себе задачу, вы можете воспользоваться готовым шаблоном, для чего скопируйте все исходные файлы предыдущего примера в новую директорию (назовем ее Gears3D) и сохраните проект под новым именем (Gears3D.dpr). Обязательно отредактируйте пути к файлам библиотек КОМПАС (то есть к папке Gears3Ddcu) в настройках проекта. Измените название библиотеки на Gears miniCAD и оставьте старый идентификатор библиотеки. Скопируйте из папки SDKInclude в каталог Gears3Ddcu еще один файл с описаниями констант, использующимися при инициализации различных интерфейсов, – ksConstTLB.pas. Затем можно, наконец, приступать к выполнению проекта.
Поскольку взаимодействие с пользователем планируется осуществлять с помощью диалогового окна, в проект необходимо добавить диалоговую форму. Для этого выполните команду File > New > Form, после чего в инспекторе объектов настройте часть свойств формы (табл. 6.8), оставив остальные заданными по умолчанию.
После создания формы Delphi автоматически сгенерировал модуль (unit) с кодом ее описания. Удалите из этого модуля описание глобальной переменной GearsForm типа TGearsForm и сохраните модуль под именем BuildUnit.pas.
Добавьте на форму по четыре текстовых метки (TLabel) и поля ввода (TEdit), а также две кнопки (TButton). Присвойте им заголовки Построение и Отмена.
Разместите указанные элементы управления приблизительно так, как показано на рис. 6.24.
Рис. 6.24. Форма будущего диалогового окна библиотеки
После создания формы необходимо обеспечить ее вывод в окне КОМПАС. Задача, на первый взгляд, сложная, но решается просто. Для вывода диалогового окна библиотеки нужно сделать следующее.
1. Получить дескриптор главного окна КОМПАС.
2. Запретить доступ пользователю к главному окну программы.
3. Создать объект диалогового окна и вывести его на экран в модальном режиме.
4. После закрытия пользователем окна библиотеки уничтожить окно и вернуть управление главным окном КОМПАС пользователю.
5. Обнулить дескриптор приложения.
Реализовать эту последовательность действий лучше всего в процедуре точки входа в библиотеку (листинг 6.10).
procedure LibraryEntry (command: WORD); pascal;
var GearsForm : TGearsForm;
begin
kompas := KompasObject(CreateKompasObject);
if (kompas = nil) then exit;
// получаем дескриптор главного окна КОМПАС
Application.Handle := kompas.ksGetHWindow;
// запрещаем доступ к главному окну
kompas.ksEnableTaskAccess(0);
// создаем объект диалогового окна
GearsForm := TGearsForm.Create(Application);
GearsForm.ks := kompas;
// выводим диалог на экран
GearsForm.ShowModal;
// удаляем объект
GearsForm.Free;
// возвращаем доступ к окну
kompas.ksEnableTaskAccess(1);
Application.Handle := 0;
kompas := nil;
end;
В приведенном фрагменте кода есть одна, на первый взгляд, непонятная строка – GearsForm.ks := kompas;. В действительности, здесь все просто. Поскольку обработка построения зубчатого колеса будет выполнена внутри класса формы TGearsForm, то для того, чтобы в нем не получать заново указатель на интерфейс KompasObject, этот указатель передается внешней переменной ks класса TGearsForm. Разумеется, эту переменную (типа KompasObject) необходимо предварительно добавить в раздел public описания класса формы. Перед этим подключите в разделе uses модуля BuildUnit следующие файлы (модули): ksTLB, ksAuto, ksConstTLB, LDefin3D, LDefin2D и math (последний не относится к КОМПАС API, это стандартный модуль математических функций Delphi).
Скомпилируйте проект и подключите полученную библиотеку Gears3D.rtw к КОМПАС. Запустите ее и убедитесь, что после выполнения ее единственной команды в центре главного окна появляется созданное нами диалоговое окно.
Перейдем к реализации обработчиков щелчка на кнопках. Начнем со второй (Отмена), поскольку ее обработчик чрезвычайно прост. Щелкните дважды в редакторе форм на кнопке Отмена и в обработчике, автоматически созданном в редакторе кода, введите всего одну строку, закрывающую форму (листинг 6.11).
procedure TGearsForm.Button2Click(Sender: TObject);
begin
if CloseQuery then Close;
end;
Процедура обработки нажатия кнопки Построение намного сложнее. Условно ее можно разделить на три части.
1. Расчет геометрических параметров зубчатого колеса по введенным исходным данным.
2. Создание пустого документа КОМПАС-Деталь.
3. Собственно построение модели зубчатого колеса.