КОМПАС-3D V10 на 100 %
Шрифт:
// doc3 – указатель на интерфейс ksDocument3D
// построенной детали
doc3.SaveAs(“C:\gear.m3d”);
doc3.close;
// закрытие диалогового окна
Close;
5. Перейдите в главный файл проекта. В раздел uses подключите три дополнительных модуля: ksConstTLB, LDefin3D и LDefin2D. Эти модули понадобятся для объявления объектов интерфейсов, участвующих в создании трехмерного фантома. В начало процедуры входа в библиотеку, сразу после инициализации объекта KompasObject, добавьте код проверки активного документа (листинг 6.16).
// получаем указатель на активный трехмерный документ
doc3 := ksDocument3D(kompas.ActiveDocument3D);
// если указатель nil или документ является деталью
if (doc3 = nil) or (doc3.IsDetail) then
begin
// выдаем сообщение и прекращаем работу библиотеки
kompas.ksMessage(“Текущий документ не является сборкой!”);
kompas := nil;
exit;
end;
6. После закрытия диалогового окна библиотеки документ КОМПАС-Деталь, который и так создавался в невидимом режиме, закрывается, поэтому ничего пока происходить не будет. Чтобы организовать вставку модели фантомом в произвольную точку сборки, после завершения модального показа окна библиотеки должен выполниться следующий код (листинг 6.17). Разумеется, переменные doc3, rInfo и iPart должны быть предварительно объявлены в разделе var функции LibraryEntry.
// если построение не было отменено
if not GearsForm.cancel then
begin
// возвращаем доступ к главному окну
kompas.ksEnableTaskAccess(1);
// получаем интерфейс новой детали в сборке
iPart := ksPart(doc3.GetPart(pNew_Part));
// устанавливаем имя файла компонента
iPart.fileName := “C:\gear.m3d”;
// интерфейс запроса пользователя об указании
// точки вставки
rInfo := ksRequestInfo3D(doc3.GetRequestInfo(iPart));
// задаем функцию обратной связи
rInfo.SetCallBack(“SELECTCALLBACKPROC”, hInstance, nil);
// создаем фантом колеса
rInfo.CreatePhantom;
// если пользователь установил компонент
if doc3.UserGetPlacementAndEntity(0) then
begin
// размещаем его
iPart.SetPlacement(rInfo.GetPlacement);
doc3.SetPartFromFile(“C:\gear.m3d”, iPart, true);
iPart.UpdatePlacement;
end;
end
else kompas.ksEnableTaskAccess(1);
7. После завершения работы библиотеки (пользователь указал точку вставки и зафиксировал компонент) уничтожаем форму и обнуляем все использовавшиеся переменные (листинг 6.18).
GearsForm.Free; // освобождаем объект формы
Application.Handle := 0; // обнуляем дескриптор главного окна
doc3.SetActive; // делаем активным окно текущей сборки
doc3 := nil; // обнуляем указатель на документ
kompas := nil; // и на КОМПАС
В листинге 6.17 одним из методов интерфейса ksRequestInfo3D объекту этого интерфейса передается адрес функции обратного вызова SELECTCALLBACKPROC. Эту функцию система вызывает из библиотеки каждый раз, когда пользователь указывает какой-либо объект в окне документа или фиксирует точку. В общем случае внутри этой функции происходит фильтрация указанных пользователем объектов и реализация определенных действий по результатам фильтрации. Например, при вставке болта из библиотеки стандартных изделий вы сначала указываете цилиндрическую поверхность, куда вставится болт (то есть отверстие под болт), а потом плоскую грань, на которую установится шапочка болта. Причем система точно знает, что именно вы указали (сначала цилиндрическую грань, затем плоскую) и какие сопряжения в зависимости от заданного трехмерного элемента накладывать на
В нашей программе мы не будем реализовывать фильтр выбранных объектов, то есть при вставке модели колеса в документ нужно будет просто указать точку в трехмерном пространстве сборки. По этой причине функция обратного вызова будет чрезвычайно проста (листинг 6.19).
function SelectCallBackProc(entity: ksEntity; rInfo: ksRequestInfo3D): integer;
stdcall; Export;
begin
Result := 1;
end;
Чтобы КОМПАС мог вызывать эту функцию из библиотеки, ее обязательно следует объявить как экспортную (листинг 6.20).
exports
LibraryName name “LIBRARYNAME”,
LibraryId name “LIBRARYID”,
LibraryEntry name “LIBRARYENTRY”,
SelectCallBackProc name “SELECTCALLBACKPROC”;
На этом все. Скомпилируйте проект и запустите библиотеку. Теперь КОМПАС будет создавать трехмерную модель в скрытом режиме. Сразу же после завершения построения трехмерная модель колеса появится в окне активной сборки в фантомном отображении, перемещаясь за указателем мыши (рис. 6.26).
Рис. 6.26. Вставка модели, созданной библиотекой, в виде фантома в произвольную точку сборки
Чтобы вставить модель зубчатого колеса в сборку, необходимо указать точку вставки, щелкнув кнопкой мыши в нужном месте окна представления документа или задав координаты вручную, после чего обязательно нажать кнопку Создать объект на панели специального управления (или воспользоваться сочетанием клавиш Ctrl+Enter).
Еще одной важнейшей особенностью этого приложения является то, что оно запускается только при активном документе типа КОМПАС-Сборка. Для всех других типов документов или для случая, когда активных документов вообще нет, библиотека будет выдавать сообщение (рис. 6.27) и сразу прекращать работу.
Рис. 6.27. Сообщение библиотеки о неверном типе документа
С помощью такой обновленной библиотеки вы можете создавать сразу несколько различных зубчатых колес и вставлять их в сборку (рис. 6.28).
Рис. 6.28. Трехмерные модели зубчатых колес, создаваемые библиотекой Gears miniCAD
Файлы с исходными кодами этой версии мини-САПР зубчатых колес вы найдете на прилагаемом к книге компакт-диске в папке Examples\Глава 6\Delphi Programming\GearsEx. В этом же каталоге размещен уже скомпилированный файл библиотеки GearsEx.rtw.
Таким образом, КОМПАС-Мастер – это очень мощные инструментальные средства разработки приложений (библиотек) неограниченной сложности, функционирующих в среде КОМПАС-3D. С помощью этих средств программист может получить доступ ко всем без исключения функциям системы. Все, что пользователь делает вручную (будь то создание или редактирование графического документа, открытие и закрытие файлов, работа со спецификациями, создание таблиц, оформление чертежей, сохранение файлов в различных форматах, вставка рисунков и т. д.), можно автоматизировать с использованием КОМПАС-Мастер.