Visualisierungs-Würfel

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“

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.