D2D不仅可以绘制,还可以对多个几何图形对象进行空间运算。这功能应该在GIS界比较吃香。
这些计算包括:
- 合并几何对象,可以设置求交还是求并,CombineWithGeometry
- 边界,加宽边界,查询边界。Widen、GetBounds、GetWidenedBounds
- 几何对象填充的区域是否包含指定点,FillContainsPoint
- 笔画是否包含点,StrokeContainsPoint
- 几何对象与指定几何对象之间的交集,CompareWithGeometry
- 创建仅包含直线和(可选)三次方贝塞尔曲线的简化版本的几何对象,Simplify
- 网格化,创建一组顺时针缠绕的三角形,Tessellate
- 计算几何对象的轮廓(移除交集),Outline
- 几何对象上指定距离处的点和正切矢量,ComputePointAtLength
- 计算几何对象的面积,ComputeArea
- 计算几何对象的长度,ComputeLength
写一个合并的例子:对两个圆求并集,并将绘制结果存存储到一个path中,在组成path的关节的过程中需要用sink对象。最后绘制path
pRenderTarget->BeginDraw(); //clear screen pRenderTarget->Clear(D2D1::ColorF(D2D1::ColorF::White)); //define 2 ellipse const D2D1_ELLIPSE ellipse1 = Ellipse(Point2F(200,300),150,150); const D2D1_ELLIPSE ellipse2 = Ellipse(Point2F(200,250),100,200); //define ellipse geometry for compute ID2D1EllipseGeometry* pEllipse1 = NULL; ID2D1EllipseGeometry* pEllipse2 = NULL; //define path for render the combine result ID2D1PathGeometry* pPathGeo = NULL; //define a path container ID2D1GeometrySink* pGeometrySink = NULL; //initialize the ellipses and path. hr = pD2DFactory->CreateEllipseGeometry(ellipse1, &pEllipse1); hr = pD2DFactory->CreateEllipseGeometry(ellipse2, &pEllipse2); hr = pD2DFactory->CreatePathGeometry(&pPathGeo); //begin add path pPathGeo->Open(&pGeometrySink); //combine the 2 ellipse and the result go into the sink pEllipse1->CombineWithGeometry(pEllipse2, D2D1_COMBINE_MODE_UNION, NULL, NULL, pGeometrySink); //end add path pGeometrySink->Close(); //draw the path pRenderTarget->DrawGeometry(pPathGeo, pBlackBrush); pRenderTarget->EndDraw();
- 旋转,
- 缩放,
- 平移,
可以用pRenderTarget的SetTransform来设置。