| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für SOLIDWORKS |
| |
| Auszubildende der HERMLE AG bei SolidCAM, eine Pressemitteilung
|
Autor
|
Thema: API Wie aus Programm Nutzer zum selektieren bewegen und Selektion ausführen lassen (705 mal gelesen)
|
A.Oertel Mitglied Dipl.Ing.
Beiträge: 270 Registriert: 12.10.2000
|
erstellt am: 02. Dez. 2005 15:32 <-- editieren / zitieren --> Unities abgeben:
Hallo zusammen, ich weiss, dass ähnliche Fragen schon gestellt worden sind, und ich habe schon in der API-Hilfe gesucht, komme aber nicht auf den richtigen Einstiegspunkt. Mein Problem ist folgendes: Wie kann ich aus einem VBA-Programm in SolidWorks dem Benutzer nach dem Aufruf des Programms und einer entsprechenden Aufforderung, z.B. mit msgbox zum selektieren bewegen und dann seine Selektion ausführen lassen? Gruß Armin Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Piet Mitglied Konstruktionsleiter & Konstrukteur
Beiträge: 661 Registriert: 20.11.2001 SWx 2021
|
erstellt am: 05. Dez. 2005 10:56 <-- editieren / zitieren --> Unities abgeben: Nur für A.Oertel
|
nahe Ehrenmitglied
Beiträge: 1764 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: 05. Dez. 2005 12:46 <-- editieren / zitieren --> Unities abgeben: Nur für A.Oertel
@Armin so eine Funktion hätte ich auch schon gesucht, leider vergeblich :-( Falls Dir so etwas unterkommt, dann lass es mich bitte wissen. @Piet ich denke Armin meint eine Funktion, die es erlaubt während der Ausführung eines Makros eine "Unterbrechung" einzubauen um Benutzereingaben abzufragen (z.B.: Punkt-, Flächen-, Featureselektion usw.....), weil es eben öfters sinnvoll ist, erst nach dem das makro gestartet wurde Benutzereingaben entgegen zu nehmen.
------------------ Grüße Heinz Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
StefanBerlitz Guter-Geist-Moderator IT Admin (CAx)
Beiträge: 8756 Registriert: 02.03.2000 SunZu sagt: Analysiere die Vorteile, die du aus meinem Ratschlag ziehst. Dann gliedere deine Kräfte entsprechend und mache dir außergewöhnliche Taktiken zunutze.
|
erstellt am: 05. Dez. 2005 15:14 <-- editieren / zitieren --> Unities abgeben: Nur für A.Oertel
Hallo zusammen, ich hab's selbst noch nicht gebraucht (ich versuche meine Makros immer mit Pre-Selektion zu schreiben), aber das in einem Makro zu machen ist wohl nicht ganz einfach ... theoretisch müsste man sich für die Events NewSelectionNotify registrieren und aud das Abfeuern hören, aber ob und wie das in einem Makro geht weiß ich nicht. Wie wäre es denn als Alternative sich wie die SolidWorks-Funktionen eine richtige PropertyManagerPage (also so eine Art Eigenschaftsseite am linken Rand) aufzubauen, da gibt es u.a. eine "Control" PropertyManagerPageSelectionbox bei, das automatisch solche Selektionen überwacht. Bevor jemand fragt: hab ich aber auch noch nie selbst gemacht und kein Beispiel für zur Hand Ciao, Stefan ------------------ Inoffizielle deutsche SolidWorks Hilfeseite http://solidworks.cad.de OT: Mapcar kann Aufmunterung gebrauchen Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
jens_oliver Mitglied Softwareentwickler
Beiträge: 114 Registriert: 28.06.2005
|
erstellt am: 05. Dez. 2005 16:19 <-- editieren / zitieren --> Unities abgeben: Nur für A.Oertel
Hallo, möchte man nur zwischen den beiden Anwendungen (Makro und Solidworks) hin und her wechseln, kann man einfach das Makro als UserForm aufbauen und „ungebunden “ aufrufen. Das Makro bekommt zwar keine Nachricht wenn etwas selektiert wurde, aber mit einem Klick auf den Schalter im UserForm hat man die Daten. Sub main() UserForm1.Show (vbModeless) End Sub
// UserForm1 Private Sub CommandButton1_Click() Dim swApp As Object Dim Part As ModelDoc2 Dim SelMgr As SldWorks.SelectionMgr Set swApp = Application.SldWorks Set Part = swApp.ActiveDoc Set SelMgr = Part.SelectionManager Count = SelMgr.GetSelectedObjectCount2(-1) If Count = 1 Then ret = MsgBox("somthing selected!", vbOKOnly, "Info") Else ret = MsgBox("nothing selected!", vbOKOnly, "Info") End If End Sub
Gruß Oliver Knepper ------------------ Software nach Maß für Ihr CAD-System www.ib-knepper.de Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
A.Oertel Mitglied Dipl.Ing.
Beiträge: 270 Registriert: 12.10.2000
|
erstellt am: 07. Dez. 2005 15:24 <-- editieren / zitieren --> Unities abgeben:
|
VBSpawn Mitglied Programmierer
Beiträge: 514 Registriert: 23.08.2005 Sorgfältige Planung ersetzt niemals pures Glück.
|
erstellt am: 08. Dez. 2005 08:49 <-- editieren / zitieren --> Unities abgeben: Nur für A.Oertel
Hi zusammen, hier mal ein kleines bsp..... das als Grundlage verwendet werden könnte. Startet bitte in Sub Main Vielleicht hilft es als Ansatz. Jedenfalls läuft es über den NewSelectionNotify <INSERT/> Gruß an Stefan <\INSERT> Gruß Micha ------------------ Zitat: Interpunktion und Orthographie des Postings sind frei erfunden. Eine Übereinstimmung mit aktuellen oder ehemaligen Regeln wäre rein zufällig und ist nicht beabsichtigt.
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
jens_oliver Mitglied Softwareentwickler
Beiträge: 114 Registriert: 28.06.2005
|
erstellt am: 08. Dez. 2005 13:13 <-- editieren / zitieren --> Unities abgeben: Nur für A.Oertel
Hallo, hier eine einfache Lösung mit einer "While" Schleife. Wichtig ist die Funktion "DoEvents" die die Kontrolle ans Betriebssystem übergibt, damit es andere Ereignisse verarbeiten kann. Sub main() Dim swApp As Object Dim Part As ModelDoc2 Dim SelMgr As SldWorks.SelectionMgr Set swApp = Application.SldWorks Set Part = swApp.ActiveDoc Set SelMgr = Part.SelectionManager MsgBox ("please select something") Count = SelMgr.GetSelectedObjectCount2(-1) While Count = 0 DoEvents Count = SelMgr.GetSelectedObjectCount2(-1) Wend MsgBox("somthing selected!", vbOKOnly, "Info") End Sub Gruß Oliver Knepper
------------------ Software nach Maß für Ihr CAD-System www.ib-knepper.de Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
VBSpawn Mitglied Programmierer
Beiträge: 514 Registriert: 23.08.2005 Sorgfältige Planung ersetzt niemals pures Glück.
|
erstellt am: 08. Dez. 2005 13:36 <-- editieren / zitieren --> Unities abgeben: Nur für A.Oertel
Zitat: Original erstellt von jens_oliver: Hallo,hier eine einfache Lösung mit einer "While" Schleife. Wichtig ist die Funktion "DoEvents" die die Kontrolle ans Betriebssystem übergibt, damit es andere Ereignisse verarbeiten kann. Sub main() Dim swApp As Object Dim Part As ModelDoc2 Dim SelMgr As SldWorks.SelectionMgr Set swApp = Application.SldWorks Set Part = swApp.ActiveDoc Set SelMgr = Part.SelectionManager MsgBox ("please select something") Count = SelMgr.GetSelectedObjectCount2(-1) While Count = 0 DoEvents Count = SelMgr.GetSelectedObjectCount2(-1) Wend MsgBox("somthing selected!", vbOKOnly, "Info") End Sub Gruß Oliver Knepper
Hi, auch eine Möglichkeit .... allerdings geht die Prozessorauslastung dabei ziemlich nach oben. Gruß Micha ------------------ Zitat: Interpunktion und Orthographie des Postings sind frei erfunden. Eine Übereinstimmung mit aktuellen oder ehemaligen Regeln wäre rein zufällig und ist nicht beabsichtigt.
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
thw Mitglied System Manager CAD
Beiträge: 13 Registriert: 21.11.2002 SW2018
|
erstellt am: 08. Dez. 2005 21:34 <-- editieren / zitieren --> Unities abgeben: Nur für A.Oertel
Mit einer Messagebox ist das schlecht machbar, weil diese immer MODAL sind. Ich habe mir so geholfen, dass ich einen nicht-modalen Dialog offen lasse, die eigentliche Funktionalität in die Ausführungsfunktionen des jeweiligen Buttons eingefügt habe und darin das Makro entsprechend reagieren lasse. Beispiel aus einem Makro, die folgende Aktion wird erst dann ausgeführt, wenn der Anwender auf den Button "Weiter" klickt: Code: Private Sub CommandButton_Weiter_Click() If selmgr.GetSelectedObjectCount = 1 And selmgr.GetSelectedObjectType2(1) = swSelDRAWINGVIEWS Then renameDrawing Else MsgBox "Es muss EINE Zeichnungsansicht gewählt sein, bevor Sie auf 'Weiter' klicken!" End If End Sub
(Das stammt aus einem Makro, welches eine geöffnete Zeichnungsdatei unter dem Namen des in einer angewählten Zeichnungsansicht vorhandenen Modells speichert. Die eigentliche Funktion "renameDrawing" wird erst aufgerufen, nachdem obige Prüfung erfolgreich ausgeführt wurde.) Vorsicht ist allerdings geboten, da Anwender "auf halbem Weg zum Ziel" die Datei wechseln können und dann das Makro weiter ausführen lassen! D.h. du musst stets prüfen, ob der Kontext noch derselbe ist. Mit Property-Manager sollte das nicht passieren, aber wenn man entsprechende Abfragen einbaut, geht's auch ohne. THw
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |