Tech-Ecke / SolidWorks Automatisation

 

Diese Seiten haben nicht den Anspruch einen Einstieg SolidWorks-Automatisation über Delphi zu vermitteln. Es dreht sich hier vielmehr um eine Ansammlung von Codeschnipsel und Informationen welche man zum Teil per Copy & Paste in seinen eigenen Anwendungen verbauen kann.

Makros werden in SolidWorks in Visual Basic (VBA) aufgezeichnet, jedoch wird sich diese Seit mit dem Late-Binding  mittels Delphi befassen. Die Code-Schnipsel und Infos haben keinen strukturierten Aufbau und dienen in aller erster Linie für mich persönlich als Ablageort, aber wer was gebrauchen kann darf natürlich gerne zugreifen :-)


  Schnipsel

  Delphi OLE Template
  Dateiname und Dateipfad des aktiven Models
  Alle geladene Dokumente ermitteln
  Datei (CAD-Dokument) öffnen und schließen
   


Delphi OLE (Late-Binding)

  var
   swApp, swModel: Variant;
...

try
   swApp := GetActiveOleObject('SldWorks.Application');
   swApp.visible := true;

   // mach irgendwas...
except
   ShowMessage('Verbindung zu SolidWoks fehlgeschlagen!');
end;
 


Dateiname und Dateipfad des aktiven Models

  var
   swApp, swModel: Variant;
...
swApp := GetActiveOleObject('SldWorks.Application');
swModel := swApp.ActiveDoc;

Showmessage(swModel.GetTitle);  // zeige Modellname + Dateierweiterung des aktiven Modells
Showmessage(swModel.GetPathName); // zeige Dateipfad des aktiven Modells
 


Alle geladene Dokumente ermitteln (Parts, Assemblies...)

Die Dokumente werden hier mit dem Dateipfad erfasst, über diesen sie auch wieder direkt angesprochen werden können.

  var
swApp, swModel, ModelDoc: Variant;
slDocs: TStringList;
VariEmty: Boolean;
i: Integer;
...
swApp := GetActiveOleObject('SldWorks.Application');
swModel := swApp.ActiveDoc;

slDocs := TStringList.Create;

ModelDoc := swApp.GetFirstDocument;
slDocs.Add(ModelDoc.GetPathName);
VariEmty := false;
repeat
   try
      ModelDoc := ModelDoc.GetNext;
      if not VariEmty then slDocs.Add(ModelDoc.GetPathName);
   except VariEmty := true end;
until VariEmty = true;

Showmessage(IntToStr(slDocs.Count) +' Dokumente gefunden');
for i := 1 to slDocs.Count do
      Showmessage('Dokument ' +IntToStr(i) +': ' +ExtractFileName(slDocs[i -1]));

ListBox1.Items := slDocs;
slDocs.Free;
 


Datei (CAD-Dokument) öffnen und schließen
 
  var
   swApp, swModel: Variant;
   sModelPfad, Ref:String;
  
swOpenDocOptions, iFileError, iFileWarning:Interger;
...
swApp := GetActiveOleObject('SldWorks.Application');

// Dokument öffnen
swDocPART := 1; // 2 = Assembly, 3 = Drawing
swOpenDocOptions := 1; // Silent
Ref := '';
sModelPfad := 'C:\Model.SLDPRT';
swModel := swApp.OpenDoc6(sModelPfad, swDocPART, swOpenDocOptions_Silent, Ref, fileerror, filewarning);

// Dokument schließen
swApp.CloseDoc(swModel.GetPathName);

   
 

 


Links

  www.CAD.de - Forum

Die Option Drucken funktioniert erst ab Netscape V4.0 bzw. I-Explorer 5.0 !

[letzte Aktualisierung 13.07.2022]