Laden...

InkCanvas zu Shapes überreden

Erstellt von csOffroad vor 13 Jahren Letzter Beitrag vor 12 Jahren 2.319 Views
C
csOffroad Themenstarter:in
64 Beiträge seit 2009
vor 13 Jahren
InkCanvas zu Shapes überreden

Hi Leute,

ich versuche seit Tagen mein InkCanvas irgendwie zu überreden, Shapes wie Rectangle od. Ellipse in seine StrokeCollection aufzunehmen. Ziel ist es, dass ich die Shapes wie die normalen Freihandzeichnungen mit den InkCanvas-eigenen Tools erasen kann etc..
Ein Hinzufügen von selbstgebastelten Strokes ist ja einfach möglich, eine Linie od. vllt. sogar ein Rechteck kann ich dann als "Freihandzeichnung" wieder löschen. Aber wie bekomme ich z.B. eine Ellipse da rein?

1.044 Beiträge seit 2008
vor 13 Jahren

Hallo csOffroad,

was meinst du mit easen? Soll das InkCanvas automatisch erkennen, was gemalt worden ist? Wenn du einfach nur ein Shape hinzufügen möchtest, dann kannst du das mit ink.Children.Add machen. Beachte, dass ink der Name des Canvases ist.

Auf Seiten wie CodeProject oder CodePlex findest du bestimmt schon fertige Implementierungen. Das nur als Tipp am Rande.

zero_x

C
csOffroad Themenstarter:in
64 Beiträge seit 2009
vor 13 Jahren

Hi zero_x,

klar kann ich der Children-Collection Shapes hinzufügen - wie beim normalen Canvas auch. Allerdings werden diese immer hinter ink und highlighter des InkCanvas gerendert und lassen sich auch nicht per ZIndex hervorholen. Weiterhin kann ich die Shapes dann auch nicht mit dem InkCanvas-Eraser (Radiergummi) löschen, da das InkCanvas nur seine eigenen Freihandzeichnungen löschen will.

V
77 Beiträge seit 2009
vor 12 Jahren

Ich muss diesen alten thread nochmal aufnehmen.
Ich stehe vor exakt der gleichen problematik. Leider gibt es hier bisher keinen brauchbaren Tipp.
Hat in der Zwischenzeit noch irgendjemand einen Tipp, wie man z.B. eine simple Ellipse dem InkCanvas-Stroke hinzufügen kann?
(Children.Add ist keine Lösung, da später nicht mit den Hausmitteln von InkCanvas bearbeitbar).

Vielen Dank im Voraus.

6.862 Beiträge seit 2003
vor 12 Jahren

Hallo,

Zeichne deine Objekte halt selber. Du kannst manuell neue Strokes erstellen und im Konstruktor musst du entsprechend die Punkte der Zeichnung mitgeben. Die so erstellten Strokes kannst du dann in die Strokes Collection vom InkCanvas packen.

Baka wa shinanakya naoranai.

Mein XING Profil.

V
77 Beiträge seit 2009
vor 12 Jahren

vielen Dank für die Antwort.
Aber: Muss ich verstehen, was Du meinst? Was meinst Du mit "selber malen".
Ich möchte es aber mit Code tun. ... damit es auch ein Kreis wird.

6.862 Beiträge seit 2003
vor 12 Jahren

Hallo,

war bissle blöd vielleicht formuliert, aber genau das hab ich doch beschrieben. "selber zeichnen" war gedacht im Sinne als Gegenteil von "Usergezeichnet".

Ich habe ja beschrieben wie du Strokes erstellen kannst, und was dazu nötig ist. Das bissle Mathematik um Punkte einer Ellipse, bzw. Kreis zu berechnen ist nun echt nicht das Problem.

Baka wa shinanakya naoranai.

Mein XING Profil.

V
77 Beiträge seit 2009
vor 12 Jahren

Klar kann ich den Kreis selbst approximieren und die Punkte des Umfangs berechnen (bin als Krücke gerade dabei es so zu machen).
Aber ist das wirklich erforderlich - ich kanns einfach nicht glauben. Gibt es wirklich keine Möglichkeit Geometrie-Objekte in einen Stroke zu überführen?

6.862 Beiträge seit 2003
vor 12 Jahren

Gibt es wirklich keine Möglichkeit Geometrie-Objekte in einen Stroke zu überführen? Doch, genau das was du grad machst 😃 Wieso sollte das eine Krücke sein?

Strokes beschreiben Freihandzeichnungen anhand von Punktsammlungen. Da ist keinerlei Information vorhanden, wie die Semantik ist. Auf der anderen Seite hat man Geometrien, welche Objekte anhand von geometriespezifischen Eigenschaften beschreiben, man hat aber keine Informationen wie die einzelnen Punkte der Geometrie sind, auch weil das ja überhaupt abhängig davon ist, wie genau man das bestimmen will. Eine Geometrie hat unendlich viele Punkte.

Das sind zwei völlig unterschiedliche Konzepte, auch wenn die Darstellung dann ähnlich aussieht. Wenn du ein Konzept davon in ein anderes überführen willst, musst du halt bissle selber Hand anlegen.

Baka wa shinanakya naoranai.

Mein XING Profil.

V
77 Beiträge seit 2009
vor 12 Jahren

Naja, das ist mir schon klar. Und danke für Deine Hilfsbereitschaft!
Aber ich kann eben gerade nicht nachvollziehen (obwohl wir beide ggf. nichts dran ändern können), wieso es keine Unterstützung dafür gibt, eine ggf. recht aufwendig erstellte Grafik auf die "dumme" Pixelgrafik der Stroke zu rendern. Nach diesem Rendern benötige ich die Semantik doch auch gar nicht mehr.
Als nächstes hätte ich z.B. gern gestrichelte Linien oder eine Bitmap. Beide möchte ich dann (nach dem "rendern") mit den gleichen Werkzeugen bearbeiten, wie die Freihandzeichnung. Aber das alles "per Hand" zu überführen ???!!!
Oder ist die InkCanvas der falsche Container?