Forum:AutoCAD ObjectARX und .NET
Thema:Objektauswahl wie beim Dehnen
Möchten Sie sich registrieren?
Wer darf antworten? Registrierte Benutzer können Beiträge verfassen.
Hinweise zur Registrierung Sie müssen registriert sein, um Beiträge oder Antworten auf Beiträge schreiben zu können.
Ihr Benutzername:
Ihr Kennwort:   Kennwort vergessen?
Anhang:    Datei(en) anhängen  <?>   Anhänge verwalten  <?>
Grafik für den Beitrag:                                                
                                                       
Ihre Antwort:

Fachbegriff
URL
Email
Fett
Kursiv
Durchgestr.
Liste
*
Bild
Zitat
Code

*HTML ist AUS
*UBB-Code ist AN
Smilies Legende
Netiquette

10 20 40

Optionen Smilies in diesem Beitrag deaktivieren.
Signatur anfügen: die Sie bei den Voreinstellungen angegeben haben.

Wenn Sie bereits registriert sind, aber Ihr Kennwort vergessen haben, klicken Sie bitte hier.

Bitte drücken Sie nicht mehrfach auf "Antwort speichern".

*Ist HTML- und/oder UBB-Code aktiviert, dann können Sie HTML und/oder UBB Code in Ihrem Beitrag verwenden.

T H E M A     A N S E H E N
Theo37

Beiträge: 411 / 0

ACAD 2016
WIN 7 64bit
Intel Xenon CPU E5-1620 3.60GHz
16GB RAM

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

Ingenieur Studio HOLLAUS

Beiträge: 1049 / 0

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)

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

Theo37

Beiträge: 411 / 0

ACAD 2016
WIN 7 64bit
Intel Xenon CPU E5-1620 3.60GHz
16GB RAM

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

Ingenieur Studio HOLLAUS

Beiträge: 1049 / 0

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)

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

Theo37

Beiträge: 411 / 0

ACAD 2016
WIN 7 64bit
Intel Xenon CPU E5-1620 3.60GHz
16GB RAM

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