Подключение к SolidWorks.
Предисловие: В тексте используются примеры работающие в 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 (библиотека констант), а тaкже ComObj.
Оболочка 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,SldWorks_TLB,SwConst_TLB,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;
Желаем приятной работы.