| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für SOLIDWORKS |
| |
| Performance steigern von großen Baugruppen und Zeichnungen mit SOLIDWORKS 2024 |
Autor
|
Thema: Makro: Komponenten einer Baugruppe öffnen, Dateieigenschaften löschen (2528 mal gelesen)
|
API-Fabi Mitglied CAD/PLM Admin
Beiträge: 56 Registriert: 23.11.2015 SOLIDWORKS 2020 SP5 Windows 10 SAP-PLM Interface (CAD-Desktop)
|
erstellt am: 31. Jan. 2017 13:36 <-- editieren / zitieren --> Unities abgeben:
Hallo zusammen! javascript:InsertSMI(' %20'); Ich möchte ein Makro schreiben, das eine bestimmte benutzerdefinierte Dateieigenschaft löscht. Wenn das geöffnete Dokument eine Assembly ist, auch bei allen Unterkomponenten. Hat jemand ein ähnliches Makro, an das ich mich anlehnen kann? Oder ein Beispiel, in dem nacheinander alle Unterkomponenten einer Baugruppe geöffnet werden um etwas zu bearbeiten etc. Bzw. müssen die Unterkomponenten dazu überhaupt geöffnet werden oder geht das auch einfacher? Vielen Dank!
------------------ Gruß Fabi Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CAD-Maler Mitglied Konstrukteur / CAD-Admin / Mädchen für alles
Beiträge: 720 Registriert: 17.01.2007 SWX 2019 SP5 AutoCAD 2019 Win 10 pro 64 bit Intel(R) Xeon(R) CPU E5-1650 v4 @ 3.60GHz 64GB RAM Nvidia Quadro M5000 SWx EPDM
|
erstellt am: 31. Jan. 2017 14:11 <-- editieren / zitieren --> Unities abgeben: Nur für API-Fabi
|
API-Fabi Mitglied CAD/PLM Admin
Beiträge: 56 Registriert: 23.11.2015 SOLIDWORKS 2020 SP5 Windows 10 SAP-PLM Interface (CAD-Desktop)
|
erstellt am: 01. Feb. 2017 09:21 <-- editieren / zitieren --> Unities abgeben:
Vielen Dank Jens! Das Makro funktioniert nun soweit. Allerdings sollte das Makro bis in die unterste Strukturebene funktionieren: Wenn Part, dann abfragen ob es noch ein Part im Part gibt (Bsp. Gussmodelle) und in diesem "Unterpart" wiederum die Eigenschaft löschen. Wie kann ich das am besten erweitern? ------------------ Gruß Fabi Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CAD-Maler Mitglied Konstrukteur / CAD-Admin / Mädchen für alles
Beiträge: 720 Registriert: 17.01.2007 SWX 2019 SP5 AutoCAD 2019 Win 10 pro 64 bit Intel(R) Xeon(R) CPU E5-1650 v4 @ 3.60GHz 64GB RAM Nvidia Quadro M5000 SWx EPDM
|
erstellt am: 01. Feb. 2017 10:06 <-- editieren / zitieren --> Unities abgeben: Nur für API-Fabi
Da würde ich die einzelnen Features durchlaufen, und mir die externen Referenzen holen. Hier mal ein aus meinem Makro-Pool und meinen Gehirnwindungen zusmmengebastelter Ablauf: Code:
Set Feature = part.FirstFeatureDo While Not Feature Is Nothing If Feature.GetTypeName() = "BODYFEATURE" Then 'Feature selektieren 'Part.EditInContext 'Set Part = swApp.OpenDoc6... 'swApp.ActivateDoc2 "Unter-Teil" 'Hier Lösch-Schleife 'Part.ClearSelection2 True 'Set Part = Nothing 'swApp.CloseDoc... 'Set Part = swApp.ActiveDoc 'swApp.ActivateDoc2 "Original-Teil" Set Feature = Feature.GetNextFeature Loop
Das hab ich so noch nicht gemacht, das geht vielleicht (höchstwahrscheinlich) auch komfortabler. Evtl. muss du dir das zuletzt bearbeitete Feature merken, wahrscheinlich wird das beim "Unter-Teil-öffnen-schließen-und-Original-Teil-öffnen" zurückgesetzt. Kannst ja mal mit dem Makro-Rekorder probieren, was der ausspuckt. Gruß, Jens ------------------ CSWA, CSWP, CSWPA-SM =) Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
API-Fabi Mitglied CAD/PLM Admin
Beiträge: 56 Registriert: 23.11.2015 SOLIDWORKS 2020 SP5 Windows 10 SAP-PLM Interface (CAD-Desktop)
|
erstellt am: 01. Feb. 2017 13:35 <-- editieren / zitieren --> Unities abgeben:
Ich habe ebenfalls so begonnen... Allerdings funktioniert "swModel.EditInContext" nicht. Das wird vom Makrorekorder aber auch so aufgezeichnet. "EditInContext" ist in der Hilfe auch nicht zu finden?! ------------------ Gruß Fabi Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
RWolff Mitglied Maschinenbautechniker
Beiträge: 8 Registriert: 14.06.2016 SolidWorks 2018
|
erstellt am: 01. Feb. 2017 14:17 <-- editieren / zitieren --> Unities abgeben: Nur für API-Fabi
Probier mal mit folgendem Code. Habe das zwar nicht allzu sehr getestet, aber vielleicht passt das für deine Anwendung. Option Explicit Dim swApp As SldWorks.SldWorks Dim swModel As SldWorks.ModelDoc2 Dim config As SldWorks.configuration Dim lRetVal As Long Dim vPropNames As Variant Dim vPropTypes As Variant Dim vPropValues As Variant Dim valout As String Dim resolved As Variant Dim vComps As Variant Dim j As Long Dim i As Long Dim swComp As SldWorks.Component2 Dim swCompModel As SldWorks.ModelDoc2 Dim swCustProp As CustomPropertyManager Dim val As String Dim swAssy As SldWorks.AssemblyDoc Dim name As String Dim bool As Boolean Sub main() Set swApp = Application.SldWorks Set swModel = swApp.ActiveDoc Set swAssy = swModel vComps = swAssy.GetComponents(False) If IsEmpty(vComps) Then Exit Sub 'Schleife für alle Teile in Baugruppe For i = 0 To UBound(vComps) Set swComp = vComps(i) Set swCompModel = swComp.GetModelDoc 'Wenn ein Teil unterdrückt ist, gehe zum nächsten Teil If swComp.IsSuppressed Then GoTo Nächste End If Set config = swCompModel.GetActiveConfiguration Set swCustProp = config.CustomPropertyManager lRetVal = swCustProp.GetAll2(vPropNames, vPropTypes, vPropValues, resolved) 'Schleife für alle Eigenschaften For j = 0 To lRetVal - 1 'Wenn der Name der Eigenschaft Desc1 ist... If vPropNames(j) = "Desc1" Then 'Code hier für die Eigenschaft Debug.Print vPropValues(j) bool = swCustProp.Delete("Desc1") End If Next j Nächste: Next i End Sub Gruß Ralf
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Ralf Tide Moderator -
Beiträge: 4978 Registriert: 06.08.2001 Sehr seltsame Dinge passiern <Klaus Lage - Toy Story> .-)
|
erstellt am: 01. Feb. 2017 14:52 <-- editieren / zitieren --> Unities abgeben: Nur für API-Fabi
|
CAD-Maler Mitglied Konstrukteur / CAD-Admin / Mädchen für alles
Beiträge: 720 Registriert: 17.01.2007 SWX 2019 SP5 AutoCAD 2019 Win 10 pro 64 bit Intel(R) Xeon(R) CPU E5-1650 v4 @ 3.60GHz 64GB RAM Nvidia Quadro M5000 SWx EPDM
|
erstellt am: 01. Feb. 2017 15:02 <-- editieren / zitieren --> Unities abgeben: Nur für API-Fabi
Da war der Ralf (mal wieder) paar Minuten schneller... Das Beispiel mit den ext. Referenzen hatte ich auch eben erst gefunden. Musst du halt mit Code:
Set Part = swApp.OpenDoc6("Hier Pfad", 1, 0, "", longstatus, longwarnings) Set Part = swApp.ActiveDoc
das Teil dirket öffnen. Gruß, Jens ------------------ CSWA, CSWP, CSWPA-SM =) Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |