| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte |
Autor
|
Thema: Markierte Objekte (1051 mal gelesen)
|
Silvan01 Mitglied
Beiträge: 128 Registriert: 28.04.2009 AutoCAD Civil 2009 AutoCAD Civil 2010 Visual Studio 2008
|
erstellt am: 29. Okt. 2009 14:50 <-- editieren / zitieren --> Unities abgeben:
Hallo Zusammen, ist es möglich die aktuell in AutoCAD markierten Objekte in ein Selectionset zu bekommen? (Falls es schon ein Thread dazu gibt tut mir leid die Suchfunktion ist gerade down...) Grüße Silvan Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Ex-Mitglied
|
erstellt am: 29. Okt. 2009 15:07 <-- editieren / zitieren -->
Hi, suche nach ImpliedSelectionSet (im Editor) (genauen Begriff hab ich jetzt gerade nicht, aber mit 'implied' liege ich genau richtig ) - alfred - [EDIT} Wichtige Ergänzung: das funktioniert nur, wenn Du in der Befehlsdefinition Deines dotNET-Befehls auch das CommandFlag Autodesk.AutoCAD.Runtime.CommandFlags.UsePickSet gesetzt hast Und jetzt hab ich auch den genauen Link zur Funktion: Public Function SelectImplied() As Autodesk.AutoCAD.EditorInput.PromptSelectionResult Member von Autodesk.AutoCAD.EditorInput.Editor [/EDIT] ------------------ www.hollaus.at [Diese Nachricht wurde von a.n. am 29. Okt. 2009 editiert.] |
Silvan01 Mitglied
Beiträge: 128 Registriert: 28.04.2009 AutoCAD Civil 2009 AutoCAD Civil 2010 Visual Studio 2008
|
erstellt am: 03. Nov. 2009 10:12 <-- editieren / zitieren --> Unities abgeben:
|
Ex-Mitglied
|
erstellt am: 03. Nov. 2009 14:38 <-- editieren / zitieren -->
Hi Silvan, ich hab jetzt keinen Dev-Rechner vor mir, aber sowas wie SelectionChanged gibt's schon, schau bitte bei den Events des EditorInput.Editor - alfred - ------------------ www.hollaus.at |
Silvan01 Mitglied
Beiträge: 128 Registriert: 28.04.2009 AutoCAD Civil 2009 AutoCAD Civil 2010 Visual Studio 2008
|
erstellt am: 04. Nov. 2009 11:28 <-- editieren / zitieren --> Unities abgeben:
Hallo Nochmal, ich glaube ich hab das Event gefunden meine Funktion sieht jetzt folgendermaßen aus:
Code:
Public tAcadDoc As Document Public WithEvents Edt As Autodesk.AutoCAD.EditorInput.Editor = tAcadDoc.EditorPrivate Sub refreshop() Handles Edt.SelectionAdded Dim temp = Edt.SelectImplied().Value
Kann es sein, dass bei der Abfrage das Event wieder ausgelöst wird? Grüße Silvan Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Ex-Mitglied
|
erstellt am: 04. Nov. 2009 14:39 <-- editieren / zitieren -->
Hi Silvan, >> dass bei der Abfrage das Event wieder ausgelöst wird bei welcher Abfrage? - alfred - ------------------ www.hollaus.at |
Silvan01 Mitglied
Beiträge: 128 Registriert: 28.04.2009 AutoCAD Civil 2009 AutoCAD Civil 2010 Visual Studio 2008
|
erstellt am: 04. Nov. 2009 14:47 <-- editieren / zitieren --> Unities abgeben:
Hallo Alfred, ich meinte bei der markierten Zeile: Code: Dim temp = Edt.SelectImplied().Value
wenn ich eine Funktion so: Code: Private Sub refreshop() Handles Edt.SelectionAdded .... Dim temp = Edt.SelectImplied().Value
erstelle wird da eine Schleife drauß (Springt von der Temp initialisierung wieder zum Anfang der Funktion). Ich komm aber nicht drauf, wie ich das vermeiden kann Grüße Silvan Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Ex-Mitglied
|
erstellt am: 04. Nov. 2009 20:23 <-- editieren / zitieren -->
Hi Silvan, hab ich so nicht ausprobiert, ist aber durchaus möglich. Mit 'Handles Edt.SelectionAdded' ist grundsätzlich mit Vorsicht umzugehen, es gibt Sitationen, wo bei einfacher Selektion das gleiche Element trotzdem mehrfach in den Eventhandler geschickt wird. Um die Endlosrekursion zu behandeln, hast Du zwei Möglichkeiten: a) Du hast machst ein Flag (z.B. HandleSelectionEvents), dieses setzt Du vor Deiner ersten Zeile (Dim temp = ...) auf false, danach wieder auf true. In dem Eventhandler selbst fragst Du die Variable zuerst ab, ob diese true ist, nur dann machst Du das, wofür der Eventhandler gebaut ist, anderenfalls (bei HandleSelectionEvents = false) gehst Du gleich ans Ende des Codes im Eventhandler. b) Du aktivierst/deaktivierst den Eventhandler im Lauf: AddHandler Edt.SelectionAdded, AddressOf refreshop 'aktivieren RemoveHandler Edt.SelectionAdded, AddressOf refreshop 'deaktivieren Beides ist möglich und erlaubt Dir zu bestimmen, ob der Eventhandler 'handeln soll' oder nicht. HTH, - alfred - ------------------ www.hollaus.at |
Silvan01 Mitglied
Beiträge: 128 Registriert: 28.04.2009 AutoCAD Civil 2009 AutoCAD Civil 2010 Visual Studio 2008
|
erstellt am: 05. Nov. 2009 11:14 <-- editieren / zitieren --> Unities abgeben:
Hi, danke für deine Hilfe Alfred! Habe es jetzt folgendermaßen eingebaut: Code: Private Sub refreshopt(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Edt.SelectionAdded, Edt.SelectionRemovedRemoveHandler Edt.SelectionAdded, AddressOf refreshopt RemoveHandler Edt.SelectionRemoved, AddressOf refreshopt Dim temp = Edt.SelectImplied().Value
SelectionRemoved sollte doch auftreten, wenn ich z.B. die Markierung der Objekte in AutoCAD mit Esc entferne oder? Grüße Silvan Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Ex-Mitglied
|
erstellt am: 05. Nov. 2009 12:24 <-- editieren / zitieren -->
Hi, >> SelectionRemoved sollte doch auftreten, wenn ich z.B. die Markierung der >> Objekte in AutoCAD mit Esc entferne oder? Sollte ja, tut es aber nicht. Sorry, - alfred - ------------------ www.hollaus.at |
Silvan01 Mitglied
Beiträge: 128 Registriert: 28.04.2009 AutoCAD Civil 2009 AutoCAD Civil 2010 Visual Studio 2008
|
erstellt am: 05. Nov. 2009 12:40 <-- editieren / zitieren --> Unities abgeben:
|
Ex-Mitglied
|
erstellt am: 05. Nov. 2009 12:48 <-- editieren / zitieren -->
Hab's jetzt nicht im Kopf, aber ich glaube: a) SelectionAdded reagiert auf ESC - oder - b) es gibt einen anderen Event, der darauf reagiert und dann holt man sich nochmals das ImpliedSelectionSet um zu wissen, was jetzt doch gerade selektiert ist. Lass mal wissen, was Du vorhast, denn für das Eventhandling eignet sich oft auch der Zugriff auf die COM-Komponenten-Events, die z.T. sauberer reagieren. Ich sitz aber jetzt auf keinem Dev-Rechner und hab leider nicht alle im Kopf. - alfred - ------------------ www.hollaus.at |
Silvan01 Mitglied
Beiträge: 128 Registriert: 28.04.2009 AutoCAD Civil 2009 AutoCAD Civil 2010 Visual Studio 2008
|
erstellt am: 05. Nov. 2009 13:01 <-- editieren / zitieren --> Unities abgeben:
Hallo Alfred, es wird auf einer Benutzeroberfläche angezeigt werden wieviele Blöcke selektiert sind. Klappt auch soweit aber das SelectionRemoved klappt nicht... Das mit dem SelectionAdded und Esc probier ich mal aus. Grüße Also SelectionAdded reagiert nicht auf ESC bedienung [Diese Nachricht wurde von Silvan01 am 05. Nov. 2009 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |