moveblock();/*移动块*/
List-temp=List-head;
for(i=0;iElementcount;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,intdl-x,intdl-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;
。
。
。
}
}
三、文件功能的实现
存盘时,打开文件,写入图形的背景颜色,写入图素个数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);
}
四、应用程序编程接口
应用程序编程接口主要功能是读图形文件并显示,对画面图素进行动态刷新。这些接口均以函数形式出现,供控制应用程序调用。
1。draw-chart(char*filename)功能:读图形文件,在内存中建立图素链表,显示图形。
2。change-chart(intElement-ID,inthow)功能:改变图素Element-ID的特性,怎样改变由how决定。该接口能方便地实现图形的动态刷新。
3。clear-chart()功能:释放图素链表占用的内存。
4。draw(char*filename)功能:不建立链表,边读图形文件,边显示。该函数不占用内存,适用于图素多、数据文件较大,而又不需动态刷新的图形画面显示。
(责任编辑:一枝笔写作)