版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
DOS界面下通用图形编辑软件的设计
摘要该文介绍了一种建立在DOS界面下生成图素文件的通用图形编辑程序的设计方法。
目前用作DDC的PC总线工控机(IPC)大部分工作在DOS界面上,而DOS不具有像Windows那样美观方便的图形用户接口(GUI)。生成工艺流程图等复杂图形若用程序设计语言直接编程需花费大量精力和代码,且不易修改。设计出数据文件小,占用内存少的图形编辑软件是控制界的一个研究课题。这里介绍一种生成图素数据文件的通用图形编辑软件的设计方法。
一、数据结构与数据文件格式
由于所有的操作都基本建立在图素的基础之上,故数据结构也以图素为中心。以下以圆、直线、矩形、字符串为例,其它图素类似。
1.定义所需图素
structcircle/*定义圆*/
{
intx,y,r;/*圆心,半径*/
charlinecolor,linestyle;/*圆外围线的颜色,线型*/
charfillcolor,fillstyle;/*填充颜色,模式*/
};
structline/*定义直线*/
{
intx1,y1;
intx2,y2;
charlinecolor,linestyle,linethick;/*线颜色,模式,粗细*/
};
structbox/*定义矩形*/
{
intx1,y1;
intx2,y2;
charlinecolor,linestyle;
charfillcolor,fillstyle;
};
structstring/*定义字符串*/
{
intx,y;
charstr[10]
charbackcolor,dir;
charstr-color,str-style;
};
.
./*定义其它图素*/
.
2.将各图素置于一条链表之中
typedefstructtagElementList
{
charElementType;/*标识元素类别*/
intElementID;/*元素标识符,在接口中用来控制其属性*/
uniontagElement{
structcirclecircle;
structboxbox;
structstringstring;
structlineline;
.
./*可在此说明其它元素*/
.
}Element;
structtagElementList*next;
}ElementList;
利用这种数据结构可在内存中形成一个图素链表,所有操作都可以此链表为基础。
3.定义几个指针,以备各种操作
ElementList*List-head.*List-end,*List-temp,*List-here;
4.定义一个全局变量,记录图素个数
staticintElementcount=0;
图形文件格式为:第一字节(char),表示整个图形的背景颜色;接下来一个字(word),对应于Elementcount,表示图素个数;后面是内存链表中每个图素的属性值。
二、图形编辑功能的实现
本软件包含的图形编辑功能主要有:作图、修改、移动、删除、复制,下面仅举几例说明实现的方法。
1.作图
以圆为例,其它图形类似。
drawcircle()
{
inti;
chars[20],c;
intcx,cy,cr;
intcls,clc,cfc,cfs;
movecursor();/*移动光标,确定圆心*/
cx=cursor-x;
cy=cursor-y;
movecursor();/*确定半径*/
cr=(int)sqrt((cursor-x-cx)*(cursor-x-cx)+(cursor-y-cy)*(cursor-y-cy);
setcolor(WHITE);
circle(cx,cy,cr);/*画圆*/
cls=selectlinestyle();
clc=selectcolor("select-line-color");
setcolor(clc);
for(i=0;i=cls;i++)
circle(cx,cy,cr-i);
cfs=selectfillstyle();
cfc=selectcolor("set-fill-color");
setfillstyle();
floodfill(cx,cy,clc);/*填充*/
temp(ElementList*)malloc(sizeof(ElementList));
temp-ElementType=‘c‘;
=cx;
=cy;
=cr;
=clc;
=cls;
=cfc;
=cfs;
addtolist(temp);/*将图素加入图素链表*/
}
其中addtolist()可以如下实现:
addtolist(ElementList*Etemp)
{
if(List-head==NULL)
{
List-head=Etemp;
List-end=Etemp;
}
else
{List-end-next=Etemp;
List-end=Etemp;
Etemp-next=NULL;
}
Elementcount++;
}
2.图形的移动、删除、复制功能
以移动为例,首先用箭头键或鼠标框取要移动的区域,区域矩形的左上,右下坐标分别为(block-x1,block-y1),(block-x2,block-y2),然后移动标识矩形到要到达的地方,确定。这样标识矩形的终止位置与初始位置存在一个偏差,水平与垂直偏差分别为dl-x,dl-y。
接下来搜索内存图素链表,确定每个图素的外接矩形,判断外接矩形是否在初始标识矩形内,若在,则将该图素的坐标属性值改变dl-x,dl-y。清除图形区,根据新的图素链表作图。
图形的删除功能类似,只需将符合条件的图素从链表中清除,再修改Elementcount值即可。
拷贝图形则只需将符合条件的图素备份一个结点,修改结点的坐标属性值,再将该结点加入链表,相应增加Elementcount的值。
以下为移动图形的代码。
fnMove()
{
Rectrect;/*定义的矩形*/
inti;
selectblock();/*选择要移动的块*/
moveblock();/*移动块*/
List-temp=List-head;
for(i=0;iElementcount;i++)
{
getrect(&rect,List-temp);/*计算List-temp所指图素的外接矩形*/
if(inblock(,,))
/*判断外接矩形是否在所选块内*/
change(List-temp,dl-x,dl-y);
/*改变图素的坐标属性*/
List-temp=List-temp-next;
}
clearscreeen();/*清除作图区*/
drawlink();/*依据图素链表画图*/
}
其中,change()可以实现如下。
change(ElementList*Ctemp,intdl-x,intdl-y)
{
switch(Ctemp-ElementType)
{
case‘c‘:+=dl-x;
+=dl-y;
break;
case‘b‘:+=dl-x;
+=dl-x;
+=dl-y;
+=dl-y;
break;
case‘l‘:+=dl-x;
+=dl-y;
+=dl-x;
+=dl-y;
break;
case‘s‘:+=dl-x;
+=dl-y;
break;
.
.
.
}
}
三、文件功能的实现
存盘时,打开文件,写入图形的背景颜色,写入图素个数Elementcount,再将内存链表中各图素的属性值依次写入文件即可。
读盘时,在内存中动态建立图素链表,将文件中的图素属性值依次放入链表中,再根据背景颜色、图素属性值在屏幕上显示图形。
存盘过程实现如下。
savefile(char*filename)
{
FILE*fp;
inti;
List-temp=List-head;
Eid=0;
if((fp=fopen(filename,"w+b"))==NULL)
{
printf("%s","Cant‘topenthefile");
exit(1);
}
fwrite(&back-color,sizeof(char),1,fp);
fwrite(&Elementcount,sizeof(int),1,fp);
for(i=0;iElementcount;i++)
{List-temp-ElementID=Eid;
fwrite(List-temp,sizeof(ElementList),1,fp);
List-temp=List-temp-next;
Eid++;
}
fclose(fp);
}
四、应用程序编程接口
应用程序编程接口主要功能是读图形文件并显示,对画面图素进行动态刷新。这些接口均以函数形式出现,供控制应用程序调用。
(char*filename)功
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 沈阳理工大学《产品创新设计》2021-2022学年第一学期期末试卷
- 合同到期了单位不续签通知模板
- 2024年拉萨驾驶员客运资格证模拟考试题及答案详解
- 2024简单版机动车借款抵押合同
- 2024服装制作合同
- 2024防水材料采购合同
- 2024深圳建设工程技术咨询合同样本
- 2024光伏发电安装合同范本光伏发电安装合同范本
- 2024教师聘用合同
- 2024幼儿园装修改造工程施工合同
- 幼儿园绘本故事:《老虎拔牙》 课件
- 2021年上半年《系统集成项目管理工程师》真题
- 一个冬天的童话 遇罗锦
- GB/T 706-2008热轧型钢
- 实验六 双子叶植物茎的初生结构和单子叶植物茎的结构
- GB/T 25032-2010生活垃圾焚烧炉渣集料
- GB/T 13610-2020天然气的组成分析气相色谱法
- 《彩虹》教案 省赛一等奖
- 2023年湖南建筑工程初中级职称考试基础知识
- 沈阳机场航站楼扩建工程安装施工组织设计
- 司法考试:证据法
评论
0/150
提交评论