C语言编辑中应用画图程序技巧

所属分类: 软件教程 / 编程开发 阅读数: 1663
收藏 0 赞 0 分享

  在开发县级电网调度自动化系统的过程中,碰到一个要绘制电力系统一次接线图的问题。由于电力系统一次接线图比较复杂,用一般的编程方法来绘制比较困难,因此,用C语言开发了一个手工绘制电力系统一次接线图的键盘绘图程序,使用该程序绘制的一次接线图符合用户需求,效果良好。下面小编给大家分享下技巧,希望可以帮助到大家解决困难。
  一、使用方法
  程序中定义了几个特殊键:
  \"V":画笔提起
  \"W":开始画图
  \"R":开始擦图
  \"S":当前图形存入文件
  \"E":调出已有文件
  \"C":画圆
  程序一运行,屏幕上出现一个黄色的边框来设定画图的区域,区域中间出现提起的画笔符号 ,当按下"W"键时,画笔符号变为 ,此时可移动方向键(上、下、左、右、左上、左下、右上、右下)来画图;当按下"R"键时,画笔符号变为 ,此时可移动方向键来擦图;在画图过程中,按下"C"键,可画出一个半径为20个象素点的圆;当结束画图时,按下"S"键,将画好的图形存盘;按下"E"键可调出已有的图形进行编辑.
  二、源程序清单
  # include \"graphics.h\"
  # include \"stdio.h\"
  # include \"fcntl.h\"
  # include \"stdlib.h\"
  main()
  void save(),load();
  void *wg,*rg,*vg,*fy;
  int driver,mode;
  int c=RED;
  int x=320,y=225;
  int x1,y1,x2,y2;
  int k,k1,k2;
  /* initialize grapher */
  detectgraph(&driver,&mode);
  initgraph(&driver,&mode,\"c:\\tc\");
  /* write the pen */
  bar(200,10,206,16);
  line(203,7,200,10);
  line(203,7,206,10);
  line(243,7,240,16);
  line(243,7,246,16);
  line(283,7,280,10);
  line(283,7,286,10);
  line(283,7,283,16);
  /* save the pen */
  wg=malloc(imagesize(200,7,206,16));
  rg=malloc(imagesize(240,7,246,16));
  vg=malloc(imagesize(280,7,286,16));
  fy=malloc(imagesize(200,7,206,16));
  getimage(200,7,206,16,wg);
  getimage(240,7,246,16,rg);
  getimage(280,7,286,16,vg);
  cleardevice();
  /* write the box */
  setcolor(YELLOW);
  rectangle(4,19,637,447);

x1=x-3;
  y1=y+1;
  x2=x+3;
  y2=y+10;
  getimage(x1,y1,x2,y2,fy);
  putimage(x1,y1,vg,XOR_PUT);
  /* receive the command */
  for (;;)
  while (bioskey(1)==0);
  k=bioskey(0);
  putimage(x1,y1,fy,AND_PUT);
  if (((k&0x00ff)|0x00)==0)
  k1=k&0xff?0:k>>8; /* k1 is the specialkey value */
  else
  k2=k&0x00ff; /* k2 is the non-specialkey value */
  if (((k&0x00ff)|0x00)==0) /* Special key */
  switch(k1)
  case 45:
  restorecrtmode();
  exit(0);
  case 72:
  if (y>20)
  y=y-1;
  break;
  case 75:
  if (x>5)
  x=x-1;
  break;
  case 77:
  if (x<636)
  x=x+1;
  break;
  case 80:
  if (y<446)
  y=y+1;
  break;
  case 71:
  if ((x>5)&&(y>20))
  x=x-1;
  y=y-1;
  break;
  case 79:
  if ((x>5)&&(y<446))
  x=x-1;
  y=y+1;
  break;
  case 73:
  if ((x<636)&&(y>20))
  x=x+1;
  y=y-1;
  break;
  case 81:
  if ((x<636)&&(y<446))
  x=x+1;
  y=y+1;
  break;
  x1=x-3;
  y1=y+1;
  x2=x+3;
  y2=y+10;
  getimage(x1,y1,x2,y2,fy);
  /* non-special key */[Page]
  switch(k2)
  case 118: /* \'v\' */
  case 86: /* \'V\' */
  putimage(x1,y1,vg,OR_PUT);
  break;
  case 119: /* \'w\' */
  case 87: /* \'W\' */
  putimage(x1,y1,wg,OR_PUT);
  putpixel(x,y,c);
  break;
  case 114: /* \'r\' */
  case 82: /* \'R\' */
  putimage(x1,y1,rg,OR_PUT);
  putpixel(x,y,BLACK);
  break;
  case 115: /* \'s\' */
  case 83: /* \'S\' */
  save(\"pic.dat\");
  break;

case 101: /* \'e\' */
  case 69: /* \'E\' */
  load(\"pic.dat\");
  break;
  case 99: /*\'c\'*/
  case 67: /*\'C\'*/
  setcolor(RED);
  circle(x,y,20);
  break;
  default:continue;
  /* function for screen picture save
  */
  void save(char *fname)
  FILE *fp;
  int i;
  register long j;
  char far *ptr;
  fp=fopen(fname,\"wb\");
  for(i=0;i<4;i++)
  outportb(0x3CE,4);
  outportb(0x3CF,i);
  ptr=(char far *) 0xA0000000L;
  for (j=0;j<38400L;j++)
  putc(*ptr,fp);
  ptr++;
  fclose(fp);
  outportb(0x3CF,0);
  /* function for screen picture display
  */
  void load(char *fname)
  FILE *fp;
  register int i;
  int k4=1;
  register long j;
  char far *ptr;
  fp=fopen(fname,\"rb\");
  for (i=0;i<4;i++)
  outportb(0x3C4,2);
  outportb(0x3C5,k4);
  ptr=(char far *)0xA0000000L;
  for (j=0;j<38400L;j++)
  *ptr=getc(fp);
  ptr++;
  k4*=2;
  fclose(fp);
  outportb(0x3C5,0xF);
  三、结束语
  该程序在Turbo C 2.0环境下运行通过,使用效果良好.可以根据具体需要,对该程序进行扩充,以增加绘图功能.

更多精彩内容其他人还在看

如何利用power designer建立业务流程模型?Power Designer创建业务流程模型的教程

如何利用power designer建立业务流程模型?今天这篇教程就讲述了Power Designer创建业务流程模型的具体流程介绍。感兴趣的朋友不妨阅读下文内容,参考一下吧
收藏 0 赞 0 分享

如何使用power designer建立UML组件图?power designer创建UML组件图的教程

如何使用power designer建立UML组件图?下文中详细的介绍了Power Designer创建UML组件图的具体操作方法,感兴趣的朋友不妨阅读下文内容,参考一下吧
收藏 0 赞 0 分享

如何使用powerdesigner建立技术基础设施图?创建技术基础设施图的方法介绍

如何使用powerdesigner建立技术基础设施图?今日在此篇教程中就带来了Power Designer创建技术基础设施图的详细操作步骤,感兴趣的朋友不妨阅读下文内容,参考一下吧
收藏 0 赞 0 分享

anaconda3安装教程图文详解

这篇文章主要介绍了anaconda3安装教程,本文以Anaconda3-5.3.1为例,图文并茂的形式给大家介绍的非常详细,需要的朋友参考下吧
收藏 0 赞 0 分享

Eclipse怎么使用post方法实现Web Service?

Eclipse怎么使用post实现Web Service?java中想要使用外部资源,想要使用HttpClient实现post请求接口实现实现Web Service,该怎么操作呢?下面我们就来看看详细的教程,需要的朋友可以参考下
收藏 0 赞 0 分享

SQL数据库恢复工具 SysTools SQL Recovery 9 安装授权激活教程

SysTools SQL Recovery是一款简单、高效、实用的sql数据库恢复和损坏修复工具,可以恢复已删除的SQL表数据,本次主要为大家带来了SysTools SQL Recovery 9 安装授权激活教程,需要的朋友可以参考下
收藏 0 赞 0 分享

scratch3.0怎么创建飞舞变色的蝴蝶?

scratch3.0怎么创建飞舞变色的蝴蝶?scratch3.0中想要制作一个动画,该怎么制作一个飞舞变色的蝴蝶,该怎么制作呢?下面我们就来看看详细的教程,需要的朋友可以参考下
收藏 0 赞 0 分享

eclipse工具栏没有创建类/创建包选项怎么办?

eclipse工具栏没有创建类/创建包选项怎么办?eclipse编程开发的时候,发现工具栏没有创建类创建包的选项,该怎么添加进来呢?下面我们就来看看详细的教程,需要的朋友可以参考下
收藏 0 赞 0 分享

scratch3.0怎么制作让小猫画圆的动画效果?

scratch3.0怎么制作让小猫画圆的动画效果?scratch3.0创建的小猫角色想要添加转圈的动画,该怎么让小猫画圆呢?下面我们就来看看详细的教程,需要的朋友可以参考下
收藏 0 赞 0 分享

scratch怎么快速插入电子吉他角色?

scratch怎么快速插入电子吉他角色?scratch中想要出入一个电子吉他角色,该怎么插入电子吉他角色呢?下面我们就来看看详细的教程,需要的朋友可以参考下
收藏 0 赞 0 分享
查看更多