| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für SOLIDWORKS |
| |
| PLM TechnologieForum Hannover |
Autor
|
Thema: API: Kante in 3D-Skizze übernehmen; Oberfläche erzeugen und schneiden (1465 mal gelesen)
|
NeulingD21 Mitglied Konstrukteur
Beiträge: 13 Registriert: 03.02.2021 SolidWorks 2018; API-Programmierung; Kante übernehmen
|
erstellt am: 17. Feb. 2021 11:08 <-- editieren / zitieren --> Unities abgeben:
Hallo euch allen, ich brauche wieder einmal eure Hilfe. Es geht wieder um ein Makro in SolidWorks. Ich will in einer Baugruppe ein Teil zum Bearbeiten öffnen, dann eine 3D-Skizze erstellen und die Kante eines anderen Bauteiles mit dem Befehl "Element übernehmen" in das Einzelteil übernehmen. Ich möchte dann die Bauteile etwas gegeneinander verschieben (dieses Makro inkl. Schleife gibt es schon) und dann den Prozess wiederholen. Dabei muss die gleiche Kante, nun logischerweise an einer anderen Position als neue 3D-Skizze in das Einzelteil übernommen werden. Folgendes weiß ich bereits: Das Einzelteil zum Bearbeiten öffnen geht mittels Code: boolstatus = part.Extension.SelectByID2("Name Einzelteil@Name Baugruppe", "COMPONENT", 0, 0, 0, False, 0, Nothing, 0) part.EditPart
Eine 3D-Skizze kann ich dann mit Code: part.SketchManager.Insert3DSketch True
anlegen. Mittels Code: boolstatus = part.SketchManager.SketchUseEdge3(False, False) part.SketchManager.InsertSketch True
sollte ich dann eine ausgewählte Kante in die 3D-Skizze übernehmen können. Durch Code: part.EditAssembly
komme ich aus der Bearbeitung des Einzelteiles wieder heraus. Nun kommt aber der "schwierige" Teil. Wie kann ich eine Kante auswählen und woher bekomme ich den Namen/Bezeichnung dieser Kante? Ich würde dies dann in meine bestehende Schleife integrieren. Damit hätte ich den ersten Teil meiner Aufgabe erledigt. Das würde mir schon wirklich sehr weiterhelfen. (90% der Arbeit) Ich würde es dann trotzdem noch gerne erweitern, sodass eine Oberfläche aus allen 3D-Skizzen mit "Begrenzungsoberfläche" erzeugen und dann die Funktion "Schnitt mit Oberfläche" ausgeführt wird. Die "Krönung" wäre es im Anschluss noch, diesen neu erzeugten Oberflächenschnitt in eine Kreismuster mit definierter Musteranzahl zu packen. Ich fasse nochmals kurz zusammen: 1.) Wie kann ich eine Kante auswählen und woher bekomme ich den Namen/Bezeichnung dieser Kante? 2.) Wie kann ich alle 3D-Skizzen (Anzahl variert, am besten mittels Schleife) in einem Einzelteil in die "Begrenzungsoberfläche" bekommen? 3.) Wie kann ich die Funktion "Schnitt mit Oberfläche" und dieser neu erzeugten Oberfläche durchführen wenn ich den Namen noch nicht kenn? 4.) Wie kann ich den erzeugten Oberflächenschnitt in ein Kreismuster bekommen und dabei die Anzahl der Muster einstellen? Vielen Dank euch schon vorab. Liebe Grüße
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
NeulingD21 Mitglied Konstrukteur
Beiträge: 13 Registriert: 03.02.2021 SolidWorks 2018; API-Programmierung; Kante übernehmen
|
erstellt am: 25. Feb. 2021 08:19 <-- editieren / zitieren --> Unities abgeben:
Guten Morgen, es würde mir schon sehr weiterhelfen wenn mir jemand sagen könnte wie ich per Makro eine Kante eindeutig (immer die gleiche Kante egal wo sich diese im Raum befindet) auswählen kann. Ich habe mir jetzt eine Lösung gebaut, bei der das Makro kurz (3s) unterbrochen wird um die Kante händisch auszuwählen. Wenn ich dies nicht in den 3s hinbekommen habe, dann kann ich in der MessageBox einfach auf "Nein" oder "Abbrechen" klicken. Dann habe ich nochmals die 3s. Das funktioniert soweit auch sehr zuverlässig. Es wäre schön wenn ich die Auswähl der Kante nun auch noch in den Code einbauen könnte, dann wäre alles deutlich schneller. Unten findet Ihr meinen Code einmal mit der Pause. Code-Um Kante als 3D-Skizze zu übernehmen: Code:
Sub Oberflaeche()Dim strBezeichnung1 As String Dim strBezeichnung2 As String strBezeichnung1 = "Test1-1@Testbaugruppe" strBezeichnung2 = "Test2-1@Testbaugruppe" Set swApp = Application.SldWorks Set part = swApp.ActiveDoc swApp.SetUserPreferenceToggle swUserPreferenceToggle_e.swExternalReferencesDisable, True 'Option "Keine externen Referenzen" aktivieren boolstatus = part.Extension.SelectByID2(Bezeichnung1, "COMPONENT", 0, 0, 0, False, 0, Nothing, 0) part.EditPart part.SketchManager.Insert3DSketch True Do Call Pause(3) Loop Until MsgBox("Kante ausgewählt?", vbYesNoCancel) = vbYes boolstatus = part.SketchManager.SketchUseEdge3(False, False) part.SketchManager.InsertSketch True part.EditAssembly End Sub
Code für Pause um Kante händisch auszuwählen: Code:
Public Sub Pause(Seconds As Single) 'Quelle https://social.msdn.microsoft.com/Forums/vstudio/en-US/662544a6-7c07-496d-87dc-5c0a447ce685/vba-applicationwait-gt-runtime-error-438?forum=project2010custprog Dim TimeEnd As Single TimeEnd = Timer + Seconds While Timer < TimeEnd DoEvents Wend End Sub
Vielleicht kann mir hier jemand zumindest einmal einen Tipp geben. Gruß Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
nahe Ehrenmitglied
Beiträge: 1747 Registriert: 18.01.2001 arbeite mit: Dell Precision 7750 i7 2,6 GHz 6 Kerne 32GB RAM 512GB SSD NVIDIA Quadro RTX 4000 ------------------------ SWX-2020 SP5.0 EPDM ---------------- Windows 10 ---------------- VB.net VB VBA ein wenig Swift am Mac
|
erstellt am: 25. Feb. 2021 13:31 <-- editieren / zitieren --> Unities abgeben: Nur für NeulingD21
Hallo, das Auswählen von SWX Elementen aus einem laufenden Makro ist, meines Wissens, aufwendig, kompliziert und ich würde die Finger davon lassen. (es gibt keine einfache Select-Funktion die ein laufendes Makro anhält und so lange wartet bis ein Objekt gewählt wurde) Meiner Meinung nach, hast Du zwei einfache Möglichkeiten 1. Du wählst die Kante, startest danach das Makro und holst die Kante mit GetSelectedObject6 2. Du gibst der Kante einen eindeutigen Namen und wählst sie mit SelectByID2 unter Angabe des Namens
------------------ Grüße Heinz Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
NeulingD21 Mitglied Konstrukteur
Beiträge: 13 Registriert: 03.02.2021 SolidWorks 2018; API-Programmierung; Kante übernehmen
|
erstellt am: 25. Feb. 2021 13:35 <-- editieren / zitieren --> Unities abgeben:
Hallo, mit meinem Makro kann ich das Makro anhalten und "händisch" die Kante wählen. Wenn ich die Kante direkt ansprechen kann brauch ich die Pause natürlich nicht mehr. Wie kann ich der Kante den einen eindeutigen Namen geben? Grüße Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
nahe Ehrenmitglied
Beiträge: 1747 Registriert: 18.01.2001 arbeite mit: Dell Precision 7750 i7 2,6 GHz 6 Kerne 32GB RAM 512GB SSD NVIDIA Quadro RTX 4000 ------------------------ SWX-2020 SP5.0 EPDM ---------------- Windows 10 ---------------- VB.net VB VBA ein wenig Swift am Mac
|
erstellt am: 25. Feb. 2021 14:22 <-- editieren / zitieren --> Unities abgeben: Nur für NeulingD21
|
bk.sc Ehrenmitglied V.I.P. h.c. Konstrukteur Sondermaschinenbau
Beiträge: 2776 Registriert: 18.07.2012 -Solid Works 2019 SP5 -Pro Engineer WF 3
|
erstellt am: 01. Mrz. 2021 15:57 <-- editieren / zitieren --> Unities abgeben: Nur für NeulingD21
Hallo zusammen, das unterbrechen eines Macros bis eine Selektion erfolgt ist sollte doch eigentlich mit einer ungebundenen Userform problemlos möglich sein, sie darf halt nicht gebunden sein da du in SWX sonst wären der Unterbrechung nichts mehr machen kannst. Gruß Bernd ------------------ --- Man muß nicht alles wissen, man muß nur wissen wo es steht --- Staatlich anerkannte Deutschniete Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
NeulingD21 Mitglied Konstrukteur
Beiträge: 13 Registriert: 03.02.2021 SolidWorks 2018; API-Programmierung; Kante übernehmen
|
erstellt am: 01. Mrz. 2021 16:52 <-- editieren / zitieren --> Unities abgeben:
Hallo Heinz, ich musste dieses Thema vorerst liegen lassen, deshalb melde ich mich erst jetzt wieder. Die Kante habe ich mit deinem Hinweis eindeutig Bezeichnen können. Ich wusste bisher nicht das dies geht. Unter "Bekannte Elemente" im Einzelteil ist dies nun hinterlegt. Wie bekomme ich die Kante nun per SelectByID2 ausgewählt. Ich komm hier mit den Hinweisen aus der API-Hilfe nicht weiter. Außerdem müsste dies bei mir natürlich für in der Baugruppe gelten. Ich nehme mal an, dass ich dann noch den Namen des Teils welches die bezeichnete Kante enthält mit angeben muss. Vielen Dank schon jetzt. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
NeulingD21 Mitglied Konstrukteur
Beiträge: 13 Registriert: 03.02.2021 SolidWorks 2018; API-Programmierung; Kante übernehmen
|
erstellt am: 02. Mrz. 2021 09:38 <-- editieren / zitieren --> Unities abgeben:
Folgendes konnte ich nach einiger Recherche und dem Hinweis von Heinz auf die Methode "GetSelectedObject6" hinbekommen. Ich rufe im oberen Teil meines Codes nun die Prozedur "KanteWaehlen" auf. Diese Startet auch den "Pausen-Prozedur". Dadurch habe ich ein kleines Zeitfenster um die Kante auszuwählen und dann zu bestätigen. Code zum Kante auswählen Code:
Sub KanteWaehlen() Dim selmgr As SelectionMgr Set swApp = Application.SldWorks Set part = swApp.ActiveDoc Set selmgr = part.SelectionManager Do Call Pause(3) Loop Until MsgBox("Kante des Fräsers ausgewählt?", vbYesNoCancel) = vbYes Set m_objKante = selmgr.GetSelectedObject6(1, 0) End Sub
Code Pause Code:
Public Sub Pause(Seconds As Single) 'Quelle https://social.msdn.microsoft.com/Forums/vstudio/en-US/662544a6-7c07-496d-87dc-5c0a447ce685/vba-applicationwait-gt-runtime-error-438?forum=project2010custprog Dim TimeEnd As Single TimeEnd = Timer + Seconds While Timer < TimeEnd DoEvents Wend End Sub
Im Modul habe ich ganz oben die Objektvariable für die Kante als Modul-Variable definiert (Dim m_objKante As Object). Dadurch kann ich dieses Object in den verschiedenen Prozeduren verwenden. In der Schleife wird dann nur noch die Variable "m_objKante" verwendet. Code Kante in 3D-Skizze übernehmen Code:
Sub Oberflaeche() Dim strZahnrad As String Dim strWerkzeug As String part.ClearSelection2 True strZahnrad = Name des Zahnrades & @ Name der Baugruppe strWerkzeug = Name des Werkzeuges & @ Name der Baugruppe Set swApp = Application.SldWorks Set part = swApp.ActiveDoc swApp.SetUserPreferenceToggle swUserPreferenceToggle_e.swExternalReferencesDisable, True 'Option "Keine externen Referenzen" aktivieren boolstatus = part.Extension.SelectByID2(strZahnrad, "COMPONENT", 0, 0, 0, False, 0, Nothing, 0) part.EditPart part.SketchManager.Insert3DSketch True m_objKante.Select (True) 'Kante auswählen boolstatus = part.SketchManager.SketchUseEdge3(False, False) part.SketchManager.InsertSketch True part.EditAssembly End Sub
Das funktioniert soweit auch und erleichtert meine Arbeit sehr. Noch schöner wäre es nun noch wenn ich die Select-Anweisung über die Namensdefinition der Kante realisieren könnte.
Vielleicht kann mir hier noch jemand helfen wie ich auch ein Benanntes Objekt auswählen kann. Vielen Dank euch schon jetzt. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
TestMitglied Mitglied
Beiträge: 82 Registriert: 15.06.2005 Nur so zum Test
|
erstellt am: 02. Mrz. 2021 10:37 <-- editieren / zitieren --> Unities abgeben: Nur für NeulingD21
|
NeulingD21 Mitglied Konstrukteur
Beiträge: 13 Registriert: 03.02.2021 SolidWorks 2018; API-Programmierung; Kante übernehmen
|
erstellt am: 02. Mrz. 2021 13:10 <-- editieren / zitieren --> Unities abgeben:
Zitat: Original erstellt von TestMitglied: Hallo Neuling,wenn ich das richtig verstanden habe, musst Du Dich in der Baugruppe durch die Komponenten hangeln. In den Komponenten durch Körper und Flächen. Wenn Du die Fläche hast, durch die Kanten. Bis Du die mit dem richtigen Namen hast. Der Hinweis ([b]NOTE) hierzu im Beispiel: http://help.solidworks.com/2018/english/api/sldworksapi/create_and_rename_objects_example_vb.htm?verRedirect=1 Beispiel für Flächenauswahl in der BG: http://help.solidworks.com/2018/english/api/sldworksapi/Get_Component_Face_By_Name_Example_VB.htm?verRedirect=1 Ich glaube ein Beispiel der Kantenauswahl einer gewählten Fläche gibt es auch noch in der Hilfe... [/B]
Hallo TestMitglied,
ich steh hier gerade wirklich auf dem Schlauch und komm nicht weiter. Ich kann also nicht direkt die beschriebene Kante (als "Benanntes Objekt" eindeutig definiert) ansprechen und auswählen? Ich muss also den kompletten weg über die Komponente (Bezeichnung könnte ich fest hinterlegen), dann alle Körper und deren Flächen nach der gesuchten Kantenbezeichnung durchsuchen? Ich hatte gehofft, dass es einen einfachen Befehl gibt, ähnlich zu "NameDerKante.Select (True)" Leider bin ich was die VBA Programmierung in SolidWorks anbelangt noch recht unerfahren, sodass ich mit den Beispielen in der API-Hilfe nicht viel Anfangen kann. Kann ich mir den nicht irgendwie den "Inhalt", den ich einmal mit meinem Code KantenWahlen in der Objekt-Variablen "m_objKante" schreibe dauerhaft im Code hinterlegen? Es handelt sich ja wie gesagt immer um die gleiche Kante die auch immer die gleiche Bezeichnung unter "Benannte Elemente" hat. Mir scheinen die Beispiele so umfangreich zu sein, da ich ja eigentlich die Kante "nur" auswählen will. Ich weiß, dass in den Beispielen Sicherheitsabfragen enthalten sind (wurde ein Objekt gewählt,...) dies könnte ich mir schon alles sparen. Trotzdem sind dort noch so viele befehle, von denen ich überhaupt nicht weiß was dieser macht bzw. für was ich diesen brauche. Gruß Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
bk.sc Ehrenmitglied V.I.P. h.c. Konstrukteur Sondermaschinenbau
Beiträge: 2776 Registriert: 18.07.2012 -Solid Works 2019 SP5 -Pro Engineer WF 3
|
erstellt am: 02. Mrz. 2021 13:20 <-- editieren / zitieren --> Unities abgeben: Nur für NeulingD21
Hallo, wenn ich das in der API Hilfe richtig verstanden habe muss um in einem Part Document eine Kante anhand ihres Namen (selbst definiert) zu selectieren die GetEntityByName Method (IPartDoc) verwendt werden. Dim swModel As SldWorks.ModelDoc2 Dim swEdge As SldWorks.Edge Set swEdge = swModel.GetEntityByName("NameDerKante", swSelEDGES) Gruß Bernd ------------------ --- Man muß nicht alles wissen, man muß nur wissen wo es steht --- Staatlich anerkannte Deutschniete Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
NeulingD21 Mitglied Konstrukteur
Beiträge: 13 Registriert: 03.02.2021 SolidWorks 2018; API-Programmierung; Kante übernehmen
|
erstellt am: 02. Mrz. 2021 13:39 <-- editieren / zitieren --> Unities abgeben:
|
bk.sc Ehrenmitglied V.I.P. h.c. Konstrukteur Sondermaschinenbau
Beiträge: 2776 Registriert: 18.07.2012 -Solid Works 2019 SP5 -Pro Engineer WF 3
|
erstellt am: 02. Mrz. 2021 14:56 <-- editieren / zitieren --> Unities abgeben: Nur für NeulingD21
Hallo, naja das ist ein sehr Allgemeiner Fehler der alles heisen kann, wo hast du was eingefügt und in welcher Zeile tritt der Fehler dann auf? Gruß Bernd ------------------ --- Man muß nicht alles wissen, man muß nur wissen wo es steht --- Staatlich anerkannte Deutschniete Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
NeulingD21 Mitglied Konstrukteur
Beiträge: 13 Registriert: 03.02.2021 SolidWorks 2018; API-Programmierung; Kante übernehmen
|
erstellt am: 02. Mrz. 2021 15:33 <-- editieren / zitieren --> Unities abgeben:
Ich habe deinen Code eingefügt und wollte diesen wie unten dargestellt erst einmal rein zum Auswählen der Kante benutzen. (als Test) Code:
Sub KanteWaehlen2() Set swApp = Application.SldWorks Set part = swApp.ActiveDoc Dim swModel As SldWorks.ModelDoc2 Dim swEdge As SldWorks.Edge Set swEdge = swModel.GetEntityByName("Kante1", swSelEDGES) End Sub
Dies funktioniert sowohl im Rahmen der Baugruppe wie auch im Einzelteil nicht. Ich bekomme die gleiche Fehlermeldung in der Zeile "Set swEdge..." In der Baugruppe muss ich sicherlich noch zusätzlich zuerst noch definieren in welcher Komponente sich die "Kante1" befindet oder? Gruß Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
EIBe 3D Mitglied Dipl. - Ing. (FH)
Beiträge: 267 Registriert: 24.01.2020 HP Z4 G4 Workstation Xeon 3,6 32GB Nvidia P2000 WIN10 SW2015 SP5.0 SW2017 ************* Inv2018 akt.SP
|
erstellt am: 02. Mrz. 2021 16:15 <-- editieren / zitieren --> Unities abgeben: Nur für NeulingD21
Hallo Neuling, ohne mich tiefgehend mit der SW -Api auszukennen, scheint mir deiner Vriablen swModel kein Objekt zugewiesen zu sein. Set swModel = swApp.ActiveDoc sollte dein Problem auf Teileebene beheben. Grüße
EIBe 3D Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Christian_W Ehrenmitglied V.I.P. h.c. Konstrukteur (Dipl-Ing)
Beiträge: 3189 Registriert: 04.04.2001 CSWP 12/2015<P>SWX2021sp5 Win10/11 (SWX2016, SWX2012) proAlpha6.2e00/calinkV9 (Tactonworks) (Medusa7, NesCAD2010, solidEdge19)
|
erstellt am: 02. Mrz. 2021 16:17 <-- editieren / zitieren --> Unities abgeben: Nur für NeulingD21
Moin, da fehlt evtl die Zuweisung, was swmodel denn sein soll ... probier doch mal: Code:
Sub KanteWaehlen2() Set swApp = Application.SldWorks Dim swModel As SldWorks.ModelDoc2 Dim swEdge As SldWorks.Edge Set swModel = swApp.ActiveDoc Set swEdge = swModel.GetEntityByName("Kante1", swSelEDGES) End Sub
[/QUOTE] Gruß, Christian Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
TestMitglied Mitglied
Beiträge: 82 Registriert: 15.06.2005 Nur so zum Test
|
erstellt am: 02. Mrz. 2021 17:33 <-- editieren / zitieren --> Unities abgeben: Nur für NeulingD21
Zitat: Original erstellt von bk.sc: in einem Part Document eine Kante anhand ihres Namen (selbst definiert) zu selectieren die GetEntityByName Method (IPartDoc) verwendt werden.
In meinem Teil funktioniert das. Aber in der Baugruppe nicht. Auch wenn ich das Teil bearbeite... ------------------
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
NeulingD21 Mitglied Konstrukteur
Beiträge: 13 Registriert: 03.02.2021 SolidWorks 2018; API-Programmierung; Kante übernehmen
|
erstellt am: 03. Mrz. 2021 08:43 <-- editieren / zitieren --> Unities abgeben:
Guten Morgen euch allen, den Hinweis auf Part Document habe ich auch gelesen. Leider befinde ich mich für meine Anwendung beim Ausführen in einer Baugruppe. Ich habe es trotzdem einmal im Part probiert. Dazu habe ich den Code wie von euch beschrieben eingegeben und für einen Test im Einzelteil aufgeführt. Dieser läuft nun mit der Zuweisung von swModel auch ohne Fehlermeldung durch. Leider wird bei mir aber die Kante nicht selektiert/ausgewählt. Nach suche in der API Hilfe konnte ich dieses Problem bei mir zumindest im Einzelteil lösen (siehe zweiter Code unten). Für mich bleibt aber jetzt noch zum Abschluss die Frage offen: Wie kann ich nun aber auch in der Baugruppe die Kante des Einzelteils "TestTeil" auswählen? Wichtig hierbei ist für mich, dass ich das Einzelteil nicht als "zum Bearbeiten" auswählen kann/muss. Da ich im Schritt davor ein anderes Bauteil in der Baugruppe zum Bearbeiten öffne. Dann erstelle ich eine 3D-Skizze und möchte nun die "Kante1" vom "TestTeil1" "nur" auswählen. Den Rest mit Übernahme in die 3D-Skizze habe ich schon fertig und dies funktioniert auch super. Code ohne Select Code:
Sub KanteWaehlen2() Dim swModel As SldWorks.ModelDoc2 Dim swEdge As SldWorks.Edge Set swApp = Application.SldWorks Set swModel = swApp.ActiveDoc Set swEdge = swModel.GetEntityByName("Kante1", swSelEDGES)
End Sub
Code mit Select Code:
Sub KanteWaehlen2() Dim swModel As SldWorks.ModelDoc2 Dim swEdge As SldWorks.Edge Dim swSelMgr As SldWorks.SelectionMgr Dim swSelData As SldWorks.SelectData Dim bRet As Boolean Dim swEnt As SldWorks.Entity Set swApp = Application.SldWorks Set swModel = swApp.ActiveDoc Set swSelMgr = swModel.SelectionManager Set swSelData = swSelMgr.CreateSelectData Set swEdge = swModel.GetEntityByName("Kante1", swSelEDGES) Set swEnt = swEdge bRet = swEnt.Select4(True, swSelData) End Sub
Gruß Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
bk.sc Ehrenmitglied V.I.P. h.c. Konstrukteur Sondermaschinenbau
Beiträge: 2776 Registriert: 18.07.2012 -Solid Works 2019 SP5 -Pro Engineer WF 3
|
erstellt am: 03. Mrz. 2021 14:31 <-- editieren / zitieren --> Unities abgeben: Nur für NeulingD21
Hallo, hier mal auf die schnelle das Macro aus der API-Hilfe "Select Component Face By Name Example (VBA)" angepasst / erweitert für Kante an Stelle von Fläche. Code: Option ExplicitDim swApp As SldWorks.SldWorks Dim swSelMgr As SldWorks.SelectionMgr Dim swModel As SldWorks.ModelDoc2 Dim swComp As SldWorks.Component2 Dim swFace As SldWorks.Face2 Dim boolstatus As Long Public Sub SelectComponentEdgeByName(edgeName As String) Dim swBody As SldWorks.Body2 Dim swSelData As SldWorks.SelectData Dim swEdge As SldWorks.Edge Dim arrEdges As Variant Dim currentedgeName As String Dim i As Integer Set swSelData = swSelMgr.CreateSelectData ' Get the component body Set swBody = swComp.GetBody() If (swBody Is Nothing) Then swApp.SendMsgToUser "Component body unavailable." swApp.SendMsgToUser "Make sure component is not lightweight or suppressed." Exit Sub End If Debug.Print "Traversing edges on component's body..." Set swFace = swBody.GetFirstFace Do While Not swFace Is Nothing arrEdges = swFace.GetEdges For i = 0 To UBound(arrEdges) Set swEdge = arrEdges(i) currentedgeName = swModel.GetEntityName(swEdge) If (currentedgeName = edgeName) Then ' Select the face swEdge.Select4 False, swSelData Debug.Print " Name of currently selected edge; should match name of previously selected edge: " & currentedgeName Exit Do End If Next i Set swFace = swFace.GetNextFace Loop End Sub Sub main() Dim swModelDocExt As SldWorks.ModelDocExtension Dim componentName As String Dim edgeName As String Set swApp = CreateObject("SldWorks.Application") ' Get active assembly document Set swModel = swApp.ActiveDoc() Set swModelDocExt = swModel.Extension Set swSelMgr = swModel.SelectionManager ' Select a component and get its name boolstatus = swModelDocExt.SelectByID2("BT-1-1@BG-1", "COMPONENT", 0, 0, 0, False, 0, Nothing, 0) '#####<- Hier Komponentenname Set swComp = swSelMgr.GetSelectedObject6(1, -1) componentName = swComp.Name2 Debug.Print "Name of selected component: " & componentName swModel.ClearSelection2 True ' Select a face on the component and ' name it SelectComponentEdgeByName "Name_Kante" '#####<- Hier der Name der Kante End Sub
Bei den Zeilen mit den Rauten muss noch entsprechend an deine Baugruppe / Kante angepasst werden. Gruß Bernd ------------------ --- Man muß nicht alles wissen, man muß nur wissen wo es steht --- Staatlich anerkannte Deutschniete Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
NeulingD21 Mitglied Konstrukteur
Beiträge: 13 Registriert: 03.02.2021 SolidWorks 2018; API-Programmierung; Kante übernehmen
|
erstellt am: 04. Mrz. 2021 08:36 <-- editieren / zitieren --> Unities abgeben:
Guten Morgen euch allen, vielen Dank für die Hilfe/Unterstützung Bernd und allen anderen. Dein Beitrag hat mir den entscheidend Anstoß gegeben. Mit dieser Hilfe konnte ich das entsprechend in meinen Code aufnehmen. Es funktioniert jetzt alles sehr zuverlässig. Die ursprünglich angedachten weiteren Punkte 1.) 3D-Skizzen in eine Oberfläche umwandeln 2.) "Oberflächenschnitt" mit dieser Oberfläche durchführen brauche ich vorerst einmal nicht. Dies Klicks kann ich auch händisch durchführen. Aber die zuverlässige und sichere Kantenauswahl erleichtert die Arbeit doch sehr. Euch allen noch eine schöne Woche und ein gutes Wochenende wenn es soweit ist. Grüße Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |