0

下图显示了 Direct2D 中的路径几何,它包含 5 段,每段是一条直线,我的要求是,给定这样的一座山,我想获得所有 5 条线。

在此处输入图像描述

但是在Direct2D中似乎没有相关的API可以获取路径几何的段,我看到ID2D1PathGeometry接口提供了GetSegmentCount方法,如果我们不能获取段,为什么微软提供这个方法?

4

3 回答 3

1

您可以使用ID2D1PathGeometry::Stream(). 您将不得不编写一个实现ID2D1GeometrySink. 您可能会发现在广义上实现这一点很有用,这样它就可以抽出一个对象树,而不是寻找您现在需要的确切数据。如果您需要使用哪种类型的对象模型的示例,只需查看 WPF 的System.Windows.Media.Geometry( http://msdn.microsoft.com/en-us/library/system.windows.media.geometry.aspx )。

您还可以轻松地从这些类转换回ID2D1PathGeometry,并使用最适合或适合任何情况的类。我已经编写了这两种转换,一旦我意识到它们使用的是相同的“语言”,它就会变得非常简单。我特别发现它有助于整理我对“图形”和“片段”之间区别的理解。

于 2012-10-08T18:24:22.277 回答
1

如果你有一个 PathGeometry,那么使用 PathGeometry::Stream() 很好。

但是,如果您有一个基本的几何并且想要完成相同的操作,那么您可以执行以下操作:

  1. 实现您自己的 GeometrySink 以“捕捉”几何组件
  2. 创建一个空的 PathGeometry
  3. 使用 Geometry::Combine 将您的几何图形与空几何图形组合(联合)。

结果将存储在您的 GeometrySink 中。

于 2012-12-14T20:56:05.930 回答
0

实现一个名为 SpecializedSink 的类,该类继承自 ID2D1SimplifiedGeometrySink 接口,由 ID2D1Geometry:: Simplify调用的扩展AddLines方法以检索几何数据。

建议您通过扩展 ID2D1SimplifiedGeometrySink阅读 [从几何中检索数据的示例] http://msdn.microsoft.com/en-us/library/windows/desktop/ee453682%28v=vs.85%29.aspx 。

于 2012-12-15T20:35:17.613 回答