Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  SolidWorks
  API: Grundsätzliches

Antwort erstellen  Neues Thema erstellen
CAD.de Login | Logout | Profil | Profil bearbeiten | Registrieren | Voreinstellungen | Hilfe | Suchen

Anzeige:

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen nächster neuer Beitrag | nächster älterer Beitrag
  
Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für SOLIDWORKS
Autor Thema:  API: Grundsätzliches (1494 mal gelesen)
ronny82
Mitglied
Konstrukteur


Sehen Sie sich das Profil von ronny82 an!   Senden Sie eine Private Message an ronny82  Schreiben Sie einen Gästebucheintrag für ronny82

Beiträge: 24
Registriert: 16.01.2008

SWX 2014

erstellt am: 28. Jan. 2008 14:16    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Hallo,
diese objektorienterte Programmierweise ist für mich allein mit der Hilfe nicht durchschaubar.
Ich bekomme schon das initialisieren nicht hin.

Bsp.: Ich möchte das GetType aus dem ModelDoc2 nutzen als Makro

----------------------
Dim swApp As Object
Dim swModel As Object
Dim swType As Object
Dim retval As Long


Sub main()

Set swApp = Application.SldWorks  'SolidWorks verwenden
Set swModel = swApp.ActiveDoc      'ActivesModell verwenden
Set swMdoc2 = swModel.ModelDoc2    'ModelDoc2 Objekt verwenden; Ist hier der Fehler?


retval = swMdoc2.GetType()        'Methode GetType aus oben definierten Objekt verwenden
                                  'und in retval ablegen
MsgBox (retval)                    'Rückgabewert aus Gettype ausgeben

End Sub

Was mache ich verkehrt? Was habe ich noch nicht verstanden?
In einigen Beispielen fand ich beim Deklarieren der Variablen teilweise folgende Ausdrücke

Bsp.: ''dim swapp as sldworks.sldworks''
Sind beide Wege möglich und ich spare mir so einfach nur das setzen der Objekte?

Ronny

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Baumjäger
Mitglied
CAD/PDM Administrator


Sehen Sie sich das Profil von Baumjäger an!   Senden Sie eine Private Message an Baumjäger  Schreiben Sie einen Gästebucheintrag für Baumjäger

Beiträge: 339
Registriert: 21.06.2006

SW2017 - S5.0
AutoCAD Mechanical 2018
Win10
Intel Xeon E3-1240 V2 3,4GHz
16GB RAM
NVIDIA Quadro 4000

erstellt am: 28. Jan. 2008 15:34    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für ronny82 10 Unities + Antwort hilfreich

Bin auch kein Profi Programmierer, daher von mir nur zwei Anfänger Tips die mir sehr geholfen haben.

1. Du kannst auch Makros aufnehmen und diese dann anschauen, das hilft oft weiter.
2. Grundsätzliche VisualBasic kenntnisse sind sehr sehr sinnvoll. Es gibt zB vb2005 Express für umsonst,und nen Haufen Hilfe im internet oder als Buchform wie VB grundsätzlich funktioniert.

Habe leider kein Zeit mir dein Problem anzuschauen, mit meinen Kenntnissen dauert das leider betimmt wieder zu lange. Aber vllt. helfen dir ja mein Vorschläge weiter.

viele Grüße Andy

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

KMassler
Ehrenmitglied V.I.P. h.c.
CAD Admin + Mädchen für Alles...



Sehen Sie sich das Profil von KMassler an!   Senden Sie eine Private Message an KMassler  Schreiben Sie einen Gästebucheintrag für KMassler

Beiträge: 2675
Registriert: 06.11.2000

SolidWorks Start 1999
** CSWP 01/2008 **
------------------
Zuletzt beruflich:
- SWX2020 SP5;
- SAP/PLM+ECTR;
- DriveWorks Pro;
- Programmierung:
VBA, aktuell Visual Studio 2022/VB.Net
------------------
ab 2024 (privat):
Onshape und anderes

erstellt am: 28. Jan. 2008 15:50    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für ronny82 10 Unities + Antwort hilfreich

Warum 2x das Model-Object bestimmen?

Code:

Sub main()

Set swApp = Application.SldWorks  'SolidWorks verwenden
Set swModel = swApp.ActiveDoc      'ActivesModell verwenden
' Set swMdoc2 = swModel.ModelDoc2    'ist überflüssig, das ModelObject hast du schon in swModel


retval = swModel.GetType()        'Methode GetType aus oben definierten Objekt verwenden
                                  'und in retval ablegen
MsgBox (retval)                    'Rückgabewert aus Gettype ausgeben

End Sub


------------------
Klaus

www.al-ko.com | mein Gästebuch | privat...

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Piet
Mitglied
Konstruktionsleiter & Konstrukteur


Sehen Sie sich das Profil von Piet an!   Senden Sie eine Private Message an Piet  Schreiben Sie einen Gästebucheintrag für Piet

Beiträge: 661
Registriert: 20.11.2001

SWx 2021

erstellt am: 28. Jan. 2008 17:36    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für ronny82 10 Unities + Antwort hilfreich

Wenn du das Late Binding benutzt (siehe Forumssuche), musst du deinem Programm beibringen, welche Werte .getType annehmen kann.

Füg mal in die Variablendeklarationen dies ein:

Const swDocPART = 1
Const swDocASSEMBLY = 2
Const swDocDRAWING = 3

Gruß,
Piet

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

ronny82
Mitglied
Konstrukteur


Sehen Sie sich das Profil von ronny82 an!   Senden Sie eine Private Message an ronny82  Schreiben Sie einen Gästebucheintrag für ronny82

Beiträge: 24
Registriert: 16.01.2008

SWX 2014

erstellt am: 29. Jan. 2008 09:11    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Hallo,
aber woher weiß dann SolidWorks welches GetType() es verwenden soll? Diese Methode gibt es doch auch bei anderen Objekten.

Gruß Ronny

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

jens_oliver
Mitglied
Softwareentwickler


Sehen Sie sich das Profil von jens_oliver an!   Senden Sie eine Private Message an jens_oliver  Schreiben Sie einen Gästebucheintrag für jens_oliver

Beiträge: 114
Registriert: 28.06.2005

erstellt am: 29. Jan. 2008 09:32    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für ronny82 10 Unities + Antwort hilfreich

hi,

ja aber die Methode gehört zum Objekt und ist keine Funktion.

Wenn du "Early Binding" (dim swapp as sldworks.sldworks) benutzt weiß das Programm es schon während des kompilierens.
Es gibt dir auch eine Fehlermeldung aus, wenn die Methode nicht existiert. Wenn du einen Punkt nach dem Objekt eintippst schlägt dir der Editor auch alle möglichen Methoden und Member vor.

Beim "Late Binding" wird das Objekt erst zur Laufzeit definiert/erzeugt. Somit wird beim kompilieren nicht überprüft ob die Methode für das Objekt existiert (wie auch). 

Ich arbeite auch immer mit der Option "Option explicit" (einfach in die erste Zeile schreiben). Damit zwingst du dich selber alle Variablen zu definieren/deklarieren.

Gruß Oliver

------------------
Software nach Maß für Ihr CAD-System
www.ib-knepper.de

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

ronny82
Mitglied
Konstrukteur


Sehen Sie sich das Profil von ronny82 an!   Senden Sie eine Private Message an ronny82  Schreiben Sie einen Gästebucheintrag für ronny82

Beiträge: 24
Registriert: 16.01.2008

SWX 2014

erstellt am: 29. Jan. 2008 12:24    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Hallo,
ok, ich nehme mal an, wenn ich bei "late binding" die Konstanten nicht definiere, nimmt er die aus der Lib, auf welche die aktuelle SWXSolidWorks Session verweisst? Ist ja kein selbstständiges Programm.

Nochmal zu meinem Bsp. Irgendwie habe ich das Gefühl, ich bin nahe dran am Verständniss, aber es ich brauche noch einen Schupps.

Dim swApp As Object
Dim swModel As Object
Dim swDim As Object
Dim retval As Long

Sub main()

Set swApp = Application.SldWorks
Set swModel = swApp.ActiveDoc
retval = swModel.GetType()
MsgBox (retval)

Soweit ok, auch wenn mir das mit den Methoden noch etwas unklar ist.
Nun noch ein anderes GetType im Makro aus ModelDoc2.Dimension
wie muß ich das definieren, das ich da rankomme?
Irgendwie komme ich auch mit der VB Hilfe und VB Forum nicht dahinter.

Set swDim = ?????                'schon viel probiert und ständig
                                  'andere Fehler
retval = swDim.GetType()
MsgBox (retval)
End Sub


Gruß Ronny

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

jens_oliver
Mitglied
Softwareentwickler


Sehen Sie sich das Profil von jens_oliver an!   Senden Sie eine Private Message an jens_oliver  Schreiben Sie einen Gästebucheintrag für jens_oliver

Beiträge: 114
Registriert: 28.06.2005

erstellt am: 29. Jan. 2008 13:11    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für ronny82 10 Unities + Antwort hilfreich

bitte versuche es erstmal mit "early binding" und "option explicit".
ich denke, der kompiler wird dir dann schon den ein oder anderen schupps geben.

gruß oliver

------------------
Software nach Maß für Ihr CAD-System
www.ib-knepper.de

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

KMassler
Ehrenmitglied V.I.P. h.c.
CAD Admin + Mädchen für Alles...



Sehen Sie sich das Profil von KMassler an!   Senden Sie eine Private Message an KMassler  Schreiben Sie einen Gästebucheintrag für KMassler

Beiträge: 2675
Registriert: 06.11.2000

SolidWorks Start 1999
** CSWP 01/2008 **
------------------
Zuletzt beruflich:
- SWX2020 SP5;
- SAP/PLM+ECTR;
- DriveWorks Pro;
- Programmierung:
VBA, aktuell Visual Studio 2022/VB.Net
------------------
ab 2024 (privat):
Onshape und anderes

erstellt am: 29. Jan. 2008 13:43    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für ronny82 10 Unities + Antwort hilfreich

Wäre vielleicht ganz hilfreich, wenn du uns sagen würdest, was du eigentlich machen willst. Wenigstens grob

------------------
Klaus

www.al-ko.com | mein Gästebuch | privat...

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

ronny82
Mitglied
Konstrukteur


Sehen Sie sich das Profil von ronny82 an!   Senden Sie eine Private Message an ronny82  Schreiben Sie einen Gästebucheintrag für ronny82

Beiträge: 24
Registriert: 16.01.2008

SWX 2014

erstellt am: 30. Jan. 2008 14:56    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Hallo,
mir geht es hier einfach nur um das Grundverständnis für das Arbeiten mit Objekten und Methoden bzw. wie ich auf diese zugreifen kann.
Mein wissen von Assembler und Pascal hilft mir hier nicht wirklich weiter und ich scheine zu blöd zu sein, die Hilfe bzw. anderes Tutorial richtig zu interpretieren.
Deshalb hier das einfache Bsp. etwas weiter oben.
Leider helfen mir Meldungen wie "Objekt nicht definiert" etc. nicht weiter.
Mir fehlt sozusagen die Grammatik für VBA 

Gruß Ronny

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

KMassler
Ehrenmitglied V.I.P. h.c.
CAD Admin + Mädchen für Alles...



Sehen Sie sich das Profil von KMassler an!   Senden Sie eine Private Message an KMassler  Schreiben Sie einen Gästebucheintrag für KMassler

Beiträge: 2675
Registriert: 06.11.2000

SolidWorks Start 1999
** CSWP 01/2008 **
------------------
Zuletzt beruflich:
- SWX2020 SP5;
- SAP/PLM+ECTR;
- DriveWorks Pro;
- Programmierung:
VBA, aktuell Visual Studio 2022/VB.Net
------------------
ab 2024 (privat):
Onshape und anderes

erstellt am: 30. Jan. 2008 15:04    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für ronny82 10 Unities + Antwort hilfreich

Lutz Federbusch
Ehrenmitglied V.I.P. h.c.
Dipl.-Ing. Maschinenbau



Sehen Sie sich das Profil von Lutz Federbusch an!   Senden Sie eine Private Message an Lutz Federbusch  Schreiben Sie einen Gästebucheintrag für Lutz Federbusch

Beiträge: 3094
Registriert: 03.12.2001

alle SW seit 97+
AutoCAD2016-2022
ERP ProAlpha + CA-Link
Intel Core i7-7820K 32GB
Win10x64 Quadro K5000
SpacePilot

erstellt am: 30. Jan. 2008 15:55    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für ronny82 10 Unities + Antwort hilfreich

"Objekt nicht definiert" ist doch schon mal eine Ansage und verweist auf einen konkreten Fehler: Prüfe jetzt die Zeile, in der das Auftritt (debuggen) ganz penibel, ob Du jede Variable und jedes Objekt deklariert hast und ob Du es auch mittels SET-Befehl schon gefüllt hast.
Du scheinst an die Bemaßungen heranzuwollen. Da mußt Du Dich durch die Objekthierarchie bewegen und Dir jeweils den nächsten Ansprechpartner - ein Objekt holen. Wenn Du Dich in SW gut auskennst, verstehst Du auch die Objekte besser. In der API-Hilfe werden für jedes Objekt die Eigenschaften und Methoden, die Du an ihnen anwenden kannst, beschrieben. Und die Objekthierarchie kannst Du auch grafisch sehen. Das nächste Übergeordnete ist normalerweise das, das Dir das Untergeordnete mit einer seiner Methoden geben kann. Du mußt Dich nur durchhangeln. Es klingt erstmal verwirrend, daß die alle gleich heißen - aber genau das ist gut so. So weißt Du gleich beim nächsten auch wieder, wie Du an den Typ kommst.
Bemaßungen sind noch dazu unterschiedlich in Teil/BG und Zeichnung. Zuerst brauchst Du die SolidWorksSitzung, dann das aktive Dokument und das untersuchst Du nach Typ und verzweigst für jede Dokumentart. So kommst Du dann an jedes Maß und deren Typ:
Ist Deine Abfrage fertig, mußt Du hier im Beispiel jeweils das nächste Maß, Feature, DisplayDimension, Ansicht, Teil, Blatt usw. (i.d.R. die Methode GetNext) holen...
Guck Dir für den Anfang am besten die API-Beispiele alle an und versuche zu verstehen, was da in welchen Schritten passiert. DerMakroRekorder taugt leider nicht allzuviel, besser ist da schon die Journaldatei als Tipgeber. Viel Erfolg!

Teil:

Set Feature = Teil.FirstFeature
    While Not Feature Is Nothing
        Set theDispDimen = Feature.GetFirstDisplayDimension
        While (Not theDispDimen Is Nothing)
            Set thedimen = theDispDimen.GetDimension
            If thedimen.GetToleranceType= ...
In der Baugruppe machst Du eine Traverse über alle Teile (dafür gibts Beispiele) und wendest bei jedem ansonsten die Routine fürs Teil an.

Zeichnung:
    Set swDraw = SwApp.ActiveDoc
    NumShts = swDraw.GetSheetCount
    For i = 1 To NumShts         ' blind zum ersten Blatt
        swDraw.SheetPrevious
    Next i
    For i = 1 To NumShts         ' alle Blätter durchwühlen
        Set swView = swDraw.GetFirstView   ' und jede Ansicht
        While Not swView Is Nothing           
            Set swDispDim = swView.GetFirstDisplayDimension
            While Not swDispDim Is Nothing
                Set Dimension = swDispDim.GetDimension
                If Dimension.GetToleranceType = ...


Lutz Federbusch
Mein Gästebuch
Der Mensch, Herr oder Sklave der Technik?]

[Diese Nachricht wurde von Lutz Federbusch am 31. Jan. 2008 editiert.]

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Piet
Mitglied
Konstruktionsleiter & Konstrukteur


Sehen Sie sich das Profil von Piet an!   Senden Sie eine Private Message an Piet  Schreiben Sie einen Gästebucheintrag für Piet

Beiträge: 661
Registriert: 20.11.2001

SWx 2021

erstellt am: 31. Jan. 2008 08:28    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für ronny82 10 Unities + Antwort hilfreich

Wenn ich bei der Makroprogrammierung auf einen Befehl stoße, der bestimmte Konstanten verlangt, oder zurückgibt, dann suche ich nach passenden Enumerationen in der entsprechenden swconst.bas. Die findest du auf Stefans Hilfeseite am Ende der Tabelle:
http://solidworks.cad.de/mm_index.htm

Piet

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Anzeige.:

Anzeige: (Infos zum Werbeplatz >>)

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen

nächster neuerer Beitrag | nächster älterer Beitrag
Antwort erstellen


Diesen Beitrag mit Lesezeichen versehen ... | Nach anderen Beiträgen suchen | CAD.de-Newsletter

Administrative Optionen: Beitrag schliessen | Archivieren/Bewegen | Beitrag melden!

Fragen und Anregungen: Kritik-Forum | Neues aus der Community: Community-Forum

(c)2024 CAD.de | Impressum | Datenschutz