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.
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.
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.
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.
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
*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
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
das möglich ist
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
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
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.
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.
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!
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.
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
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:
-
Durchsuchen Sie die Komponenten nacheinander
-
Rufen Sie die Position und Ausrichtung der Komponente relativ zum Baugruppenursprung ab.
-
Fügen Sie die Komponente in ein Bauteil ein, und heben Sie die Verknüpfung auf.
-
Neue Leichen aufspüren (ein bisschen Kopfschmerzen!) .
-
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
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>>