数控铣床图形编程系统零件图元排序程序设计

2012-01-29 08:35西安工程技术学院李洪声贺歆昉
电子世界 2012年11期
关键词:图元链表样条

西安工程技术学院 李洪声 贺歆昉

数控铣床图形编程系统零件图元排序程序设计

西安工程技术学院 李洪声 贺歆昉

基于autoCAD数控铣床图形自动编程系统设计中,本文利用Visual C++6.0语言设计一个比较完整的零件轮廓图元排序程序。首先介绍了定义了存储各图元信息数据结构,定义了双向链表结点复合结构体类型。利用list列表容器存储非均匀B样条曲线信息。设计比较函数以及链表操作函数,简化了排序程序设计。

数控铣床自动编程;排序程序;非均匀B样条曲线;双向链表

1.引言

在WindowsXP操作平台上,以Auto-CAD2004绘图软件为开发平台、采用可视化程序设计语言Visual C++6.0设计开发适于PC机数控系统上使用的数控铣床图形编程系统。系统框架结构如图1所示。

(1)读入模块:读取存储零件各图元几何信息。设计人员采用AutoCAD对加工的零件实体建摸后,将图形信息以DXF文件格式存储。读入模块通过分析DXF文件格式,读取CAD图形实体数据,存储零件的几何和参数信息。(2)读入双向连表模块:将存储各图元信息结构体读入链表后由排序模块进行排序组环。(3)工艺设置模块:对话框交互式输入工艺参数。(4)生成代码模块:对(2)中的存储零件轮廓环的双向链表中各结点结构体中的图元类型、环方向进行判断并根据输入的工艺参数进行相应处理生成数控加工程序代码。

本文主要介绍了使用Visual C++6.0语言对存储数控铣床加工零件轮廓各图元双向链表排序程序设计过程。首先介绍了定义了存储各图元信息数据结构,利用list列表容器存储非均匀B样条曲线信息。设计图元信息读入链表模块以及双向链表操作函数和图元排序程序。

2.在读入模块中定义各类型图元结构体[1]

2.1 定义存储各基本类型图元结构体

3)非均匀B样条曲线图元结构体

STL是最新的C++标准函数库中的一个子集[2]。它采用泛型程序设计思想。容器是容纳、包含一组元素或元素集合的对象。容器类中包含一组元素或一个元素集合,作为通用元素收集器,其list列表容器主要用于存放链表,其中的链表是双向链表,可以从任意一端开始遍历。利用双向迭代器可以在两个方向上对列表进行遍历。利用迭代和访问方法、可变序列算法和不可变序列算法对列表容器中的元素进行正反迭代返回元素个数、查找排序等操作[2]。

利用listControlist列表容器存储非均匀B样条曲线控制顶点序列,list Jnlist列表容器存储其节点序列。定义存储非均匀B样条图元结构体如下:

2.2 定义存储各类型图元双向链表结点复合结构体DNodel

读入双向链表模块将存储各类型图元信息结构体读入双向链表后由排序程序进行排序组环。数控铣床加工的零件二维平面轮廓环主要是由一系列基本图元(直线、圆弧、样条曲线)组成首尾相接的封闭环。

本课题基本图元类型分别为非均匀B样条曲线、直线和园弧。双向链表结点结构体用于存储零件图中组成平面轮廓环的各基本图元,链接成双向链表。这就要求双向链表的结点数据域结构体类型存储各类基本图元。由于直线、圆弧、样条曲线等图元的基本信息不同,故存储这些图元信息的结构体类型也不同。为了将这些不同类型的结构体读入同一双向链表进行后续处理,其结构体数据域形式必须满足存储各类基本类型图元。定义复合结构体DNodel,其中数据域结构体unite包含各基本图元结构体类型成员。定义双向链表复合结构体结点类型体如下:

2.3 集合类CPtrArray对象存储图元信息

在读入模块中将存储所有图元信息结构体对象加入集合类CPtrArray对象供后续处理使用。CptrArray类对象的容量可动态增加。类CPtrArray对象m_PtrArray1、m_PtrArray2、m_PtrArray3分别存储直线图元结构体、存储圆弧图元结构体、存储非均匀B样条曲线图元结构体。

3.双向链表结构存储各图元

3.1 各图元结构体读入双向链表

本课题涉及的是在AutoCAD中绘制的二维加工平面零件。由于DXF文件中图元的排列顺序不一定是按照绘制零件轮廓的拓扑顺序排列的,所以读入模块读入各图元信息数据后,在生成数控刀轨时、需要将这些图元读入双向链表后进行排序。读入链表部分Visual C++程序如下:

3.2 比较函数以及双向链表操作函数

3.2.1 比较函数

在零件轮廓图元排序时、需要用比较函数查找首尾相接的点从而组成一个首尾相接的环。直线、圆弧图元比较函数int CDDDDoc::compare(drawing*c1,drawing*c2),直线、圆弧与非均匀B样条曲线比较函数int CDDDDoc::copare(drawing*c1,FeiType *c2)…。

考虑到首尾相接的点由于绘图的原因、不一定是同一点,所以使用了容差,即相连接的某一图元的终点坐标与另一图元的起点坐标、两点的坐标值误差在一定范围内就认为两点重合。直线、圆弧图元之间比较判断函数部分代码如下:

3.2.2 双向链表操作函数

编制并利用双向链表的各种函数实现双向链表的各种基本操作运算:初始化、插入元素、删除元素、释放双向链表等。部分函数名及函数参数如下:

3.2.3 设计双向链表排序程序

在数控刀轨生成时,需要将这些首尾相接的图元(直线、圆弧、样条等)组成一个整体有序的环。组环的方法分为无分支和有分支两种情况。本课题讨论无分支情况。

链表的最大特点是元素的插入或删除仅需修改指针而不需要移动元素。本课题使用比较函数、链表操作函数等设计已读入双向链表零件图元组环排序程序。排序程序算法流程如图2所示。取链表L中第i个结点、与i结点后所有的结点j进行比较、如果值相等则j结点插入i结点后。本文用Visual C++6.0编制的部分组环排序程序如下:

4.结束语

本文定义了存储各类图元数据结构体,对存储非均匀B样条曲线信息结构体使用C++标准函数库子集STL中list列表容器作为成员变量存储节点和控制顶点等信息,从而可简化读取模块设计。利用迭代和访问方法、可变序列算法和不可变序列算法对列表容器中的元素进行正反迭代指向返回元素个数、查找、排序等操作,从而可大大简化图形编程系统非均匀B样条后处理模块设计。

用Visual C++6.0设计双向链表读入程序,设计比较函数以及双向链表操作函数简化了双向链表图元排序程序设计。经运行排序程序、存储零件各图元链表排序结果正确。

图2 双向链表排序流程

[1]谭浩强.C++程序设计[M].北京:清华大学出版社.

[2]郑莉,董渊,张瑞丰.C++语言程序设计(第3版)[M].北京:清华大学出版社,2004.

[3]孙鑫,余安萍.VC++深入祥解[M].北京:工业出版社,2006.

李洪声(1962—),男,贵州贵阳人,工程硕士,西安工程技术学院讲师,研究方向:数控机床编程加工。

贺歆昉(1963—),渭南技师学院讲师。

猜你喜欢
图元链表样条
一元五次B样条拟插值研究
学术出版物插图的编排要求(一):图注
联锁表自动生成软件的设计与实现
基于二进制链表的粗糙集属性约简
跟麦咭学编程
基于链表多分支路径树的云存储数据完整性验证机制
三次参数样条在机床高速高精加工中的应用
三次样条和二次删除相辅助的WASD神经网络与日本人口预测
基于样条函数的高精度电子秤设计
基于Qt绘图系统的图形应用优化研究与实现