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...
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 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 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
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:
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.
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...
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.
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
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.
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.
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! 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 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
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?
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?