二维CAD绘图系统-数据结构参考

从大作业来看,选择CAD系统的小组比较多,但部分同学对CAD绘图系统的链表数据结构设计不合理,导致后续缩放、旋转、选中、文件保存及读取等功能实现上比较棘手。

现给大家参考兼容多图形的数据结构设计,个人认为在图形操作及文件方面比较容易管理。

参考数据结构:

//记录每个图元点的位置信息,坐标点的链表结构
typedef struct PRIMITIVE_POINT {
	double x, y;			//the point coordinate.
	PRIMITIVE_POINT *next;
}primitive_point;

//记录每个图元的头结点
typedef struct PRIMITIVE_HEAD {
	size_t	type;// the type of current primitive
	bool	fill_state;	//Set a fill when fill_state = 1
	COLOR	fill_color;	//The color of fill color
	COLOR	line_color;	//Set line color
	STYLE	line_style;	//Set line style
	size_t 	line_width;	//Set line width
	bool 	selected_state; //The state is set to 1 if a user selects the primitive
	OTHER	other_parameters; //Set other parameters for extension
	primitive *p;	//A pointer points to the primitive
}primitive_head;

//利用**数组**或**链表**连接各个图元
primitive_head primitive_head_array[MAX_PRIMITIVE_NUMBER];

参考数据结构图:
图中红色点表示每个primitive对应的点,每个形状可以由若干图元构成。链表中仅保存图元信息(点位置)即可,通过头结点的type获取当前的形状信息,然后获取链表中每个节点的具体含义。
图中的primitive_head_array,也可以用链表结构表示。
矩形采用三个节点存储,是为了防止旋转操作情况下歧义形状的绘制。
在这里插入图片描述
通过上述链表结构定义,所有图形均可以通过同一种数据结构表达,能够有效降低代码复用性,提高开发效率。
除此之外,该数据结构也比较容易添加自定义图形(例如demo中的房子、鱼、立方体等),并容易修改固定的自定义图形。

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值