您的位置:首页 > 其它

Direct2D 几何计算和几何变幻

2013-07-28 14:54 344 查看
D2D不仅可以绘制,还可以对多个几何图形对象进行空间运算。这功能应该在GIS界比较吃香。

这些计算包括:

合并几何对象,可以设置求交还是求并,CombineWithGeometry
边界,加宽边界,查询边界。WidenGetBoundsGetWidenedBounds
几何对象填充的区域是否包含指定点,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();


除此之外,D2D还支持对几何对象的变幻,包括:

旋转,
缩放,
平移,

可以用pRenderTarget的SetTransform来设置。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: