如何在Direct2D中获取路径几何的片段?

时间:2012-09-22 02:58:38

标签: direct2d

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

enter image description here

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

3 个答案:

答案 0 :(得分:1)

您可以使用ID2D1PathGeometry::Stream()执行此操作。您必须编写一个实现ID2D1GeometrySink的类。您可能会发现在一般意义上实现它是有用的,这样它不会查找您现在需要的确切数据,而是可以抽出一个对象树。如果您需要使用什么类型的对象模型的示例,请查看WPF的System.Windows.Media.Geometryhttp://msdn.microsoft.com/en-us/library/system.windows.media.geometry.aspx)。

您也可以轻松地将这些课程转换回ID2D1PathGeometry,并使用最适合任何情况的方法。我写过两次转换,一旦我意识到他们使用相同的“语言”,就会发现它很简单。我特别发现它有助于组织我对“数字”和“细分”之间差异的理解。

答案 1 :(得分:1)

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

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

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

答案 2 :(得分:0)

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

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