Вопрос

Мне было интересно, существует ли инструмент для преобразования данных пути, таких как «M 0 0 l 10 10», в эквивалентный код сегмента линии/кривой.

В настоящее время я использую:

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

Мне кажется, что вызов XamlParser намного медленнее, чем явное создание сегментов линии.Однако конвертировать множество путей вручную очень утомительно.

Это было полезно?

Решение

Эта программа выполнит преобразование:http://stringtopathgeometry.codeplex.com/

Другие советы

Нет ничего встроенного для генерации кода C# или VB из мини-языка геометрии, но вы можете создать его следующим образом:

  • Создайте код C# или VB для создания нового PathGeometry.
  • Вызов PathFigureCollection.Parse в строке вашего пути.Это вернет PathFigureCollection пример.
  • Переберите PathFigureCollection.Для каждой фигуры:
    • Напишите код C# или VB для создания нового объекта PathFigure и добавления его в коллекцию PathGeometry.Figures.
    • Переберите коллекцию Segments фигуры.Для каждого сегмента проанализируйте его тип и создайте зависящий от типа код для создания нового типа PathSegment, установки его свойств и добавления его в текущий PathFigure.

Однако, будет ли это более или менее утомительно, чем преобразование путей вручную, решать только вам...это, вероятно, зависит от того, сколько различных типов сегментов вам нужно обработать (т.е.сколько различных типов сегментов встречается в строках вашего пути), поскольку вам придется писать отдельный код для LineSegments, ArcSegments и т. д.

РЕДАКТИРОВАТЬ:Спасибо Анваке в комментариях за упрощение исходного ответа, обратив мое внимание на PathFigureCollection.Parse.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top