Konvertieren einer Assembly in eine eigenständige Datei

Ich befestige ac-cobra, zu welchem Zweck? Es geschieht eher umgekehrt, und vor allem wird es die Veröffentlichung der Pläne erschweren, sonst reicht die Top-Down-Modellierung nicht aus!?

Ja, die Gewichtsreduktion ist Teil des Ziels.
Ich möchte auch eine unabhängige Datei "komplett zusammengesetztes Objekt" haben, die zwar vollständig, aber nicht von externen Referenzen abhängig ist. Dies erleichtert, teilt, speichert und stellt zumindest sicher, dass das Objekt in jedem Fall ausgenutzt werden kann.

1 „Gefällt mir“

In meiner idealen Welt würde ich ein Makro programmieren, das einfach eine leere PRT-Datei aus einer geöffneten Baugruppe erstellt, die Bäume jedes Teils in der Baugruppe extrahiert und in das FHM kopiert (ggf. Elemente umbenennen), aber den lokalen Ursprung jedes Teils durch den Ursprung der Baugruppe ändert, um sicherzustellen, dass ihre Platzierung mit der Baugruppe übereinstimmt.

1 „Gefällt mir“

Es ist ein separates Teil, das Sie außerhalb der Baugruppe speichern, das Sie verschieben können, und dann werden die Verknüpfungen unterbrochen...

Also erstmal vielen Dank für den Trick, von dem ich nichts wusste und der mir eines Tages unweigerlich nützlich sein wird. :+1:
Leider reagiert es nicht auf die Anfrage, aber ich verstehe die Verwirrung, weil das Wort "Zusammenführen", das ich verwendet habe, nicht das passendste ist. Wir mussten "Gruppe" verstehen.

Ich bin ein bisschen verloren, weil ich nicht wirklich verstehe, ob ich ein Teil mit Körpern haben soll oder nicht, weil es nicht geändert werden kann und das Visual das gleiche ist wie eine Datei, die in prt gespeichert ist.

2 „Gefällt mir“

Also zunächst einmal wird mein Fehler bei der Erkennung von Funktionen durch die Schrauben aus dem Werkzeugkasten verursacht. Wenn ich sie vom Kredit ausschließe, geht die Anerkennung gut. Es ist eine Schande, aber hey, sagen wir einfach, es ist schon nicht schlecht.
Nur dass man anscheinend für jedes importierte Objekt nacheinander manuell eine Funktionserkennung durchführen muss... Wir können keine Mehrfacherkennung machen??

Ich habe mich wahrscheinlich schlecht ausgedrückt, aber um es klarer zu sagen, nehmen wir an, dass ich das will, was "ASM als PRT registrieren" tut, außer dass ich keine nutzlosen Rekonvertierungen von Geometriekonvertierungen durchlaufen möchte, noch eine (des!!) Ich möchte Funktionen, Beziehungen, Zitate, Originalnamen behalten. Ein dummes Klonen des ursprünglichen Baumes eines jeden Zimmers* in einem anderen Gemeinschaftsraum, weißt du. (noch mehr QD sehe ich die Zeit, die es braucht, um die Funktionen zu erkennen und dass man es für jedes der Teile neu starten muss..., dann umbenennen...). Im Gemeinschaftsraumbaum sollten die Raumbäume in einzelnen Ordnern der Raumnamen hierarchisiert werden.

Wir würden uns eher auf das "Verbinden"-Tool konzentrieren, aber ohne Zusammenführen, nur eine Hinzufügung jedes Baums*, so wie es ist, nacheinander im neuen Zielteil. Eine Verkettung ohne Umsetzung als Ergebnis. Und am besten immer in separaten Ordnern (im featureManager eh).

Es scheint, dass nur ein Makro in der Lage sein wird, diese Anforderungen zu erfüllen :thinking:

*Wenn ich von "ursprünglichem Baum" spreche, meine ich "alle Funktionen, Pläne usw., aus denen sich der Raum zusammensetzt".

In der Tat, was Sie wollen, ist, an den vielfältigen Funktionen Ihrer Teile der Baugruppe in einem Teil zu arbeiten, ich weiß nicht, ob ich mich gut ausgedrückt habe :upside_down_face::woozy_face::upside_down_face::woozy_face:

Tatsächlich möchte ich, dass alle Teile einer Baugruppe so "eingebettet" werden, wie sie in einem einzigen FHM sind.
Der einzige Unterschied, der im Baum sichtbar ist, besteht darin, dass das gelbe "Teil"-Symbol zu einem blauen "Ordner"-Symbol wird.

Und in der Tat würde es Ihnen ermöglichen, alle "Teile" (ihre Funktionen in Ordnern gruppiert) vom Gemeinschaftsraum aus zu bearbeiten.

Ich glaube nicht, dass :expressionless: :expressionless: das möglich ist :expressionless:
Die einzige Möglichkeit besteht darin, in einem Mehrkörperraum zu antizipieren und zu bauen, und es wird Ihnen nicht helfen, das Teil im Vergleich zu einer Baugruppe zu erleichtern, da es die Funktionen sind, die ...
Viel Glück, denn Sie werden etwas brauchen :stuck_out_tongue_winking_eye: :crazy_face: :stuck_out_tongue_winking_eye: :crazy_face:

Hallo
Grundsätzlich möchten Sie die Funktion " Teil einfügen " verwenden, aber anstelle eines Teils wäre es eine Baugruppe (mit diesem Befehl unmöglich) und Sie könnten die Option " Vom Originalteil übertragen" verwenden. Ich gebe an, dass Sie die Verbindung mit dem ursprünglichen Teil aufheben müssen, um den Konstruktionsbaum wiederherzustellen.

Außer mit einem Makro, das jeden Teil der Assembly einzeln nimmt und diesen Befehl verwendet, sehe ich nicht.
Viel Glück für Sie

1 „Gefällt mir“

Hallo @Sylk

Das ganze Problem liegt in diesen beiden Wörtern: Extrahieren und Kopieren. Mit anderen Worten: Kopieren/Einfügen...

Das Scannen des Baugruppenkomponentenbaums zur Identifizierung der " Quellteile " ist leicht vorstellbar, aber meines Wissens gibt es kein Kopieren / Einfügen des Build-Baums jedes " Quell " -Teils in das gleiche " Ziel " -Teil.
Die einzigen Elemente, die von einem Teil in ein anderes " kopiert " werden können, sind Skizzen, Kurven, Flächen und Körper, keine geometrischen Elemente.

In Ermangelung einer Verkettung in einem Teil kann ein anderer Weg beschritten werden, der es ermöglicht, die Sicherung auf eine einzige Datei zu reduzieren: Virtualisieren Sie alle Komponenten, d.h. integrieren Sie sie in das Baugruppendokument.
Die Logik entspricht Ihren Erwartungen, auch wenn es sich bei dem endgültigen Dokument um eine Baugruppe und nicht um ein Teil handelt.
Die Funktion " Virtuell machen " ist in den SolidWorks APIs vorhanden. Die Verknüpfungen der virtualisierten Teile mit den ursprünglichen Teilen werden unterbrochen, die Buildstruktur bleibt jedoch erhalten.

Herzliche Grüße.

1 „Gefällt mir“

Hallo @Rim-b
Ausgezeichnet!! Aber nicht perfekt... Dies ist genau das erwartete Endergebnis, mit Ausnahme der Platzierung.

Ich füge ein Blechteil in das Basis-Blechteil ein, kann es aber nicht wie gewünscht positionieren. Ist es möglich, das eingelegte Blech zu drehen oder sind wir auf die Verschiebung während des Einsetzens beschränkt?

Die ursprüngliche Idee, eine Montage zu durchlaufen, bestand hauptsächlich darin, die Positionierung zu vereinfachen, bevor alles in einem Kredit endete.

Hallo

Nein, es gibt Baugruppenfunktionen (Verschieben mit Abhängigkeiten).
Aber ehrlich gesagt, es ist eine Gasfabrik, von meinem Fenster aus gesehen, was Sie versuchen zu tun.
Sie müssen beim Start den richtigen Modus wählen (Baugruppe oder Teil innerhalb eines Teils), da das anschließende "Konvertieren" Stunden und Stunden Arbeit erfordert. Ich bin mir nicht einmal sicher, ob ein Makro dies tun kann, ohne Positionierungsfehler zu erzeugen, oder zumindest Stunden für diese Art der Entwicklung aufwenden muss.

2 „Gefällt mir“

Ich benutze oft die Insert-Part-Funktion und bestätige Ihr Verzeichnis Cyril, das Ding springt bei der kleinsten Änderung im Baum sw spielt nicht gerne zu viel mit der Wiederherstellungsleiste,
Für das Kopieren einer Funktion mit Makro glaube ich auch nicht, ich sehe nicht, wie man ein Loch oder ein Entfernen von Blindmaterial oder durch alles ändern kann, ohne die anderen Körper zu beeinflussen!

3 „Gefällt mir“

Hallo

Das Einfügen eines Teils in ein Teil funktioniert. Auf der anderen Seite, wenn Sie mehr als ein Dutzend Teile haben, kann es sehr schnell mühsam werden, es zu verwalten. Wenn Sie möchten, dass es funktioniert, ist es am besten, beim Einfügen von Teilen wahrscheinlich keine Abhängigkeiten zu verwenden, sondern nur Positionen.
Eine mögliche Lösung wäre vielleicht, Gruppierungen von Teilen zu machen, die zusammenpassen (also Unterstücke bilden) und dann ein Dutzend Teile in einen Raum einzufügen.

NB: Was den Wiederaufbau angeht, kann es auf jeden Fall schwierig sein, das zu bewältigen.

1 „Gefällt mir“

Ja, ich bestätige und es ist ziemlich bestrafend, wenn ein Kunde Ihnen ein ASM im STEP-Format oder einem anderen neutralen Format sendet, um Sie dazu zu bringen, eine RDM-Simulation durchzuführen. Ganz zu schweigen davon, dass Sie dabei alle Einschränkungen verlieren.

Viel Glück :cold_face:

2 „Gefällt mir“

Hallo.
Vielen Dank an alle für Ihre sehr informativen Antworten!

Also, ich habe das Einfügen eines Teils in ein Teil getestet, die Datei wiegt 2-mal weniger als eine Baugruppe, bei der das gleiche Teil virtuell gemacht wurde.
Die Tatsache, dass das Gewicht von doppelt auf einfach geht, ist nicht zu vernachlässigen.

Beim Lesen dieses Themas habe ich jedoch den Eindruck, dass die Virtualisierung der Teile in einer Baugruppe bei weitem die einfachste, praktischste und flexibelste Lösung bleibt.
Schade, dass die Mappe doppelt so viel wiegt...
Der Pinkel-Trick ist in der Tat eine interessante Möglichkeit, @froussel

Wenn ich mir Lapi anschaue, scheint es mir, dass es spielbar ist:

  1. Durchsuchen Sie die Komponenten nacheinander

  2. Rufen Sie die Position und Ausrichtung der Komponente relativ zum Baugruppenursprung ab.

  3. Fügen Sie die Komponente in ein Bauteil ein, und heben Sie die Verknüpfung auf.

  4. Neue Leichen aufspüren (ein bisschen Kopfschmerzen!) .

  5. Wenden Sie Orientierung und Verschiebung auf diese neuen Körper an

Durch das Unterbrechen der Verknüpfung werden die Funktionen des eingefügten Teils im Baum wiederhergestellt, das Wunder besteht darin, dass SW sie nur auf neue Körper anwendet (es ändert die Definition und die Aktionsbereiche aller Körper auf eine automatische😀 Auswahl), wodurch das Problem vermieden wird, das ich zuvor erwähnt habe, so dass die Verknüpfung im Baum unterbrochen und stabil ist,

Das einzige Bimol, das ich finde, ist, dass diese Körper in Bezug auf den Teileursprung positioniert sind, nicht durch Spannungswechselwirkungen.
Das soll nicht heißen, dass die Baumstruktur sehr, sehr lang sein wird, abhängig von der Anzahl der Komponenten und ihrer Komplexität

3 „Gefällt mir“

Falls beigefügt, eine Beschreibung der Punkte
(Danke an @Rim-B , der die Hauptfunktion erwähnt hat)






Assemblage1.zip (355.9 KB)

Option Explicit

Dim swApp As Object
Dim swmodel As ModelDoc2
Dim swpart As PartDoc
Dim swassembly As AssemblyDoc
Dim swMathUtils As SldWorks.MathUtility
Dim featmgr As FeatureManager
Dim pbodies As Variant
Dim selmgr As SelectionMgr
Const PI As Double = 3.14159265359


Sub main()

    Set swApp = Application.SldWorks
    Set swMathUtils = swApp.GetMathUtility
    Set swassembly = swApp.ActiveDoc
    Set swmodel = swApp.NewDocument("C:\ProgramData\SOLIDWORKS\SOLIDWORKS 2022\templates\Pièce.PRTDOT", 0, 0, 0)
    Set swpart = swmodel
    Set featmgr = swmodel.FeatureManager
    Set selmgr = swmodel.SelectionManager
    Dim comp As Component2
    Dim vcomp As Variant, vc As Variant
    vcomp = swassembly.GetComponents(False)
        
    For Each vc In vcomp
        Set comp = vc
        Dim pos As Variant
        pos = get_position(comp)
        
        pbodies = swpart.GetBodies2(0, False)
        swpart.InsertPart3 comp.GetPathName, 512, comp.ReferencedConfiguration()
        select_bodies get_bodies(swpart, pbodies)
        featmgr.InsertMoveCopyBody2 0, 0, 0, 0, 0, 0, 0, pos(5), pos(4), pos(3), False, 1
        
        select_bodies get_bodies(swpart, pbodies)
        featmgr.InsertMoveCopyBody2 pos(0), pos(1), pos(2), 0, 0, 0, 0, 0, 0, 0, False, 1
    Next
End Sub

Function get_position(comp As Component2) As Variant
    Dim pos(5) As Variant
    Dim swTransform As SldWorks.MathTransform
    Set swTransform = comp.Transform2
    
    Dim r11 As Double, r12 As Double, r13 As Double
    Dim r21 As Double, r22 As Double, r23 As Double
    Dim r31 As Double, r32 As Double, r33 As Double
    
    Dim r41 As Double, r42 As Double, r43 As Double
    Dim r44 As Double
    
    r41 = swTransform.ArrayData(9)
    r42 = swTransform.ArrayData(10)
    r43 = swTransform.ArrayData(11)
    r44 = swTransform.ArrayData(12)
    pos(0) = r41 * r44
    pos(1) = r42 * r44
    pos(2) = r43 * r44
        
    Set swTransform = swTransform.Inverse
    r11 = swTransform.ArrayData(0)
    r12 = swTransform.ArrayData(1)
    r13 = swTransform.ArrayData(2)
    
    r21 = swTransform.ArrayData(3)
    r22 = swTransform.ArrayData(4)
    r23 = swTransform.ArrayData(5)
    
    r31 = swTransform.ArrayData(6)
    r32 = swTransform.ArrayData(7)
    r33 = swTransform.ArrayData(8)
    
    If r13 < 1 Then
        If r13 > -1 Then
            pos(3) = atan2(-r23, r33)
            pos(4) = asin(r13)
            pos(5) = atan2(-r12, r11)
        Else
            pos(3) = -atan2(r21, r22)
            pos(4) = -PI / 2
            pos(5) = 0
        End If
    Else
        pos(3) = atan2(r21, r22)
        pos(4) = PI / 2
        pos(5) = 0
    End If

    get_position = pos
    
End Function

Function get_bodies(part As PartDoc, pbodies As Variant) As Variant
    Dim cbodies As Variant, bod As Variant, bod1 As Variant
    Dim vbodies() As Variant
    Dim row As Integer
    row = 0
    Dim isnew As Boolean
    Dim body As Body2
    Dim body1 As Body2
    cbodies = part.GetBodies2(0, False)
    If Not IsEmpty(pbodies) Then
        For Each bod In cbodies
            isnew = True
            Set body = bod
            For Each bod1 In pbodies
                Set body1 = bod1
                If body.Name = body1.Name Then
                    isnew = False
                End If
            Next
            If isnew = True Then
                ReDim Preserve vbodies(row)
                Set vbodies(row) = body
                row = row + 1
            End If
        Next
        Dim v As Variant
        get_bodies = vbodies
    Else
        get_bodies = cbodies
    End If
End Function

Sub select_bodies(bodies As Variant)
    Dim seldata As SelectData
    Dim bod As Variant
    Dim body As Body2
    Set seldata = selmgr.CreateSelectData
    seldata.Mark = 1
    swmodel.ClearSelection2 True
    If Not IsEmpty(bodies) Then
        For Each bod In bodies
            Set body = bod
            body.Select2 True, seldata
        Next
    End If
End Sub

Function atan2(Y As Double, X As Double) As Double
    If X > 0 Then
        atan2 = Atn(Y / X)
    ElseIf X < 0 Then
        atan2 = Sgn(Y) * (PI - Atn(Abs(Y / X)))
    ElseIf Y = 0 Then
        atan2 = 0
    Else
        atan2 = Sgn(Y) * PI / 2
    End If
End Function

Function asin(X As Double) As Double
    If Abs(X) = 1 Then
        asin = X * PI / 2
    Else
        asin = Atn(X / Sqrt(1 - X * X))
    End If
End Function

<< der Code keine Fehlerbehandlung aufweist, testen Sie nach Bedarf, ändern Sie die Pfadvorlage, API 2022>>

2 „Gefällt mir“