利用visualC++为AutoCAD生成dxf文件(表盘)

参考地址:http://blog.sina.com.cn/s/blog_915fafb10100zktb.html

问题:

     一表盘刻度长均为表盘半径 1/5 时针长为表盘半径的 2/5 分针长为表盘半径的 3/5,
刻度红色,指针绿色,要求用户输入表盘的时间,生成.dxf文件利用autocad读入并显示。
生成的.dxf文件只包含entities段。
代码如下:
#include<stdio.h>
#include<math.h>
const double PI=3.14159265358;
typedef struct
{
	double x;
	double y;
}POINT;
//红色
void LineDXF(FILE *fp, POINT start, POINT end)//刻度线
{
	fprintf(fp,"0 \nLINE\n");
	fprintf(fp,"8 \n0\n");
	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, POINT center, double radius)//圆盘
{
	fprintf(fp,"0 \nCIRCLE\n");
	fprintf(fp,"8 \n0\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, POINT start, POINT end)//时针与分针
{
	fprintf(fp,"0 \nLINE\n");
	fprintf(fp,"8 \n0\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 main()
{
	double h,m,r;//定义变量
	int i;
	POINT p1,p2;//定义点
	FILE *fp;
	printf("please input an number for the radius of the clock:");
	scanf("%lf",&r);
	printf("\nplease input an number for the method for hours:");
	scanf("%lf",&h);
	printf("\nplease input an number for the method for minutes:");
	scanf("%lf",&m);
	h=h+m/60;//对小时进行处理
	fp = fopen("clock.dxf","w");
	if(fp == NULL) 
	{
		printf("Can not open this file !\n");
		return;
	}
	fprintf(fp,"0\nSECTION\n");
	fprintf(fp,"2\nENTITIES\n");
	p1.x=0;p1.y=0;
	CircleDXF(fp,p1,r);//表盘
	for(i=0;i<12;i++)
	{
		p1.x=0.8*r*cos((90-30*double(i))*PI/180);
		p2.x=r*cos((90-30*double(i))*PI/180);
		p1.y=0.8*r*sin((90-30*double(i))*PI/180);
		p2.y=r*sin((90-30*double(i))*PI/180);
		LineDXF(fp,p1,p2);
	}
	//hour
	p1.x=0;p1.y=0;
	p2.x=0.4*r*cos((90-30*h)*PI/180);
	p2.y=0.4*r*sin((90-30*h)*PI/180);
	LineDXFg(fp,p1,p2);
	//minute
	p2.x=0.6*r*cos((90-6*m)*PI/180);
	p2.y=0.6*r*sin((90-6*m)*PI/180);
	LineDXFg(fp,p1,p2);
	fprintf(fp,"0 \nENDSEC\n");
	fprintf(fp,"0 \nEOF");
	fclose(fp);
}

在黑框框里输入:radius=4, hour=3, minute=20,如下:
生成的.dxf文件,包含表盘的半径和时间,我输入的是半径4,3点20分。
AutoCAD读取后效果为:
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

sanqima

一键三连,多多益善

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值