学生学号
0120901080209
实验课成绩
武汉理工大学
学 生 实 验 报 告 书
实验课程名称 CAD/CAM基础
开 课 学 院 材料学院
指导老师姓名 余世浩
学 生 姓 名 彭抗
学生专业班级 成型0902
2011 — 2012学年 第 一 学期
实验课程名称: CAD/CAM基础
实验项目名称
图形软件的二次开发
实验成绩
实验者
彭抗
专业班级
成型0902
组别
同组者
实验日期
2011年11月1日
第一部分:实验
与
1.实验目的:
(1)了解Auto CAD 图形交换文件(DXF文件)的结构和格式;
(2)熟悉图形变换文件的程序生成方法;
(3)编制生成Auto CAD图形交换文件的高级语言程序。实现
零件图的自动生成和绘制。
2.实验
:
(1)编写含有生成直线、圆弧的DXF文件的接口程序;
(2)编写生成某一标准零件DXF文件的主程序,经调试、编译、执行,生成该图形的DXF文件;
(3)进入Auto CAD 软件,生成该图形。
3.实验原理:
1)DXF文件(图形变换文件)与DWG文件(图形文件)的转换
(1)由DWG文件生成DXF 文件
在Auto CAD 软件的命令(Command)状态下,执行DXFOUT命令,输入DXF文件名,即可生成当前图形文件的图形交换文件(DXF文件)。
(2)由DXF文件生成DWG文件
在Auto CAD软件的命令(Command)状态下,执行DXFIN命令,输入已有的DXF文件名,即可生成该DXF文件
示的图形。
2)DXF文件的总体结构
DXF文件结构由五段组成:
(1)HEADER 段 标题段
(2)TABLES 段 表段
(3)BLOCKS 段 块段
(4)ENTITIES 段 实体段
(5)EOF 段 文件结束段
在DXF文件中,尸体信息主要存放在ENTITIES段,而且仅有ENTITIES段和EOF段,DXF文件即可运行,因此,只需要重点讨论ENTITIES段和EOF段。
DXF文件ENTITIES段的结构为:
0
SECTION
2
ENTITIES
…
实体信息(直线、圆弧、圆)描述
…
0
ENDSEC
0
EOF
3)接口程序设计
在ENTITIES段,其主要由直线段(LINE)、圆弧(ARC)和圆(CIRCLE)组成 。根据直线、圆弧、圆的结构,课编写相应的函数。
(1)写实体段头部的DXF文件的函数(宝库文件操作)
dxfhead()
{char mydxf[10];
printf("\input dxffile name:");
scanf("%s",mydxf);
knm=fopen(mydxf,"w");
fputs("0\n",knm);
fputs("SECTION\n",knm);
fputs("2\n",knm);
fputs("ENTITIES\n",knm);
return; }
(2)直线段的结构及写直线段的DXF文件的函数
①直线段的结构
0
LINE
8
层号
10
Xs
20
Ys
11
Xe
21
Ye
②写直线段的DXF文件的函数
line(ceng,x1,y1,x2,y2)
char ceng;
float x1,y1,x2,y2;
{ fputs("0\n",knm);
fputs("LINE\n",knm);
fputs("8\n",knm);
fprintf(knm,"%c\n",ceng);
fputs("10\n",knm);
fprintf(knm,"%f\n",x1);
fputs("20\n",knm);
fprintf(knm,"%f\n",y1);
fputs("11\n",knm);
fprintf(knm,"%f\n",x2);
fputs("21\n",knm);
fprintf(knm,"%f\n",y2);
return;}
(3)圆弧段的结构及写圆弧段的DXF文件的函数
①圆弧段的结构
0
ARC
8
层号
10
X0
20
Y0
30
Z0
40
R
50
A1
51
a2
②写圆弧段的DXF文件的函数
arc(ceng,x0,y0,r,stang,endang)
char ceng;
float x0,y0,r,stang,endang;
{ fputs("0\n",knm);
fputs("ARC\n",knm);
fputs("8\n",knm);
fprintf(knm,"%c\n",ceng);
fputs("10\n",knm);
fprintf(knm,"%f\n",x0);
fputs("20\n",knm);
fprintf(knm,"%f\n",y0);
fputs("40\n",knm);
fprintf(knm,"%f\n",r);
fputs("50\n",knm);
fprintf(knm,"%f\n",stang);
fputs("51\n",knm);
fprintf(knm,"%f\n",endang);
return;}
(4)圆实体段的结构及写圆实体段的DXF文件的函数
①圆弧段的结构
0
CIRCLE
8
层号
10
X0
20
Y0
30
Z0
40
R
②写圆实体段的DXF文件的函数
circle(ceng,x0,y0,r)
char ceng;
float x0,y0,r;
{
fputs("0\n",knm);
fputs("CIRCLE\n",knm);
fputs("8\n",knm);
fprintf(knm,"%c\n",ceng);
fputs("10\n",knm);
fprintf(knm,"%f\n",x0);
fputs("20\n",knm);
fprintf(knm,"%f\n",y0);
fputs("40\n",knm);
fprintf(knm,"%f\n",r);
return;}
(5)写文件结束段DXF文件的函数
dxfend()
{fputs("0\n",knm);
fputs("ENDSEC\n",knm);
fputs("0\n",knm);
fputs("EOF\n",knm);
fclose(knm);
return;}
二、主要仪器设备及耗材
VisulC++ Auto CAD2004
第二部分:实验调试与结果分析(可加页)
1、 调试过程(包括调试方法描述、实验数据记录,实验现象记录,实验过程发现的问题等)
编写的C语言程序如下所示:
#include
FILE*knm;
main()
{
float l,b,r1,r2;
scanf("%f%f%f%f",&l,&b,&r1,&r2);
printf("%f%f%f%f\n",l,b,r1,r2);
dxfhead();
line('0',-l/2.0,-b/2,-r2,-b/2.0);
arc('0',0.0,-b/2.0,r2,180.0,360.0);
line('0',r2,-b/2.0,l/2.0,-b/2.0);
line('0',l/2.0,-b/2.0,l/2.0,b/2.0);
line('0',l/2.0,b/2.0,r2,b/2.0);
arc('0',0.0,b/2.0,r2,0.0,180.0);
line('0',-r2,b/2.0,-l/2.0,b/2.0);
line('0',-l/2.0,b/2.0,-l/2.0,-b/2.0);
circle('0',0.0,0.0,r1);
dxfend();
}
dxfhead()
{char mydxf[10];
printf("\input dxffile name:");
scanf("%s",mydxf);
knm=fopen(mydxf,"w");
fputs("0\n",knm);
fputs("SECTION\n",knm);
fputs("2\n",knm);
fputs("ENTITIES\n",knm);
return; }
line(ceng,x1,y1,x2,y2)
char ceng;
float x1,y1,x2,y2;
{ fputs("0\n",knm);
fputs("LINE\n",knm);
fputs("8\n",knm);
fprintf(knm,"%c\n",ceng);
fputs("10\n",knm);
fprintf(knm,"%f\n",x1);
fputs("20\n",knm);
fprintf(knm,"%f\n",y1);
fputs("11\n",knm);
fprintf(knm,"%f\n",x2);
fputs("21\n",knm);
fprintf(knm,"%f\n",y2);
return;}
arc(ceng,x0,y0,r,stang,endang)
char ceng;
float x0,y0,r,stang,endang;
{ fputs("0\n",knm);
fputs("ARC\n",knm);
fputs("8\n",knm);
fprintf(knm,"%c\n",ceng);
fputs("10\n",knm);
fprintf(knm,"%f\n",x0);
fputs("20\n",knm);
fprintf(knm,"%f\n",y0);
fputs("40\n",knm);
fprintf(knm,"%f\n",r);
fputs("50\n",knm);
fprintf(knm,"%f\n",stang);
fputs("51\n",knm);
fprintf(knm,"%f\n",endang);
return;}
circle(ceng,x0,y0,r)
char ceng;
float x0,y0,r;
{
fputs("0\n",knm);
fputs("CIRCLE\n",knm);
fputs("8\n",knm);
fprintf(knm,"%c\n",ceng);
fputs("10\n",knm);
fprintf(knm,"%f\n",x0);
fputs("20\n",knm);
fprintf(knm,"%f\n",y0);
fputs("40\n",knm);
fprintf(knm,"%f\n",r);
return;}
dxfend()
{fputs("0\n",knm);
fputs("ENDSEC\n",knm);
fputs("0\n",knm);
fputs("EOF\n",knm);
fclose(knm);
return;}
运行C语言程序生成DXF格式文件以及Auto CAD软件中调用DXF格式文件
一、实验结果及分析(包括结果描述、实验现象分析、影响因素讨论、综合分析和结论等)
实验现象分析:
程序编写好以后运行没有错但是生成的DXF格式文件在Auto CAD软件里调用时图形绘制出现问题与自己设计的图形有出入,原来是坐标定义有问题,改正之后得出了正确结果。
二、实验小结、建议及体会
小结:通过实验了解了如何通过编制dxf文件的高级语言程序,学会了如何通过程序生成CAD图形。
体会:操作过程还是不熟练,还需要勤加练习才能了解和使用。