第八章 AutoCAD2004二次开发技术(2)
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
例2:使用C语言建立SCR文件。 #include<stdio.h> #include<string.h> /*函数声明*/ FILE *fp; char fname[12]; /*建立一个scr文件*/ void begin() { printf("enter scr file name:"); scanf("%s",fname); strcat(fname,".scr"); fp=fopen(fname,"w"); }
/*用圆心'半径'起始角画圆弧的程序模块*/ void arc(float ax,float ay,float ar,float as,float ae) { fprintf(fp," 0\nARC\n 8\n0\n"); fprintf(fp," 10\n%f\n",ax); fprintf(fp," 20\n%f\n",ay); fprintf(fp," 40\n%f\n",ar); fprintf(fp," 50\n%f\n",as); fprintf(fp," 51\n%f\n",ae); }
DXF文件的图形数据交换
• 例如,有的子程序可以生成DXF文件的标题 段,有的生成结束行,有的完成某一图形 实体数据文件的生成等,下面我们举例。
例:使用C语言生成DXF文件。 #include<stdio.h> #include<string.h> /*函数声明*/ FILE *fp; char fname[12]; /*建立一个DXF文件*/ void begin() { printf("enter DXF file name:"); scanf("%s",fname); strcat(fname,".dxf"); fp=fopen(fname,"w"); fprintf(fp," 0\nSECTION\n 2\nENTITIES\n"); }
arc(ax1,ay1,ax2,ay2,ax3,ay3); xs=x0-r1; ys=y0; xe=xs; ye=y0-h; line(xs,ys,xe,ye); ys=ye; xe=x0+r1; line(xs,ys,xe,ye); xs=xe; ye=y0; line(xs,ys,xe,ye); end(); }
• • • • • • • • • • • • •
例如:画直线 0 LINE 画线。 8 图层。 2 第二图层。 10 起点x坐标。 20.0 20 起点y坐标。 20.0 11 终点x坐标。 100.0 21 终点y坐标 100.0
DXwk.baidu.com文件的图形数据交换
DXF文件的图形数据交换
• 2、生成图形交换条件的接口软件介绍
DXF文件的图形数据交换
1、DXF文件结构形式 • DXF文件是ASCII码文件,一个DXF文件完 整结构形式如下,分别由五个段来构成: • 标题段(HEADER):这部分用61个变量名, 给定有关图形当前设置和参数。各种环境 变量定义有关图形的当前变量和参量。
DXF文件的图形数据交换
• 表段(TABLE):此段有4张表所组成。线 型表(LINETYPE)、层表(LAYER)、字体 表(STYLE)、视图表(VIEW)。 • 块段(BLOCK):本段给出图中各块实体的描 述。 • 实体段(ENTITIES):本段给出图中所有 实体的描述。 • 文件终止段(EOF)。标志着DXF文件的终 止。
• TABLES
DXF文件的图形数据交换
• 对于每一段来说,都是由若干组构成,每组有两 行。其中首行是组码,末行是组值,组码用I3格 式书写,组值由组码类型确定。 • 规则为: • 组码为0~9时,组值为字符串,用以标识段、表和 实体。 • 10~59时,组值为实型数,用来描述实体坐标、高 度等。 • 60~79时,组值为整型数,用来描述层数、字体及 工作模式设定。
DXF文件的图形数据交换
• • • • • • • • • • • • 标题段: 0 SECTION 2 HEADER 标题变量 0 ENDSEC 表段: 0 SECTION 2 • • • • • • • • • • • • • • 表段变量 0 ENDSEC 实体段: 0 SECTION 2 ENTITIES 绘图实体部分 0 ENDSEC 文件终止段: 0 EOF
/*关闭scr文件*/ void end() { fclose(fp); }
/*主函数*/ void main() { float x1=0,y1=0,x2=200.0,y2=200.0,r1=3.0,r2=2.0,h=4.0; float x0=6.0,y0=6.0; float xc,yc,r,ax1,ay1,ax2,ay2,ax3,ay3; float xs,ys,xe,ye; xc=x0;yc=y0;r=r2; begin(); circle(xc,yc,r); ax1=x0+r1; ay1=y0; ax2=x0; ay2=y0+r1; ax3=x0-r1; ay3=y0;
DXF文件的图形数据交换
• 在AUTOCAD中,图形数据都采用压缩的数据 格式来存储,并且AUTODESK公司没有公布 图形文件的格式,因此,普通人员用高级 语言编写的程序难于直接从中取得有关的 图形数据。 • 同样,高级语言绘图计算程序产生的绘图 信息,不经处理AUTOCAD软件也不接受。为 此,在高级语言程序和AUTOCAD之间,就需 要有一个绘图交换中间文件,DXF文件就是 其中之一。
8.9 DXF文件的图形数据交换
• AutoCAD是以绘图为主的交互式绘图软件包,它
主要是以图形处理为主,科学计算能力有限。 • 而在工程计算中工程技术人员往往是使用 fortran、basic、pascal和c语言等来进行计算。 • AutoCAD 优点:绘图能力强。缺点:计算能力 弱。 • 高级语言 优点:计算能力强。缺点:绘图能力 弱。
/*两点之间画直线的模块*/ void line(float xs,float ys,float xe,float ye) { fprintf(fp,"line %f,%f %f,%f \n",xs,ys,xe,ye); }
/*用圆心半径画圆的程序模块*/ void circle(float xc,float yc,float r) { fprintf(fp,"circle %f,%f %f\n",xc,yc,r); }
•生成SCR文件的方法有两种: ①利用各种文本编辑软件来生成SCR文件。 因为SCR文件是ASCII码的文本文件,因此 就可用PE、TC编辑器、记事本等编辑软件 来直接编辑形成SCR文件。 ②利用高级语言编写绘图程序,运行程序 后自动生成SCR文件。这种方法由于可实现 设计和绘图成为一体,因此使用比上一种 方法广泛。
8.10 SCR文件的图形数据交换
• SCR文件也就是命令组文件法 • 这种方法就是把一系列人机交互操作的命令、选择 项和数据,集中编写成一个扩展名为SCR的文件,然 后在AutoCAD环境下,以批处理的方式逐条进行,并 生成相应的图形。 • 在SCR文件中,命令、选择项和数据的排列顺序和人 机交互作业方式下,用Command:命令输入状态时完 全一致。在文件中,用空格表示回车(return), 用逗号作为坐标x,y,z值间的分隔符。
SCR 文件执行方式 Command: SCRIPT↓ SCRIPT FILE NAME: (输入命令组文件名)↓ 采用SCR文件形式编写绘图程序 优点:直观,便于修改检查; 缺点:由于是逐行执行,逐行显示,因而绘 图速度较慢。
/*三点画圆弧的模块*/ void arc(float ax1,float ay1,float ax2,float ay2,float ax3,float ay3) { fprintf(fp,"arc %f,%f %f,%f %f,%f\n",ax1,ay1,ax2,ay2,ax3,ay3); }
/*用圆心半径画圆的程序模块*/ void circle(float xc,float yc,float r) { fprintf(fp," 0\nCIRCLE\n 8\n0\n"); fprintf(fp," 10\n%f\n",xc); fprintf(fp," 20\n%f\n",yc); fprintf(fp," 40\n%f\n",r); }
DXF文件的图形数据交换
• 工程设计的计算部分由高级语言完成; • 并形成相关结构数据图形信息; • 绘图部分用AutoCAD完成AutoCAD处理。
DXF文件的图形数据交换
• 通过DXF文件可以把图形转换成数据传送给 高级语言程序; • 反过来,也能把数据传入AUTOCAD中变换成 图形。 • 即DXF文件是双向交换,既可用AutoCAD系 统读入,同时又可以从AutoCAD系统中写出。
/*设置绘图界限子程序*/ void limits(float x1,float y1,float x2,float y2) { fprintf(fp,"limits %f,%f %f,%f\n",x1,y1,x2,y2); }
/*显示整个绘图范围*/ void zoomall() { fprintf(fp,"zoom a\n"); }
/*画直线的模块*/ void line(float xs,float ys,float xe,float ye) { fprintf(fp," 0\nLINE\n 8\n0\n"); fprintf(fp," 10\n%f\n",xs); fprintf(fp," 20\n%f\n",ys); fprintf(fp," 11\n%f\n",xe); fprintf(fp," 21\n%f\n",ye); }
/*关闭scr文件*/ void end() { fprintf(fp," 0\nENDSEC\n 0\nEOF\n\n"); fclose(fp); }
/*主函数*/ void main() { float x1=0,y1=0,x2=200.0,y2=200.0,r1=3.0,r2=2.0,h=4.0; float x0=6.0,y0=6.0; float xc,yc,r,ax,ay,ar,as,ae; float xs,ys,xe,ye; xc=x0;yc=y0;r=r2; begin(); circle(xc,yc,r); ax=x0; ay=y0; ar=r1; as=0.0; ae=180.0; arc(ax,ay,ar,as,ae); xs=x0-r1;ys=y0;xe=xs; ye=y0-h; line(xs,ys,xe,ye); ys=ye;xe=x0+r1; line(xs,ys,xe,ye); xs=xe;ye=y0; line(xs,ys,xe,ye); end(); }
• 从上例看出,对于生成像直线这样简单图形的DXF 交换文件,如果我们采用人工逐条编辑生成的方 法,就已经很复杂,更不用说复杂的图形,因此, 这项工作也应该让计算机去完成。 • 如何使计算机自动生成图形交换文件呢?这必须 由软件工作者进行二次开发的工作。 • 主要内容是提供给用户一个功能完善的生成DXF文 件的子程序库(函数库),库内有若干个子程序(函 数) ,每个子程序(函数)都有设定的各自功能。