Visualisierungs-Würfel

Vielen Dank für diese Antworten.

Der Fehler variiert also je nach Baugruppen und Teilen.
Dieser reicht von 0,5 bis 1,5 mm.
In meinem Fall ist das nicht unbedingt wichtig, da ich meine Werte auf den cm zurückbekomme.

Meine Frage war hauptsächlich, um den Code besser zu verstehen und ihn möglicherweise zu korrigieren, wenn es machbar ist. Also nichts Zwingendes.

Ich setze immer noch die Baugruppe + Teile mit 3D-Skizze + Systemkoordinaten, die vom Makro generiert wurden, wenn Sie suchen möchten.

Danke für die Informationen :slight_smile:

TEST ENCOMBREMENT.rar (1,1 MB)

1 „Gefällt mir“

Tolle Arbeit @m.blt , wie immer.
Und ich dachte, ich müsste die " BoundingBox " bis jetzt nie benutzen... Ich stoße auf einen Kunden, sagen wir... Kleinlich.
Ihr Makro ist daher zeitgemäß. Vielen Dank :index_pointing_at_the_viewer: :+1: :+1: :index_pointing_at_the_viewer:

2 „Gefällt mir“

Hallo @Maclane , und vielen Dank für das Kompliment...
Hüten Sie sich jedoch vor dem Problem der Präzision , das @MLG in seiner letzten Botschaft angesprochen hat.
Ich habe die Anomalie bemerkt, konnte aber nicht erkennen, ob es SW oder das Makro ist, das schuld ist.

3 „Gefällt mir“

Hallo;
Dies ist ein wiederkehrendes Problem mit Splines, Solidworks berücksichtigt nur die Punkte und nicht die Kurve selbst, daher denke ich, dass die Funktion " GetExtremePoint() " dasselbe tut (wie der Name schon sagt).

Ich für meinen Teil habe mir die Freiheit genommen, Ihr Makro zu ändern, indem ich die Eigenschaften zum Dokument hinzufüge, mit der Option, sie in allen Konfigurationen zu registrieren (oder nicht).
Auf der anderen Seite suche ich nach Möglichkeiten, der 3D-Skizze Bemaßungen hinzuzufügen.

Ich habe mir den Begriff, der mit der Schaltfläche " Löschen " verbunden ist, noch nicht angesehen, aber ich denke, dass es durch die explizitere Umbenennung der Funktionen " 3Dsketch " und " Koordinatensystem " (wie " BoundingBox_3D " und " BoundingBox_XYZ ") einfacher sein wird, sie zu löschen oder sogar alle Funktionen (Reste) mit den gleichen Namen (+Zähler) zu löschen.

Herzliche Grüße.

3 „Gefällt mir“

Hallo @MLG

Vielleicht sind die Werte genauer, wenn alle Qualitätseinstellungen in den Dokumentoptionen ausgeschöpft sind?

1 „Gefällt mir“

Hallo ihr alle
Der Unterschied ist wirklich minimal, aber tatsächlich vorhanden.
Nachdem wir Dokumente von Hand aufgelistet hatten und einige dieses Makro verwendeten, hatten wir am Ende unterschiedliche Ausgabedaten, daher meine Frage...
Und bei Splines vermeiden wir es, mit ihnen zu arbeiten, um diese Art von Problemen nicht zu haben.

Tag zusammen
HOP, hier bin ich wieder bei diesem Thema! :slight_smile:
Das Makro funktioniert gut, aber ich stehe vor einem Problem.
Erklärungen:

Das Makro wurde verwendet, um einen 3D-Würfel zu definieren, der es mir ermöglichte, die Footprint-Werte meiner Baugruppe entsprechend einer genauen Ausrichtung abzurufen. Für diesen Nickel und ein GROSSES DANKESCHÖN an @m_blt und an alle, die an der Weiterentwicklung dieses Beitrags :+1: beteiligt waren.

Meine Baugruppen haben Dichtungsbaugruppen (unten in blau), um das Produkt am Boden zu befestigen. In meinem Makro habe ich diese Unterbaugruppen gelöscht, so dass ich nur das Teil über dem Boden der Gegenwart hatte. Ich habe jedoch Baugruppen in direkter Abdichtung (unten in rot), d.h. sie sind unterhalb und oberhalb von Ebene 0 (unten) vorhanden, ohne dass sie geteilt/getrennt werden können:

Ich möchte wissen, ob es möglich ist, dem UserForm die Auswahl der Ebene 0 (eine Ebene oder eine Teilefläche) hinzuzufügen, um die unterste Ebene des 3D-Würfels zu bestimmen? Unterbaugruppen in direkter Abdichtung (in rot) können nicht gelöscht werden, da sie zur Definition der Breite des Würfels verwendet werden:

Die Auswahl des Plans der Ebene 0 müsste daher die NIEDRIGE Ebene des Würfels definieren und die Grundfläche für Länge/Breite/Höhe müsste nur mit allem oberhalb von Ebene 0 definiert werden, ohne zu berücksichtigen, was darunter liegt.

Ich hoffe, es ist verständlich, denn es ist nicht leicht zu erklären :sweat_smile:

Hallo MLG,

Ein Jahr später, zurück zum Kubus... :wink:
image

Das Prinzip der Makroverarbeitung basiert darauf, den Baugruppenbaum zu durchlaufen, um die Komponenten zu finden, die die Abmessungen des Würfels begrenzen. Die Berücksichtigung eines Plans, der bestimmte Komponenten kürzt, um einige von ihnen auszuschließen, scheint auf den ersten Blick kompliziert.

Es sei denn...
Ein Anhaltspunkt: Es sollte möglich sein, wenn diese " Level 0 " -Ebene die Referenzebene für die Erstellung des Würfels ist (erste im Makro ausgewählte Ebene), oder schlimmstenfalls parallel zu einer Fläche des zukünftigen Würfels.
Sie müssen diese " begrenzende " Ebene (Ebene 0) zusätzlich zu den beiden Elementen auswählen, die zum Ausrichten der Flächen des Würfels verwendet werden, und nicht berücksichtigen, was sich darunter befindet (welche Seite befindet sich darunter?).
Annehmbar?

4 „Gefällt mir“

Wieder zu Hause, tut mir leid, ich habe das Thema begonnen und bin auf etwas anderes wie einen unhöflichen Kerl gestoßen!!

@m_blt hatten wir bei der Auswahl eine Seite des Onnants, eine Ausrichtung des Würfels und eine Kante, die die Vertikalität verleiht.
Ist es möglich, zusätzlich in der ersten Auswahl eine Ebene zu haben, die Ebene 0 wäre und somit alles, was sich unter dieser Ebene befinden würde, bei der Definition des Würfels nicht berücksichtigt würde?

1 „Gefällt mir“

Hallo;

Ich belebt das Thema wieder, und besonders @m_blt , denn egal wie sehr ich mich bemühe, meine Versuche enden im Scheitern...
Ich habe nach einer Möglichkeit gesucht, ein Zitat auf die Begrenzungsbox zu setzen, die vom obigen Makro generiert wird... (auf dem lokalen Marker)

Dimension Nr. 1 => von Punkt Nr. 0 bis Punkt Nr. 1 (gemäß Achse X_local)
Dimension Nr. 3 => von Punkt Nr. 0 bis Punkt Nr. 2 (gemäß Achse Y_local)
Dimension Nr. 2 => von Punkt Nr. 0 bis Punkt Nr. 4 (gemäß Achse Z_local)

Habt ihr Ideen, die ihr mir schicken könnt, wie ich weiter vorgehen soll?

1 „Gefällt mir“

Ich habe nur diese alten Informationen gefunden, ich dachte nicht, dass es möglich ist, es zu pilotieren. Wenn nicht, ist es im 3D-Dressing möglich, ich denke in 2D, das ist sicher. Abschließend zur Version 2018 siehe Links
Dimensionierung eines Visualisierungswürfels – 2D-Plan / Zeichnung – myCAD Forum (visiativ.com)

Ich habe bereits herausgefunden, wie ich die Bemessung auf der 2D-Skizze hinzufügen kann, aber was ich mir gewünscht hätte, wäre, dass die Maßung direkt in der 3D-Skizze gesteuert wird.
Das Ziel ist, dass meine Ingenieure die Maße der " Begrenzungsbox " direkt unter E-Zeichnung sehen oder direkt im 3D-Bereich Screenshots machen können...
Sie (meine Ingenieure) sind nicht immer sehr gut mit ihrer Maus, und erst recht mit der Bewertung unter Edrawing, also kann man die Arbeit genauso gut für sie übernehmen. :yum:

1 „Gefällt mir“

Ich hatte für das Zitat verstanden, dass das Ziel war, seinen Würfel zu meistern.
Ursprünglich war der Zweck dieses Würfels, Ströme zu definieren, sodass er sich an das Bestehende anpasst; wenn du die Dimensionen kontrollieren willst, musst du selbst einen erstellen. Und je nach Ausrichtung komplizierter, aber nicht unmöglich

Ingenieure auf Edraw!! Es ist schon ein Luxus :stuck_out_tongue_winking_eye: :grin:

2 „Gefällt mir“

Nun, nein, es ist ganz umgekehrt, ich brauche keine Steuerdimensionen, ich suche nur nach einer Möglichkeit, die drei Dimensionen visuell in Form von Dimensionen (gesteuert) in der 3D-Skizze des Würfels erscheinen zu lassen (und auf seinem neuen orthonormalen Koordinatensystem ausgerichtet).
Es ist immer noch verrückt, dass ich den Code von @m_blt nicht anpassen kann ... dennoch liefert es 98 % der notwendigen Informationen... :crazy_face:

okOK
In dem Link, den ich dir eingefügt habe, kam die Person (manuell!) neben dich, aber ab und zu schaffte sie es ohne Grund nicht.

Bah!
Um manuell zu dimensionieren, kann man das genauso gut machen, ohne das Makro durchzugehen, schließlich sind es nur drei Dimensionen, die zu einem Würfel hinzugefügt werden müssen.
Naiv dachte ich, ich könnte sie leicht direkt in den Makrocode einfügen, aber entweder mache ich es sehr falsch (das ist durchaus möglich), oder die Dimensionierung in eine 3D-Skizze über die APIs einzufügen ist nicht so einfach.
Der @m_blt Code liefert jedoch alle notwendigen Informationen (oder mehr).
=> Ich habe den Punktnamen
=> Ich habe den Skizzennamen
=> Ich habe den Namen des Markers
und ich habe sogar Entfernungen zu den 3 X, Yet Z-Koordinaten...
Und bei all dem... Nun, ich bin auf dem Weg ... :melting_face: :crazy_face:

Hallo @Maclane ,

Entschuldigung für die späte Antwort...
Es ist nicht einfach, eine 3D-Skizze in einem Makro dimensioniert zu gestalten.
Die Kopfschmerzen bestehen darin, die Lage der Quoten genau zu definieren. Normalerweise lassen wir SW das machen und rechieren es dann " von Hand ".

Im Makro "Visualisierungswürfel " zeichnet die Sub TraceBox(ptLoc() As MathVector)- Funktion die Box.  Ich habe ein paar Zeilen hinzugefügt:

  • um die drei Seiten der Länge der Ecken der Box vom Ursprungspunkt P0 am besten zu platzieren.
  • um eine " Fixed "-Bedingung auf die acht Eckpunkte der Box anzuwenden, um die Skizze einzufrieren.
  • Um Referenzpunkte zu den Eckpunkten der Box zu erstellen, was im Debug-Modus nützlich ist, um diese Knoten zu identifizieren. Teil des Codes, um im Standardmodus zu kommentieren.

Das Ergebnis:

Prinzipiell :rofl: reicht es aus, die ursprüngliche TraceBox-Funktion durch die untenstehende zu ersetzen.

Sub TraceBox(ptLoc() As MathVector)

        Dim swFeat          As Feature
        Dim swRefPt         As RefPoint
        Dim swFeatMgr       As FeatureManager
        Dim matProps(8)     As Double
        Dim skSegment(11)   As SketchSegment
        Dim swSketch        As Sketch
        Dim posCote(2)      As Double
        Dim noPt            As Long
        Dim boolStatus      As Boolean
        Dim vRefPoint       As Variant
        Dim bInputDimPref   As Boolean
        Dim swDisplayDim    As DisplayDimension
        Dim i               As Long

    swModel.SketchManager.Insert3DSketch True
    swModel.SketchManager.AddToDB = True
    
    Set skSegment(0) = traceLigne(ptLoc, 0, 1)
    Set skSegment(1) = traceLigne(ptLoc, 0, 2)
    Set skSegment(2) = traceLigne(ptLoc, 2, 3)
    Set skSegment(3) = traceLigne(ptLoc, 1, 3)
    
    Set skSegment(4) = traceLigne(ptLoc, 4, 5)
    Set skSegment(5) = traceLigne(ptLoc, 4, 6)
    Set skSegment(6) = traceLigne(ptLoc, 6, 7)
    Set skSegment(7) = traceLigne(ptLoc, 5, 7)
    
    Set skSegment(8) = traceLigne(ptLoc, 0, 4)
    Set skSegment(9) = traceLigne(ptLoc, 1, 5)
    Set skSegment(10) = traceLigne(ptLoc, 3, 7)
    Set skSegment(11) = traceLigne(ptLoc, 2, 6)
    
    ' Contrainte "Fixe" des sommets de la boite
    For noPt = LBound(ptLoc) To UBound(ptLoc)
        boolStatus = swModel.Extension.SelectByID2("", "SKETCHPOINT", ptLoc(noPt).ArrayData(0), ptLoc(noPt).ArrayData(1), ptLoc(noPt).ArrayData(2), False, 0, Nothing, 0)
        If boolStatus Then
            swModel.SketchAddConstraints "sgFIXED"      ' Sommet fixé
        End If
    Next noPt
    
    ' Cotation des arêtes de la boite
    bInputDimPref = swApp.GetUserPreferenceToggle(swUserPreferenceToggle_e.swInputDimValOnCreate)
    swApp.SetUserPreferenceToggle swUserPreferenceToggle_e.swInputDimValOnCreate, False
    
    ' Cote de l'arête / X
    swModel.ClearSelection2 True
    For i = 0 To 2
        posCote(i) = ptLoc(0).ArrayData(i) * 3 / 4 + ptLoc(1).ArrayData(i) / 2 - ptLoc(4).ArrayData(i) / 4
    Next i
'    swModel.SketchManager.CreatePoint posCote(0), posCote(1), posCote(2)
    skSegment(8).Select4 False, Nothing
    skSegment(9).Select4 True, Nothing
    Set swDisplayDim = swModel.AddDimension2(posCote(0), posCote(1), posCote(2))

    ' Cote de l'arête / Y
    swModel.ClearSelection2 True
    For i = 0 To 2
        posCote(i) = ptLoc(0).ArrayData(i) * 3 / 4 + ptLoc(2).ArrayData(i) / 2 - ptLoc(4).ArrayData(i) / 4
    Next i
'    swModel.SketchManager.CreatePoint posCote(0), posCote(1), posCote(2)
    skSegment(8).Select4 False, Nothing
    skSegment(11).Select4 True, Nothing
    Set swDisplayDim = swModel.AddDimension2(posCote(0), posCote(1), posCote(2))

    ' Cote de l'arête / Z
    swModel.ClearSelection2 True
    For i = 0 To 2
        posCote(i) = ptLoc(0).ArrayData(i) * 3 / 4 + ptLoc(4).ArrayData(i) / 2 - ptLoc(1).ArrayData(i) / 4
    Next i
'    swModel.SketchManager.CreatePoint posCote(0), posCote(1), posCote(2)
    skSegment(0).Select4 False, Nothing
    skSegment(4).Select4 True, Nothing
    Set swDisplayDim = swModel.AddDimension2(posCote(0), posCote(1), posCote(2))

    swApp.SetUserPreferenceToggle swUserPreferenceToggle_e.swInputDimValOnCreate, bInputDimPref
    swModel.ClearSelection2 True
    
    ' Réactualiser l'affichage
    swModel.ClearSelection2 True
    swModel.GraphicsRedraw2
    
    Set swSketch = swModel.SketchManager.ActiveSketch
    swModel.SketchManager.AddToDB = False
    swModel.SketchManager.Insert3DSketch True
    
    
'''    ' Création de points de référence aux sommets de la boite
'''    Set swFeatMgr = swModel.FeatureManager
'''    For noPt = LBound(ptLoc) To UBound(ptLoc)
'''        boolStatus = swModel.Extension.SelectByID2("", "EXTSKETCHPOINT", ptLoc(noPt).ArrayData(0), ptLoc(noPt).ArrayData(1), ptLoc(noPt).ArrayData(2), False, 0, Nothing, 0)
'''        If boolStatus Then
'''            vRefPoint = swFeatMgr.InsertReferencePoint(swRefPointSketchPoint, 0, 0.01, 1)       ' Création d'un point de référence
'''            Set swFeat = vRefPoint(0)
'''            swFeat.Name = "Pt" & CStr(noPt)
'''        End If
'''    Next noPt
    
    
    Set swFeat = swModel.FeatureByPositionReverse(0)
    matProps(0) = 0#: matProps(1) = 162# / 255#: matProps(2) = 175# / 255#     'Couleur turquoise
    matProps(3) = 1: matProps(4) = 1: matProps(5) = 0.5
    matProps(6) = 0.4: matProps(7) = 0: matProps(8) = 0
    swFeat.SetMaterialPropertyValues2 matProps, swThisConfiguration, Empty
    UserForm1.Show
    swModel.ForceRebuild3 True
    swModel.ClearSelection2 (True)
        
    swModel.Extension.SelectByID2 "", "EXTSKETCHPOINT", ptLoc(0).ArrayData(0), ptLoc(0).ArrayData(1), ptLoc(0).ArrayData(2), False, 1, Nothing, 0
    swModel.Extension.SelectByID2 skSegment(0).GetName & "@" & swSketch.Name, "EXTSKETCHSEGMENT", 0#, 0#, 0#, True, 2, Nothing, 0
    swModel.Extension.SelectByID2 skSegment(1).GetName & "@" & swSketch.Name, "EXTSKETCHSEGMENT", 0#, 0#, 0#, True, 4, Nothing, 0
    swModel.FeatureManager.InsertCoordinateSystem False, False, False

End Sub

1 „Gefällt mir“

Arrrrgggghhhhh!

=> die Punkte setzen... !! DIE !! PUNKTE BEHEBEN
… pfff, aber verdammt, ich wusste, dass ich auf dem richtigen Weg war. :sob:

nun, ich hatte auch vergessen:

swApp.SetUserPreferenceToggle swUserPreferenceToggle_e.swInputDimValOnCreate, False

Deshalb hat es nicht so gut funktioniert. :crazy_face:
Danke @m_blt und Hut ab.
(nicht so einfaches Makrozitat, oder?):sweat_smile:

1 „Gefällt mir“

Vor allem braucht man ein Blatt Papier und einen Stift in der Nähe der Tastatur, um die Darstellungen von SW zu bereichern... :disguised_face: :nerd_face: :sunglasses:

image

Es ist immer noch vollständiger und ästhetischer als das:

3 „Gefällt mir“