⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cad.c

📁 用C语言编写的 一个小型图形系统
💻 C
📖 第 1 页 / 共 2 页
字号:
/*新疆农业大学机械交通学院机制042班 李静   QQ409539576*/

#include"stdio.h"
#include"stdlib.h"
#include"dos.h"
#include"conio.h"
#include"process.h"
#include"math.h"
#include"graphics.h"
#define Key_DOWN 80                                /*定义键盘扫描码*/
#define Key_UP 72
#define Key_ESC 1
#define Key_LEFT 75
#define Key_RIGHT 77
#define Key_ENTER 28
#define Key_ALT_F 33
#define Key_ALT_X 45
#define Key_ALT_C 46
#define Key_ALT_H 35
#define Key_ALT_S 31
#define Key_F1 59
void hk();                                         /*画框函数声明*/
float ax[6],ay[4],bx[6],by[4],dx[6],dy[4];
float xm,ym,max_x,max_y;                           /*屏幕中点坐标和最大坐标*/
int xz,yz;                                         /*计算过程中的屏幕中点坐标*/
int key;                                           /*记录键盘的输入*/
int i,j;                                           /*全局的循环变量*/
float cx[4][6],cy[4][6];                           /*旋转变换中变换后的坐标*/
float cx1[4][6],cy1[4][6];                         /*旋转变换中原始坐标*/
float xd,yd,xd1,yd1;                               /*旋转变换中中心线的坐标*/
float xdc,ydc;                                     /*对称变换中的中心坐标*/
float dx1[6],dy1[4];                               /*对称变换中的原始坐标*/   
void *wj,*wjgt,*bh,*bhgt,*bz,*bzgt,*bzsm;          /*存放下拉菜单*/
int gths=0;                                        /*变换菜单光条行数*/
int bzh=0;                                         /*变换菜单执行光条所压菜单的标志*/
int flag;                                          /*各个菜单之间相互调用标志*/
int gths1=0;                                       /*文件菜单中的光条行数*/
int bzh1=0;                                        /*文件菜单中执行光条所压菜单的标志*/
FILE   *fp;                                        /*定义文件指针打开汉字库*/


void   hz(int   x,int   y,int   a,int   COL,int   b,char   *s)     /*以图形方式输出汉字函数*/                                   {
    int   ROW;
    char   buffer[32];
    register   m,n,i,j,k;
    unsigned   char   qh,wh;
    unsigned   long   offset;
    ROW=COL;
    while(*s)
      {
        qh=*(s)-0xa0;                               /*计算汉字的区码*/                          
        wh=*(s+1)-0xa0;                             /*计算汉字的位码*/
        offset=(94*(qh-1)+(wh-1))*32L;              /*计算汉字在汉字库中的位置*/
        fseek(fp,offset,SEEK_SET);
        fread(buffer,32,1,fp);
        for   (i=0;i<16;i++)
        for(n=0;n<ROW;n++)
        for(j=0;j<2;j++)
        for(k=0;k<8;k++)
        for(m=0;m<COL;m++)
        if   (((buffer[i*2+j]>>(7-k))&0x1)!=NULL)
            putpixel(x+8*j*COL+k*COL+m,y+i*ROW+n,b);
        s+=2;
        x+=a;
        }
  }


void   exit1()                                     /*退出函数*/
  { setviewport(0,0,639,479,1);
    cleardevice();  i=0;
    while(!kbhit())
	 {

	 setcolor(random(15));
	  circle(random(640),random(480),random(60));
          setfillstyle(SOLID_FILL,7);
          bar(170,120,470,320);
	    hz(445,150,15,1,4,"不");
	    hz(445,170,15,1,4,"经");
	    hz(445,190,15,1,4,"一");
	    hz(445,210,15,1,4,"番");
	    hz(445,230,15,1,4,"寒");
	    hz(445,250,15,1,4,"彻");
	    hz(445,270,15,1,4,"骨");
	    hz(185,150,15,1,4,"怎");
	    hz(185,170,15,1,4,"得");
	    hz(185,190,15,1,4,"梅");
	    hz(185,210,15,1,4,"花");
	    hz(185,230,15,1,4,"扑");
	    hz(185,250,15,1,4,"鼻");
	    hz(185,270,15,1,4,"香");
	    hz(210,170,120,7,4,"奋斗");
           }
    closegraph();                                              /*关闭图形函数*/
    close(fp);
    clrscr();
    exit(0);
  }
  

void   Box(int   left,int   top,int   right,int   bottom,int   color)    /*画中间灰色框的外边框*/
  {
    int   old_color;
    old_color=getcolor();
    setcolor(color);
    line(left,top,right,top);
    line(left,top,left,bottom);
    line(right,top,right,bottom);
    line(left,bottom,right,bottom);
    setcolor(old_color);
  }


Button(int   left,int   top,int   length,int   b,int   g)      /*画中间的灰色框*/
  {
    int   bottom,right;
    bottom=top+b;
    right=left+length;
    setfillstyle(SOLID_FILL,WHITE);
    bar(left,top,right,bottom);
    setcolor(BLACK);
    Box(left,top,right,bottom,BLACK);
    setfillstyle(SOLID_FILL,g);
    bar(left+2,top+2,right-1,bottom-1);
    setcolor(DARKGRAY);
    line(left+1,bottom-1,right,bottom-1);
    line(right-1,top+1,right-1,bottom);

  }
  

void   gy()                                            /*在屏幕上输出汉字*/
  {int z;  
    clrscr();
    Button(100,60,450,330,7);
    hz(185,110,50,2,14,"图形变换系统");
    hz(200,160,15,1,2,"(计算机辅助设计与制造课程小实验)");
    hz(298,210,15,1,4,"版权所有");
    hz(261,240,15,1,8,"机交机制042李静");
    hz(240,350,15,1,8,"设计时间:2007年4月");
    hz(253,275,15,1,6,"请稍侯程序加载中……");
    for(z=0;z<1000;z++)
    delay(1000);
    rectangle(179,299,477,316);
    for(z=182;z<478;z+=2 )
    { 
    delay(1000000);
    setfillstyle(SOLID_FILL,LIGHTBLUE);
    bar(180,300,z,315);                                /*画滚动条*/
    }                                 
    setfillstyle(SOLID_FILL,LIGHTGRAY);
    bar(232,275,410,295);
     hz(280,320,15,1,6,"按任意键继续");

    getch();
  }


int getkey()                                              /*获取键盘扫描码*/
{ union REGS rg;
 rg.h.ah=0;
  int86(0x16,&rg,&rg);
 return rg.h.ah;
}


void jisuan()                                             /*计算中间显示的各点坐标*/
{
max_x=getmaxx();
max_y=getmaxy();
xm=max_x/2;
ym=max_y/2;
xz=xm;
yz=ym;
ax[0]=xm-16.5*2;
ax[1]=ax[0]+6.5*2;
ax[2]=ax[1]+2*2;
ax[3]=ax[2]+16*2;
ax[4]=ax[3]+2*2;
ax[5]=ax[4]+6.5*2;
ay[0]=ym-38.5*2;
ay[1]=ay[0]+12*2;
ay[2]=ay[1]+19*2;
ay[3]=ay[2]+46*2;
}


void ysh()                                                 /*在中间画图*/
    {clearviewport();
     moveto(xm,ay[0]-10);
     setlinestyle(1,0,1);
     setcolor(4);
     linerel(0,(ay[3]-ay[0]+20));
     moveto(ax[0],ay[0]);
     setcolor(14);
     setlinestyle(0,0,3);
     rectangle(ax[0],ay[0],ax[5],ay[1]);
     moveto(ax[1],ay[1]);
     rectangle(ax[1],ay[1],ax[4],ay[3]);
     line(ax[2],ay[0],ax[2],ay[1]);
     line(ax[3],ay[0],ax[3],ay[1]);
     line(ax[1],ay[2],ax[4],ay[2]);
     setlinestyle(0,0,1);
     line(ax[2],ay[2],ax[2],ay[3]);
     line(ax[3],ay[2],ax[3],ay[3]);
    }


void ysh1()                                               /*变换以后画图*/
    {moveto(xz,by[0]-10);
     setlinestyle(1,0,1);
     setcolor(4);
     linerel(0,(by[3]-by[0]+20));
     moveto(bx[0],by[0]);
     setcolor(14);
     setlinestyle(0,0,3);
     rectangle(bx[0],by[0],bx[5],by[1]);
     moveto(bx[1],by[1]);
     rectangle(bx[1],by[1],bx[4],by[3]);
     line(bx[2],by[0],bx[2],by[1]);
     line(bx[3],by[0],bx[3],by[1]);
     line(bx[1],by[2],bx[4],by[2]);
     setlinestyle(0,0,1);
     line(bx[2],by[2],bx[2],by[3]);
     line(bx[3],by[2],bx[3],by[3]);
    }


void xzh1()                                       /*旋转变换以后画图*/
    {moveto(xd,yd);
     setlinestyle(1,0,1);
     setcolor(4);
     line(xd,yd,xd1,yd1);

     setcolor(14);
     setlinestyle(0,0,3);
     line(cx[0][0],cy[0][0],cx[0][5],cy[0][5]);
     line(cx[0][0],cy[0][0],cx[1][0],cy[1][0]);
     line(cx[1][0],cy[1][0],cx[1][5],cy[1][5]);
     line(cx[0][5],cy[0][5],cx[1][5],cy[1][5]);

     moveto(cx[1][1],cy[1][1]);
     line(cx[1][1],cy[1][1],cx[3][1],cy[3][1]);
     line(cx[3][1],cy[3][1],cx[3][4],cy[3][4]);
     line(cx[3][4],cy[3][4],cx[1][4],cy[1][4]);
     line(cx[0][2],cy[0][2],cx[1][2],cy[1][2]);
     line(cx[0][3],cy[0][3],cx[1][3],cy[1][3]);
     line(cx[2][1],cy[2][1],cx[2][4],cy[2][4]);
     setlinestyle(0,0,1);
     line(cx[2][2],cy[2][2],cx[3][2],cy[3][2]);
     line(cx[2][3],cy[2][3],cx[3][3],cy[3][3]);
    }


void dc1()                                        /*对Y轴对称变换后画图形*/
    {moveto(xdc,dy[0]-10);
     setlinestyle(1,0,1);
     setcolor(4);
     linerel(0,(dy[3]-dy[0]+20));
     moveto(dx[0],dy[0]);
     setcolor(14);
     setlinestyle(0,0,3);
     rectangle(dx[0],dy[0],dx[5],dy[1]);
     moveto(dx[1],dy[1]);
     rectangle(dx[1],dy[1],dx[4],dy[3]);
     line(dx[2],dy[0],dx[2],dy[1]);
     line(dx[3],dy[0],dx[3],dy[1]);
     line(dx[1],dy[2],dx[4],dy[2]);
     setlinestyle(0,0,1);
     line(dx[2],dy[2],dx[2],dy[3]);
     line(dx[3],dy[2],dx[3],dy[3]);
    }


void dc2()                                      /*对(X)和(原点)轴对称变换后画图形*/
    {moveto(xdc,dy[0]+10);
     setlinestyle(1,0,1);
     setcolor(4);
     linerel(0,(dy[3]-dy[0]-20));
     moveto(dx[0],dy[0]);
     setcolor(14);
     setlinestyle(0,0,3);
     rectangle(dx[0],dy[0],dx[5],dy[1]);
     moveto(dx[1],dy[1]);
     rectangle(dx[1],dy[1],dx[4],dy[3]);
     line(dx[2],dy[0],dx[2],dy[1]);
     line(dx[3],dy[0],dx[3],dy[1]);
     line(dx[1],dy[2],dx[4],dy[2]);
     setlinestyle(0,0,1);
     line(dx[2],dy[2],dx[2],dy[3]);
     line(dx[3],dy[2],dx[3],dy[3]);
    }


void py()                                      /*平移变化函数*/
 {
      for(j=0;j<6;j++)
         bx[j]=ax[j];
      for(j=0;j<4;j++)
         by[j]=ay[j];
      xz=xm;
      yz=ym;
 do
 {key=getkey();
   switch(key)
     {case Key_RIGHT: {for(i=0;i<6;i++)
               bx[i]+=1;  xz+=1;
               clearviewport();
               ysh1();  break;}
      case Key_DOWN: {for(i=0;i<4;i++)
               by[i]+=1;   yz+=1;
               clearviewport();
               ysh1();   break;}
      case Key_LEFT: {for(i=0;i<6;i++)
               bx[i]-=1;   xz-=1;
               clearviewport();
               ysh1();   break;}
      case Key_UP: {for(i=0;i<4;i++)
               by[i]-=1;   yz-=1;
               clearviewport();
               ysh1();   break;}
      default: break;
     }
if(key==Key_ALT_F) {flag=1;break;}
if(key==Key_ALT_C) {flag=2;break;}
if(key==Key_ALT_X) {flag=4;break;}

  }while(1);
}


void bl()                                        /*比例变化函数*/
{for(j=0;j<6;j++)
  bx[j]=ax[j];
for(j=0;j<4;j++)
  by[j]=ay[j];
xz=xm;
do
 {key=getkey();
   switch(key)
     {
      case Key_UP: {for(i=0;i<6;i++)
		     bx[i]=(bx[i]-320)*1.1+320;
                    for(j=0;j<4;j++)
		     by[j]=(by[j]-240)*1.1+240;
                    clearviewport();
                    ysh1();   
                    break;
                    }
      case Key_DOWN: {for(i=0;i<6;i++)
		       bx[i]=(bx[i]-320)*0.9+320;
                      for(j=0;j<4;j++)
		       by[j]=(by[j]-240)*0.9+240;
                      clearviewport();
                      ysh1();  
                      break;
                     }

       }
if(key==Key_ALT_F) {flag=1;break;}
if(key==Key_ALT_C) {flag=2;break;}
if(key==Key_ALT_X) {flag=4;break;}
 }while(1);
}


void xzh()                                        /*旋转变换函*/
{double o=0;
 xd=xd1=xm;
 yd=ay[0]-10;
 yd1=ay[3]+10;
 for(i=0;i<4;i++)
 for(j=0;j<6;j++)
  cx1[i][j]=ax[j];
 for(i=0;i<4;i++)
 for(j=0;j<6;j++)
  cy1[i][j]=ay[i];
 do
  {key=getkey();
    switch(key)
     {
      case Key_UP: { o+=0.1;
                    for(i=0;i<6;i++)
		     {cx[0][i]=(cx1[0][i]-320)*cos(o)-(cy1[0][i]-240)*sin(o)+320;
                      cx[1][i]=(cx1[1][i]-320)*cos(o)-(cy1[1][i]-240)*sin(o)+320;
                      cy[0][i]=(cy1[0][i]-240)*cos(o)+(cx1[0][i]-320)*sin(o)+240;
                      cy[1][i]=(cy1[1][i]-240)*cos(o)+(cx1[1][i]-320)*sin(o)+240;
                      }
                    for(i=1;i<5;i++)
                      { cx[2][i]=(cx1[2][i]-320)*cos(o)-(cy1[2][i]-240)*sin(o)+320;
                        cx[3][i]=(cx1[3][i]-320)*cos(o)-(cy1[3][i]-240)*sin(o)+320;
                        cy[2][i]=(cy1[2][i]-240)*cos(o)+(cx1[2][i]-320)*sin(o)+240;
                        cy[3][i]=(cy1[3][i]-240)*cos(o)+(cx1[3][i]-320)*sin(o)+240;
                       }
                        xd=(xm-320)*cos(o)-(ay[0]-10-240)*sin(o)+320;
                        yd=(ay[0]-10-240)*cos(o)+(xm-320)*sin(o)+240;
                         xd1=(xm-320)*cos(o)-(ay[3]+10-240)*sin(o)+320;
                        yd1=(ay[3]+10-240)*cos(o)+(xm-320)*sin(o)+240;
                             xzh1();
                             break;
                      }

      case Key_DOWN: { o-=0.1;
                     for(i=0;i<6;i++)
		      {cx[0][i]=(cx1[0][i]-320)*cos(-o)+(cy1[0][i]-240)*sin(-o)+320;
                       cx[1][i]=(cx1[1][i]-320)*cos(-o)+(cy1[1][i]-240)*sin(-o)+320;
                       cy[0][i]=(cy1[0][i]-240)*cos(-o)-(cx1[0][i]-320)*sin(-o)+240;
                       cy[1][i]=(cy1[1][i]-240)*cos(-o)-(cx1[1][i]-320)*sin(-o)+240;
                      }
                    for(i=1;i<5;i++)
                      {cx[2][i]=(cx1[2][i]-320)*cos(-o)+(cy1[2][i]-240)*sin(-o)+320;
                       cx[3][i]=(cx1[3][i]-320)*cos(-o)+(cy1[3][i]-240)*sin(-o)+320;
                       cy[2][i]=(cy1[2][i]-240)*cos(-o)-(cx1[2][i]-320)*sin(-o)+240;
                       cy[3][i]=(cy1[3][i]-240)*cos(-o)-(cx1[3][i]-320)*sin(-o)+240;
                      }
                        xd=(xm-320)*cos(o)-(ay[0]-10-240)*sin(o)+320;
                        yd=(ay[0]-10-240)*cos(o)+(xm-320)*sin(o)+240;
                        xd1=(xm-320)*cos(o)-(ay[3]+10-240)*sin(o)+320;
                        yd1=(ay[3]+10-240)*cos(o)+(xm-320)*sin(o)+240;
                         clearviewport();
                         xzh1();
                         break;
                     }

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -