| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für SOLIDWORKS |
| |
| Moderne CAx Entwicklungsmethoden: Generatives Design, Gitternetzstrukturen & MBD, ein Webinar am 11.10.2024
|
Autor
|
Thema: Per Makro Bemaßung in einer Skizze mit einer Globalen Variable verbinden (2071 mal gelesen)
|
Thor16 Mitglied Konstrukteur
Beiträge: 82 Registriert: 27.08.2019 SolidWorks 2022 Windows 10 x64
|
erstellt am: 27. Aug. 2019 14:35 <-- editieren / zitieren --> Unities abgeben:
Hallo zusammen, wir haben vor kurzem auf Arbeit als 3D CAD-System SolidWorks eingeführt. Seitdem hat mir das Forum schon bei der Lösung einiger Probleme weitergeholfen. Derzeit arbeite ich mich etwas in die Makroerstellung ein. Was soweit auch ganz gut funktioniert. Jetzt bin ich aber an einen Punkt angekommen, wo ich bisher noch keine Lösung gefunden habe. Ich erstelle über ein Makro eine Skizze in welcher ein Kreis erzeugt wird. Bis hier funktioniert alles problemlos. Jetzt möchte ich die Durchmesserbemaßung des Kreises mit einer vorhandenen Globalen Variable verknüpfen. Das funktioniert aber leider nicht. Bisher habe ich es nur geschafft die Variable zu finden und den Wert der Variable an die Bemaßung zu übergeben. Damit ändert sich aber die Bemaßung nicht, wenn ich die Globale Variable ändere. Wie kann ich mit einem Makro den Namen der Globalen Variable an die Bemaßung übergeben? Danke und viele Grüße Thor16
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
HenryV Mitglied Konstrukteur, Engineering
Beiträge: 817 Registriert: 18.05.2005 SolidWorks 2022 x64 SP5.0 Dell Precision 5820 Intel Xeon W-2125 4x4GHz NVIDIA Quadro P2000 5GB 32GB RAM 2x Dell U2412M, 24" TFT Windows 10 Enterprise x64 22H2 Microsoft 365 E5 Microsoft Visual Studio Enterprise 2022
|
erstellt am: 28. Aug. 2019 12:02 <-- editieren / zitieren --> Unities abgeben: Nur für Thor16
Gemäss Beispiel Add and Modify Equations Example (VBACode: Sub main() Dim swApp As SldWorks.SldWorks Dim swModel As SldWorks.ModelDoc2 Dim swEquationMgr As SldWorks.EquationMgr Dim longEquation As Long Set swApp = Application.SldWorks Set swModel = swApp.ActiveDoc Set swEquationMgr = swModel.GetEquationMgr 'Debug.Print swModel.GetConfigurationCount If swModel.GetConfigurationCount = 1 Then longEquation = swEquationMgr.Add2(-1, """D1@Skizze1"" = ""NewDiameter""", True) Else longEquation = swEquationMgr.Add3(-1, """D1@Skizze1"" = ""NewDiameter""", True, swAllConfiguration, Empty) End If End Sub
[Diese Nachricht wurde von HenryV am 28. Aug. 2019 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Thor16 Mitglied Konstrukteur
Beiträge: 82 Registriert: 27.08.2019 SolidWorks 2022 Windows 10 x64
|
erstellt am: 28. Aug. 2019 14:27 <-- editieren / zitieren --> Unities abgeben:
Hallo HenryV, vielen Dank, das hat mir schon mal ordentlich weiter geholfen! Allerdings habe ich noch ein kleines Problem. Über eine Abfrage bekomme ich den Namen der Globalen Variable, als String, in mein Makro. Wie kann ich jetzt "NewDiameter" mit diese Variable tauschen? Wenn ich "NewDiameter" herauslösche und dafür meine Stringvariable eintrage kommt immer eine Fehlermeldung. Code: longEquation = swEquationMgr.Add2(-1, """D1@Skizze1"" = ""NewDiameter""", True) ändern in longEquation = swEquationMgr.Add2(-1, """D1@Skizze1"" = "Name_GlobVar"", True) Wie muss ich den Code anpassen das es funktioniert? Vielen Dank und viele Grüße Thor16 Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
HenryV Mitglied Konstrukteur, Engineering
Beiträge: 817 Registriert: 18.05.2005 SolidWorks 2022 x64 SP5.0 Dell Precision 5820 Intel Xeon W-2125 4x4GHz NVIDIA Quadro P2000 5GB 32GB RAM 2x Dell U2412M, 24" TFT Windows 10 Enterprise x64 22H2 Microsoft 365 E5 Microsoft Visual Studio Enterprise 2022
|
erstellt am: 28. Aug. 2019 15:08 <-- editieren / zitieren --> Unities abgeben: Nur für Thor16
|
Thor16 Mitglied Konstrukteur
Beiträge: 82 Registriert: 27.08.2019 SolidWorks 2022 Windows 10 x64
|
erstellt am: 28. Aug. 2019 15:22 <-- editieren / zitieren --> Unities abgeben:
Hallo HenryV, vielen Dank für die Antwort! Da wäre ich selbs wahrscheinlich nie drauf gekommen... Woran kann es liegen, dass es nur funktioniert wenn die Skizze geschlossen ist? Es wäre zwar kein Problem die Verknüpfung der Bemaßung mit der Globalen Variable erst am Ende des Makros zu machen, aber noch schöner wäre es während der Erstellung der ganzen Geometrie. Gibt es eine Möglichkeit den Code noch dahingehend zu ändern? Viele Grüße Thor16 Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
HenryV Mitglied Konstrukteur, Engineering
Beiträge: 817 Registriert: 18.05.2005 SolidWorks 2022 x64 SP5.0 Dell Precision 5820 Intel Xeon W-2125 4x4GHz NVIDIA Quadro P2000 5GB 32GB RAM 2x Dell U2412M, 24" TFT Windows 10 Enterprise x64 22H2 Microsoft 365 E5 Microsoft Visual Studio Enterprise 2022
|
erstellt am: 28. Aug. 2019 16:17 <-- editieren / zitieren --> Unities abgeben: Nur für Thor16
|
Thor16 Mitglied Konstrukteur
Beiträge: 82 Registriert: 27.08.2019 SolidWorks 2022 Windows 10 x64
|
erstellt am: 29. Aug. 2019 06:59 <-- editieren / zitieren --> Unities abgeben:
Hallo HenryV, komischerweise läuft es bei mir heute Morgen auch innerhalb der Skizze. Dafür bekomme ich jetzt eine Fehlermeldung bei dem Code nach Else. Der Fehlercode lautet "Fehler beim Kompilieren: Argument ist nicht optional" Code: Sub main() Dim swApp As SldWorks.SldWorks Dim swModel As SldWorks.ModelDoc2 Dim swEquationMgr As SldWorks.EquationMgr Dim longEquation As Long Dim Name_GlV As String Dim Name_GlobVar As String Set swApp = Application.SldWorks Set swModel = swApp.ActiveDoc Set swEquationMgr = swModel.GetEquationMgr 'Debug.Print swModel.GetConfigurationCount Name_GlV = "Breite" If swModel.GetConfigurationCount = 1 Then longEquation = swEquationMgr.Add2(-1, """D1@Skizze1"" = """ & Name_GlV & """", True) Else longEquation = swEquationMgr.Add3(1, """D1@Skizze1"" = """ & Name_GlV & """", swAllConfiguration, Empty) End If End Sub
Wenn ich diese Zeile auskommentiere läuft das Makro durch. Woran kann das liegen? *Edit: Kann man auch "D1@Skizze1" mit einer Variable ersetzen? Wenn ich folgendes eintrage Code: longEquation = swEquationMgr.Add2(-1, """ & Name_Skizze &"" = """ & Name_GlV & """", True)
wird eine neue Globale Variable mit dem Namen "& Name_Skizze &" erstellt. Viele Grüße Thor16
[Diese Nachricht wurde von Thor16 am 29. Aug. 2019 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Lunik Mitglied Konstrukteur
Beiträge: 44 Registriert: 05.07.2017 Hardware -Intel Xeon W2123 -Nvidia Quadro P2000 -32GB RAM --------------------- Software -Windows 10 Professional 64bit -SolidWorks 2018 SP5.0 -Office 2010 --------------------- Sonstiges -SpaceMousePro Wireless -CadMouse Wireless
|
erstellt am: 29. Aug. 2019 08:44 <-- editieren / zitieren --> Unities abgeben: Nur für Thor16
Guten Morgen, auf die schnelle versuch es mal so: longEquation = swEquationMgr.Add2(-1, "" & Name_Skizze & " = " & Name_GlV & "", True) Damit sollten die Variabeln eingesetzt werden, aktuell hattest du zu viele " womit die Variabelnamen als Text eingesetzt wurden.
------------------ Grüße Lukas Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Thor16 Mitglied Konstrukteur
Beiträge: 82 Registriert: 27.08.2019 SolidWorks 2022 Windows 10 x64
|
erstellt am: 29. Aug. 2019 09:35 <-- editieren / zitieren --> Unities abgeben:
Hallo Lukas, vielen Dank für deine Antwort. Leider funktioniert es bei mir nicht. Das Makro läuft ganz normal durch, ohne dass irgendetwas in der Skizze oder bei den Gleichungen passiert. Woran kann das liegen? Viele Grüße Torsten
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
bk.sc Ehrenmitglied V.I.P. h.c. Konstrukteur Sondermaschinenbau
Beiträge: 2795 Registriert: 18.07.2012 -Solid Works 2019 SP5 -Pro Engineer WF 3
|
erstellt am: 29. Aug. 2019 11:01 <-- editieren / zitieren --> Unities abgeben: Nur für Thor16
Hallo Torsten, ach ja, die wunderbare Welt der Gänsefüßchen beim Zusammenbauen von Strings . Ich denke mal es fehlen einmal Gänsefüßchen am Anfang, dass vor dem Bemaßungsausdruck auch nochmal welche stehen, da diese wahrscheinlich nicht mit der Variable kommen. Code: longEquation = swEquationMgr.Add2(-1, """ & Name_Skizze &"" = """ & Name_GlV & """", True)
wird zu Code: longEquation = swEquationMgr.Add2(-1, """" & Name_Skizze &"" = """ & Name_GlV & """", True)
am besten kannst du sowas testen wenn du deine gewünschte Eingabe mal mit Debug.Print ins Überwachungsfenster schreiben lässt, natürlich sollten die Variablen zu diesem Zeitpunkt schon belegt sein. Code: Debug.Print """" & Name_Skizze &"" = """ & Name_GlV & """"
Gruß Bernd ------------------ --- Man muß nicht alles wissen, man muß nur wissen wo es steht --- Staatlich anerkannte Deutschniete Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Lunik Mitglied Konstrukteur
Beiträge: 44 Registriert: 05.07.2017 Hardware -Intel Xeon W2123 -Nvidia Quadro P2000 -32GB RAM --------------------- Software -Windows 10 Professional 64bit -SolidWorks 2018 SP5.0 -Office 2010 --------------------- Sonstiges -SpaceMousePro Wireless -CadMouse Wireless
|
erstellt am: 29. Aug. 2019 11:19 <-- editieren / zitieren --> Unities abgeben: Nur für Thor16
Hallo zusammen, habe das ganze jetzt auch mal ausprobiert. Mit diesem Code funktioniert es so wie du es gerne hättest (wenn ich dich richtig verstanden habe), allerdings nur wenn man mehr als eine Konfiguration im Teil hat: Code: Sub main() Dim SwApp As SldWorks.SldWorks Dim Part As SldWorks.ModelDoc2 Dim swEquationMgr As SldWorks.EquationMgr Dim longEquation As Long Dim Wert As String Set SwApp = Application.SldWorks Set Part = SwApp.ActiveDoc Set swEquationMgr = Part.GetEquationMgr If swEquationMgr Is Nothing Then ErrorMsg SwApp, "Failed to get the equation manager" 'Add a global variable assignment at index, 0, to all configurations longEquation = swEquationMgr.Add3(0, """Durchmesser"" = 15mm", True, swAllConfiguration, Empty) If longEquation <> 0 Then ErrorMsg SwApp, "Failed to add a global variable assignment" Skizzenname = """" & "D" & "1" & "@" & "Skizze1" & """" Variable = " = ""Durchmesser""" Wert = Skizzenname & Variable Debug.Print Wert 'Add a dimension equation at index, 1, to all configurations longEquation = swEquationMgr.Add3(1, Wert, True, swAllConfiguration, Empty) If longEquation <> 1 Then ErrorMsg SwApp, "Failed to add a dimension equation" 'Modify dimension equation at index, 1, in all configurations 'longEquation = swEquationMgr.SetEquationAndConfigurationOption(1, """D1@Skizze1"" = Durchmesser", swAllConfiguration, Empty) 'If longEquation <> 1 Then ErrorMsg SwApp, "Failed to modify a dimension equation" End Sub Function ErrorMsg(SwApp As Object, Message As String) SwApp.SendMsgToUser2 Message, 0, 0 SwApp.RecordLine "'*** WARNING - General" SwApp.RecordLine "'*** " & Message SwApp.RecordLine "" End Function
Ich dachte dann ich ersetze das swAllConfiguration durch swThisConfiguration um den Code für die aktuelle Konfiguration und auch den Code für Teile mit nur einer Konfiguration zu nutzen, was allerdings nicht auf die schnelle funktioniert hat. Hier nochmal als Code: Code: longEquation = swEquationMgr.Add3(1, Wert, True, swAllConfiguration, Empty)
zu Code: longEquation = swEquationMgr.Add3(1, Wert, True, swThisConfiguration, Empty)
Hoffe trotzdem ich konnte dir weiterhelfen, vielleicht findet ja sonst noch jemand eine Lösung zu dem Konfigurationsporblem.
------------------ Grüße Lukas [Diese Nachricht wurde von Lunik am 29. Aug. 2019 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Thor16 Mitglied Konstrukteur
Beiträge: 82 Registriert: 27.08.2019 SolidWorks 2022 Windows 10 x64
|
erstellt am: 29. Aug. 2019 12:10 <-- editieren / zitieren --> Unities abgeben:
Hallo an alle Helfer, vielen Dank für die Hilfe jetzt funktioniert es genauso wie ich es wollte Hier noch einmal die finale Version Code: Sub main() Dim swApp As SldWorks.SldWorks Dim swModel As SldWorks.ModelDoc2 Dim swEquationMgr As SldWorks.EquationMgr Dim longEquation As Long Dim Name_GlV As String Dim Name_Skizze As String Dim Name_Skizze_mG As String Set swApp = Application.SldWorks Set swModel = swApp.ActiveDoc Set swEquationMgr = swModel.GetEquationMgr 'Debug.Print swModel.GetConfigurationCount Name_GlV = "Breite" Name_Skizze = "D1@Skizze1" 'MsgBox Name_Skizze Debug.Print """" & Name_Skizze &"" = """ & Name_GlV & """" If swModel.GetConfigurationCount = 1 Then longEquation = swEquationMgr.Add2(-1, """" & Name_Skizze & """ = """ & Name_GlV & """", True) Else 'longEquation = swEquationMgr.Add3(1, "" & Name_Skizze & " = " & Name_GlV & "", swAllConfiguration, Empty) End If End Sub
Viele Grüße Torsten [Diese Nachricht wurde von Thor16 am 29. Aug. 2019 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |