zoukankan      html  css  js  c++  java
  • 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来设置。

  • 相关阅读:
    javascript 去掉 url 中的不可打印字符串
    双链表 哈希 go 实现lFU 缓存算法
    博客园嵌入背景音乐
    博客园嵌入B站视频教程
    基于C++二叉树链表实现同学录信息系统
    C++ 二叉树知识点
    datatable 自定义排序 及 多列排序
    jq 提取字符串中的数字
    wamp下thinkPHP3.2 系统不支持:redis 解决方法
    editable文档
  • 原文地址:https://www.cnblogs.com/aukle/p/3223778.html
Copyright © 2011-2022 走看看