| | |  | Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für SOLIDWORKS |
|
Autor
|
Thema: API-AssemblyDoc-Event NewSelectionNotify mit Handbremse (969 mal gelesen)
|
Thomas5 Mitglied Konstrukteur, SWX-Admin
 
 Beiträge: 420 Registriert: 14.07.2003 SWX2013
|
erstellt am: 25. Aug. 2009 15:56 <-- editieren / zitieren --> Unities abgeben:         
Hallo, ich wollte mein kleines Makro von heute morgen ( http://ww3.cad.de/foren/ubb/Forum2/HTML/018274.shtml ) noch etwas verhübschen, indem ich es in einer Userform offen halte und mit dem AssemblyDoc-Event "NewSelectionNotify" den Zählvergang starte. Klappt alles prima. Nur beim genauen hinsehen scheint da eine "SWX-Bremse" zu stecken: Denn beim Selektieren im Grafikbereich läuft das "NewSelectionNotify" genau 1x und das ist ja zu erwarten. Selektiere ich mit der Maus eine Komponete im Featurebaum, dann läuft das "NewSelectionNotify" genau 7x hintereinander und das war 6x zu viel. Bei den einzelnen Durchläufen ist dann bei den ersten sechs der swSelMgr.GetSelectedObjectCount = 0 und erst beim 7. ist er 1. Wer´s probieren will, macht die Stop-Funktion in "NewSelectionNotify" scharf und zählt mit. Meine Frage: Kennt jemand den Hintergrund zu diesem Verhalten? Soll das so sein? Oder ist das tatsächlich eine Bremse, die da nicht hingehört! Kennt jemand eine Trick, wie ich herausfinde, daß im Featurebaum selektiert wurde und ich die ersten 6 Events vorbeilasse? Viele Grüße! Thomas 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: 26. Aug. 2009 08:28 <-- editieren / zitieren --> Unities abgeben:          Nur für Thomas5
Hallo Thomas, interessante Fundstelle. Ich hab da mal etwas mit rumgespielt, bei mir ruft er die NewSelectionNotify zwar nur 5 mal auf, wenn ich eine Komponente direkt im Featurebaum selektiere, aber immerhin. Ich hab durch ein paar Debug.Print Befehle dann mal geschaut, was so passiert, die ersten 4 Male ist überhaupt nichts selektiert und es geht direkt wieder aus der Zählenfunktion raus (aufgrund des Exit Sub), erst beim fünften Durchlauf hat er dann was und zählt auch durch. Etwas anders stellt sich das dar, wenn du mehrere Komponenten z.B. durch SHIFT-Klick selektierst, für die erste (vorgewählte) wird NewSelectionnotify 4x, die weiteren 5x und für die Letzte genau einmal aufgerufen. Die Beschreibung des Befehls lautet Post-notifies the user program when the selection list has changed, also Benachrichtigung bei Änderung der Selektionsliste. Ich vermute schwer, das intern aufgrund der verschiedenen Möglichkeiten die Selektionsliste mehrfach als geändert geflagt wird. Sieht für mich aber auch auf den ersten Blick nicht notwendig aus, ist vielleicht eine Mail an den API Support wert. Ciao, Stefan ------------------ Inoffizielle deutsche SolidWorks Hilfeseite http://solidworks.cad.de Stefans SolidWorks Blog Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Thomas5 Mitglied Konstrukteur, SWX-Admin
 
 Beiträge: 420 Registriert: 14.07.2003 SWX2013
|
erstellt am: 26. Aug. 2009 11:06 <-- editieren / zitieren --> Unities abgeben:         
Hallo Stefan, vielen Dank, daß Du Dir die Sache angeschaut hast. Es scheint aber System dahinter zu stecken: Klicke ich Unterbaugruppen an, dann sind das 5 Events. Bei selbstgemachten Teilen, sind das 6 Events und bei Toolbox-Schrauben sind das 7 Events. Vielleicht gibt es auch noch weitere Varianten, denn das Ganze kann ja in der Zeichnung noch mal anders sein. Damit das Nutz-Programm nicht x-mal durchlaufen wird, kann es ja bei SelMgr.GetSelectedObjectCount = 0 übersprungen werden. Nur für den Fall, daß auch mit der BG was passieren soll, wenn die Selektion abgewählt (nichts angewählt!) ist, ist mir leider nur das eingefallen: Code: Option Explicit Dim WithEvents swmodel As SldWorks.AssemblyDoc Dim Durchläufe As Integer 'Zähler in "NewSelectionNotify" Dim nr As Integer 'Zähler für´s Debug.Print Dim t As Double 'Zeitpunkt des Verlassens der "NewSelectionNotify" Private Sub UserForm_Initialize() Dim SwApp As Object Set SwApp = Application.SldWorks Set swmodel = SwApp.ActiveDoc If swmodel.GetType <> 2 Then MsgBox "Dieses Makro macht nur in Baugruppen Sinn!": Exit Sub End SubPrivate Function swmodel_NewSelectionNotify() As Long Dim SelMgr As Object If Timer - t > 0.1 And Durchläufe = 1 Then Durchläufe = 0: nr = 0: Debug.Print nr = nr + 1: Debug.Print nr, Set SelMgr = swmodel.SelectionManager If SelMgr.GetSelectedObjectCount = 0 And Durchläufe >= 0 Then t = Timer: Exit Function KomponenteZählen1.KomponenteZählen Durchläufe = Durchläufe + 1 If Durchläufe > 1 Then Durchläufe = 0 t = Timer End Function
Hat halt den Haken, daß 1x das Nutz-Programm umsonst durchlaufen wird. Vielleict hat noch jemand eine andere Idee. So: Genug gespielt.... , jetzt muß ich aber wieder konstruieren.... Viele Grüße! ThomasEine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
| Anzeige.:
Anzeige: (Infos zum Werbeplatz >>)
 |