Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  SolidWorks
  API-AssemblyDoc-Event NewSelectionNotify mit Handbremse

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
Autor Thema:  API-AssemblyDoc-Event NewSelectionNotify mit Handbremse (969 mal gelesen)
Thomas5
Mitglied
Konstrukteur, SWX-Admin


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

Beiträge: 420
Registriert: 14.07.2003

SWX2013

erstellt am: 25. Aug. 2009 15: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


KomponenteZaehlen2.swp.txt

 
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)



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

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 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 Thomas5 10 Unities + Antwort hilfreich

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


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

Beiträge: 420
Registriert: 14.07.2003

SWX2013

erstellt am: 26. Aug. 2009 11:06    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 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 Sub

Private 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!
Thomas

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