| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte |
Autor
|
Thema: Objektwahl / Auswahlfenster (1546 mal gelesen)
|
montana Mitglied
Beiträge: 11 Registriert: 04.10.2006
|
erstellt am: 09. Okt. 2006 17:00 <-- editieren / zitieren --> Unities abgeben:
Hallöle. Für eine Funktion sollen Objekte ausgewählt werden. Wenn der User ein einzelnes Objekt trifft, soll es dann zum SelectionSet hinzugefügt werden. Wird kein Objekt getroffen, möchte ich davon ausgehen, dass der Nutzer mehrere Objekte durch aufziehen eines Rechteckes wählt. Und genau da hakt es. Klickt der User daneben, wird Err wahr und es sollte .GetCorner aufgerufen werden. Aber der gepickte Punkt vom ersten Versuch ist leer, wegen Fehler eben. Wo liegt denn da nun mein Denkfehler, kann ich das überhaupt so einfach implementieren? Code:
Dim P1 As Variant, P2 As Variant Dim Objekt As AcadEntity ThisDrawing.Utility.GetEntity Objekt, P1, "Objekt wählen: " If Err Then P2 = ThisDrawing.Utility.GetCorner(P1, "Andere Ecke wählen: ") End If
Haut mich mit dem Zaunpfahl Christian Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Carsten1210 Mitglied staatl. geprüfter Holztechniker
Beiträge: 1357 Registriert: 24.07.2002 AutoCAD ACA 2018 Solidworks 2016 Sp5 Enterprise PDM 2016 Sp5 Pascam Woodworks Visual Studio 2017 Pro Windows 10 64Bit Dell T3620 Intel Core i7-7700K 16 GB Arbeitsspeicher 2x Samsung S24C650 Dell M4800
|
erstellt am: 09. Okt. 2006 17:18 <-- editieren / zitieren --> Unities abgeben: Nur für montana
Hallo Christian, Setz mal vor die Objekt-Auswahl ein "On Local Error Resume Next". Und nach der Asuwahl folgendes : If TypeName(Object) <> "Nothing" Then... Damit sollte es laufen. Gruß, Carsten Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
montana Mitglied
Beiträge: 11 Registriert: 04.10.2006
|
erstellt am: 09. Okt. 2006 19:30 <-- editieren / zitieren --> Unities abgeben:
Danke, Carsten, für die flotte Antwort. Gelöst wurde das Problem nicht, wenigstens habe ich jetzt erfahren, dass das Objekt (AcadEntity), sofern ich kein Objekt wähle, sondern (beabsichtigt) daneben klicke, nicht initialisiert ist. Es wäre nett, wenn es etwas wie .GetInput gäbe. Alternativ könnte ich mir vorstellen, zuerst einen Punkt picken zu lassen. Sollte auf dem Punkt ein Objekt liegen, füge ich das hinzu. Aber da fehlt mir dann zB das nette 'Highlight' bei überfahren von Objekten. Ein Workaround wäre, wenn ich den Maustastendruck abfange und mir dort die Mauskoordinaten merke... Ein scheinbar triviales Problem. Aber es sind immer die Kleinigkeiten... Grüße, Christian Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Stelli1 Moderator Verm.-Ing.
Beiträge: 1521 Registriert: 17.08.2005 Map 2000-2014, Rasterdesign, MapGuide, Autodesk Topobase, VS6, VS.net 2013
|
erstellt am: 10. Okt. 2006 11:44 <-- editieren / zitieren --> Unities abgeben: Nur für montana
Hallo Christian, auch innerhalb der AutoCAD Befehle wird diese (deine) Vorgehensweise nie verwendet. Entweder (ein) Objekt wählen oder (mehrere) Objekte wählen. Mit SelectOnScreen kann der Benutzer ein oder meherer Objekte mit allen Optionen wie hinzufügen, entfernen, Fenster etc. verwenden. Eigentlich sollte auch deine Funktion damit auskommen. Stelli ------------------ Warum lisp'eln wenn's auch anders geht. www.ib-stelberg.de Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
montana Mitglied
Beiträge: 11 Registriert: 04.10.2006
|
erstellt am: 10. Okt. 2006 16:47 <-- editieren / zitieren --> Unities abgeben:
Hi Stelli. Da muss ich auf das heftigste widersprechen. Wenn ich SCHIEBEN verwende (Befehl vor Auswahl), wird nach einem Objekt gefragt. So kann ich beliebig viele Objekte wählen. Klicke ich jedoch daneben, wird ein Fenster aufgezogen. Vielleicht habe ich es nicht adäquat ausgedrückt, aber soetwas wollte ich machen. Soweit ich das sehe, werde ich wirklich im 'OnMausClick' die Koordinaten speichern, damit der erste Punkt auf jeden Fall gespeichert ist, galls nämlcih die .GetEntity nicht funktioniert. Viele Grüße und auf ein baldiges Wochenende, Christian Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Stelli1 Moderator Verm.-Ing.
Beiträge: 1521 Registriert: 17.08.2005 Map 2000-2014, Rasterdesign, MapGuide, Autodesk Topobase, VS6, VS.net 2013
|
erstellt am: 10. Okt. 2006 17:21 <-- editieren / zitieren --> Unities abgeben: Nur für montana
Hallo Christian, vielleicht hab ich's wirklich nicht verstanden, aber mit
Code: Dim sset As AcadSelectionSet Set sset = ThisDrawing.SelectionSets.Add("MySel")sset.Clear sset.SelectOnScreen Debug.Print sset.Count
hast du genau das Eingabeverhalten wie beim Befehl SCHIEBEN. Stelli------------------ Warum lisp'eln wenn's auch anders geht. www.ib-stelberg.de Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
montana Mitglied
Beiträge: 11 Registriert: 04.10.2006
|
erstellt am: 10. Okt. 2006 20:39 <-- editieren / zitieren --> Unities abgeben:
|
Stelli1 Moderator Verm.-Ing.
Beiträge: 1521 Registriert: 17.08.2005 Map 2000-2014, Rasterdesign, MapGuide, Autodesk Topobase, VS6, VS.net 2013
|
erstellt am: 11. Okt. 2006 10:28 <-- editieren / zitieren --> Unities abgeben: Nur für montana
|
montana Mitglied
Beiträge: 11 Registriert: 04.10.2006
|
erstellt am: 11. Okt. 2006 15:57 <-- editieren / zitieren --> Unities abgeben:
|