Применить RenderTransform к EllipseGeometry - PullRequest
3 голосов
/ 13 декабря 2011

Я рассчитываю применить содержимое RenderTransform к физическим свойствам EllipseGeometry, что означает, что свойства Center / RadiusX / RadiusY EllipseGeometry изменяются применением преобразования. Моя причина для этого заключается в том, что у меня есть программа для рисования, в которой вы можете рисовать эллипсы, и после рисования вам разрешается масштабировать / вращать / переводить эллипс, который под капотом я применяю как RenderTransforms для исходного объекта Path (чьи данные msgstr "свойство является объектом EllipseGeometry). В настоящее время для других геометрий в моей программе рисования (кривые Безье, линии, дуги и т. Д.) Я использую следующий подход для применения RenderTransforms, когда приходит время сохранять данные в файл.

    Geometry clone = linePath.Data.Clone();
    clone.Transform = linePath.RenderTransform(); //Which is a TransformGroup in my case
    Geometry transformedGeometry = clone.GetFlattenedPathGeometry();

Это оставляет меня с чистой геометрией, к которой был применен RenderTransform "linePath". Теперь я могу легко сохранить содержимое этой геометрии в файл в «Mini Syntax» и перезагрузить его позже. Я знаю, что могу использовать тот же подход для EllipseGeometry, но результатом является приблизительная PathGeometry, описывающая переведенную EllipseGeometry, и я не знаю способа преобразования этого результата обратно в EllipseGeometry, когда я перезагружаю данные из файла. В настоящее время для объектов EllipseGeometry на чертеже я сохраняю физические свойства (Центр / Радиус / и т. Д.), А затем сохраняю соответствующий RenderTransform в виде строки XAML в файл. Затем при загрузке я просто создаю EllipseGeometry из свойств и применяю сохраненный RenderTransform.

Теперь этот подход работает, но я чувствую, что было бы чище сохранить переведенную геометрию эллипса, как в случае других геометрий. У меня также есть другие применения в моем приложении для применения RenderTransforms как физических преобразований к EllipseGeometries, и обходные пути становятся все более и более уродливыми, поэтому я бы хотел придать процесс для этого (если это вообще возможно).

Заранее спасибо!

EDIT: Просто чтобы сделать вопрос немного более открытым, я не намерен использовать EllipseGeometry, так как я не понимаю, как его можно использовать для описания всех различных преобразований, которые могут присутствовать в RenderTransform (то есть Rotate). Так что, если есть какой-то другой способ или какая-то другая геометрия, которая может использовать «эллиптическое» поведение, мне определенно было бы интересно узнать об этом.

...