VBA-Code zum Ändern der Referenz beim Öffnen einer . SLDPRT

Hallo

In einem . SLDPRT (Nr. 1), ich verwende die Kombinationsfunktion mit einer externen Referenz (Datei Nr. (2) . SLDPRT),  um direkt durch Schrumpfung die gewünschte Endform zu erhalten.

Datei Nr. 1 ist eine Standarddatenbank und Datei Nr. 2 hat eine variable Geometrie.

Für eine neue Variante öffne ich die Datei Nr. 1, indem ich auf den Reiter "Referenzen... " und so ersetze ich die Datei Nr. 2 durch eine Datei Nr. 3 mit neuer Geometrie.

Ich habe derzeit ein Makro, mit dem ich auswählen kann, welche 3D-Dateien geöffnet werden sollen, aber gibt es eine Möglichkeit, diesen Dateityp automatisch zu öffnen und dem Benutzer dabei zu helfen, das Ersatzteil auszuwählen?

Vielen Dank im Voraus für Ihre Hilfe.

 

 

Hallo

Können Sie einige Beispieldateien einfügen, damit wir Ihnen helfen können?

Herzliche Grüße.

2 „Gefällt mir“

Hallo Yves.T,

Die Originalteile kann ich aus Gründen der Vertraulichkeit nicht anhängen, aber ich habe 3 einfache Teile als Beispiele angeführt, um das Prinzip zu erklären.

Teil 1 wird mit einer Kombination aus Teil 2 oder 3 gebaut, je nach Wahl der Referenz zur Öffnung.

Vielen Dank.


changement_ref.rar

Für mich besteht die einzige Möglichkeit, eine Teileeinfügung in einem Teil zu ersetzen, darin, die Referenzen zu ersetzen, bevor ich diese Datei öffne.

Hallo

Im angehängten Makro ist die erste Datei, die ausgewählt werden soll, die übergeordnete Datei, und die zweite ist die Datei, die subtrahiert werden soll. Achten Sie auf die Namen der Körper in Ihren Dateien, es sollte mit Ihren Beispieldateien funktionieren.

Herzliche Grüße


combiner.swp

Hallo d.roger und vielen Dank für die Zeit, die Sie damit verbracht haben, eine Lösung zu finden.

Ich habe gerade das Makro ausprobiert, es öffnet die übergeordnete Datei, aber während der zweiten Auswahl öffnet sich die zu subtrahierende Datei im Baum, ohne die bereits vorhandene zu ersetzen!

Eine kleine Klarstellung zu den Namen der zu subtrahierenden Körper, sie werden jedes Mal anders sein. (P1, P2, P3....)

Herzliche Grüße.

Hallo

Version 2 des Makros ....

Herzliche Grüße


combiner.swp
1 „Gefällt mir“

@d.Roger,

Super, das Makro Version 2 funktioniert mit den als Beispiel genannten Teilen.

Wenn ich es hingegen mit einer anderen Datei mit einer anderen Baumstruktur ausführe (siehe beigefügtes Bild), wird das Makro ausgeführt, ohne die Kombinationsfunktion auszuführen.

In diesem Beispiel wurde das Bauteil M2031 durch das Bauteil M2032 ersetzt, aber nicht aus dem Hauptteil entfernt.

Könnte dies daran liegen, dass es nach der Kombinationsfunktion weitere Buildvorgänge gibt? (hier eine Revolution und ein Feiertag)

Vielen Dank.

 


arborescence_inf_.gif

Ja, es kommt von der Tatsache, dass die Art der Bearbeitung der Teile unterschiedlich ist, es kommt von den Linien:

boolstatus = Part.Extension.SelectByID2("Revolution1", "SOLIDBODY", 0, 0, 0, Falsch, 1, Nichts, 0)
boolstatus = Part.Extension.SelectByID2("<" & NewName & ">-<Revolution1>", "SOLIDBODY", 0, 0, 0, True, 2, Nichts, 0)

Oder die Namen der ausgewählten Körper sind Revolution1, um dies zu korrigieren, müssen Sie den Erstellungsbaum analysieren und die Namen der Körper abrufen, ich habe im Moment keine Zeit dafür, aber wenn Sie es tun möchten, sollten Sie in der Lage sein, die folgenden Zeilen zu verwenden:

Set Feature = Part.FirstFeature
Dim-Stück als Schnur
Auch wenn kein Feature nichts ist
 FeatureName = Feature.Name
 Wenn Feature.GetTypeName2 = "Lager" dann
    Stück = FeatureName
 Ende, wenn
 Set Feature = Feature.GetNextFeature()
Wend

um dies zu tun.

Herzliche Grüße

1 „Gefällt mir“

OKAY!

 Ich werde versuchen, mir das anzusehen, aber ich fühle mich mit VBA-Codes überhaupt nicht wohl! 

Es besteht eine hohe Wahrscheinlichkeit, dass ich Sie erneut um Hilfe bitten werde, um das Makro zu beheben, sobald Sie verfügbar sind!

 Nochmals vielen Dank und ein schönes Wochenende!

 

 

Hallo an alle!

Ich habe versucht, das Makro von D.Roger anzupassen, aber die Funktion "Kombinieren" läuft immer noch nicht:

'Suchen Sie im Merkmalsmanager nach dem Teil, das subtrahiert werden soll (es hat eine Weile gedauert, bis ich verstanden habe, woher der Name "Bestand" stammt: Drücken Sie STRG G im Ausführungsfenster, um die Liste der Namen und Typen der einzelnen Merkmale aufzurufen!)

Set Feature = Part.FirstFeature
        Dim-Stück1 als Schnur
        Auch wenn kein Feature nichts ist
        FeatureName = Feature.Name
         Wenn Feature.GetTypeName2 = "Lager" dann
         Stück1 = FeatureName
         Ende, wenn
        Set Feature = Feature.GetNextFeature()
        Wend

 

Auswahl des Hauptkörpers
    boolstatus = Part.Extension.SelectByID2("Mat.-Extru.3 entfernt", "SOLIDBODY", 0, 0, 0, Falsch, 1, Nichts, 0) 

"Auswahl des abzuziehenden Anteils
    boolstatus = Part.Extension.SelectByID2(Piece1, "BODYFEATURE", 0, 0, 0, True, 2, Nichts, 0) 

"Die Kombination von Körpern
    Set myFeature = Part.FeatureManager.InsertCombineFeature(15902, Nichts, Nichts)

Die 2 Steine sind gut ausgewählt, aber die letzte Linie, die die Subtraktion der Körper durchführen soll, bleibt inaktiv.?!

Ich sollte in der Lage sein, die Volumenkörper des zu subtrahierenden Teils auszuwählen, aber ohne den des Hauptkörpers zu nehmen, habe ich es mit "SolidBodyFolder" versucht... Aber es funktioniert auch nicht!

Ich bin mir sicher, dass es nicht viel ist, aber meine Kenntnisse in VBA reichen nicht aus, um diesen Knackpunkt zu lösen.

Wenn mir jemand eine mögliche Lösung aufzeigen kann?!

Vielen Dank.


lyncoa_20171010.gif

... Tatsächlich ist das richtig, die Codezeile "combine" funktioniert mit:

boolstatus = Part.Extension.SelectByID2("<M2032_REN306VF_sortie-mold>-<REN305-02A.1\\Hauptkörper>", "SOLIDBODY", 0, 0, 0, Wahr, 2, Nichts, 0)
    boolstatus = Part.Extension.SelectByID2("<M2032_REN306VF_sortie-Form>-<REN305_01A.1\\Hauptkörper>", "SOLIDBODY", 0, 0, 0, Wahr, 2, Nichts, 0)
    boolstatus = Part.Extension.SelectByID2("<M2032_REN306VF_sortie-Form>-<REN305_CC.1\\Hauptkörper>", "SOLIDBODY", 0, 0, 0, Wahr, 2, Nichts, 0)

    Set myFeature = Part.FeatureManager.InsertCombineFeature(15902, Nichts, Nichts)

... aber die Namen der Körper ändern sich mit jedem neuen Teil (Ex <M2031_REN305VF_sortie-Form>-<REN304_CC.1\\Hauptkörper>)!

Also muss ich einen Weg finden, die Lautstärke des neu eingefügten Teils auszuwählen .

Kann mir jemand helfen, dieses Problem zu lösen?

Vielen Dank im Voraus.


lyncoa_20171011.gif

Hallo

Sie können eine Schleife für die Features verwenden, die ein "SOLIDBODYFOLDER"-Feature abruft.

Sobald Sie sie gefunden haben, weisen Sie sie mithilfe der Funktion einer bodyfolder-Variablen zu. GetSpecificFeature()

Alles, was Sie noch tun müssen, ist, eine Schleife über die Volumenkörper zu machen und sie mit Body.Select() auszuwählen. Es scheint mir, dass es möglich ist, mit dieser Methode ein Flag hinzuzufügen. Wenn nicht, verwenden Sie den Auswahl-Manager, um die Auswahl zu treffen.

Hallo Yves.T,

Ich hatte es mit einer Schleife (mit D.Rogers Code) versucht, die das Volumen meines Stücks wiederherstellen sollte1 (siehe unten)...

... Funktioniert aber auch nicht! Ich werde weiter kratzen, aber mir muss eine Bestellung fehlen!

Haben Sie ein Beispiel für "feature. GetSpecificFeature()" und Entschuldigung für meine Anfängerfrage, aber was meinst du mit "Flagge hinzufügen"?

Set Feature = Part.FirstFeature
        Dim-Stück1 als Schnur
        Auch wenn kein Feature nichts ist
        FeatureName = Feature.Name
         Wenn Feature.GetTypeName2 = "Lager" dann
         Stück1 = FeatureName
         Ende, wenn
        Set Feature = Feature.GetNextFeature()
        Wend
       
    Auswahl des Hauptkörpers
    boolstatus = Part.Extension.SelectByID2("Mat.-Extru.3 entfernt", "SOLIDBODY", 0, 0, 0, Falsch, 1, Nichts, 0)
    "Auswahl des abzuziehenden Anteils
    boolstatus = Part.Extension.SelectByID2("<Piece1>-<Volumes>", "BDYFOLDER", 0, 0, 0, True, 2, Nichts, 0)

    Set myFeature = Part.FeatureManager.InsertCombineFeature(15902, Nichts, Nichts)

Vielen Dank.

Ich gebe Ihnen ein Beispiel für eine Schleife, die Körper in VBA wiederherstellt.

Die Schleife, die Sie als Beispiel einfügen, ruft den Namen eines Features ab, wenn es vom Typ "Rohteil" ist.

Ich habe nicht überprüft, bin mir aber nicht sicher, ob "Stock" einer der Werte ist, die von GetTypeName2 zurückgegeben werden. . Dies ist in der Hilfe zu überprüfen.

boolstatus = Part.Extension.SelectByID2("<Piece1>-<Volumes>", "BODYFOLDER", 0, 0, 0, True, 2, Nichts, 0)

In dieser Anweisung bitten Sie sie, ein Objekt mit dem Namen <Piece1>-<Bulking Bodies> vom Typ BODYFOLDER auszuwählen. Er wird es wahrscheinlich nicht finden:) setze stattdessen BODY.

In den Select-Funktionen (SelectById, SelectById2,...) gibt es einen Parameter, der verwendet wird, um einen Indikator auf eine Auswahl zu setzen, das ist ein Flag.

In einigen Solidworks-Funktionen ist es möglich, mehrere Objekte auszuwählen (Beispiel: In einem Boss wählen Sie die Konturskizzen und dann die Führungskurven aus). Das Flag ermöglicht es Solidworks, die ausgewählten Objekte in der richtigen "Box" zu platzieren. Die Auswahl mit Flagge 1 sind die Konturen, Flagge 2 und die Hilfskurven.

Hallo

Es ist schnell zusammengeschustert, aber probieren Sie es mit dem beigefügten Makro aus, um zu sehen, ob es zu Ihnen passt.

Herzliche Grüße


combiner.swp
1 „Gefällt mir“

Anbei finden Sie ein kommentiertes Makro-Beispiel

Die einzigen Bedingungen, damit es funktioniert:

Benennen des Haupttexts als "MainBody"

Haben + eines Volumenkörpers


feature.swp
1 „Gefällt mir“

Hallo und sorry für die späte Rückkehr, viele Themen in Arbeit...!

@d.Roger,

Ich würde gerne wissen, wie man mit der VBA "herumbastelt" wie Sie, aber ich denke, ich habe noch einen langen Weg vor mir!

Das Makro funktioniert großartig (einzeln), aber wenn ich es mit einem anderen Makro aufrufe, musste ich 'Explizite Option' entfernen, ein kleines Stück Code hinzufügen, um die Solidworks-Anwendung zu sehen...

'Ermöglicht es Ihnen, die SolidWorks Anwendung anzuzeigen.
swApp.Visible = Wahr
Wenn swApp nichts ist, dann
Set swApp = CreateObject("SldWorks.Application")
swApp.Visible = Wahr
Ende, wenn

... Und am Ende nervt es weiter...

"Set Feature = Part.FeatureManager.InsertCombineFeature(swBodyOperationType_e.SWBODYCUT, Nichts, Nichts)"

... und scheint nicht an die "Sub SelectBodies(swApp As SldWorks.SldWorks... "

Kommunikationsproblem also?!?

@Yves.T,

Um die Hauptkörper in "MainBody" umzubenennen, sollte dies möglich sein, andererseits kann es nur einen Pafrois-Volumenkörper geben. Auf jeden Fall vielen Dank für die Kommentare im Makro, es hilft wirklich beim Verständnis , ich werde sehen, ob ich mich anpassen kann!

Hallo

Zunächst einmal vielen Dank für das Kompliment am Anfang, aber in vba "bastle" ich nur, es ist eine Programmiersprache, die Yves.T viel mehr beherrscht als ich, der eher C# orientiert folgt.

Für die Entfernung der expliziten Option entweder. Bei Zeilen, in denen Solidworks angezeigt wird, ist dies in Ordnung, wenn das Makro über ein anderes Makro gestartet wird. Für die Sub SelectBodies(.....) wurde sie zum Zeitpunkt des Fehlers bereits aufgerufen, also kein Problem auf dieser Ebene und für den Fehler in der Zeile "Set Feature = Part.FeatureManager.InsertCombineFeature(swBodyOperationType_e.SWBODYCUT, Nothing, Nothing)", wie Yves.T in seinem Makro zu Recht angedeutet hat ("aber vor allem verwenden wir die Markierung, um die guten zu bekommen"), kann man die Zeile ersetzen:

"Set Feature = Part.FeatureManager.InsertCombineFeature(swBodyOperationType_e.SWBODYCUT, Nichts, Nichts)"

in  den Zeilen:

Sun SelMgr als AuswahlMgr
Set SelMgr = Part.SelectionManager
Set Feature = Part.FeatureManager.InsertCombineFeature(swBodyOperationType_e.SWBODYCUT, SelMgr.GetSelectedObject6(1, 1), SelMgr.GetSelectedObject6(1, 2))

Mal sehen, ob es so funktioniert, wie Sie es möchten.

Herzliche Grüße

Hallo d.roger,

Ich habe gerade die Codezeilen ersetzt und es blockiert auf:

"Set Feature = Part.FeatureManager.InsertCombineFeature(swBodyOperationType_e.SWBODYCUT, SelMgr.GetSelectedObject6(1, 1), SelMgr.GetSelectedObject6(1, 2))"

Fehler 424: Erforderliches Objekt

Herzliche Grüße