Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  SolidWorks
  API: Kante in 3D-Skizze übernehmen; Oberfläche erzeugen und schneiden

Antwort erstellen  Neues Thema erstellen
CAD.de Login | Logout | Profil | Profil bearbeiten | Registrieren | Voreinstellungen | Hilfe | Suchen

Anzeige:

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen nächster neuer Beitrag | nächster älterer Beitrag
  
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


Sehen Sie sich das Profil von NeulingD21 an!   Senden Sie eine Private Message an NeulingD21  Schreiben Sie einen Gästebucheintrag für NeulingD21

Beiträge: 13
Registriert: 03.02.2021

SolidWorks 2018; API-Programmierung; Kante übernehmen

erstellt am: 17. Feb. 2021 11:08    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

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


Sehen Sie sich das Profil von NeulingD21 an!   Senden Sie eine Private Message an NeulingD21  Schreiben Sie einen Gästebucheintrag für NeulingD21

Beiträge: 13
Registriert: 03.02.2021

SolidWorks 2018; API-Programmierung; Kante übernehmen

erstellt am: 25. Feb. 2021 08:19    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

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



Sehen Sie sich das Profil von nahe an!   Senden Sie eine Private Message an nahe  Schreiben Sie einen Gästebucheintrag für nahe

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 oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für NeulingD21 10 Unities + Antwort hilfreich

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


Sehen Sie sich das Profil von NeulingD21 an!   Senden Sie eine Private Message an NeulingD21  Schreiben Sie einen Gästebucheintrag für NeulingD21

Beiträge: 13
Registriert: 03.02.2021

SolidWorks 2018; API-Programmierung; Kante übernehmen

erstellt am: 25. Feb. 2021 13:35    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

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



Sehen Sie sich das Profil von nahe an!   Senden Sie eine Private Message an nahe  Schreiben Sie einen Gästebucheintrag für nahe

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 oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für NeulingD21 10 Unities + Antwort hilfreich

Hallo,

Kante wählen rechts-klick "Kanteneigenschaften"

------------------
Grüße
Heinz

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

bk.sc
Ehrenmitglied V.I.P. h.c.
Konstrukteur Sondermaschinenbau



Sehen Sie sich das Profil von bk.sc an!   Senden Sie eine Private Message an bk.sc  Schreiben Sie einen Gästebucheintrag für bk.sc

Beiträge: 2776
Registriert: 18.07.2012

-Solid Works 2019 SP5
-Pro Engineer WF 3

erstellt am: 01. Mrz. 2021 15:57    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für NeulingD21 10 Unities + Antwort hilfreich

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


Sehen Sie sich das Profil von NeulingD21 an!   Senden Sie eine Private Message an NeulingD21  Schreiben Sie einen Gästebucheintrag für NeulingD21

Beiträge: 13
Registriert: 03.02.2021

SolidWorks 2018; API-Programmierung; Kante übernehmen

erstellt am: 01. Mrz. 2021 16:52    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

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


Sehen Sie sich das Profil von NeulingD21 an!   Senden Sie eine Private Message an NeulingD21  Schreiben Sie einen Gästebucheintrag für NeulingD21

Beiträge: 13
Registriert: 03.02.2021

SolidWorks 2018; API-Programmierung; Kante übernehmen

erstellt am: 02. Mrz. 2021 09:38    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

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



Sehen Sie sich das Profil von TestMitglied an!   Senden Sie eine Private Message an TestMitglied  Schreiben Sie einen Gästebucheintrag für TestMitglied

Beiträge: 82
Registriert: 15.06.2005

Nur so zum Test

erstellt am: 02. Mrz. 2021 10:37    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für NeulingD21 10 Unities + Antwort hilfreich

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 (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...

------------------

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

NeulingD21
Mitglied
Konstrukteur


Sehen Sie sich das Profil von NeulingD21 an!   Senden Sie eine Private Message an NeulingD21  Schreiben Sie einen Gästebucheintrag für NeulingD21

Beiträge: 13
Registriert: 03.02.2021

SolidWorks 2018; API-Programmierung; Kante übernehmen

erstellt am: 02. Mrz. 2021 13:10    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

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



Sehen Sie sich das Profil von bk.sc an!   Senden Sie eine Private Message an bk.sc  Schreiben Sie einen Gästebucheintrag für bk.sc

Beiträge: 2776
Registriert: 18.07.2012

-Solid Works 2019 SP5
-Pro Engineer WF 3

erstellt am: 02. Mrz. 2021 13:20    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für NeulingD21 10 Unities + Antwort hilfreich

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


Sehen Sie sich das Profil von NeulingD21 an!   Senden Sie eine Private Message an NeulingD21  Schreiben Sie einen Gästebucheintrag für NeulingD21

Beiträge: 13
Registriert: 03.02.2021

SolidWorks 2018; API-Programmierung; Kante übernehmen

erstellt am: 02. Mrz. 2021 13:39    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Hallo,

ich habe das einmal auf die schnelle versucht. Ich erhalte hier den Laufzeitfehler '91' Objektvariable oder With-Blockvariable nicht festgelegt.

Gruß

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

bk.sc
Ehrenmitglied V.I.P. h.c.
Konstrukteur Sondermaschinenbau



Sehen Sie sich das Profil von bk.sc an!   Senden Sie eine Private Message an bk.sc  Schreiben Sie einen Gästebucheintrag für bk.sc

Beiträge: 2776
Registriert: 18.07.2012

-Solid Works 2019 SP5
-Pro Engineer WF 3

erstellt am: 02. Mrz. 2021 14:56    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für NeulingD21 10 Unities + Antwort hilfreich

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


Sehen Sie sich das Profil von NeulingD21 an!   Senden Sie eine Private Message an NeulingD21  Schreiben Sie einen Gästebucheintrag für NeulingD21

Beiträge: 13
Registriert: 03.02.2021

SolidWorks 2018; API-Programmierung; Kante übernehmen

erstellt am: 02. Mrz. 2021 15:33    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

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)


Sehen Sie sich das Profil von EIBe 3D an!   Senden Sie eine Private Message an EIBe 3D  Schreiben Sie einen Gästebucheintrag für EIBe 3D

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 oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für NeulingD21 10 Unities + Antwort hilfreich

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)


Sehen Sie sich das Profil von Christian_W an!   Senden Sie eine Private Message an Christian_W  Schreiben Sie einen Gästebucheintrag für Christian_W

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 oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für NeulingD21 10 Unities + Antwort hilfreich

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



Sehen Sie sich das Profil von TestMitglied an!   Senden Sie eine Private Message an TestMitglied  Schreiben Sie einen Gästebucheintrag für TestMitglied

Beiträge: 82
Registriert: 15.06.2005

Nur so zum Test

erstellt am: 02. Mrz. 2021 17:33    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für NeulingD21 10 Unities + Antwort hilfreich

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


Sehen Sie sich das Profil von NeulingD21 an!   Senden Sie eine Private Message an NeulingD21  Schreiben Sie einen Gästebucheintrag für NeulingD21

Beiträge: 13
Registriert: 03.02.2021

SolidWorks 2018; API-Programmierung; Kante übernehmen

erstellt am: 03. Mrz. 2021 08:43    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

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



Sehen Sie sich das Profil von bk.sc an!   Senden Sie eine Private Message an bk.sc  Schreiben Sie einen Gästebucheintrag für bk.sc

Beiträge: 2776
Registriert: 18.07.2012

-Solid Works 2019 SP5
-Pro Engineer WF 3

erstellt am: 03. Mrz. 2021 14:31    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für NeulingD21 10 Unities + Antwort hilfreich

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 Explicit

Dim 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


Sehen Sie sich das Profil von NeulingD21 an!   Senden Sie eine Private Message an NeulingD21  Schreiben Sie einen Gästebucheintrag für NeulingD21

Beiträge: 13
Registriert: 03.02.2021

SolidWorks 2018; API-Programmierung; Kante übernehmen

erstellt am: 04. Mrz. 2021 08:36    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

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

Anzeige.:

Anzeige: (Infos zum Werbeplatz >>)

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen

nächster neuerer Beitrag | nächster älterer Beitrag
Antwort erstellen


Diesen Beitrag mit Lesezeichen versehen ... | Nach anderen Beiträgen suchen | CAD.de-Newsletter

Administrative Optionen: Beitrag schliessen | Archivieren/Bewegen | Beitrag melden!

Fragen und Anregungen: Kritik-Forum | Neues aus der Community: Community-Forum

(c)2024 CAD.de | Impressum | Datenschutz