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);
}
效果如下:
注意:查看“线宽”时,要点击“对象捕捉”旁边的“
线宽”按钮,就行了。