当前位置:

免费论文网首页 > 计算机论文 > 计算机应用 >


DOS界面下通用图形编辑软件的设计

http://www.MianFeiLunWen.com  免费论文网   2006-12-17 12:45:54 
------------------------------------------[发送]-[打印]-[投稿]-[VIP]---------------

摘 要 该文介绍了一种建立在DOS界面下生成图素文件的通用图形编辑程序的设计方法。
目前用作DDC的PC总线工控机(IPC)大部分工作在DOS界面上,而DOS不具有像Windows那样美观方便的图形用户接口(GUI)。生成工艺流程图等复杂图形若用程序设计语言直接编程需花费大量精力和代码,且不易修改。设计出数据文件小,占用内存少的图形编辑软件是控制界的一个研究课题。这里介绍一种生成图素数据文件的通用图形编辑软件的设计方法。
一、数据结构与数据文件格式
由于所有的操作都基本建立在图素的基础之上,故数据结构也以图素为中心。以下以圆、直线、矩形、字符串为例,其它图素类似。
1.定义所需图素
struct circle /*定义圆 */
{
int x,y,r; /* 圆心,半径 */
char linecolor,linestyle; /* 圆外围线的颜色,线型 */
char fillcolor,fillstyle; /* 填充颜色,模式 */
};
struct line /* 定义直线 */
{
int x1,y1;
int x2,y2;
char linecolor,linestyle,linethick; /* 线颜色,模式,粗细 */
};
struct box /* 定义矩形 */
{
int x1,y1;
int x2,y2;
char linecolor,linestyle;
char fillcolor,fillstyle;
};
struct string /* 定义字符串 */
{
int x,y;
char str[10]
char backcolor,dir;
char str-color,str-style;
};
.
. /* 定义其它图素 */
.
2.将各图素置于一条链表之中
typedef struct tagElementList
{
char ElementType; /* 标识元素类别 */
int ElementID; /* 元素标识符,在接口中用来控制其属性 */
union tagElement {
struct circle circle;
struct box box;
struct string string;
struct line line;
.
. /* 可在此说明其它元素 */
.
}Element;
struct tagElementList *next;
}ElementList;
利用这种数据结构可在内存中形成一个图素链表,所有操作都可以此链表为基础。
3.定义几个指针,以备各种操作
ElementList *List-head. *List-end,*List-temp, *List-here;
4.定义一个全局变量,记录图素个数
static int Elementcount=0;
图形文件格式为:第一字节(char),表示整个图形的背景颜色;接下来一个字(word),对应于Elementcount,表示图素个数;后面是内存链表中每个图素的属性值。
二、图形编辑功能的实现
本软件包含的图形编辑功能主要有:作图、修改、移动、删除、复制,下面仅举几例说明实现的方法。
1.作图
以圆为例,其它图形类似。
drawcircle()
{
int i;
char s[20],c;
int cx,cy,cr;
int cls,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(cfs.cfc);
floodfill(cx,cy,clc); /* 填充 */
temp(ElementList *) malloc(sizeof(ElementList));
temp->ElementType= 'c';
temp->Element.circle.x=cx;
temp->Element.circle.y=cy;
temp->Element.circle.r=cr;
temp->Element.circle.lcolor=clc;
temp->Element.circle.lstyle=cls;
temp->Element.circle.fcolor=cfc;
temp->Element.circle.fstyle=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 ()
{
Rect rect; /* 定义的矩形 */
int i;
selectblock (); /* 选择要移动的块 */
moveblock (); /* 移动块 */
List-temp=List-head;
for (i=0;i<Elementcount; i )
{
getrect (&rect, List-temp); /* 计算List-temp所指图素的外接矩形 */
if (inblock(rect.x1,rect.x2,rect.y1.rect.y2))
/* 判断外接矩形是否在所选块内 */
change (List-temp, dl-x,dl-y);
/* 改变图素的坐标属性 */
List-temp=List-temp->next;
}
clearscreeen (); /* 清除作图区 */
drawlink (); /* 依据图素链表画图 */
}
其中,change ( )可以实现如下。
change(ElementList *Ctemp, int dl-x,int dl-y)
{
switch (Ctemp->ElementType)
{
case 'c': Ctemp->Element.circle.x =dl-x;
Ctemp->Element.circle.y =dl-y;
break;
case 'b': Ctemp->Element.box.x1 =dl-x;
Ctemp->Element.box.x2 =dl-x;
Ctemp->Element.box.y1 =dl-y;
Ctemp->Element.box.y2 =dl-y;
break;
case 'l': Ctemp->Element.line.x1 =dl-x;
Ctemp->Element.line.y1 =dl-y;
Ctemp->Element.line.x2 =dl-x;
Ctemp->Element.line.y2 =dl-y;
break;
case 's': Ctemp->Element.string.x =dl-x;
Ctemp->Element.string.y =dl-y;
break;
.
.
.
}
}

本篇论文共2页,当前在第1页  1  2  

-------------------------------------------------------[发送]-[打印]-[投稿]-[VIP]--
上一篇:在Windows中显示多幅彩色图像的技术
下一篇:可移植的256色图形用户界面的设计
会员名称:
 密码:匿名 ·注册·密码?
评论内容:
(最多300个字符)
  查看评论
论文发表
·论文网在线最新代理刊物清单
·国家级刊物《现代商贸工业》 征稿
·国家级经济类刊物《消费导刊》征
·《**大学学报》大量征稿,欢迎投
·《**教育》期刊征稿中,请点击查看
热点推荐
·新形势下中国对外贸易应采取的有
·浅谈新所得税法对外资企业的影响
·市场经济负面效应及其控制
·房地产业与泡沫经济
·加强会计职业道德建设促进会计行
·网络环境/标引深度/创新关键词
·谈小学各学科教育中对德育教育的
·谈小学各学科教育中对德育教育的
·对当前房地产案件中几个常见问题
·利用Web Services实现软件自动升
最新更新
·“拓展训练”在高校体育教学中的
·谈小学各学科教育中对德育教育的
·勤俭节约办高校图书馆的几点浅见
·谈小学各学科教育中对德育教育的
·农村中小学音乐教育的现状与对策
·探索物理实验在教学中的地位再现
·烟塔合一技术应用前景分析
·烟粉虱的种下变异和我国的分布现
·多边贸易体制下我国农产品贸易发
·对当前房地产案件中几个常见问题
赞助连接
内容加载中请耐心等待 ...