AutoCAD R12是1992年出版的,R12是Dos版的最高顶峰,具有成熟完备的功能,提供完善的AutoLisp语言进行二次开发,许多机械建筑和电路设计的专业CAD就是在这一版本上开发的。这一版本具有许多即使现在的版本也不具备的特性,例如实体爆炸后得到的是3Dface,而不是像现在版本这样变成面实体——还是实体,不像3Dface那样可以对顶点进行单独拉伸。这里,主要分析R12中直线和圆的格式。
1)直线格式:
0 SECTION 2 ENTITIES 0 LINE 8 0.18 62 1 10 3.000000 20 3.000000 11 5.000000 21 5.000000 0 ENDSEC 0 EOF解析如下:
0 SECTION 2 ENTITIES 0 CIRCLE 8 0.18 62 1 10 3.000000 20 3.000000 40 3.000000 0 ENDSEC 0 EOF圆的格式大体和直线很类似,这里介绍它们的不同:直线有(10 20 11 21)字段,而圆只有(10 20 40)字段,区别在于圆有40字段,而直线没有。40字段代表圆的半径,由上面的格式可知,半径R=3.00000
#include <iostream.h> #include <conio.h> #include <stdio.h> struct Points { char row[10];//定义10行 double x,y,z;//定义点的三个坐标 }; /************************************************************************/ /* 8 0.18表示线宽为0.18毫米 8 0.35表示线宽为0.35毫米 62 1表示颜色为红色 62 2表示颜色为黄色 62 3表示颜色为绿色 10 20 30分别表示x1,y1,z1 11 21 31分别表示x2,y2,z2 */ /************************************************************************/ //红色 void LineDXFr(FILE *fp, Points start, Points end)//直线 { fprintf(fp,"0 \nLINE\n"); fprintf(fp,"8 \n0.18\n"); //线宽0.18mm fprintf(fp,"62 \n1\n"); fprintf(fp,"10 \n%f\n20 \n%f\n11 \n%f\n21 \n%f\n", start.x, start.y, end.x, end.y); } void CircleDXF(FILE *fp, Points center, double radius)//圆 { fprintf(fp,"0 \nCIRCLE\n"); fprintf(fp,"8 \n0.18\n"); fprintf(fp,"62 \n1\n"); fprintf(fp,"10 \n%f\n20 \n%f\n40 \n%f\n", center.x, center.y, radius);//圆心和半径 } //绿色 void LineDXFg(FILE *fp, Points start, Points end) { fprintf(fp,"0 \nLINE\n"); fprintf(fp,"8 \n0.18\n"); fprintf(fp,"62 \n3\n"); fprintf(fp,"10 \n%f\n20 \n%f\n11 \n%f\n21 \n%f\n", start.x, start.y, end.x, end.y);//两点的横纵坐标 } //黄色 void LineDXFy(FILE *fp, Points start, Points end) { fprintf(fp,"0 \nLINE\n"); fprintf(fp,"8 \n0.18\n"); fprintf(fp,"62 \n2\n"); fprintf(fp,"10 \n%f\n20 \n%f\n11 \n%f\n21 \n%f\n", start.x, start.y, end.x, end.y);//两点的横纵坐标 } void main(){ struct Points po1={"1",3,3,3}; struct Points po2={"2",5,7,5}; struct Points po3={"3",8,9,8}; struct Points po4={"4",10,13,10}; //Points p1,p2; //定义点 FILE *fp; fp=fopen("lineall3d.dxf","w"); if(fp == NULL) { printf("Can not open this file !\n"); return; } fprintf(fp,"0\nSECTION\n"); fprintf(fp,"2\nENTITIES\n"); /*printf("please input 1st coordinate(x1,y1):"); scanf("%lf %lf",&p1.x,&p1.y); printf("please input 2st coordinate(x2,y2):"); scanf("%lf %lf",&p2.x,&p2.y);*/ LineDXFr(fp,po1,po2); //画红色的直线,宽度为0.18mm LineDXFg(fp,po3,po4); //画绿色的直线,宽度为0.18mm LineDXFy(fp,po2,po3); //画黄色的直线,宽度为0.18mm CircleDXF(fp,po1,3); fprintf(fp,"0 \nENDSEC\n"); fprintf(fp,"0 \nEOF"); fclose(fp); }
原文地址:http://blog.csdn.net/sanqima/article/details/38069991