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

📄 cad.c

📁 用C语言编写的 一个小型图形系统
💻 C
📖 第 1 页 / 共 2 页
字号:

        }
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 cq()                                  /*左右错切变换函数*/
{float o=0.3;
 xd=xd1=xm;
 yd=ay[0]-10;
 yd1=ay[3]+10;
 for(i=0;i<4;i++)
 for(j=0;j<6;j++)
  cx[i][j]=ax[j];
 for(i=0;i<4;i++)
 for(j=0;j<6;j++)
  cy[i][j]=ay[i];
do
 {key=getkey();
   switch(key)
     {
      case Key_RIGHT: {
                       for(i=0;i<6;i++)
		        {cx[0][i]=cx[0][i]+154*o;
                         cx[1][i]=cx[1][i]+130*o;
                        }
                       for(i=1;i<5;i++)
                        {cx[2][i]=cx[2][i]+92*o;
                        cx[3][i]=cx[3][i];
                        }
                        xd=xd+164*o;
                        xd1=xd1-10*o;clearviewport();
                        xzh1();
                        break;
                      }

      case Key_LEFT: {
                      for(i=0;i<6;i++)
		       {cx[0][i]=cx[0][i]-154*o;
                        cx[1][i]=cx[1][i]-130*o;
                       }
                      for(i=1;i<5;i++)
                       {cx[2][i]=cx[2][i]-92*o;
                        cx[3][i]=cx[3][i];
                       }
                        xd=xd-164*o;
                        xd1=xd1+10*o;
                        clearviewport();
                        xzh1();
                        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 cq1()                                 /*上下错切变换函数*/
{float o=0.3;
 xd=xd1=xm;
 yd=ay[0]-10;
 yd1=ay[3]+10;
 for(i=0;i<4;i++)
 for(j=0;j<6;j++)
  cx[i][j]=ax[j];
 for(i=0;i<4;i++)
 for(j=0;j<6;j++)
  cy[i][j]=ay[i];
do
 {key=getkey();
   switch(key)
     {case Key_DOWN: {
                      for(i=0;i<4;i++)
		       {
                        cy[i][1]=cy[i][1]+13*o;
                        cy[i][2]=cy[i][2]+17*o;
                        cy[i][3]=cy[i][3]+49*o;
                        cy[i][4]=cy[i][4]+53*o;
                        cy[i][5]=cy[i][5]+66*o;
                       }
                        yd=yd+33*o;
                        yd1=yd1+33*o;
                        clearviewport();
                        xzh1();
                        break;
                     }

        case Key_UP: {
                      for(i=0;i<4;i++)
		       {
                        cy[i][1]=cy[i][1]-13*o;
                        cy[i][2]=cy[i][2]-17*o;
                        cy[i][3]=cy[i][3]-49*o;
                        cy[i][4]=cy[i][4]-53*o;
                        cy[i][5]=cy[i][5]-66*o;
                        }
                        yd=yd-33*o;
                        yd1=yd1-33*o;
                        clearviewport();
                        xzh1();
                        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 dc()                                       /*对称变换函数*/
{
line(15,240,620,240);                           /*画X坐标轴*/
moveto(620,240);
linerel(0,4);
moveto(620,240);
linerel(0,-4);
moveto(620,236);
line(620,236,628,240);
moveto(620,244);
line(620,244,628,240);
setfillstyle(1,14);
floodfill(621,240,14);
outtextxy(613,246,"X");

moveto(319,40);                                 /*画Y坐标轴*/
line(319,40,319,420); 
moveto(319,40);
linerel(4,0);
moveto(319,40);
linerel(-4,0);
moveto(315,40);
line(315,40,319,32);
moveto(323,40);
line(323,40,319,32);
setfillstyle(1,14);
floodfill(319,33,14);
outtextxy(305,42,"Y");
outtextxy(310,242,"0");

setviewport(319,240,639,479,0);                /*以屏幕中心定义一个视窗口*/
xdc=160;                                       /*给各个坐标附初值*/
ydc=120;
dx1[0]=xdc-16.5*2;
dx1[1]=dx1[0]+6.5*2;
dx1[2]=dx1[1]+2*2;
dx1[3]=dx1[2]+16*2;
dx1[4]=dx1[3]+2*2;
dx1[5]=dx1[4]+6.5*2;
dy1[0]=ydc-38.5*2;
dy1[1]=dy1[0]+12*2;
dy1[2]=dy1[1]+19*2;
dy1[3]=dy1[2]+46*2;
for(i=0;i<6;i++)
dx[i]=dx1[i];
for(j=0;j<4;j++)
dy[j]=dy1[j];
dc1();

do
 {key=getkey();
   switch(key)
     {case Key_UP: {
                     for(i=0;i<6;i++)
                      dx[i]=dx1[i];
                      xdc=160;
                     for(i=0;i<4;i++)
                      dy[i]=-dy1[i];
                     dc2();
                     break;
                   }

      case Key_LEFT: {
                      for(j=0;j<4;j++)
                       dy[j]=dy1[j];
                      for(i=0;i<6;i++)
                       dx[i]=dx1[i]*(-1);
                      xdc=-160;
                      dc1();
                      break;
                     }
       case Key_DOWN: {for(i=0;i<6;i++)
                        dx[i]=dx1[i];
                       for(j=0;j<4;j++)
                        dy[j]=dy1[j];

                       for(i=0;i<6;i++)
                        dx[i]=-dx1[i];
                       for(j=0;j<4;j++)
                        dy[j]=-dy1[j];
                        xdc=-160;
                        dc2();
                        break;
                       }
	case Key_RIGHT:  {cleardevice();
                          setviewport(0,0,639,479,1);
                          hk();
                          dc();
                         }

       }
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 hk()                                  /*画菜单框*/
{rectangle(0,0,639,479);
line(0,19,639,19);
line(0,458,639,458);
setfillstyle(SOLID_FILL,GREEN);
bar(1,1,638,18);
setfillstyle(SOLID_FILL,GREEN);
bar(1,459,638,478);
hz(10,1,15,1,4,"文件");
hz(70,1,15,1,4,"变换");
hz(130,1,15,1,4,"帮助");
hz(5,460,15,1,4,"文件:");
outtextxy(53,466,"ALT_F");
hz(109,460,15,1,4,"变换:");
outtextxy(158,466,"ALT_C");
hz(214,460,15,1,4,"退出:");
outtextxy(262,466,"ALT_X");
hz(515,460,15,1,4,"指导教师:刘小勇");
hz(337,1,15,1,4,"新疆农业大学机械交通学院机制042班李静");
setviewport(1,20,638,457,1);
}


void wjcd()                                /*文件菜单*/
{gths1=0;bzh1=0;
                       wj=malloc(imagesize(4,0,105,44));
		       getimage(4,0,105,44,wj);
		       setfillstyle(SOLID_FILL,15);
		       bar(7,2,102,20);
		       wjgt=malloc(imagesize(7,2,102,20));
		       getimage(7,2,102,20,wjgt); 
                       setfillstyle(SOLID_FILL,GREEN);
		       bar(4,0,105,44);
		       rectangle(6,0,103,42);
		       hz(10,3,15,1,4,"开始");
		       outtextxy(60,9,"ALT_S");
		       hz(10,23,15,1,4,"退出");
		       outtextxy(60,29,"ALT_X");
		       putimage(7,2,wjgt,XOR_PUT);

                do
                  {key=getkey();
                   switch(key)
                      {case Key_DOWN:
                            {putimage(7,2+gths1*20,wjgt,XOR_PUT);
			     if(gths1==1)
				gths1=0;
                             else
                                gths1++;
                             putimage(7,2+gths1*20,wjgt,XOR_PUT);
                                break;
                            }

		       case Key_UP:
                           { putimage(7,2+gths1*20,wjgt,XOR_PUT);
			     if(gths1==0)
				gths1=1;
                             else
                                gths1--;
                             putimage(7,2+gths1*20,wjgt,XOR_PUT);
                                break;
                            }

                       }
if(key==Key_ENTER) {bzh1=1;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(key!=Key_ESC);
                        putimage(4,0,wj,0);
}


void bhcd()                                 /*变换菜单*/
{gths=0;bzh=0;
		       bh=malloc(imagesize(64,0,135,124));
		       getimage(64,0,135,124,bh);
		       setfillstyle(SOLID_FILL,15);
		       bar(70,2,135,20);
		       bhgt=malloc(imagesize(70,2,135,20));
		       getimage(70,2,135,20,bhgt);
                       setfillstyle(SOLID_FILL,GREEN);
		       bar(64,0,135,124);
		       rectangle(66,0,133,122);
		       hz(70,3,15,1,4,"平移变换");
		       hz(70,23,15,1,4,"比例变换");
		       hz(70,43,15,1,4,"旋转变换");
		       hz(70,63,15,1,4,"左右切错");
		       hz(70,83,15,1,4,"上下切错");
		       hz(70,103,15,1,4,"对称变换");
		       putimage(67,2,bhgt,XOR_PUT);

                do
                  {key=getkey();
                   switch(key)
                      {case Key_DOWN:
                            {putimage(67,2+gths*20,bhgt,XOR_PUT);
                             if(gths==5)
                                gths=0;
                             else
                                gths++;
			     putimage(67,2+gths*20,bhgt,XOR_PUT);
                                break;
                            }

		       case Key_UP:
			   { putimage(67,2+gths*20,bhgt,XOR_PUT);
                             if(gths==0)
                                gths=5;
                             else
                                gths--;
                             putimage(67,2+gths*20,bhgt,XOR_PUT);
                                break;
                           }
                    }
if(key==Key_ENTER) {bzh=1;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(key!=Key_ESC);
                    putimage(64,0,bh,0);
}


void cddy()                                /*菜单之间相互调用*/
{
 if(flag==1) wjcd();
 if(flag==2) bhcd();
 if(flag==4) exit1();
}


main()                                      /*主函数*/
{int gd,gm;
char ch1;                                   /*接受键盘的输入*/
gm=DETECT;                                  /*打开图形驱动函数*/
initgraph(&gm,&gd,"");
if   ((fp=fopen("hzk16","rb"))==NULL)       /*打开汉字库文件*/
            {printf("Can't   open   haz16,Please   add   it");
             getch();   
             closegraph();  
             exit(0);
            }
    setbkcolor(1);                          /*设置背景色为1*/
    textcolor(1);                           /*设置文本颜色为1*/
    clrscr();
    gy();
    close(fp);                              /*关闭汉字库文件*/
    setbkcolor(1);
    setcolor(14);
    clearviewport();
    fp=fopen("hzk16","rb");                      /*打开汉字库文件*/
    hk();
    close(fp);                                   /*关闭汉字库文件*/
    jisuan();
    ysh();

  do
     {ch1=getkey();
        switch(ch1)
              {  case Key_ALT_F: { fp=fopen("hzk16","rb");
                                   wjcd();
                                   cddy();
                                   close(fp);
                                   break;
                                 }
                 case Key_ALT_C: { fp=fopen("hzk16","rb");
                                   bhcd();
                                   cddy();
                                   close(fp);
                                   break;
                                 }
                 case Key_ALT_X: {exit1();
                                  break;
                                 }
              }
if(gths1==1&&bzh1==1)  exit1();
if(gths==0&&bzh==1)  {clearviewport();
                      ysh();
                      py();
                      cddy();
                     }
if(gths==1&&bzh==1)  {clearviewport();
                      ysh();
                      bl();
                      cddy();
                     }
if(gths==2&&bzh==1)  {clearviewport();
                      ysh();
                      xzh();
                      cddy();
                     }
if(gths==3&&bzh==1)  {clearviewport();
                      ysh();
                      cq();
                      cddy();
                     }
if(gths==4&&bzh==1)  {clearviewport();
                      ysh();
                      cq1();
                      cddy();
                     }
if(gths==5&&bzh==1)  {clearviewport();
                      dc();
                      setviewport(1,20,638,457,1);
                      cddy();
                     }
      }while(1);
}

⌨️ 快捷键说明

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