| |
 | Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für SOLIDWORKS |
| |
 | FMB 2025, eine Veranstaltung am 04.11.2025
|
Autor
|
Thema: Makro alle Skizzen ausblenden (517 / mal gelesen)
|
KSAH Mitglied Freiberufler
 
 Beiträge: 265 Registriert: 18.06.2015 SolidWorks 2010 bis 2024
|
erstellt am: 20. Aug. 2025 22:28 <-- editieren / zitieren --> Unities abgeben:         
Servus Leute, vor Jahren hatte ich hier ein Makro gefunden, dass alle Skizzen in Baugruppen und Teilen ausblendet. Ich finde den Thread nicht mehr. Deshalb mache ich das hier auf. Ich habe mir ein Makro gebaut, das in Teilen die Feature neue Namen gibt. Aber das war so langsam gewesen. Dann stellte ich fest, zwischen Objekten in SWX kann man sehr schnell springen und lesen geht auch schnell. Nur wenn man was schreibt, dann verliert man Zeit. Durch diese Erkenntnis konnte ich mein Makro beschleunigen. Heute habe ich das alte Makro, dass Skizzen ausblendet neu geschrieben. Ich blende alle Skizzen, 3D Skizzen, Ebenen und Achsen aus. Nur um vieles schneller als das alte Makro. Im Anhang sind drei Bilder. Ich habe das letzte große Projekt von mir genommen und das Makro drüber gejagt. In nur 12 Minuten wurde alles ausgeblendet. Wenn man das Makro nochmal laufen lässt sind die 281.000 Feature in 3 Sekunden geprüft. Je mehr gefunden wird, desto länger dauert die Baearbeitung. Auch habe ich das Gefühl, das alte Makro ging nur 4 Ebenen rein. Ich habe es nicht so genau analysiert, da ich es mit Rekursion und getrimmt auf Zeit neu schreiben wollte. Ich stelle das Makro hier zur Verfügung. Vielleicht hilft es ja einigen. Viele Grüße Andreas [Diese Nachricht wurde von KSAH am 20. Aug. 2025 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
KSAH Mitglied Freiberufler
 
 Beiträge: 265 Registriert: 18.06.2015 SolidWorks 2010 bis 2024
|
erstellt am: 20. Aug. 2025 22:33 <-- editieren / zitieren --> Unities abgeben:         
Hier das Makro als SWP Datei und als Textdatei. Geschrieben auf SW2020. Getestet auf SW2024 Entweder die Verweise umsricken oder die Textdatei in ein neues Projekt laden. [Diese Nachricht wurde von KSAH am 20. Aug. 2025 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Christian_W Ehrenmitglied V.I.P. h.c. Konstrukteur (Dipl-Ing)
     
 Beiträge: 3382 Registriert: 04.04.2001 CSWP 12/2015<P>SWX2021sp5 Win10/11 (SWX2016, SWX2012) proAlpha6.2e00/calinkV9 (Tactonworks) (Medusa7, NesCAD2010, solidEdge19)
|
erstellt am: 21. Aug. 2025 12:33 <-- editieren / zitieren --> Unities abgeben:          Nur für KSAH
Hallo Andreas, Danke für das Makro. ich spendiere noch 5 Zeilen
Code:
Dim swFeatMgr As SldWorks.FeatureManager Set swFeatMgr = swModel.FeatureManager swFeatMgr.EnableFeatureTree = False swFeatMgr.EnableFeatureTree = True swFeatMgr.UpdateFeatureTree
Wenn du die (an den richtigen Stellen) in deinen Code einbaust, kannst du vermutlich noch ein paar Minuten schneller werden. Gruß, Christian
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
KSAH Mitglied Freiberufler
 
 Beiträge: 265 Registriert: 18.06.2015 SolidWorks 2010 bis 2024
|
erstellt am: 21. Aug. 2025 14:58 <-- editieren / zitieren --> Unities abgeben:         
Hallo Christian, stimmt. Geht noch besser. Siehe Bild. Und da habe ich noch nach allem Kurven gesucht. ich blende jetzt Helix und alle blau dargestellten Kurven aus. Also mehr Rechnen und das in weniger Zeit. wenn nichts gefunden wird braucht das Makro jetzt 3,5 Sekunden stat 3. Mein anderes Makro, das Feature umbenennt hat es massivst beschleunigt. (von 25 Sekunden auf ein pass Millisekunden)
Ich muss noch testen und probieren. Deshalb noch kein Malro. Gruß Andreas Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Christian_W Ehrenmitglied V.I.P. h.c. Konstrukteur (Dipl-Ing)
     
 Beiträge: 3382 Registriert: 04.04.2001 CSWP 12/2015<P>SWX2021sp5 Win10/11 (SWX2016, SWX2012) proAlpha6.2e00/calinkV9 (Tactonworks) (Medusa7, NesCAD2010, solidEdge19)
|
erstellt am: 22. Aug. 2025 09:24 <-- editieren / zitieren --> Unities abgeben:          Nur für KSAH
Der Witz an der Funktion mit dem Featurebaum ist, dass man ihn am Ende auch wieder einschalten muss ... und dass SolidWorks selber es bei einer Funktion mal geschafft hat, ihn zu deaktivieren und nicht wieder einzuschalten  (das war mal bei drag-and-drop vom Teil Konfigurationsmanager in eine Baugruppe) Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
KSAH Mitglied Freiberufler
 
 Beiträge: 265 Registriert: 18.06.2015 SolidWorks 2010 bis 2024
|
erstellt am: 22. Aug. 2025 09:46 <-- editieren / zitieren --> Unities abgeben:         
Moin Erstmal davon wissen. Ich habe nach so einen Schalter in der API gesucht. Fand aber nur das mit der Baugruppe. Der Schalter bewirkt aber fast nichts. Und wenn man was ausschaltet sollte man es wieder einschalten. Spannend wird es wenn SWX bzw das Makro abstürzt. Ah, ich muss den Schalter in den Debug-Modus mit einbeziehen. Ich muss eh noch einiges tun. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Christian_W Ehrenmitglied V.I.P. h.c. Konstrukteur (Dipl-Ing)
     
 Beiträge: 3382 Registriert: 04.04.2001 CSWP 12/2015<P>SWX2021sp5 Win10/11 (SWX2016, SWX2012) proAlpha6.2e00/calinkV9 (Tactonworks) (Medusa7, NesCAD2010, solidEdge19)
|
erstellt am: 22. Aug. 2025 11:36 <-- editieren / zitieren --> Unities abgeben:          Nur für KSAH
Zitat: Original erstellt von KSAH: ... Der Schalter bewirkt aber fast nichts...
wenn etwas in 1000 Einzelschritten geändert wird am Featurebaum, kann das schon eine ganze Menge ausmachen wenn man ihn nur einmal aktualisiert statt 1000 mal mir ist so, als könnte man sowas auch mit dem Grafikfenster machen, so dass die Änderung da auch erst am Ende des Makros angezeigt wird. Gruß, Christian Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Christian_W Ehrenmitglied V.I.P. h.c. Konstrukteur (Dipl-Ing)
     
 Beiträge: 3382 Registriert: 04.04.2001 CSWP 12/2015<P>SWX2021sp5 Win10/11 (SWX2016, SWX2012) proAlpha6.2e00/calinkV9 (Tactonworks) (Medusa7, NesCAD2010, solidEdge19)
|
erstellt am: 22. Aug. 2025 11:42 <-- editieren / zitieren --> Unities abgeben:          Nur für KSAH
Copilot schlägt folgendes vor: Code:
Sub SuppressUpdates(model As SldWorks.ModelDoc2, suppress As Boolean) Dim enable As Boolean enable = Not suppress Dim swView As SldWorks.ModelView Set swView = model.ActiveView swView.EnableGraphicsUpdate = enable model.FeatureManager.EnableFeatureTree = enable model.FeatureManager.EnableFeatureTreeWindow = enable swApp.DocumentVisible enable, swDocumentTypes_e.swDocPART swApp.DocumentVisible enable, swDocumentTypes_e.swDocASSEMBLY swApp.DocumentVisible enable, swDocumentTypes_e.swDocDRAWING End Sub
das werd ich mal probieren ... Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
KSAH Mitglied Freiberufler
 
 Beiträge: 265 Registriert: 18.06.2015 SolidWorks 2010 bis 2024
|
erstellt am: 22. Aug. 2025 11:43 <-- editieren / zitieren --> Unities abgeben:         
Ich bin wieder soweit. ich suche jetzt nach 11 FeatureTypen: 1 ProfileFeature Skizze 2 3DProfileFeature 3D Skizze 3 RefPlane Ebene, auch Hauptebenen 4 RefAxis Achse 5 RefPoint Punkt 6 Helix Helix / Spirale 7 RefCurve Kurve 8 CurveInFile Kurve nach Punkten 9 3DSplineCurve Kurve nach einen Spline 10 CompositeCurve ZusammengKurve 11 MoldPartingLine Trennfuge Letzteres funktioniert irgendwie nicht richtig. Die Trennfuge ist abhängig von den Flächen, die das Fornnest und Kern erzeugt. ich bin auch am überlegen das zu entgernen. die große Datei braucht jetzt, weiß der Teufel warum, (ich habe an der Performance nichts getan) nur noch 7 und Zerquetschte Minuten. Ohne was zu ändern immer noch 3,5 Sekunden. Ich denke das Makro ist jetzt geeignet, um alles am Schluss der Konstruktion auszublenden. Sollte ich ein Feature vergessen haben, dass man ausblenden könnte, dann bitte mitteilen. An Flächen gehe ich nicht ran, weil Flächen, zumindest bei mir, was darstellen sollen. zB Laserstrahlen oder Kamerawinkel. Gruß Andreas Nachtrag: Variant wäre vielleicht an mamchen Stellen besser. Aber ich hasse den Variablentyp und meide diesen. Und leider gibt es keine konstanten Arrays. Deshalb der Umstand beim Laden der Featuretypen. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
KSAH Mitglied Freiberufler
 
 Beiträge: 265 Registriert: 18.06.2015 SolidWorks 2010 bis 2024
|
erstellt am: 22. Aug. 2025 14:54 <-- editieren / zitieren --> Unities abgeben:         
Zitat: Original erstellt von Christian_W: Copilot schlägt folgendes vor:
Code:
Sub SuppressUpdates(model As SldWorks.ModelDoc2, suppress As Boolean) Dim enable As Boolean enable = Not suppress Dim swView As SldWorks.ModelView Set swView = model.ActiveView swView.EnableGraphicsUpdate = enable model.FeatureManager.EnableFeatureTree = enable model.FeatureManager.EnableFeatureTreeWindow = enable swApp.DocumentVisible enable, swDocumentTypes_e.swDocPART swApp.DocumentVisible enable, swDocumentTypes_e.swDocASSEMBLY swApp.DocumentVisible enable, swDocumentTypes_e.swDocDRAWING End Sub
das werd ich mal probieren ...
Ein bisschen gegoogelt was die Funktionen bedeuten. Hier im Forum wurde es schon mal angesprochen, derselbe Aufbau. Es muss ausprobiert werden. Jetzt habe ich keinen Nerv dazu. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
KSAH Mitglied Freiberufler
 
 Beiträge: 265 Registriert: 18.06.2015 SolidWorks 2010 bis 2024
|
erstellt am: 22. Aug. 2025 17:00 <-- editieren / zitieren --> Unities abgeben:         
Ich habe es doch noch ausprobiert und diesen Code geschrieben: Code: Sub ScreenrebuildOFF(ByVal bOff As Boolean) Dim swApp As SldWorks.SldWorks Dim swModel As SldWorks.ModelDoc2 Dim swAssembly As SldWorks.AssemblyDoc Dim swView As SldWorks.ModelView Set swApp = Application.SldWorks Set swModel = swApp.ActiveDoc Set swView = swModel.ActiveView If swModel.GetType = swDocASSEMBLY Then Set swAssembly = swModel swAssembly.EnableAssemblyRebuild = bOff End If bOff = Not bOff swView.EnableGraphicsUpdate = bOff swModel.FeatureManager.EnableFeatureTree = bOff swModel.FeatureManager.EnableFeatureTreeWindow = bOff swApp.DocumentVisible bOff, swDocumentTypes_e.swDocPART swApp.DocumentVisible bOff, swDocumentTypes_e.swDocASSEMBLY swApp.DocumentVisible bOff, swDocumentTypes_e.swDocDRAWING End Sub
Meine Testbaugruppe, die vorher 10 Sekunden brauchte, ist jetzt in 1,3 Sekunden fertig. Massivste Einsparung. Ich habe das mit der Baugruppe eingefügt. Diese Funktion spart eigentlich nichts ein. Ist auch irgendwie logisch. Die Baugruppe muss nicht neu aufgebaut werden. Es wird ja nur ausgeblendet. Für die ganz große Baugruppe habe ich jetzt keine Zeit mehr. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
KSAH Mitglied Freiberufler
 
 Beiträge: 265 Registriert: 18.06.2015 SolidWorks 2010 bis 2024
|
erstellt am: 22. Aug. 2025 17:29 <-- editieren / zitieren --> Unities abgeben:         
Doch noch ausprobiert. Jetzt rennt das makro durch die Baugruppe unter einer Minute durch. Hat es nichts zu tun, dauert es länger als früher. Woher das kommt weiß ich nicht. ich habe nur den Rebuild ausgelagert und angepasst. Sonst ist am Makro nichts anders. Abr jetzt rennt es durch. Hier das Makro als TXT und SWP. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Christian_W Ehrenmitglied V.I.P. h.c. Konstrukteur (Dipl-Ing)
     
 Beiträge: 3382 Registriert: 04.04.2001 CSWP 12/2015<P>SWX2021sp5 Win10/11 (SWX2016, SWX2012) proAlpha6.2e00/calinkV9 (Tactonworks) (Medusa7, NesCAD2010, solidEdge19)
|
erstellt am: 23. Aug. 2025 13:56 <-- editieren / zitieren --> Unities abgeben:          Nur für KSAH
Zitat: Original erstellt von KSAH: ... Hat es nichts zu tun, dauert es länger als früher. Woher das kommt weiß ich nicht. ich habe nur den Rebuild ausgelagert und angepasst. Sonst ist am Makro nichts anders.
Die vorgeschlagene sub hat das bestehende Objekt modeldoc per Referenz übergeben bekommen. Du hast da drin aber nochmal SWX definiert, die app gesucht, das aktuelle Objekt gesucht ... Ich schätze, dass es daran liegt. Gruß, Christian Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
KSAH Mitglied Freiberufler
 
 Beiträge: 265 Registriert: 18.06.2015 SolidWorks 2010 bis 2024
|
erstellt am: 23. Aug. 2025 15:21 <-- editieren / zitieren --> Unities abgeben:         
Zitat: Original erstellt von Christian_W:
Die vorgeschlagene sub hat das bestehende Objekt modeldoc per Referenz übergeben bekommen. Du hast da drin aber nochmal SWX definiert, die app gesucht, das aktuelle Objekt gesucht ... Ich schätze, dass es daran liegt. Gruß, Christian
Servus, es ist erstmal Jammern auf hohen Niveau. An der Modeldoc liegt es nicht. Man bekommt mit dem Set ja nur einen Zeiger zu einem Objekt. Das sind vier Byte (oder unter 64 Bit 8 Byte). Also eine Long = eine Long (oder LongPtr. Ich habe es absichtlich allgemein geschrieben. ich hatte auch zuerst das Modeldoc mitgenommen, bis ich merkte ich brauche auch die swApp. Ich hatte auch schon oft: Objekt1.Obejekt2.Objekt3.Variable gexhrieben. swApp wollte ich nicht auch noch holen. Und global ersz recht nicht. Ich vermutete es liegt am Objekt Applikation. Deshalb hatte ich es testweise global ausgelagert. Es brachte nichts. Es kamen Werte von 3,45 bis 3,8 Sekunden raus. Ich vermte es liegt an die insgesamt sechs Schalter, teilweise sogar im System sekbst. Anfabngs war es nur ein Schalter. Aber egal. ich verzichte auf die rund 600 ms.(Ohne Abschalten waren es nur 3 Sekunden). Dafür ist die große Baugruppe statt in 20 Minuten schon in einer Minute durch. Gruß Andreas Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Christian_W Ehrenmitglied V.I.P. h.c. Konstrukteur (Dipl-Ing)
     
 Beiträge: 3382 Registriert: 04.04.2001 CSWP 12/2015<P>SWX2021sp5 Win10/11 (SWX2016, SWX2012) proAlpha6.2e00/calinkV9 (Tactonworks) (Medusa7, NesCAD2010, solidEdge19)
|
erstellt am: 25. Aug. 2025 09:28 <-- editieren / zitieren --> Unities abgeben:          Nur für KSAH
|
KSAH Mitglied Freiberufler
 
 Beiträge: 265 Registriert: 18.06.2015 SolidWorks 2010 bis 2024
|
erstellt am: 26. Aug. 2025 13:18 <-- editieren / zitieren --> Unities abgeben:         
So, das sollte auch ein kleines Zwischendurchprojekt werden. Ich ärgere mich immer wenn die Feature total durcheinander in der Nummerierung sind. Wenn ein Feature nicht gleich funktioniert und gespeichert wird, zählt SWX  einfach hoch. Also ein kleines Makro, das alle Feature einlist und neu nummeriert. Anfangs war der Code auch überschaubar. Zuerst bin ich nur den Hauptbaum abwärts gegangen. Da bekommt man aber keine Skizzen vom Bohrassistent. Also Subfeature mit laden. Dann kamen die Skizen doppelt. Wieder was einbauen ob die Skizze schon geladen wurde. Dachte bin fertig, frist sich das Makro an einem Teil von mir. Wenn man Skizzen mehrfach verwendet, wird intern eine weitere Skizze angelegt, die man normal nicht sieht und tunlichst nicht anfassen soll. Alo wieder fertig. Gab es als ich es normal nutzte Probleme mit externen Referenzen. Ic nutze gerne Teil in Teil. Namen der Referenz suchen und nicht anfassen. Später sortierte ich alles aus, was mit einer externen Referenz zu tun hat. Das Makro liest alle Feature ein. Und dann werden alle Feature, die hinten eine Nummer haben, neu nummeriert. Umbenannte Feature werden stehen gelassen. Vielleicht braucht es ja jemand. Und natürlich wird nur umbenannt was falsch im Baum steht. Anfangs gab es ja kein ReBuild OFF nicht. Wenn jemand ein gutes Bitmap als Symbol für die Makros hat, bitte her damit. Gruß Andreas Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Olls Lai Lolli Mitglied Konstrukteur
 
 Beiträge: 385 Registriert: 07.05.2009 MS Windows 10 Prof. Intel Xeon E5-1630 v 3 3.7 GHz 32 GB Ram Nvidia Quadro M4000 SWX 2019 x64 SP 5 PDM Enterprise 2019 SP 3
|
erstellt am: 26. Aug. 2025 20:23 <-- editieren / zitieren --> Unities abgeben:          Nur für KSAH
|
KSAH Mitglied Freiberufler
 
 Beiträge: 265 Registriert: 18.06.2015 SolidWorks 2010 bis 2024
|
erstellt am: 27. Aug. 2025 11:58 <-- editieren / zitieren --> Unities abgeben:         
|
Oberli Mike Ehrenmitglied V.I.P. h.c. Dipl. Maschinen Ing. / Supporter

 Beiträge: 3954 Registriert: 29.09.2004 SOLIDWORKS 2025 SP2.0 SOLIDWORKS 2024 SP5.0 SOLIDWORKS 2023 SP5.0 SOLIDWORKS 2022 SP5.0
|
erstellt am: 27. Aug. 2025 12:59 <-- editieren / zitieren --> Unities abgeben:          Nur für KSAH
|
KSAH Mitglied Freiberufler
 
 Beiträge: 265 Registriert: 18.06.2015 SolidWorks 2010 bis 2024
|
erstellt am: 28. Aug. 2025 09:57 <-- editieren / zitieren --> Unities abgeben:         
Zitat: Original erstellt von Oberli Mike: Wieso testest Du das Makro nicht einfach?
Warum soll ich das Makro ausprobieren? Ich habe hier in dieser Leiste ein quelloffenes Makro vorgestellt, das genau das tut, alles ausblenden. Und zwar so optimiert, dass es schnell läuft. Mal eine allgemeine Warnung. Vorsicht mit Makros aus dem Internet, wo der Code gesperrt ist. Auch mit der VBA Programmierung steht die ganze Welt des Computers offen. Makros nur aus Quellen die man vertraut benutzen. Mit meinen bescheidenen Programmierkenntnissen könnte ich jedezeit den Projeltordner oder Windows leer räumen. (wenn nicht gleich, dann halt in einer Stunde oder zur Mittagszeit) Oder alle paar Sekunden ein Bildschirmfoto machen. Gerade bei Timern bekommt nicht mal der Debuger von Visual VBA mit, dass der Code noch läuft. Stoppen geht nur, indem man SolidWorks schließt. Gruß Andreas Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |