| | | Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte |
Autor
|
Thema: Objektauswahl wie beim Dehnen (964 / mal gelesen)
|
Theo37 Mitglied Techniker
Beiträge: 423 Registriert: 08.10.2008 ACAD 2019 WIN 7 64bit Intel Xenon CPU E5-1620 3.60GHz 16GB RAM
|
erstellt am: 27. Okt. 2016 15:50 <-- editieren / zitieren --> Unities abgeben:
Hallo an Alle, ich habe mir ein kleines Programm geschrieben welches Linien an anderen Linien unterbricht. Das funktioniert jetzt so weit ganz gut. Ich wähle mit GetEntity erst die erste Linie und dann die zweite Linie dann wird diese bearbeitet und danach kann wieder eine Linie ausgewählt werden. Jetzt dachte ich es wäre schön wenn man als zweites auch mehrere Linien auswählen könnte und diese alle an der ersten Linie unterbrochen würden. Es sollte so sein wie beim Dehnen-Befehl von AutoCAD, da kann man als zweite Auswahl, einzelne Objekte wählen oder wenn man ins leere klickt wird automatisch eine Kreuzen-Auswahl an dieser Stelle gestartet und man kann mehrere Objekte auswählen. Bekomme ich dieses Auswahlverhalten irgendwie hin? Gibt's da ein Beispiel? Gruß Theo Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Ingenieur Studio HOLLAUS Mitglied CAD / CAFM / GIS Beratung-Programmierung-Schulung
Beiträge: 1049 Registriert: 06.11.2008 Autocad 2 bis Autocad 2020 (+Map3D, +Civil3D, +Infraworks) RKV .... CAFM+mehr HMap ... Vermessung und Verkehr OoC .... Raumplanung CBox ... Tools für AutoCAD und BricsCAD (kostenfrei)
|
erstellt am: 28. Okt. 2016 18:16 <-- editieren / zitieren --> Unities abgeben: Nur für Theo37
Zitat: Ich wähle mit GetEntity
Zitat: da kann man als zweite Auswahl, einzelne Objekte wählen oder wenn man ins leere klickt wird automatisch eine Kreuzen-Auswahl an dieser Stelle gestartet und man kann mehrere Objekte auswählen
Das wäre doch genau die SelectionSet Funktion, mit GetEntity kann man das nicht durchführen (oder nur sehr gewaltsam). ------------------
www.cars4fun.at Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Theo37 Mitglied Techniker
Beiträge: 423 Registriert: 08.10.2008
|
erstellt am: 31. Okt. 2016 08:19 <-- editieren / zitieren --> Unities abgeben:
Ich glaube die SelectionSet-Methode erwartet die Eingabe mehrerer Objekte. Das heißt man muß die Objektwahl durch ein Return abschließen. Somit habe ich keine Möglichkeit auf die Wahl eines einzelnen Objektes zu reagieren. Das ist dann wie beim Schieben-Befehl, es wird ein Auswahlsatz gebildet und dieser wird dann verarbeitet(verschoben). Beim Dehnen-befehl ist es nicht ganz so. Hier werden einzelne Elemente sofort bearbeitet und danach läuft die Auswahl weiter. Trotzdem ist es auch möglich mehrere Objekte auszuwählen. Mir ist klar daß das schon ein bisschen spezieller ist. ich erwarte auch nicht eine kpl. Lösung zu bekommen. Mir würde es schon reichen eine Idee oder einen Lösungsansatz zu bekommen. Du schreibst "oder nur sehr gewaltsam". Wie könnte diese "Gewaltsam" aussehen? Soll ich nur noch Punkte abfragen und diese auswerten? Oder soll ich mit Getentity weitermachen. oder doch getselection. Oder gibt's nen ganz anderen Lösungsweg, mit Jigs z.B.? Danke Gruß Theo
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Ingenieur Studio HOLLAUS Mitglied CAD / CAFM / GIS Beratung-Programmierung-Schulung
Beiträge: 1049 Registriert: 06.11.2008 Autocad 2 bis Autocad 2020 (+Map3D, +Civil3D, +Infraworks) RKV .... CAFM+mehr HMap ... Vermessung und Verkehr OoC .... Raumplanung CBox ... Tools für AutoCAD und BricsCAD (kostenfrei)
|
erstellt am: 31. Okt. 2016 10:50 <-- editieren / zitieren --> Unities abgeben: Nur für Theo37
Zitat: Soll ich nur noch Punkte abfragen und diese auswerten?
Z.B. mit SelectionSet arbeiten, aber gleichzeitig einen Event mitlaufen haben, der auf SelectionAdded reagiert. Kommt der Event beim ersten SelectionSet-Klick, dann SelectionSet abbrechen ... da Du ein Element schon hast, anderen falls das SelectionSet weiterlaufen lassen. Oder mit PointMonitor checken, ob beim Klick ein Element darunter liegt. Oder mit GetEntity Punkt merken, wenn kein Element retourniert wird, dann diesen Punkt dem SelectionSet als ersten Punkt simuliert übergeben (keine Ahnung, ob das geht, ist nur als Idee hier). Alle diese Maßnahmen können aber gestört werden, wenn man 3D drauf schaut (weil der retounierte Punkt dann anders auszuwerten ist), oder SELECTIONCYCLING aktiv wurde (der Dialog geöffnet ist), ... darum eben mein Begriff "gewaltsam", denn da läuft man die ganze Zeit den unterschiedlichen Varianten hinterher, die AutoCAD so bietet im Zuge einer Selektion. ------------------
www.cars4fun.at Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Theo37 Mitglied Techniker
Beiträge: 423 Registriert: 08.10.2008
|
erstellt am: 07. Nov. 2016 15:54 <-- editieren / zitieren --> Unities abgeben:
Hallo, ich bin bei GetEntity geblieben. Ich löse im PromptForEntityEnding-Event einen Fehler aus, den ich mit Try abfange. Bei Catch mache ich dann mit Selection weiter. Bestimmt keine schöne Lösung, funktioniert aber bisher ohne Fehler. Irgendwann mache ich auch noch ein Jig für diese Lösung, so dass der User auch noch ne Vorschau bekommt. Im Augenblick habe ich leider zu wenig Zeit und es wäre ja auch nur schön, aber nicht wirklich notwendig. Für den Fall dass es jemand interessiert, habe ich die entsprechenden Zeilen unten rein kopiert. Gruß Theo AddHandler MyEditor.PromptForEntityEnding, AddressOf PFE Try Answer = MyEditor.GetEntity(Frage) RemoveHandler MyEditor.PromptForEntityEnding, AddressOf PFE Catch ex As Exception Dim MySelection As PromptSelectionResult Dim MyResult As PromptPointResult Dim MyOpts As PromptCornerOptions MyOpts = New PromptCornerOptions("Entgegengesetzte Ecke angeben:", LastPickedPoint) MyOpts.UseDashedLine = True MyResult = MyEditor.GetCorner(MyOpts) MySelection = MyEditor.SelectCrossingWindow(LastPickedPoint, MyResult.Value) If MySelection.Status = PromptStatus.OK Then SecondEntyIDcoll = New ObjectIdCollection For Each MyId In MySelection.Value.GetObjectIds SecondEntyIDcoll.Add(MyId) Next RemoveHandler MyEditor.PromptForEntityEnding, AddressOf PFE Return True End If End Try . . . . Sub PFE(sender As Object, e As EditorInput.PromptForEntityEndingEventArgs) If e.Result.Status = PromptStatus.Error Then LastPickedPoint = e.Result.PickedPoint Throw New Exception() End If End Sub Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
| Anzeige.:
Anzeige: (Infos zum Werbeplatz >>)
|