关于GDI+ 多边形绘制功能的数据结构问题

VergilYe 2018-04-03 09:59:02
前段时间制作了一个多边形绘制的功能:
1.用CPtrArray储存每个点
2.左键点击,CPtrArray.Add一个点.
3.每个点都可以单独拖动.
4.整个多边形可以单独拖动
5.将一组PointF插入进CPtrArray(用的Add函数一个一个加),并绘制

上述是我这个功能的大概需求.

1-4点用CPtrArray都可以满足,
但是在实现第5点的时候,就发现用CPtrArray.Add函数效率超低(一次性添加5000个以上的坐标,至少需要1秒),可是我的需求是10ms以下.


经过一番百度,我发现GraphicsPath的AddLines可以满足我的第5点需求.
但是却没有找到方法满足3-4的需求.
我曾经使用过如下方法,但是绘制出来的图形却没有更新
PathData* pPathData = new PathData();
m_GdiPath.GetPathData(pPathData);
pPathData->Points[0].X = 0;
pPathData->Points[0].Y = 0;
请问一下,GraphicsPath是否有修改某一个坐标的功能,并更新绘制内容?

如果没有的话,那么我应该怎么设计才能满足我的5点需求?
先谢过各位了!
...全文
652 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
VergilYe 2018-04-11
  • 打赏
  • 举报
回复
引用 5 楼 schlafenhamster 的回复:
PointF *m_ptPolygon 类型问题 ?
已经解决了. 方式如下: 1.重载结构体的拷贝结构函数 2.重载结构体的"="运算符 结贴了.
schlafenhamster 2018-04-04
  • 打赏
  • 举报
回复
PointF *m_ptPolygon 类型问题 ?
VergilYe 2018-04-04
  • 打赏
  • 举报
回复
顶一下,求各位大神帮忙
schlafenhamster 2018-04-03
  • 打赏
  • 举报
回复
使用 SetSize 预置 大小。 用 operator [ ] 直接赋值。
VergilYe 2018-04-03
  • 打赏
  • 举报
回复
或者说,是否有方法可以高效率插入大量坐标到CPtrArray里面?
VergilYe 2018-04-03
  • 打赏
  • 举报
回复
引用 2 楼 schlafenhamster 的回复:
使用 SetSize 预置 大小。 用 operator [ ] 直接赋值。
谢谢,待会我试试. 另外,我遇到一个新的问题: 我有一个类:

class A
{

 public:
          A(void);
          ~A(void);
 public:
     int               m_nPointCount;//多边形点的个数
     PointF	*m_ptPolygon; //记录多边形的坐标(动态分配内存)
}
其中:

	A::~A(void)
{
		if (m_ptPolygon!=NULL)
		{
			delete[] m_ptPolygon;
			m_ptPolygon = NULL;
			m_nPointCount = 0;
		}
}
我把结构体A放到了CArray<A,A&>中,且有如下操作:

CArray< A,A&>	m_Source;
CArray< A,A&>	m_Copy;

m_Copy.Copy(m_Source);
m_Source.RemoveAll();
发现m_Source在RemoveAll()执行后,m_Copy中的结构体A中的m_ptPolygon的数据也被清空了. 也就是说,CArray的m_Copy.Copy函数,只是把m_Source中的A.m_ptPolygon的地址Copy过来,随着m_Source中A的析构函数执行,那么m_Copy中的A.m_ptPolygon的地址所指向的数据已经被清空掉了... 请问,应该要怎么做才可以让m_Source中A.m_ptPolygon的数据跟着Copy进m_Copy?

19,473

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 图形处理/算法
社区管理员
  • 图形处理/算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧