Laden...

[gelöst] Polygonzug bez. geändertem Punkt "updaten"

Erstellt von Tubifex vor 8 Jahren Letzter Beitrag vor 7 Jahren 1.772 Views
T
Tubifex Themenstarter:in
12 Beiträge seit 2015
vor 8 Jahren
[gelöst] Polygonzug bez. geändertem Punkt "updaten"

Hallo!

Gibt es eine performante Möglichkeit, bei einem Polygon (System.Windows.Shapse) die Form zu manipulieren?

Ich habe in einem Canvas die Möglichkeit für den User, Polygone zu erstellen. Weiter Punkte sollen per Klick eingefügt oder gelöscht werden (werden dann in die PointCollection mit Add eingefügt, bzw. mit Remove gelöscht).

Die einzelnen "Ecken" des Polygons werden mit runden Ellipsen verdeutlicht. Diese können per Drag-and-Drop verschoben werden. Das jeweilige Polygon bzw. der jeweilige Point in der Polygon-Collection wird auch richtig identifiziert.

Nun zum Problem:
Bei der Manipulation der X/Y-Koordinaten des Punktes verändert sich aber die Form des Polygons nicht. Ich habe den Verdacht, dass die PointCollection "nicht merkt", dass die Koordinaten eines Punktes geändert werden und sich dadurch das Polygon nicht in seiner Form ändert.
Wenn ich die PointCollection "inperformant" zwischenspeicher, den alten Punkt rauslösche, den leicht versetzten neu einfüge und das in die PointCollection des Polygons einspeichere, ändert sich die Form.
Aber ich habe das Gefühl, dass das nicht Methode der Zeit, aka "Stand der Technik" ist.

Daher meine Frage: Gibt es eine Möglichkeit, die PointCollection nach dem Motto "anzustupsen": "Schau mal ob die Koordinaten deiner Points sich geändert haben und zeichne das Polygon neu im Canvas"?

C
2.121 Beiträge seit 2010
vor 8 Jahren

Sollte die PointCollection das können? Ich kenne das Objekt nicht. Ob sie das kann steht sicher in der Hilfe.
Wie hast du die mit dem Canvas verknüpft?

C
2.121 Beiträge seit 2010
vor 8 Jahren

Ich hatte jetzt nochmal etwas Zeit um zu überlegen was du da machst.
Wenn das Einfügen in die PointCollection eine Änderung auslöst, egal wie sie das macht - es funktioniert ja, dann würde es sicher helfen wenn du einfach einen neuen Punkt an die Stelle des alten in die Collection einfügst.
Wenn du ein Element in der Collection änderst kriegt die davon nichts mit. Kann sie nicht.
Wenn du etwas neues in die Collection einfügst merkt sie das und kann reagieren.

3.003 Beiträge seit 2006
vor 8 Jahren

Dein Verdacht dürfte ins Schwarze treffen, wie die anderen auch schon gesagt haben. Hilft dir eventuell eine von PointCollection abgeleitete Klasse mit einer Methode EditPoint(int index, double newValueX, double newValueY), die den Punkt am entsprechenden Index manipuliert und danach das Neuzeichnen auslöst?

LaTino

"Furlow, is it always about money?"
"Is there anything else? I mean, how much sex can you have?"
"Don't know. I haven't maxed out yet."
(Furlow & Crichton, Farscape)

T
Tubifex Themenstarter:in
12 Beiträge seit 2015
vor 7 Jahren

vielen Dank für Eure Hilfe!

@ chilic: Die PointCollection ist eine Eigenschaft (?) der System.Windows.Shapes - Polygon-Klasse, mit der man die Eckpunkte per "Point"s definieren kann.

"Wenn du ein Element in der Collection änderst kriegt die davon nichts mit. Kann sie nicht.
Wenn du etwas neues in die Collection einfügst merkt sie das und kann reagieren."

  • danke! Das hab ich bisher nur vermutet. Aber wenn jemand erfahrenes mir berichtet, dann kann ich das als "is so" abhaken.

Ich hab es nun, wie Ihr vorgeschlagen habt, gelöst:

Eine Änderung tritt bei gedrückter Maustaste ein. Das wird registriert und im mouse-Move-event des Canvas ein neuer Punkt erstellt und die polygon-Pointcollection komplett mit clear geleert und neu besetzt. Für das besetzen verwende ich die bisherigen, dafür zwischengespeicherte Punkte und den neuen mit Add. Das wird vom polygon registriert und die Form des Polygones entsprechend geändert.
Somit klappt das Bewegen und Hinzufügen, vielen Dank, mit diesem Workaround funktioniert es!