SolidWorks ReplaceComponents

Hallo Forum!

 

Ich habe eine kurze Frage zur Funktion "ReplaceComponents" der Solidworks API

 

Da haben Sie es, ich habe es geschafft, das Makro in Bezug auf die manuelle Auswahl und den Austausch von Teilen zum Laufen zu bringen, großartig!

(Kleiner Siegestänzchen: <o> _o>  _o_ \o/)

 

Mein Problem  kommt jetzt... Präsentation des Makros vor einem Kollegen, sie haben Spaß daran, bereits in der Montage vorhandene Teile zu ersetzen 

Es ist schön, wir ersetzen eine Schraube durch einen Flansch usw.

 

Er beschließt, Makro auf eine konstruktivere Art und Weise zu versuchen. Geben Sie also den Pfad und den Namen des Ersatzteils ein, wählen Sie das Teil in der Baugruppe aus und......

Nun, nichts... Das Teil in der Baugruppe wird ausgewählt, aber nicht ersetzt...

 

Präzisere und prägnantere Erklärung:

 

Zu ersetzendes Montageteil + Ersatzteil in der Baugruppe = > funktioniert.

 

Teil der Baugruppe, der ausgetauscht werden soll + Ersatzteil, das sich nicht in der Baugruppe befindet => Keine.

 

Hier ist das fragliche Makro als Anhang =)

 

Wenn du irgendwelche Ideen für etwas hast, das ich vergessen / als  Fehler gemacht hätte =/

 

Freundlich

Yoann


vba_remplacement_piece.txt

Hallo

 

Zwei kleine Vorschläge, ohne in den Code einzutauchen:

 

Versuchen Sie, das Teil in SolidWorks zu öffnen (da wir den vollständigen Pfad haben), und versuchen Sie dann, es zu ersetzen.

 

Andernfalls eine etwas barbarische Methode, fügen Sie das Teil in die Baugruppe ein, ersetzen Sie das vorhandene und löschen Sie es dann (überprüfen Sie, ob wir die erste Instanz löschen!)

1 „Gefällt mir“

Hallo Lucas:)

 

Ich habe die erste Methode ausprobiert, es scheint, dass das Ersatzteil geöffnet werden muss, um berücksichtigt zu werden (und vielleicht in beschreibbarer Form zugänglich zu sein. Wenn das der Fall ist, wird es mich ein bisschen nerven, da die Teile auf EPDM sind...)

 

Beim Versuch, es separat zu öffnen, berücksichtigt der Austausch jedoch nicht das Vorkommen des zu wechselnden Teils =o

 

Beispiel:

 

In meiner Montage habe ich:

 

SE-01

   -Stück01<1>

   -Artikel02<1>

 

SE-02

   -....

   -....

 

-Artikel03<1>

-Raum01<5>

-Raum 02<9>

 

Und wenn ich z.B. das "Teil01<5>" ändern möchte, wähle ich es aus (indem ich Teil01-5 einfüge), soweit funktioniert alles, ich gebe den Namen des geöffneten Ersatzteils auch daneben ein, und es ändert sich nicht das "Teil01<5>" wie ausgewählt, sondern das "Teil01<1>" =o

 

Die Funktion würde also das Vorkommen nicht berücksichtigen, wie ich dachte?

Denn auf der anderen Seite, wenn ich das "Stück03<1>" ändern möchte (oder was auch immer das Vorkommen ist, solange es das höchste im Baum ist), dann habe ich keine Sorgen =/

 

Ja, das Teil muss in den Speicher geladen werden, und hier ist die übersetzte Hilfe

 

Sie können eine ausgewählte Komponente nicht durch eine Komponente mit demselben Namen ersetzen, auch wenn sich die Komponenten in unterschiedlichen Ordnern befinden. 

 

Bei der Komponente muss es sich um ein Element der obersten Ebene handeln. Es darf sich nicht um eine Komponente einer Unterbaugruppe handeln. Wenn die Anwendung eine Komponente in der Unterbaugruppe ersetzen muss, muss sie die Unterbaugruppe öffnen und die Komponente aus dieser Baugruppe abrufen

 

Diese Methode schließt alle Komponentendateien, wenn sie in einer Assembly aufgerufen wird. Wenn die Komponenten geändert wurden, werden diese Änderungen nicht automatisch gespeichert. Sie müssen die Änderungen speichern, bevor die Dateien geschlossen werden.

 

Um zu vermeiden, dass Sie Dokumente ändern müssen, bevor Sie das Dokument öffnen, können Sie die API verwenden

swapp. DocumentVisible(False, swDocumentTypes_e.swDocPART) stellen Sie sicher, dass Sie nach dem Öffnen auf True festgelegt sind

Das Dokument wird geöffnet, aber nicht sichtbar sein

 

Für das Ersetzen von Vorkommen sollte dies funktionieren, da der Befehl das ausgewählte Teil auch dann ersetzt, wenn es andere Vorkommen hat, es ist die Auswahl, die ersetzt wird

 

 

 

 

 

4 „Gefällt mir“

Hallo jfaradon!

 

Vielen Dank für Ihre Antwort :-)

 

Ich habe mich in der Tat gefragt, ob ich diesen Teil der API-Hilfe richtig verstanden habe, wenn man bedenkt, wie es für mich war. Jetzt bin ich mir sicher, dass es irgendwo einen Binz gibt x)

 

In der Tat ersetzt dieser nicht nur ein nicht ausgewähltes (und verstecktes!) Teil, sondern auch... in einer Teilmenge! =o

 

Ich habe folgendes hinzugefügt: "Set swModel = swApp.OpenDoc6(swNewfile, 1, 0, "", Longstatus, Longwarnings)"

 

Um das Ersatzteil vorher zu öffnen, will es aber offensichtlich nicht x) Das werde ich später sehen

 

Als Anhang finden Sie hier einen Vorher/Nachher-Screenshot der Ersetzungsfunktion.

 

Der hervorgehobene Teil im Baum ist derjenige, der ersetzt wird  =/

 

 


replace.png

Dies ist eine Funktion, die ich bereits verwendet habe und die funktioniert... Ich sehe nicht wirklich, was mit dir passieren kann

zumal nach dem, was ich sehe, die Umkehrung zwischen Stücken erfolgt, die nicht den gleichen Namen haben?

 

Aber es ist kompliziert, den Benutzer aufzufordern, den Namen der Komponente + das Vorkommen einzugeben, warum bitten Sie ihn nicht, die Komponente im Baum auszuwählen, damit kein Fehlerrisiko mehr in den Namen besteht

 

Andernfalls können Sie mit der Funktion, dem Beispiel, das ich in Jean-Bapts vorheriger Frage eingefügt habe, die ich hier einfüge, die Namen abrufen und sie in einem Dropdown-Menü im Combobox-Stil anbieten

 

 

Dim swDoc As SldWorks.ModelDoc2

Dim swAss As SldWorks.AssemblyDoc

Dim stOldFileName As String, stNewFileName As String

Dim bStatus als boolescher Wert

 

Sub main()

 

    Legen Sie swApp = Application.SldWorks fest

    Festlegen von swDoc = swApp.ActiveDoc

    

    Wenn swDoc nichts ist, dann sub beenden

    Wenn swDoc.GetType <> swDocumentTypes_e.swDocASSEMBLY, dann sub beenden

    

    Setze swAss = swDoc

   

    Dim swComponents als Variante: swComponents = swAss.GetComponents(True)

    

    Für i = 0 TB UBound(swComponents)

        MsgBox swComponents(i). Name

    Nächster

    

 

Ende Sub

 

 

 

4 „Gefällt mir“

Guten Abend allerseits,

 

Yoann, wenn es um den Ersatz eines "alten" Teils durch ein "neues" Teil in einer Baugruppe geht, erlaube ich mir, skeptisch zu sein. Wozu?

Schon jetzt geraten die bestehenden Zwänge zwischen dem Alten und den anderen Teilen meiner Meinung nach fast alle ins Wanken! Es sei denn, das Alte und das Neue haben viele Gemeinsamkeiten (Familien von Teilen). Es sei denn, es gibt eine super mega SW, die das schafft? Träumen Sie nicht!!

Da eine Baugruppe offen ist, ist der Austausch eines Teils einer Unterbaugruppe unmöglich. Dazu ist es dann notwendig, die Baugruppe zu öffnen.

In Bezug auf das Vorkommen ist es SW, das das Vorkommen beim manuellen Hinzufügen eines "Klon"-Teils in einer Baugruppe zuweist, es wird verwaltet. Das Makro muss auch das Vorkommen der alten Münze berücksichtigen.

 

Schließlich ist die [ReplaceComponents]-Methode nicht alles!

Meines Erachtens wird der Ersatz eines "alten" Teils durch ein "neues" Teil nur dann gehandhabt, wenn letzteres offen ist, oder, noch restriktiver, offen und in der Baugruppe vorhanden ist.

 

Die Idee ist also, wie Lucas im Zusammenhang mit einem neuen Ersatzteil sagt, das nicht Teil der Baugruppe ist, es zu öffnen, in die Baugruppe einzufügen, sein Vorkommen zu identifizieren und schließlich das alte durch das neue zu ersetzen.

 

A+

 

MC

1 „Gefällt mir“

Hallo

 

Zunächst einmal möchte ich mich für die Reaktionszeit entschuldigen, ich musste an etwas ganz anderem arbeiten und hatte keine Zeit, wieder einzutauchen

 

 

@CaronMaxime: Die Funktion zum Austausch von Teilen in ein vollständiges Makro zu setzen, ist in der Tat mehr als gewagt, zum Beispiel wegen der Einschränkungen. Aber mein Ziel ist sehr spezifisch, keine Sorge! Mein Ziel bezieht sich auf Formatänderungen, die in der Regel ziemlich langwierig in Bezug auf die Handhabung für die Bediener sind. Ich teste auch mein Makro (das nicht nur aus replacecomponent besteht, sondern auch aus der Änderung der Dimension von Constraints in der Baugruppe, zum Beispiel.

 

 

Was die wackeligen Einschränkungen betrifft, so sind sie in der Tat ein wenig, aber wenn man die Grundfunktion von Solidworks durchläuft, passiert ihnen dasselbe^^

 

@jfaradon: Danke für dein Makro :o Es war in der Tat sehr nützlich für mich, die von Ihnen erwähnte Auswahl-Combobox zu erstellen :-)

 

Ich werde diese Frage endlich damit abschließen :-)

 

Freundlich

 

Yoann