下图显示了 Direct2D 中的路径几何,它包含 5 段,每段是一条直线,我的要求是,给定这样的一座山,我想获得所有 5 条线。
但是在Direct2D中似乎没有相关的API可以获取路径几何的段,我看到ID2D1PathGeometry接口提供了GetSegmentCount方法,如果我们不能获取段,为什么微软提供这个方法?
下图显示了 Direct2D 中的路径几何,它包含 5 段,每段是一条直线,我的要求是,给定这样的一座山,我想获得所有 5 条线。
但是在Direct2D中似乎没有相关的API可以获取路径几何的段,我看到ID2D1PathGeometry接口提供了GetSegmentCount方法,如果我们不能获取段,为什么微软提供这个方法?
您可以使用ID2D1PathGeometry::Stream()
. 您将不得不编写一个实现ID2D1GeometrySink
. 您可能会发现在广义上实现这一点很有用,这样它就可以抽出一个对象树,而不是寻找您现在需要的确切数据。如果您需要使用哪种类型的对象模型的示例,只需查看 WPF 的System.Windows.Media.Geometry
( http://msdn.microsoft.com/en-us/library/system.windows.media.geometry.aspx )。
您还可以轻松地从这些类转换回ID2D1PathGeometry
,并使用最适合或适合任何情况的类。我已经编写了这两种转换,一旦我意识到它们使用的是相同的“语言”,它就会变得非常简单。我特别发现它有助于整理我对“图形”和“片段”之间区别的理解。
如果你有一个 PathGeometry,那么使用 PathGeometry::Stream() 很好。
但是,如果您有一个基本的几何并且想要完成相同的操作,那么您可以执行以下操作:
结果将存储在您的 GeometrySink 中。
实现一个名为 SpecializedSink 的类,该类继承自 ID2D1SimplifiedGeometrySink 接口,由 ID2D1Geometry:: Simplify调用的扩展AddLines方法以检索几何数据。
建议您通过扩展 ID2D1SimplifiedGeometrySink阅读 [从几何中检索数据的示例] http://msdn.microsoft.com/en-us/library/windows/desktop/ee453682%28v=vs.85%29.aspx 。