首页 > 代码库 > autocadR12的格式分析(一)

autocadR12的格式分析(一)

    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
解析如下:

表(1)R12中直线格式

2)圆的格式,这里介绍由一个定点和半径画成的圆
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
    用C语言实现画有颜色、有宽度的圆和直线,其代码如下:
#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);
	
		
}


 效果如下:


   注意:查看“线宽”时,要点击“对象捕捉”旁边的“线宽”按钮,就行了。
   


autocadR12的格式分析(一)