WPF, convertire Path.DataProperty agli oggetti Segmento
Domanda
mi chiedevo se ci fosse uno strumento per convertire un dato percorso come "M 0 0 l 10 10" ad esso è equivalente codice segmento di linea / curva.
Al momento sto usando:
string pathXaml = "<Path xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\" xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\" Data=\"M 0 0 l 10 10\"/>";
Path path = (Path)System.Windows.Markup.XamlReader.Load(pathXaml);
Mi sembra che chiama XamlParser è molto più lento che creare in modo esplicito i segmenti di linea. Tuttavia la conversione di un sacco di percorsi a mano è molto noioso.
Soluzione
Questo programma farà la conversione: http://stringtopathgeometry.codeplex.com/
Altri suggerimenti
Non c'è niente di built-in per generare C # o VB codice dal minilinguaggio geometria, ma è possibile creare uno come segue:
- Emit C # o VB codice per il nuovo-zione di un PathGeometry.
- chiamata
PathFigureCollection.Parse
sulla stringa di percorso. Ciò restituirà un'istanzaPathFigureCollection
. - iterare il PathFigureCollection. Per ogni figura:
- Scrivi la C # o VB codice per il nuovo-zione di un oggetto PathFigure e aggiungendolo alla raccolta PathGeometry.Figures.
- iterare collezione segmenti della figura. Per ogni segmento, analizzare il tipo e emettere il codice a seconda del tipo per il nuovo-zione il tipo appropriato di PathSegment, impostare le sue proprietà e aggiungendolo al PathFigure corrente.
Se questo è più o meno noioso di convertire i percorsi a mano è qualcosa che solo si può decidere, anche se ... probabilmente dipende da quanti diversi tipi di segmento è necessario gestire (vale a dire quanti diversi tipi di segmento appaiono nelle stringhe di percorso), dal momento che si dovrà scrivere il codice separato per LineSegments, ArcSegments, ecc.
EDIT:. Grazie alla Anvaka nei commenti per semplificare la risposta originale di aver attirato la mia attenzione su PathFigureCollection.Parse