Visualisierungs-Würfel

Und durch Ändern des X,Y,Z-Koordinatensystems?

1 „Gefällt mir“

Hallo

Ein Trick wäre vielleicht, wenn sich der Würfel nach der Generierung nicht mehr ändert (?), ein Volumen zu positionieren (oder eine temporäre Erweiterung auf den Körper zu extrudieren), das die obere rechte Ecke Ihres letzten Bildes begrenzen würde (also höchstens rechts mit dem rechten Rand des blauen Bereichs ausgerichtet und oben mit der oberen Spitze des weißen Bereichs ausgerichtet gestapelt, um einen temporären Rahmen zu schaffen, den dieser Zusatz erzwingen wird.
Es funktioniert übrigens mit jeder Ecke.

1 „Gefällt mir“

Eine kleine Präventionsbotschaft am Rande:

" Trinken oder bauen, du musst dich entscheiden!"  :crazy_face:

:stuck_out_tongue_winking_eye:

4 „Gefällt mir“

Hallo @a.eriaud
Ich habe dieses Makro, das gut funktioniert, indem es sich nach XYZ orientiert:

Dim swApp As SldWorks.SldWorks

Sub main()

    Set swApp = Application.SldWorks
    Dim swPart As SldWorks.PartDoc
    
    Set swPart = swApp.ActiveDoc
    
    If Not swPart Is Nothing Then
            
        Dim vBBox As Variant
    
        vBBox = GetPreciseBoundingBox(swPart)
     
        DrawBox swPart, CDbl(vBBox(0)), CDbl(vBBox(1)), CDbl(vBBox(2)), CDbl(vBBox(3)), CDbl(vBBox(4)), CDbl(vBBox(5))
        
        Debug.Print "Width: " & CDbl(vBBox(3)) - CDbl(vBBox(0))
        Debug.Print "Length: " & CDbl(vBBox(5)) - CDbl(vBBox(2))
        Debug.Print "Height: " & CDbl(vBBox(4)) - CDbl(vBBox(1))
        
    Else
        
        MsgBox "Please open part"
        
    End If
    
End Sub

Function GetPreciseBoundingBox(part As SldWorks.PartDoc) As Variant
    
    Dim dBox(5) As Double
    
    Dim vBodies As Variant
    vBodies = part.GetBodies2(swBodyType_e.swSolidBody, True)
        
    Dim minX As Double
    Dim minY As Double
    Dim minZ As Double
    Dim maxX As Double
    Dim maxY As Double
    Dim maxZ As Double
        
    If Not IsEmpty(vBodies) Then
    
        Dim i As Integer
        
        For i = 0 To UBound(vBodies)
        
            Dim swBody As SldWorks.Body2
    
            Set swBody = vBodies(i)
            
            Dim x As Double
            Dim y As Double
            Dim z As Double
            
            swBody.GetExtremePoint 1, 0, 0, x, y, z
            
            If i = 0 Or x > maxX Then
                maxX = x
            End If
            
            swBody.GetExtremePoint -1, 0, 0, x, y, z
            
            If i = 0 Or x < minX Then
                minX = x
            End If
            
            swBody.GetExtremePoint 0, 1, 0, x, y, z
            
            If i = 0 Or y > maxY Then
                maxY = y
            End If
            
            swBody.GetExtremePoint 0, -1, 0, x, y, z
            
            If i = 0 Or y < minY Then
                minY = y
            End If
            
            swBody.GetExtremePoint 0, 0, 1, x, y, z
            
            If i = 0 Or z > maxZ Then
                maxZ = z
            End If
            
            swBody.GetExtremePoint 0, 0, -1, x, y, z
            
            If i = 0 Or z < minZ Then
                minZ = z
            End If
            
        Next
    
    End If
    
    dBox(0) = minX: dBox(1) = minY: dBox(2) = minZ
    dBox(3) = maxX: dBox(4) = maxY: dBox(5) = maxZ
    
    GetPreciseBoundingBox = dBox
    
End Function

Sub DrawBox(model As SldWorks.ModelDoc2, minX As Double, minY As Double, minZ As Double, maxX As Double, maxY As Double, maxZ As Double)

    model.ClearSelection2 True
            
    model.SketchManager.Insert3DSketch True
    model.SketchManager.AddToDB = True
    
    model.SketchManager.CreateLine maxX, minY, minZ, maxX, minY, maxZ
    model.SketchManager.CreateLine maxX, minY, maxZ, minX, minY, maxZ
    model.SketchManager.CreateLine minX, minY, maxZ, minX, minY, minZ
    model.SketchManager.CreateLine minX, minY, minZ, maxX, minY, minZ

    model.SketchManager.CreateLine maxX, maxY, minZ, maxX, maxY, maxZ
    model.SketchManager.CreateLine maxX, maxY, maxZ, minX, maxY, maxZ
    model.SketchManager.CreateLine minX, maxY, maxZ, minX, maxY, minZ
    model.SketchManager.CreateLine minX, maxY, minZ, maxX, maxY, minZ
    
    model.SketchManager.CreateLine minX, minY, minZ, minX, maxY, minZ
    model.SketchManager.CreateLine minX, minY, maxZ, minX, maxY, maxZ
    
    model.SketchManager.CreateLine maxX, minY, minZ, maxX, maxY, minZ
    model.SketchManager.CreateLine maxX, minY, maxZ, maxX, maxY, maxZ
    
    model.SketchManager.AddToDB = False
    model.SketchManager.Insert3DSketch True
    
End Sub

Meine Baugruppen sind immer parallel zu den oberen Ebenen, also senkrecht zu Y, aber nicht unbedingt parallel zu X (oder Z).
Ich weiß nicht, ob VBA-Makrofunktionen es ermöglichen würden, im Voraus die Fläche auszuwählen, die die Orientierungsreferenz wäre, um eine gut ausgerichtete 3D-Skizze zu generieren ...
Wenn jemand eine Idee hat, wie man das im Makro macht, bin ich interessiert :smirk:

Hallo

In der Tat könnte es etwas mit diesem Makro zu tun haben...
Aber ich weiß nicht genug darüber, um anzufangen...

Ich denke, Sie müssten sich mit der Funktion " GetExtremePoint " befassen, um den Extrempunkt zu finden, während Sie parallel zu einer Ebene bleiben.

Es ist nur eine Idee...

Ich denke, dass es in diesem Forum Makro-Profis gibt, einige haben mir schon sehr geholfen...

Ich wünsche Ihnen ein schönes Wochenende im Voraus.

2 „Gefällt mir“

Hallo @MLG ,
Wenn wir die Idee eines " Hüllwürfels " (in Wirklichkeit ein rechteckiger Quader) beibehalten, sind die drei erzeugenden Ebenen senkrecht. Ist die erste gewählt, so genügt es dann, in dieser Ebene eine Richtung anzugeben, damit der Trieder vollständig eingeengt wird.
Ausgehend von dem von @MLG vorgeschlagenen Codestack-Makro, das für ein Teil gedacht ist, denken wir, dass wir es nur an eine Baugruppe anpassen müssen, indem wir die Teile des Konstruktionsbaums durchziehen und die Projektionsrichtungen erzwingen.
Einfach im Aussehen, aber aus den wenigen Momenten, die man sich vorstellen kann, werden Stunden. Zum Glück war das Wetter trübe...
Das Ergebnis ist im angehängten Makro verfügbar. Gebrauchsanweisung:

  • Eine Baugruppe muss in SolidWorks geöffnet werden.
  • Eine Ebene und eine Richtung (Gerade oder Skizzensegment) werden in dieser Reihenfolge im Grafikbereich ausgewählt.
  • Das Makro wird ausgeführt.

Befund:

  • Der Hüllwürfel wird als 3D-Skizze in der Baugruppe angezeigt.
  • Die Ränder des Würfels werden in einem UserForm angegeben.

Die Schwäche gegenüber dem SolidWorks " Visualisierungswürfel " besteht darin, dass der Hüllwürfel zum Zeitpunkt seiner Erstellung auf der Geometrie eingefroren ist. Eine Weiterentwicklung der Formen der Baugruppe wird nicht berücksichtigt.

Wie immer Makro ohne Schutzmaßnahmen, ohne Ergebnisgarantie, speziell an großen Baugruppen zu testen.
Herzliche Grüße.
Modifiziertes Makro, das unten heruntergeladen werden kann...

5 „Gefällt mir“

Hallo @m.blt

Ich bin den Code durchgegangen und es gibt noch viel zu tun!! GUT GEMACHT :clap:

Auf der anderen Seite habe ich an einer meiner Baugruppen getestet, aber es passiert nichts.
Keine Fehlermeldung, auch wenn ich sie erzwinge, indem ich das Makro auf einer Münze starte.
Was, nach dem, was ich im Code sehen konnte, ein Warnfenster für mich generieren sollte.

Haben Sie eine Idee, was ich tun kann?

1 „Gefällt mir“

Beim Starten des Haupt-Subs aus dem Editor über F8 wird mir ein fehlender Projekt- oder Bibliotheksfehler angezeigt:
image

Und wenn ich mir den Fehler anschaue, verstehe ich die fehlende Bibliothek (SW2023) besser.
Vielleicht haben Sie das gleiche Problem. Welche Version von SW haben Sie?
image

@m.blt Ich wollte aus Neugier und Interesse einen Blick darauf werfen, da mich Ihre Makros im Allgemeinen faszinieren! :crazy_face:

Bearbeiten: Durch Deaktivieren dessen, was fehlt, und Überprüfen der 3 Bibliotheken Version 2020 funktioniert es!
Wieder einmal bin ich von diesem Code begeistert:

3 „Gefällt mir“

Das Makro funktioniert nicht für ein Teil, da es die Build-Struktur einer Baugruppe durchläuft. Bereits dort sollten Sie diese Meldung haben:
image

Ich persönlich habe das Makro an mehreren Baugruppen getestet, wobei die " schwerste " mit 278 Teilen ist, ohne eine Anomalie zu bemerken. Wenn Sie das Makro ausführen, ohne Objekte auszuwählen, sollte zumindest die Karte UserForm angezeigt werden.

Ich bestätige @sbadenis Vermutung : Die Fehlfunktion kann auf das Fehlen bestimmter Verweise auf VBA-Objekte zurückzuführen sein. Hier sind diejenigen, die ich mit der Version 2023 von SolidWorks verwende:
image
Überprüfen Sie auch, ob die Skizzenanzeige in der Baugruppe aktiviert ist, man weiß ja nie...

Ein weiterer Hinweis: Das Makro wurde mit SW 2023 geschrieben. Vielleicht gibt es eine nicht vorhandene Funktion, wenn Sie eine ältere Version verwenden. Auch wenn Sie eine Fehlermeldung sehen sollten... Der Illustration seiner Botschaft nach zu urteilen, hat @sbadenis es mit einer Version von 2020 geschafft
Weist die Baugruppe, an der Sie das Makro getestet haben, eine Besonderheit auf, die verhindert, dass sie ordnungsgemäß funktioniert? Sie sollten eine Ihrer Assemblys freigeben und angeben, welche SW-Version Sie verwenden.

2 „Gefällt mir“

@m.blt
Wenn ich diese Arbeit sehe, sage ich mir, dass es mehr als Zeit für mich war, die Tangente zu nehmen, die parallel zur Ebene ist. Außerdem wird ein gutes Angebot immer geschätzt.

C dlt

4 „Gefällt mir“

Hallo @m.blt & @sbadenis,

Ich habe die Änderungen auf die Referenzen angewendet, indem ich das Jahr 2022 für meine Version überprüft habe:

Und das Makro hat gut funktioniert, es ist TOP @m.blt :+1: :

Ich habe gerade die ptLoc der Länge und Tiefe des Würfels geändert, die für mich invertiert wurden (ptLoc(4) und (1)), sowie die Genauigkeit, um keine Dezimalzahl zu haben:

        UserForm1.Label3.Caption = "Longueur du cube : " & Format(longueur(ptLoc(0), ptLoc(4)), "#####0")
        UserForm1.Label4.Caption = "Largeur du cube : " & Format(longueur(ptLoc(0), ptLoc(2)), "#####0")
        UserForm1.Label5.Caption = "Profondeur du cube : " & Format(longueur(ptLoc(0), ptLoc(1)), "#####0")

Es ist perfekt.

Auf der anderen Seite möchte ich diese Werte abrufen und sie mit Variablen in allen Konfigurationen verknüpfen, aber ich weiß nicht, wo und wie (Sub, Funktion ...) ich muss dies einfügen:

    Dim i As Integer
    Dim tConfig() As String
    Dim swErrors As Long
    Dim swWarnings As Long
    
    Do
    'récupère le document actif dans SW
    Set swModel = swApp.ActiveDoc
    If Not swModel Is Nothing Then
    
    'Boucle sur toutes les configurations
    tConfig = swModel.GetConfigurationNames
    For i = 0 To UBound(tConfig)
    
    'ajoute un propriété personnalisée "DIM-Lo"
    'Chr(34) permet d'ajouter le caractère "
    bRet = swModel.DeleteCustomInfo2(tConfig(i), "DIM-Lo")
    bRet = swModel.AddCustomInfo3(tConfig(i), "DIM-Lo", swCustomInfoText, Chr(34) & Format(longueur(ptLoc(0), ptLoc(4)), "#####0") & Chr(34))
    
    'ajoute un propriété personnalisée "DIM-La"
    'Chr(34) permet d'ajouter le caractère "
    bRet = swModel.DeleteCustomInfo2(tConfig(i), "DIM-La")
    bRet = swModel.AddCustomInfo3(tConfig(i), "DIM-La", swCustomInfoText, Chr(34) & Format(longueur(ptLoc(0), ptLoc(2)), "#####0") & Chr(34))
    
    'ajoute un propriété personnalisée "DIM-Ha"
    'Chr(34) permet d'ajouter le caractère "
    bRet = swModel.DeleteCustomInfo2(tConfig(i), "DIM-Ha")
    bRet = swModel.AddCustomInfo3(tConfig(i), "DIM-Ha", swCustomInfoText, Chr(34) & Format(longueur(ptLoc(0), ptLoc(1)), "#####0") & Chr(34))
    
    Next i

Haben Sie einen Lead für mich?

Hallo @m.blt Bravo und vielen Dank für Ihr Makro. Nur ein kleiner Vorschlag; Geben Sie die xyz-Achsen der angegebenen Abmessungen an, z. B. in Klammern, da die Breite und die Tiefe gelinde gesagt relativ ist.

1 „Gefällt mir“

Hallo ihr alle
Eine letzte (?) Antwort...

  • Die drei Dimensionen des Hüllwürfels werden als Eigenschaften in alle Konfigurationen der Assembly geschrieben.
  • Um @Sylk :wink:Wunsch zu erfüllen, habe ich am Ursprung des Würfels ein lokales Koordinatensystem hinzugefügt, dessen Achsen an den Kanten ausgerichtet sind. Um die Richtungen X, Y und Z zu identifizieren.
    Es scheint mir, dass es für @MLG in der Reihenfolge von Höhe (X), Länge (Y) und Tiefe (Z) ist.
    Die Reihenfolge kann auf den Linien 322 bis 334 einfach geändert werden.


Ein kleines Bild, um die Eckpunkte des Würfels zu lokalisieren.
Herzliche Grüße.
CubeVisuAssembly.swp (223 KB)

2 „Gefällt mir“

Nochmals vielen Dank @m.blt
Es funktioniert sehr gut :ok_hand:

Ich habe einen Unterschied in der Genauigkeit der Ergebnisse zwischen dem Dialogfeld und den Variablen in den Eigenschaften (F8):


Die Genauigkeit wird im Dialogfeld in Einheiten (keine Dezimalstellen) angegeben


Die Genauigkeit beträgt 6 Dezimalstellen

Ich habe jedoch das gleiche FORMAT im Code zwischen dem, was im Dialogfeld angezeigt wird, und in den Eigenschaften (F8) angewendet:

        Dim valLONG         As Variant
        Dim valLARG         As Variant
        Dim valHAUT         As Variant

    
    Set ptLoc(0) = creationPt(min(0), min(1), min(2))
    Set ptLoc(1) = creationPt(max(0), min(1), min(2))
    Set ptLoc(2) = creationPt(min(0), max(1), min(2))
    Set ptLoc(3) = creationPt(max(0), max(1), min(2))
    Set ptLoc(4) = creationPt(min(0), min(1), max(2))
    Set ptLoc(5) = creationPt(max(0), min(1), max(2))
    Set ptLoc(6) = creationPt(min(0), max(1), max(2))
    Set ptLoc(7) = creationPt(max(0), max(1), max(2))

    For iPt = 0 To 7
        Set ptLoc(iPt) = ptLoc(iPt).MultiplyTransform(RgToCube)
    Next iPt
    
    TraceBox ptLoc
    
    lgAreteCube(0) = CalculLongueur(ptLoc(0), ptLoc(1))
    lgAreteCube(1) = CalculLongueur(ptLoc(0), ptLoc(2))
    lgAreteCube(2) = CalculLongueur(ptLoc(0), ptLoc(4))
    
    UserForm1.Label3.Caption = "DIM-Lo : " & Format((lgAreteCube(2) / 10), "#####0")
    UserForm1.Label4.Caption = "DIM-La : " & Format((lgAreteCube(0) / 10), "#####0")
    UserForm1.Label5.Caption = "DIM-Ha : " & Format((lgAreteCube(1) / 10), "#####0")
    UserForm1.CommandButton3.Enabled = True
    
  
    valLONG = (Format((lgAreteCube(2) / 10), "#####0"))
    valLARG = (Format((lgAreteCube(0) / 10), "#####0"))
    valHAUT = (Format((lgAreteCube(1) / 10), "#####0"))

        
    swConfNames = swModel.GetConfigurationNames             ' Liste des noms de configurations
    For iPt = LBound(swConfNames) To UBound(swConfNames)    ' Boucle sur les configs
        Set swCstPropMgr = swModel.Extension.CustomPropertyManager(swConfNames(iPt))
        
        swCstPropMgr.Add3 "DIM-Lo", swCustomInfoDouble, valLONG, swCustomPropertyReplaceValue
        swCstPropMgr.Add3 "DIM-La", swCustomInfoDouble, valLARG, swCustomPropertyReplaceValue
        swCstPropMgr.Add3 "DIM-Ha", swCustomInfoDouble, valHAUT, swCustomPropertyReplaceValue
    Next iPt

End Sub

Und ich habe getestet, indem ich die Dezimalstellen in meinen SW-Einheiteneinstellungen geändert habe, aber es ändert sich nichts.

Haben Sie eine Idee, woher das Problem kommt?

1 „Gefällt mir“

Da Sie keine Dezimalzahlen wünschen, ist es am einfachsten, die Variable lgAreteCube vom Typ Double in der Anweisung zur Eigenschaftsgenerierung vom Typ Double in Integer zu konvertieren.
Ersetzen der Leitung:

swCstPropMgr.Add3 "CubEnvLongueurY", swCustomInfoNumber, CInt(lgAreteCube(1)), swCustomPropertyReplaceValue

Von ihm:

swCstPropMgr.Add3 "CubEnvLongueurY", swCustomInfoNumber, CInt(lgAreteCube(1)), swCustomPropertyReplaceValue

Zur Anpassung an Ihre Bewertungen.
Wenn Sie nach einem detaillierteren Format suchen, müssen Sie Zeichenfolgen verwenden...

2 „Gefällt mir“

Nochmals vielen Dank @m.blt

Es funktioniert sehr gut.
Ich schaue seit gestern auf Codestack, ob es eine Möglichkeit gibt, die 3D-Skizze zu benennen, wenn sie erstellt wird, oder den Namen der zuletzt erstellten Skizze im Baum abzurufen.
Aber ich konnte nichts darüber finden.
Ich würde dies benötigen, um das Löschen der 3D-Skizze am Ende des Makros hinzuzufügen, um unsere Baugruppen zu bereinigen, sobald die Variablen abgerufen wurden.

Wenn ich mir diesen Code ansehe, der in Solidworks mit einer ersten 2D-Skizze und dann einer 3D-Skizze generiert wurde, gibt es außer dem Funktionsnamen keinen Unterschied zwischen der Synthaxis. Ob 2D oder 3D, es ist " SKETCH ", das erscheint:

boolstatus = Part.Extension.SelectByID2("Esquisse3D1", "SKETCH", 0, 0, 0, False, 0, Nothing, 0)
Part.EditDelete
boolstatus = Part.Extension.SelectByID2("Esquisse1", "SKETCH", 0, 0, 0, False, 0, Nothing, 0)
Part.EditDelete

Wissen Sie, wie Sie vorgehen müssen?
Vielen Dank im Voraus

1 „Gefällt mir“

Hallo
Im UserForm1-Datensatz befindet sich die Schaltfläche [Löschen], mit der die 3D-Skizze und das Koordinatensystem, das dem Würfel zugeordnet ist, gelöscht werden. Vorausgesetzt, dies sind die letzten beiden Funktionen des Baums, so dass nach dem Erstellen des Würfels nichts hinzugefügt wird.

Was das Abrufen des Namens eines Sketches betrifft, so ist die Methode " Name " Teil der " ISketch " -Klasse der API (" swSketch.Name ", siehe Zeile 377).

Wenn Sie jedoch eine Variable haben, die auf die Skizze zeigt, z. B. Zeile 363 (" Set swSketch = swModel.SketchManager.ActiveSketch "), ermöglicht die Methode " Select4() " die Auswahl, ohne nach ihrem Namen suchen zu müssen, zum Beispiel:
ok = swSketch.Select4(Falsch, Nichts) "
Wahrscheinlich sind sie geerbte Mitglieder, die nicht mit Hilfe der Klasse " ISketch " dokumentiert sind, sondern in anderen...

1 „Gefällt mir“

Hallo @m.blt
Nochmals vielen Dank für Ihr Feedback.
Ich hatte eigentlich nicht auf die DELETE-Taste gedrückt.
Ich werde mir das genauer ansehen, um zu sehen, wann es sich in Bezug auf die Informationen der Variablen verhält, die ich hinzugefügt habe... und um meine intellektuelle Armut in VBA :slightly_smiling_face: zu bereichern.

In VBA habe ich übrigens heute morgen daran herumgebastelt...
Ein Makro, das den Namen der letzten Funktion abruft, um sie zu löschen.
Da es eine 3D-Skizze und ein Trieder gibt, verdopple ich die Befehlszeilen, um die 2 Funktionen zu entfernen.
Ich weiß, es ist archaisch :sweat_smile:
Es gibt sicherlich einen Weg, es einfacher zu machen, denke ich ...

Option Explicit

Dim swApp As SldWorks.SldWorks
Dim swDoc As SldWorks.ModelDoc2
Dim swAssembly As SldWorks.AssemblyDoc
Dim swFeatureName As SldWorks.Feature


Sub SuppressionDeuxDernieresFonctions()

    Set swApp = Application.SldWorks

    Set swDoc = swApp.ActiveDoc
  
    ' Vérifie que le document SW est ouvert
    If swDoc Is Nothing Then
  
    MsgBox "Aucun document Solidworks ouvert"
    Exit Sub
    
    End If
  
    Set swAssembly = swDoc
  
'''Première passe pour supprimer le trièdre
  
    'Attribution nom dernière fonction
    Set swFeatureName = swDoc.Extension.GetLastFeatureAdded

    'Vérifie la selection de la fonction
    If swFeatureName Is Nothing Then
  
    MsgBox "Sélection fonction impossible"
    swDoc.ClearSelection2 True
    Exit Sub
    
    End If
  
    'Selection du nom
    swFeatureName.Select True
  
    'Suppression de la fonction
    swDoc.EditDelete
  
'''Deuxième passe pour supprimer l'esquisse 3D
  
    'Attribution nom dernière fonction
    Set swFeatureName = swDoc.Extension.GetLastFeatureAdded

    'Vérifie la selection de la fonction
    If swFeatureName Is Nothing Then
  
    MsgBox "Selection fonction Impossible"
    swDoc.ClearSelection2 True
    Exit Sub
    
    End If
  
    'Selection du nom
    swFeatureName.Select True
  
    'Suppression de la fonction
    swDoc.EditDelete
  
End Sub
1 „Gefällt mir“

Hallo @m.blt

Ich habe eine kleine Frage zur Definition des Layouts der Box.
Ich habe ein paar Fälle, in denen es nicht ganz auf das Maximum passt, was sein sollte. Insbesondere bei runden Teilen mit Verrundungen:

Ich habe das Gehäuse an den 2 Teilen rechts und links:

Aber ich habe das Gehäuse nicht auf dem Oberteil:

Wo im Code kann ich eingreifen, um eine gute Tangentialität zu erhalten?

Auf jeden Fall funktioniert das Makro hervorragend.
Ich habe meine Arrangements und zusätzlichen Funktionen mitgebracht und es ist GROSSARTIG.
Vielen Dank für die geleistete Hilfe.

Vielen Dank im Voraus.

Hallo
Es ist schwer zu sagen, was der Ursprung des Problems ist, das Sie ansprechen. Ein paar Bemerkungen:

  • Wie groß ist der Fehler im Vergleich zu den allgemeinen Abmessungen der Baugruppe (z. B. in mm)?

  • Sofern der beobachtete Defekt einen deutlichen Zoom erfordert, kann das Display daran schuld sein...

  • Die Methode " GetExtremePoint() " bestimmt die äußere Grenze für jedes Teil. Hierbei handelt es sich um eine numerische Berechnung, die in den SolidWorks APIs enthalten ist. Ist sie rigoros? Wie jede numerische Berechnung verwendet sie ein Qualitätskriterium, um ihre Suche zu validieren, ein Kriterium, das dem Benutzer unbekannt ist.
    Zu diesem Punkt kommentiert die SolidWorks Hilfe die Funktion " GetBodyBox " , die anscheinend die Methode " GetExtremePoint " verwendet:
    WICHTIG: Die zurückgegebenen Werte sind ungefähre Angaben und sollten nicht zu Vergleichs- oder Berechnungszwecken verwendet werden. Darüber hinaus kann sich der Begrenzungsrahmen nach dem Neuaufbau des Modells ändern.
    Die Umrisse der " Wolken", die in den Screenshots zu sehen sind, scheinen auf Splines zu basieren. Könnte dies der Ursprung des PB sein?

  • Bei den einzigen Berechnungen innerhalb des Makros handelt es sich um Änderungen des Koordinatensystems, die die Vektor- und Rasterfunktionen der API verwenden. Ich sehe nicht, wie sie den Fehler erzeugen können.

Abschließend: Ich bin nicht in der Lage, den Ursprung des Problems zu identifizieren. Können Sie das problematische Beispiel nennen? Auch wenn es herabgewürdigt ist, oder durch eine private Nachricht...

Herzliche Grüße.

4 „Gefällt mir“