Категории
Самые читаемые
ChitatKnigi.com » 🟢Компьютеры и Интернет » Программы » КОМПАС-3D V10 на 100 - Максим Кидрук

КОМПАС-3D V10 на 100 - Максим Кидрук

Читать онлайн КОМПАС-3D V10 на 100 - Максим Кидрук
1 ... 90 91 92 93 94 95 96 97 98 99
Перейти на страницу:

Шрифт:

-
+

Интервал:

-
+

Закладка:

Сделать

8. Перейдите на вкладку Application диалогового окна настроек проекта. В поле Target file extension введите расширение, которое будет применяться для файла будущей библиотеки – RTW. Нажмите OK, чтобы сохранить настройки.

Теперь можете сохранить проект и выполнить компиляцию (для этого воспользуйтесь командой Project → Compile Hello_KOMPAS или сочетанием клавиш Ctrl+F9). В результате в папке FirstLib должна появиться пока еще пустая и бесполезная библиотека, файл которой назван системой Hello_KOMPAS.rtw.

Чтобы RTW-библиотека, написанная на Delphi, могла взаимодействовать с КОМПАС, в ней обязательно должны присутствовать как минимум три функции (для сред программирования на базе языка C или C++ достаточно двух, так как функции LibraryName и LibraryId объединены в одну – unsigned int WINAPI LIBRARYID()):

• LibraryEntry – точка входа в библиотеку;

• LibraryName – возвращает имя библиотеки, отображаемое в менеджере библиотек;

• LibraryId – возвращает идентификатор библиотеки (позже его можно использовать при работе с самой библиотекой, для подключения списка меню ее команд и пр.).

Все эти функции обязательно должны быть экспортными, то есть экспортируемыми из данной DLL, чтобы система КОМПАС могла их видеть и вызывать. По этой причине их обязательно нужно вынести в раздел exports прикладной библиотеки.

Добавьте описание этих функций в вашу библиотеку (листинг 6.8).

Листинг 6.8. Три базовых функции RTW-библиотеки

library Hello_KOMPAS;

uses

SysUtils, Classes, ksTLB;

{$E rtw}

{$R *.res}

function LibraryName: PChar; pascal;

begin

Result := “Первая библиотека”;

end;

function LibraryId: integer; pascal;

begin

Result := 100;

end;

procedure LibraryEntry(command: WORD); pascal;

begin

end;

exports

LibraryName name “LIBRARYNAME”,

LibraryId name “LIBRARYID”,

LibraryEntry name “LIBRARYENTRY”;

begin

end.

Скомпилируйте полученный код и подключите файл библиотеки к КОМПАС. Убедитесь, что в окне менеджера отобразилось заданное в функции LibraryName имя библиотеки. Запускать приложение не нужно, поскольку все равно ничего не произойдет – будет вызываться пустая функция точки входа в библиотеку LibraryEntry.

Совет

Любая создаваемая вами на Delphi библиотека будет иметь три указанные функции. Вы можете сохранить проект на данном этапе в какую-либо другую папку и в дальнейшем при разработках новых библиотек использовать его как заготовку.

Теперь нужно сделать так, чтобы библиотека стала рабочей.

Сначала необходимо в раздел uses добавить еще один подключаемый модуль – ksAuto, а сам файл этого модуля (ksAuto.pas) перенести в каталог FirstLibdcu. Файл ksAuto.pas вместе с другими файлами библиотек API системы КОМПАС находится в каталоге SDKInclude папки, в которой установлена текущая версия КОМПАС-3D.

Внутри ksAuto.pas есть многочисленные ссылки на другие файлы с определением классов КОМПАС API. Явно подключать их в разделе uses не нужно, но следует перенести в один каталог с файлом ksAuto.pas. Для данного проекта достаточно всего четыре файла (для более сложных понадобятся, конечно, и другие): ks2DCOM-TLB.pas, LDefin2D.pas, LibTool.pas и LtDefine.pas. Просто скопируйте эти файлы из SDKInclude в папку FirstLibdcu вашего проекта.

В файле проекта объявите глобальную переменную kompas типа KompasObject, а в процедуру входа в библиотеку добавьте следующий код (листинг 6.9).

Листинг 6.9. Вывод текстового сообщения

uses

SysUtils, Classes, ksTLB, ksAuto;

{$E rtw}

{$R *.res}

// глобальная переменная приложения КОМПАС API

var kompas : KompasObject;

// код пропущен

procedure LibraryEntry(command: WORD); pascal;

begin

// инициализация объекта KompasObject

// с помощью функции CreateKompasObject

kompas := KompasObject(CreateKompasObject);

// если все прошло успешно

if (kompas = nil) then exit;

// выводим первое сообщение

kompas.ksMessage(“Привет из КОМПАСа!”);

// обнуляем переменную kompas

kompas := nil;

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), оставив остальные заданными по умолчанию.

Таблица 6.8. Настройка свойств формы диалогового окна библиотеки

После создания формы Delphi автоматически сгенерировал модуль (unit) с кодом ее описания. Удалите из этого модуля описание глобальной переменной GearsForm типа TGearsForm и сохраните модуль под именем BuildUnit.pas.

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

Разместите указанные элементы управления приблизительно так, как показано на рис. 6.24.

Рис. 6.24. Форма будущего диалогового окна библиотеки

После создания формы необходимо обеспечить ее вывод в окне КОМПАС. Задача, на первый взгляд, сложная, но решается просто. Для вывода диалогового окна библиотеки нужно сделать следующее.

1. Получить дескриптор главного окна КОМПАС.

2. Запретить доступ пользователю к главному окну программы.

3. Создать объект диалогового окна и вывести его на экран в модальном режиме.

4. После закрытия пользователем окна библиотеки уничтожить окно и вернуть управление главным окном КОМПАС пользователю.

5. Обнулить дескриптор приложения.

Реализовать эту последовательность действий лучше всего в процедуре точки входа в библиотеку (листинг 6.10).

Листинг 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 к КОМПАС. Запустите ее и убедитесь, что после выполнения ее единственной команды в центре главного окна появляется созданное нами диалоговое окно.

1 ... 90 91 92 93 94 95 96 97 98 99
Перейти на страницу:
Открыть боковую панель
Комментарии
Jonna
Jonna 02.01.2025 - 01:03
Страстно🔥 очень страстно
Ксения
Ксения 20.12.2024 - 00:16
Через чур правильный герой. Поэтому и остался один
Настя
Настя 08.12.2024 - 03:18
Прочла с удовольствием. Необычный сюжет с замечательной концовкой
Марина
Марина 08.12.2024 - 02:13
Не могу понять, где продолжение... Очень интересная история, хочется прочесть далее
Мприна
Мприна 08.12.2024 - 01:05
Эх, а где же продолжение?