3

我希望将 RenderTransform 的内容应用于 EllipseGeometry 的物理属性,这意味着 EllipseGeometry 的 Center/RadiusX/RadiusY 属性会因应用变换而改变。我这样做的原因是,我有一个绘图程序,您可以在其中绘制椭圆,并且在绘制后您可以缩放/旋转/平移椭圆,在引擎盖下我将其作为 RenderTransforms 应用于原始 Path 对象(其“数据" 属性是一个 EllipseGeometry 对象)。目前,对于我的绘图程序中的其他几何图形(贝塞尔曲线、直线、圆弧等),当需要将数据保存到文件时,我使用以下方法应用 RenderTransforms。

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

这给我留下了一个干净的几何图形,“linePath”的 RenderTransform 已应用到该几何图形上。现在我可以轻松地将这个几何图形的内容保存到“Mini Syntax”中的文件中,并在以后重新加载它。我知道我可以对 EllipseGeometry 使用相同的方法,但结果是描述转换后的 EllipseGeometry 的近似 PathGeometry,当我从文件中重新加载数据时,我不知道将结果转换回 EllipseGeometry 的方法。目前,对于绘图中的 EllipseGeometry 对象,我保存物理属性(中心/半径/等),然后将相应的 RenderTransform 作为 XAML 字符串保存到文件中。然后在加载时,我只需从属性创建 EllipseGeometry 并应用保存的 RenderTransform。

现在,这种方法有效,但我觉得保存转换后的椭圆几何会更干净,就像我在其他几何的情况下所做的那样。我在我的应用程序的其他地方也有使用 RenderTransforms 作为 EllipseGeometries 的物理变换,并且变通办法越来越难看,所以我想确定一个这样做的过程(如果可能的话)。

提前致谢!

编辑: 只是为了让问题更开放一点,我不承诺使用 EllipseGeometry,因为我看不出它如何可能用于描述 RenderTransform 中可能存在的所有不同转换(即旋转)。因此,如果可以使用其他方式或其他几何形状来提供“类似椭圆”的行为,我肯定有兴趣了解它。

4

0 回答 0