| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für SOLIDWORKS |
| |
| E-Book: Simulation für Hightech Innovationen |
Autor
|
Thema: SolidWorks Makros mit externeem Programm (2189 mal gelesen)
|
Schalala Mitglied
Beiträge: 17 Registriert: 04.08.2015 Win 7 64-bit<P>SolidWorks 2014 x64 Edition<P>Visual Stuio 2013
|
erstellt am: 21. Okt. 2015 13:16 <-- editieren / zitieren --> Unities abgeben:
Hallo SolidWorks-Profis, ich beschäftige mich gerade mit SolidWorks Makros in C#. Ich arbeite immer so, dass ich im MakroEditor von SolidWorks arbeite. Ist es denn möglich auch mit einem externen Programm die Makros in SolidWorks auszuführen? Ich kann ja die ganzen SolidWorks-Bibliotheken im Programmcode aufnehmen. Aber wie kann ich SolidWorks sagen, dass es auf die Befehle reagieren soll. Ich hoffe mein Problem ist deutlich geworden. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
GDawg Ehrenmitglied V.I.P. h.c. Teamleiter FEM Simulation
Beiträge: 2622 Registriert: 12.07.2004 SolidWorks_2o2o SP3.o Win10_x64, Quadro_P2ooo. VisualStudio_2o19_Pro. FEM: Forge_NxT_HPC, ANSYS_WB. 3D-Printer: Ultimaker_2, Tinker_Gnome.
|
erstellt am: 21. Okt. 2015 14:54 <-- editieren / zitieren --> Unities abgeben: Nur für Schalala
Sieh dir dazu in der API-Hilfe, folgenden Eintrag an: RunMacro2 Methode. Dazu gibt es auch ein kleines Beispiel. EDIT: Und an SolidWorks kommst Du so: VB.net: Code:
Try Dim swApp As SldWorks = CType(System.Runtime.InteropServices.Marshal.GetActiveObject("SldWorks.Application"), SolidWorks.Interop.sldworks.SldWorks) Catch ex As Exception messagebox.show(ex.ToString) End Try
------------------
[Diese Nachricht wurde von GDawg am 21. Okt. 2015 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Schalala Mitglied
Beiträge: 17 Registriert: 04.08.2015 Win 7 64-bit<P>SolidWorks 2014 x64 Edition<P>Visual Stuio 2013
|
erstellt am: 21. Okt. 2015 16:17 <-- editieren / zitieren --> Unities abgeben:
Vielen Dank für den Ratschlag, ich bakomme aber bei der Code-Eingabe eine Fehlermeldung: Code:
swApp.RunMacro2("C:\\Makropfad\\Macro5.dll", "", "Main", swRunMacroOption_e.swRunMacroDefault, swRunMacroError);
Fehler: Der Name "swRunMacroError" ist im aktuellen Kontext nicht vorhanden. 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...
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: 21. Okt. 2015 16:45 <-- editieren / zitieren --> Unities abgeben: Nur für Schalala
|
Schalala Mitglied
Beiträge: 17 Registriert: 04.08.2015 Win 7 64-bit<P>SolidWorks 2014 x64 Edition<P>Visual Stuio 2013
|
erstellt am: 21. Okt. 2015 20:37 <-- editieren / zitieren --> Unities abgeben:
Ich bin was Programmierung angeht leider nicht sooo fit. Ein bisschen C# ist aber drin. Wenn du schreibst:
Zitat: Vergiss das .vbproj oder .csproj-Format bei den SolidWorks-Makros gleich wieder. Schreibe deine einfachen Geschichten in VBA (.swp), komplexere Dinge direkt in c# oder vb.net.
Wie mache ich das? Ich würde auch viel lieber in Visual Studio 2013 als in dem Editor von SolidWorks arbeiten. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
GDawg Ehrenmitglied V.I.P. h.c. Teamleiter FEM Simulation
Beiträge: 2622 Registriert: 12.07.2004 SolidWorks_2o2o SP3.o Win10_x64, Quadro_P2ooo. VisualStudio_2o19_Pro. FEM: Forge_NxT_HPC, ANSYS_WB. 3D-Printer: Ultimaker_2, Tinker_Gnome.
|
erstellt am: 22. Okt. 2015 07:38 <-- editieren / zitieren --> Unities abgeben: Nur für Schalala
Zitat: Original erstellt von KMassler: Mein Tipp: Vergiss das .vbproj oder .csproj-Format bei den SolidWorks-Makros gleich wieder. Schreibe deine einfachen Geschichten in VBA (.swp), komplexere Dinge direkt in c# oder vb.net.Siehe auch hier
Da bin ich nicht gleicher Meinung. Ich schreibe auch "einfache" Dinge gleich in mein SolidWorks-Addin. Somit (wenn die IT Lust dazu hat!) kann das Addin paketiert und verteilt werden. Zitat: Original erstellt von Schalala: Wie mache ich das? Ich würde auch viel lieber in Visual Studio 2013 als in dem Editor von SolidWorks arbeiten.
Du hast doch die Vorlage heruntergeladen und installiert? Benutze sie auch. Wenn Du ein Addin machen willst, vergiss nicht VS als Admin zu starten. "Normale" Programme kannst Du mit - siehe erste Antwort - an SolidWorks binden und normal programmieren (siehe SolidWorks API). Hier, eine ur-ur-uralte Funktion, welche ich vor Jahren mal geschrieben hatte (nicht aktuell und kann sein, dass sie nicht mehr funktioniert - dient nur als Beispiel): Knüpft sich an SolidWorks und prüft ob Dokumente offen sind. Wenn ja, wird der Benutzer gefragt was zu tun ist.
Code:
Public Function CheckForOpenFilesInSolidWorks() As Boolean CheckForOpenDocs: Dim intResult As Integer Dim OpenDrawings As String = "" Try Dim swApp As SldWorks = CType(System.Runtime.InteropServices.Marshal.GetActiveObject("SldWorks.Application"), SolidWorks.Interop.sldworks.SldWorks) Catch ex As Exception MessageBox.Show(ex.ToString) End Try ModelDoc = CType(swApp.GetFirstDocument, ModelDoc2) If ModelDoc Is Nothing Then Return True Exit Function Else ModelDoc = CType(swApp.GetFirstDocument, ModelDoc2) Do While Not ModelDoc Is Nothing If ModelDoc.Visible Then OpenDrawings &= ModelDoc.GetPathName.ToString & System.Environment.NewLine End If ModelDoc = CType(ModelDoc.GetNext, ModelDoc2) Loop intResult = MsgBox("Es sind Dokumente offen: " & System.Environment.NewLine & System.Environment.NewLine & OpenDrawings & System.Environment.NewLine & " Bitte schliessen Sie zuerst alle geöffnete Zeichnungen!" & System.Environment.NewLine & System.Environment.NewLine & System.Environment.NewLine & "Abbrechen, um die Zeichnungen zu schliessen.", _ MsgBoxStyle.AbortRetryIgnore) If intResult = vbAbort Then ModelDoc = CType(swApp.GetFirstDocument, ModelDoc2) Do While Not ModelDoc Is Nothing If ModelDoc.Visible Then swApp.CloseDoc(ModelDoc.GetTitle) End If ModelDoc = CType(swApp.GetFirstDocument, ModelDoc2) Loop Return False ElseIf intResult = vbRetry Then Return CheckForOpenFilesInSolidWorks() Else Return True End If End If End Function
Schalala: Mehr als das kann ich für dich nicht machen. Den Rest must du schon selber erarbeiten. ------------------
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...
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: 22. Okt. 2015 11:40 <-- editieren / zitieren --> Unities abgeben: Nur für Schalala
Zitat: Original erstellt von GDawg:
Da bin ich nicht gleicher Meinung. Ich schreibe auch "einfache" Dinge gleich in mein SolidWorks-Addin. Somit (wenn die IT Lust dazu hat!) kann das Addin paketiert und verteilt werden.
Da darfst du auch gerne anderer Meinung sein Jeder hat halt so seine Arbeitsweisen. Für Kleinkram, den ich mal eben schnell brauche, oder der ein paar Zeilen nicht übersteigt, nehme ich immer noch gern VBA. Da verwende ich gerne auch den Makrorecorder, um kleine Schnipsel zu erstellen und die dann in meinem Makro zusammen zu stellen, ohne mir über das Objektmodell oder eine Programmstruktur irgendwelche Gedanken machen zu müssen. Für alles größere oder langlebigere oder Projekte, die verteilt werden müssen, nehme ich dann eben vb.net (mit c# konnte ich mich noch nicht anfreunden) ------------------ Klaus www.al-ko.com | mein Gästebuch Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
GDawg Ehrenmitglied V.I.P. h.c. Teamleiter FEM Simulation
Beiträge: 2622 Registriert: 12.07.2004 SolidWorks_2o2o SP3.o Win10_x64, Quadro_P2ooo. VisualStudio_2o19_Pro. FEM: Forge_NxT_HPC, ANSYS_WB. 3D-Printer: Ultimaker_2, Tinker_Gnome.
|
erstellt am: 23. Okt. 2015 06:06 <-- editieren / zitieren --> Unities abgeben: Nur für Schalala
Zitat: Original erstellt von Schalala: Vielen Dank für den Ratschlag, ich bakomme aber bei der Code-Eingabe eine Fehlermeldung:Code:
swApp.RunMacro2("C:\\Makropfad\\Macro5.dll", "", "Main", swRunMacroOption_e.swRunMacroDefault, swRunMacroError);
Fehler: Der Name "swRunMacroError" ist im aktuellen Kontext nicht vorhanden.
Numm einfach eine normale Variable (Integer) und verwende diese. swRunMacroError gibt es nur in VBA; siehe Anhang. ------------------
[Diese Nachricht wurde von GDawg am 23. Okt. 2015 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |