Direct2D 几何计算和几何变幻

D2D不仅可以绘制,还可以对多个几何图形对象进行空间运算。这功能应该在GIS界比较吃香。

这些计算包括:

 


写一个合并的例子:对两个圆求并集,并将绘制结果存存储到一个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来设置。

 

 

你可能感兴趣的:(DI)