Pergunta

Eu queria saber se havia uma ferramenta para converter uma base de dados de caminhos como "M 0 0 l 10 10" para seu código segmento de linha / curva equivalente.

Atualmente estou 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);

Parece-me que chamar XamlParser é muito mais lento do que criar explicitamente os segmentos de linha. No entanto converter um monte de caminhos com a mão é muito tedioso.

Foi útil?

Solução

Este programa irá fazer a conversão: http://stringtopathgeometry.codeplex.com/

Outras dicas

Não há nada de built-in para gerar C # ou VB código da minilinguagem geometria, mas você poderia criar uma como se segue:

  • Emit C # ou VB código para nova-ing um PathGeometry.
  • PathFigureCollection.Parse chamada em seu cadeia de caminho. Isso irá retornar uma instância PathFigureCollection.
  • iterar sobre os PathFigureCollection. Para cada figura:
    • escrever código C # ou VB para nova-ing um objeto PathFigure e adicioná-lo à coleção PathGeometry.Figures.
    • iterar coleção Segmentos da figura. Para cada segmento, analisar seu tipo e código dependente do tipo de Emit para nova-ing-se o tipo apropriado de PathSegment, definindo suas propriedades e adicioná-lo ao PathFigure atual.

Se isto é mais ou menos tedioso do que converter os caminhos à mão é algo que só você pode decidir, embora ... ele provavelmente depende de quantos tipos diferentes de segmento que você precisa para lidar com (ou seja, quantos tipos diferentes de segmento aparecem em suas cordas de caminho), desde que você terá que escrever código separado para LineSegments, ArcSegments, etc.

EDIT:. Graças a Anvaka em comentários para simplificar a resposta original, chamando minha atenção para PathFigureCollection.Parse

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top