Makro zum Umbenennen einer Baugruppe und ihrer Komponenten

Hallo

 

Ich möchte ein Makro auf Solidworks erstellen, um eine Baugruppe und ihre Komponenten nach folgendem Prinzip umzubenennen:

"Projektnummer-ES00" für die Montage

"Projektnummer-ES0i" für die i-te Baugruppe (1. Ebene)

"Projektnummer-ES0i-C00j" für den j-ten Teil der i-ten Baugruppe (2. Ebene)

 

Der Erstellungsbaum sollte beispielsweise wie folgt aussehen:

INT846-ES00

INT846-ES01

INT846-ES01-C001

INT846-ES01-C002

INT846-ES01-C003

INT846-ES01-C004

INT846-ES02

INT846-ES02-C001

INT846-ES02-C002

INT846-ES03

INT846-ES04

 

Ich kann das Wiederholungsprinzip in VBA codieren, aber ich weiß nicht, wie ich eine Assembly und ihre Komponenten unter Berücksichtigung des Baums als Ganzes neu registrieren kann. Dann weiß ich nicht, wie ich den Erstellungsbaum der betreffenden Assembly durchlaufen soll.

 

Wenn Sie Vorschläge haben, bin ich ganz Ohr!

 

Vielen Dank für diejenigen, die meine Frage beantworten werden.

 

PS: Ich verwende Solidworks 2013

 

 

 

 

 

 

 

 

Hallo, zufällig können Sie das nicht verwenden?

 

http://www.lynkoa.com/store/fr/tools-et-macros/utilitaires/utilitaire-projectmanager.html

1 „Gefällt mir“
Projektmanager, er muss wissen, wie man das macht
2 „Gefällt mir“

Vielen Dank für die Schnelligkeit Ihrer Antworten.

Ich kenne ProjectManager nicht. Als ich dem Link folgte, sah ich, dass das Dienstprogramm bezahlt wird.

Gibt es nicht einen kostenlosen oder günstigeren Weg?

Hallo

 

 

Der Code sollte wie folgt aussehen:

 

Sub Main()

Dim swApp als SldWorks.SldWorks
Dokument als SldWorks.ModelDoc2 dimmen
Dim retval() als Zeichenkette
Text als Zeichenfolge dimmen
dim name() als String

Set swApp = CreateObject("SldWorks.Application")
Set Document = swApp.ActiveDoc
 

retval = Document.GetDependencies2(Falsch, Wahr, Falsch)

'Zeilen, um nur die Dateinamen zu haben
ReDim-Name(1 TB ((UBound(retval) - 1) / 2) + 1)
Für i = 0 TB (UBound(retval) - 1) / 2 
   Text = Text & retval(2 * i) & vbCr
   Name(i + 1) = retval(2 * i) 
Weiter i
i = 0

 

MsgBox-Text

Ende Sub

 

 

Quelle: http://www.forum-cao-3d.fr/viewtopic.php?t=5432

 

 

Wenn Sie weitere Fragen zu Makros haben, können Sie gerne eine weitere Frage zu Lynkoa stellen!

Hallo

 

Im Prinzip wäre es am effizientesten, die Dateien außerhalb von SW umzubenennen und dann die externen Referenzen der Dokumente umzuleiten...

 

Aber es ist kompliziert für qlq, das nicht über die Fähigkeiten von SW-APIs verfügt  

 

Die einfachste Entwicklungsseite besteht darin, die Assembly zu öffnen und die Komponenten zu durchsuchen und dann jedes der Dokumente zu speichern, da die Hauptassembly geöffnet ist, leitet SW selbst die Verweise um ...

Es gibt einfach die alten Dateien mit den alten Namen, die manuell gelöscht werden müssen

 

So erstellen Sie eine Rekursion für Komponenten (durchlaufen Sie die gesamte Baugruppenstruktur) 

 

Abrufen des Beispiels aus der API-Hilfe 

"Beispiel für eine Traversenbaugruppe auf Komponentenebene (VBA)"

 

Der Einstiegspunkt für den Marco ist das MAin-Verfahren

 

In diesem Beispiel wird die Funktion TraverseComponent für jede Komponente ausgeführt, das swComp-Objekt enthält die Komponente, und die Variable nLevel enthält die Ebene der Komponente in der Struktur (z. B. 1 für die 1. Ebene, 2 für die Komponente einer Unterbaugruppe, 3 usw. ...)

 

Sie müssen noch den Registrierungscode für das Dokument hinzufügen (das Dokument wird von der GetmodelDoc-API aus der "Komponente" abgerufen)

 

Achten Sie darauf, das Vorkommen von Komponenten zu verwalten (dieselbe Komponente kann mehrmals vorhanden sein), nur das erste Vorkommen sollte verarbeitet werden

 

 

8 „Gefällt mir“

Hallo

 

Jfradon, ich habe deinen Rat befolgt. Und ich habe ein Makro geschrieben, das in Richtung dessen tendiert, was ich will.

 

Aber ich kann das Modell meiner Komponenten nicht speichern.

Ich habe einen Fehler bei (swCompModel.SaveAs2 NewFilePath, 0, False, False)

 

 


renommer_fichier.txt

...

Schluck, ich kann DSL nicht kündigen

Ja, das Makro sieht für mich gut aus

Sie müssen lediglich die 1° Komponenten (Wurzelkomponenten der Hauptbaugruppe) unterschiedlich verwalten

Tatsächlich ist es keine Komponente 

Wenn also nach

Festlegen von swCompModel = swComp.GetModelDoc

 

swCompModel  ist nichts, also verwenden Sie nicht swCompModel  , sondern swModel, das das Assembly-Dokument ist

7 „Gefällt mir“

Wenn es in Ordnung ist, schließen Sie die Position?

4 „Gefällt mir“