Знакомимся с SolidWorks из Delphi: Подключение

Предисловие: В тексте используются примеры работающие в SolidWorks2007 и Delphi 7.

Существует 2 способа работы с SolidWorks:
1. Используя библиотеки .tlb;
2. Используя Variant.
Второй способ более гибок, но ошибку в коде иногда можно определить только после запуска программы.
Выбор того или иного способа лежит за вами.
Рассмотрим оба способа.

1. Используя библиотеки .tlb.
Приведем пример кода.

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs,SldWorks_TLB,SwConst_TLB,StdCtrls,ComObj;

procedure TForm1.Button1Click(Sender: TObject);
var
swapp:TSldWorks;
md:IModelDoc2;
part:IPartDoc;
ass:IAssemblyDoc;
Dr:IDrawingDoc;
begin
swapp:=Tsldworks.Create(nil);
Md:=SWapp.ActiveDoc as IModelDoc2;
if md.GetType=1 then
begin
part:=md as Ipartdoc;
button1.caption:=md.GetTitle+'- Модель';
end;
if md.GetType=2 then
begin
ass:=md as IAssemblyDoc;
button1.caption:=md.GetTitle+'- Сборка';
end;
if md.GetType=3 then
begin
Dr:=md as IDrawingDoc;
button1.caption:=md.GetTitle+'- Чертеж';
end;
end;
Первое что мы сделали — это подключили библиотеки SldWorks_TLB (основная библиотека) и SwConst _TLB(библиотека констант), а тaкже ComObj — для работы с COM объектами.
Оболочка Solidworks имеет тип TSldWorks;
Любой активный документ ImodelDoc2;
Модель — IPartDoc;
Сборка — IAssemblyDoc;
Чертеж — IDrawingDoc.
Подключение к SolidWorks осуществляется функцией Tsldworks.Create(nil).
Далее получаем указатель на активный документ.
Выражение «as <Тип>» используется для приведения типа IDispatch к нужному нам типу.
С помощью функции GetType определяем тип активного документа, получаем указатели на объекты соответствующего типа (в данном случае указатели на документы) и выводим сообщение.

2. Используя Variant.
Приведем пример кода.

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs,SDMLib,StdCtrls,ComObj;

procedure TForm1.Button2Click(Sender: TObject);
VAR
swapp:variant;
md:variant;
part:variant;
ass:variant;
Dr:variant;
begin
try
swapp:=GetActiveOleObject('SldWorks.application');
except
end;
md:=swapp.ActiveDoc;
if md.GetType=1 then
begin
part:=md;
button2.caption:=md.GetTitle+'- Модель';
end;
if md.GetType=2 then
begin
ass:=md;
button2.caption:=md.GetTitle+'- Сборка';
end;
if md.GetType=3 then
begin
Dr:=md;
button2.caption:=md.GetTitle+'- Чертеж';
end;
end;
Первое что мы сделали — это подключили библиотеку ComObj.
Здесь все указатели имеют тип Variant;
Подключение к SolidWorks осуществляется функцией GetActiveOleObject('SldWorks.application');
Далее все точно также, только тип указывать не надо.Не обязательно было даже делать присвоение типа part:=md,
тогда код выглядел бы так:

procedure TForm1.Button2Click(Sender: TObject);
VAR
swapp:variant;
md:variant;
begin
try
swapp:=GetActiveOleObject('SldWorks.application');
except
end;
md:=swapp.ActiveDoc;
if md.GetType=1 then
button2.caption:=md.GetTitle+'- Модель';
if md.GetType=2 then
button2.caption:=md.GetTitle+'- Сборка';
if md.GetType=3 then
button2.caption:=md.GetTitle+'- Чертеж';
end;
Tags:
cad,solidworks,api,delphi

Данная статья не подлежит комментированию, поскольку её автор ещё не является полноправным участником сообщества. Вы сможете связаться с автором только после того, как он получит приглашение от кого-либо из участников сообщества. До этого момента его username будет скрыт псевдонимом.