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.

È stato utile?

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'istanza PathFigureCollection.
  • 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

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top