CAD实验--图形软件的二次开发

  • 格式:doc
  • 大小:195.50 KB
  • 文档页数:11

学生学号 实验课成绩

学 生 实 验 报 告 书

实验课程名称 CAD/CAM基础

开 课 学 院

指导教师姓名

学 生 姓 名

学生专业班级

-- 学年 第 学期

实验教学管理基本规范

实验是培养学生动手能力、分析解决问题能力的重要环节;实验报告是反映实验教学水平与质量的重要依据。为加强实验过程管理,改革实验成绩考核方法,改善实验教学效果,提高学生质量,特制定实验教学管理基本规范。

1、 本规范适用于理工科类专业实验课程,文、经、管、计算机类实验课程可根据具体情况参照执行或暂不执行。

2、 每门实验课程一般会包括许多实验项目,除非常简单的验证演示性实验项目可以不写实验报告外,其他实验项目均应按本格式完成实验报告。

3、 实验报告应由实验预习、实验过程、结果分析三大部分组成。每部分均在实验成绩中占一定比例。各部分成绩的观测点、考核目标、所占比例可参考附表执行。各专业也可以根据具体情况,调整考核内容和评分标准。

4、 学生必须在完成实验预习内容的前提下进行实验。教师要在实验过程中抽查学生预习情况,在学生离开实验室前,检查学生实验操作和记录情况,并在实验报告第二部分教师签字栏签名,以确保实验记录的真实性。

5、 教师应及时评阅学生的实验报告并给出各实验项目成绩,完整保存实验报告。在完成所有实验项目后,教师应按学生姓名将批改好的各实验项目实验报告装订成册,构成该实验课程总报告,按班级交课程承担单位(实验中心或实验室)保管存档。

6、 实验课程成绩按其类型采取百分制或优、良、中、及格和不及格五级评定。

附表:实验考核参考内容及标准

观测点 考核目标 成绩组成

实验预习 1. 预习报告

2. 提问

3. 对于设计型实验,着重考查设计方案的科学性、可行性和创新性 对实验目的和基本原理的认识程度,对实验方案的设计能力 20%

实验过程 1. 是否按时参加实验

2. 对实验过程的熟悉程度

3. 对基本操作的规范程度

4. 对突发事件的应急处理能力

5. 实验原始记录的完整程度

6. 同学之间的团结协作精神 着重考查学生的实验态度、基本操作技能;严谨的治学态度、团结协作精神 30%

结果分析 1. 所分析结果是否用原始记录数据

2. 计算结果是否正确

3. 实验结果分析是否合理

4. 对于综合实验,各项内容之间是否有分析、比较与判断等 考查学生对实验数据处理和现象分析的能力;对专业知识的综合应用能力;事实求实的精神 50%

实验课程名称:___CAD/CAM基础____________

实验项目名称 图形软件的二次开发 实验成绩

实 验 者 专业班级 组 别

同 组 者 实验日期

一部分:实验预习报告(包括实验目的、意义,实验基本原理与方法,主要仪器设备及耗材,实验方案与技术路线等)

一、实验目的

(1)了解Auto CAD图形交换文件(DXF文件)的结构和格式;

(2)熟悉图形交换文件的程序生成方法;

(3)编辑生成Auto CAD图形交换文件的高级语言程序,实现标准零件图的自动生成和绘制。

二、实验要求

(1)编写含有生成直线、圆弧、圆的DXF文件的接口程序;

(2)编写生成某一标准零件DXF文件的主程序,经调试、编译、执行,生成该图形的DXF文件;

(3)进入Auto CAD软件,生成该图形。

注:实验用零件图形由实验者自行准备。

三、实验原理

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

EOF段的结构

0

EOF

3)接口程序设计

在ENTITIES段,其主要由直线段(LINE)、圆弧(ARC)和圆(CIRCLE)组成。根据直线、圆弧、圆的结构,可编写相应的函数。

(1)写实体段头部的DXF文件的函数(包括文件操作)

(2)直线段的结构及写直线段的DXF文件的函数

○1直线段的结构

0

LINE

8

层号

10

Xs

20

Ys

11

Xe

21

Ye

○2写直线段的DXF文件的函数

(3)圆弧段的结构及写圆弧段的DXF文件的函数

○1圆弧段的结构

0

ARC

8

层号

10

X0

20

Y0

30

Z0

40

R

50 A1

51

a2

○2写圆弧段的DXF文件的函数

(4)圆实体段的结构及写圆实体段的DXF文件的函数

○1圆实体段的结构

0

CIRCLE

8

层号

10

X0

20

Y0

30

Z0

40

R

○2写圆实体段的DXF文件的函数

(5)写文件结束段DXF文件的函数

注:原理中的函数略 在第二部分的编程中有。

第二部分:实验过程记录(可加页)(包括实验原始数据记录,实验现象记录,实验过程发现的问题等)

所编程序:

#include"stdio.h"

FILE*knm;

void dxfhead();

float line(char ceng,float x1,float y1,float x2,float y2);

float arc(char ceng,float x0,float y0,float r,float stang,float endang);

float circle(char ceng,float x0,float y0,float r);

void dxfend();

void main()

{

float l,l1,b,b1,r,r1;

scanf("%f%f%f%f%f%f",&l,&l1,&b,&b1,&r,&r1);

printf("%f%f%f%f%f%f\n",l,l1,b,b1,r,r1);

dxfhead();

line('0',0.0,0.0,l,0.0);

line('0',0.0,0.0,0.0,l1);

line('0',l,0.0,l,l1);

line('0',0.0,l1,l,l1);

arc('0',b,l1,r1,0.0,180.0);

circle('0',b,b1,r);

dxfend();

}

void dxfhead()

{

char mydxf[10];

printf("\ninput 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 ;

}

float line(char ceng,float x1,float y1,float x2,float 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 0;

}

float arc(char ceng,float x0,float y0,float r,float stang,float 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 0;

}

float circle(char ceng,float x0,float y0,float 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 0;

}