ImageVerifierCode 换一换
格式:DOCX , 页数:29 ,大小:20.72KB ,
资源ID:28024455      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/28024455.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(C语言直接写DWG图形文件接口.docx)为本站会员(b****8)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

C语言直接写DWG图形文件接口.docx

1、C语言直接写DWG图形文件接口C 语言直接写 DWG 图形文件接口 返回主页 | | 作品建筑 | 作品符号 | 作品动画 /* - INTerface to AutoCAD DWG drawing format. Environment: PC, DOS, Turbo C, AutoCAD 10 Contain Files: INT_DWG.C DWG 文件访问函数库的源码。 INT_DWG.H DWG 文件访问函数库的头文件, 由外部 DEMO.C 文件引用。 INT_DWG.OBJ DWG 文件访问函数库的连接用目标码, INT_DWG.C 编译而成。 DWG.HED DWG 文件的头文

2、件。 用户可根据自己的需要生成自己的样板图,改名 *.DWG 为 DWG.HED 作为头文件。 DEMO.C 调用实例源码。该例为计算微波在两地间的通过能力。 运行该程序后,程序读取数据文件 DEMO.DAT 文件, 经处理后,利用 INT_DWG 接口程序自动生成图形 文件 DEMO.DWG。 DEMO.DAT 实例用的原始数据文件 DEMO.DWG 实例产生的 DWG 结果文件 Create Date: 1993.3.29 304 Last Update: 1994.1.16 320 Last Update: 17 Dpbgn/Dpvert/Dpend() 352 26 Dvtext()

3、384 Writted by JYC. - */#include #include #include #include #include #define DISTANCE double#define LENGTH double#define ANGLE double#define HEIGHT double#define WIDTH double#define SCALE double#define RADIUS double#define NUMBER int#define MAXANG MAXFLOAT#define diz(a,b,c,d) (a)*(d)-(b)*(c)#define

4、sqr(x) (x)*(x)#define Polar(p,p1,a,l) (p).x=(p1).x+(l)*cos(a);(p).y=(p1).y+(l)*sin(a)#define Distance(p,p2) sqrt(sqr(p2).x-(p).x)+sqr(p2).y-(p).y)#define Midpt(pt,pt1,pt2) pt-x=(pt1-x+pt2-x)/2; pt-y=(pt1-y+pt2-y)/2#define SetLayer(x) D_Layer=x#define SetWidth(x) D_Width=x#define SetTexts(st,ht) D_Ts

5、tyle=st; D_Theight=ht#define SetPoint(pt,u,v) pt.x=u;pt.y=v#define SetQpt(pt,p1) memcpy(&pt,&p1,sizeof(pt)#define Setptxy(p,p1,x,y) (p).x=(p1).x+x; (p).y=(p1).y+ytypedef struct double x,y; POINT;typedef enum FALSE,TRUE BOOL;void OpenDwg (char *dwgn);void CloseDwg (void);void SetPts (NUMBER ptn, POIN

6、T *pts, .);void Dline (POINT pt1,POINT pt2);void Dpline (NUMBER ptn,POINT *pts);void Dppts (NUMBER ptn, .);void Dpbgn (BOOL closed);void Dpvert (POINT pt);void Dpvertxy (double x,double y);void Dpend (void);void Dcircle (POINT pt1,DISTANCE r);void Darc (POINT pt1,RADIUS r,ANGLE sa,ANGLE se);void Dte

7、xt (POINT pt1,ANGLE ang,char *txt);void Dvtext (POINT pt1,char *txt);void Dinsert (NUMBER bn,POINT pt1,SCALE sx,SCALE sy,ANGLE ang);void Dprintf (POINT pt1,ANGLE ang,char *format, .);void axbyc(POINT *pt1,POINT *pt2,float *a,float *b,float *c);BOOL intspt(POINT *pt,POINT *p11,POINT *p12,POINT *p21,P

8、OINT *p22);ANGLE angle(POINT *pt1,POINT *pt2);DISTANCE perdist(POINT *pt,POINT *p1,POINT *p2);static void filcpy(long len);static long filpcp(long dt);static void filecp(void);static FILE *dwgh,*dwgf,*dwgt;static long ent_p,pln_p;NUMBER D_Layer=0;NUMBER D_Tstyle=0;NUMBER D_Tjustify=0;HEIGHT D_Theigh

9、t=1.0;WIDTH D_Width=0.0;void OpenDwg(char *dwgn) char fn20; strcpy(fn,dwgn); strcat(fn,.dwg); dwgh=fopen(dwg.hed,rb); dwgf=fopen(fn,wb); dwgt=fopen(dwg.tmp,wb); fseek(dwgh,0,SEEK_SET); filcpy(0x14); /* Head 14h */ ent_p=filpcp(0); /* ent_p */void CloseDwg( void) long ent_l, tab_p, blk_t_p, lay_t_p,

10、sty_t_p, ltp_t_p, viw_t_p, blk_p, dwg_l; FILE *tmpf; fclose(dwgt);dwgt=fopen(dwg.tmp,rb); ent_l=filelength(fileno(dwgt)-0x28; fseek(dwgh,0x18,SEEK_SET); filpcp(ent_l); /* tab_p */ filpcp(ent_l); /* blk_d_p */ filpcp(0); /* unknown */ filpcp(ent_l); /* dwg_l */ filpcp(0);filcpy(6); /* unknown */ filp

11、cp(ent_l);filcpy(6); /* blk_t_p */ filpcp(ent_l);filcpy(6); /* lay_t_p */ filpcp(ent_l);filcpy(6); /* sty_t_p */ filpcp(ent_l);filcpy(6); /* ltp_t_p */ filpcp(ent_l);filcpy(6); /* vie_t_p */ filcpy(0x4AE); /* System Variable */ tmpf=dwgh; dwgh=dwgt; fseek(dwgh,0,SEEK_SET); filcpy(ent_l+0x28); dwgh=t

12、mpf; fseek(dwgh,0x28,SEEK_CUR); filecp(); fclose(dwgh);fclose(tmpf);fclose(dwgt);fclose(dwgf); /* unlink(dwg.tmp); */void Dline(POINT pt1,POINT pt2) char str8=0x01,0x04,0x28,0,0,0,0,0; str4=D_Layer; fwrite(str,8,1,dwgt); fwrite(&pt1,16,1,dwgt); fwrite(&pt2,16,1,dwgt);void Dpline (NUMBER ptn,POINT *p

13、ts) char str8=0x13,0x80,0x18,0,0,0,6,0, stc9=0x13,0x80,0x19,0,0,0,7,0,1, sti8=0x14,0x00,0x18,0,0,0,0,0, stn8=0x11,0x00,0x0C,0,0,0,0,0; NUMBER i; str4=D_Layer; stc4=D_Layer; sti4=D_Layer; stn4=D_Layer; pln_p=ftell(dwgt)+ent_p; if (ptn0) fwrite(str,8,1,dwgt); else fwrite(stc,9,1,dwgt); fwrite(&D_Width

14、,8,1,dwgt); fwrite(&D_Width,8,1,dwgt); for (i=0;iabs(ptn);i+) fwrite(sti,8,1,dwgt); fwrite(pts+i,16,1,dwgt); fwrite(stn,8,1,dwgt); fwrite(&pln_p,4,1,dwgt);void Dppts(NUMBER ptn, .) POINT *pts; va_list ap; va_start(ap,1); pts=(POINT *)ap; Dpline(ptn,pts);void Dpbgn (BOOL closed) char str8=0x13,0x80,0

15、x18,0,0,0,6,0, stc9=0x13,0x80,0x19,0,0,0,7,0,1; str4=D_Layer; stc4=D_Layer; pln_p=ftell(dwgt)+ent_p; if (closed) fwrite(stc,9,1,dwgt); else fwrite(str,8,1,dwgt); fwrite(&D_Width,8,1,dwgt); fwrite(&D_Width,8,1,dwgt);void Dpvert(POINT pt) char sti8=0x14,0x00,0x18,0,0,0,0,0; sti4=D_Layer; fwrite(sti,8,

16、1,dwgt); fwrite(&pt,1,sizeof(POINT),dwgt);void Dpvertxy (double x,double y) char sti8=0x14,0x00,0x18,0,0,0,0,0; sti4=D_Layer; fwrite(sti,8,1,dwgt); fwrite(&x,1,sizeof(double),dwgt); fwrite(&y,1,sizeof(double),dwgt);void Dpend(void) char stn8=0x11,0x00,0x0C,0,0,0,0,0; stn4=D_Layer; fwrite(stn,8,1,dwg

17、t); fwrite(&pln_p,4,1,dwgt);void Dcircle(POINT pt1,RADIUS r) char str8=03,0,0x20,0,0,0,0,0; str4=D_Layer; fwrite(str,8,1,dwgt); fwrite(&pt1,16,1,dwgt); fwrite(&r,8,1,dwgt);void Darc(POINT pt1,RADIUS r,ANGLE sa,ANGLE se) char str8=8,0,0x30,0,0,0,0,0; str4=D_Layer; fwrite(str,8,1,dwgt); fwrite(&pt1,16

18、,1,dwgt); fwrite(&r,8,1,dwgt); fwrite(&sa,8,1,dwgt); fwrite(&se,8,1,dwgt);void Dtext(POINT pt1,ANGLE ang,char *txt) char str8=07,0,0x2b,0,0,0,0x69,0; int strl=strlen(txt); str2=0x3C+strlen(txt); str4=D_Layer; fwrite(str,8,1,dwgt); fwrite(&pt1,16,1,dwgt); fwrite(&D_Theight,8,1,dwgt); fwrite(&strl,2,1

19、,dwgt); fwrite(txt,strl,1,dwgt); fwrite(&ang,8,1,dwgt); fputc(D_Tstyle,dwgt); fputc(D_Tjustify,dwgt); fwrite(&pt1,16,1,dwgt);void Dvtext (POINT pt1,char *txt) char hz3; POINT pt; SetPoint(pt,pt1.x,pt1.y-D_Theight); while (*txt) if (*txt0) hz0=*txt+; hz1=*txt+; hz2=0; else hz0=*txt+; hz1=0; Dtext(pt,

20、0,hz); pt.y-=1.2*D_Theight; void Dprintf(POINT pt1,ANGLE ang,char *format, .) va_list arg_ptr; char output256; va_start(arg_ptr,format); vsprintf(output,format,arg_ptr); Dtext(pt1,ang,output);void Dinsert (NUMBER bn,POINT pt1,SCALE sx,SCALE sy,ANGLE ang) char str8=0x0E,0x00,0x3A,0,0,0,0x0F,0; str4=D

21、_Layer; fwrite(str,8,1,dwgt); fwrite(&bn,2,1,dwgt); fwrite(&pt1,16,1,dwgt); fwrite(&sx,8,1,dwgt); fwrite(&sy,8,1,dwgt); fwrite(&ang,8,1,dwgt); fwrite(&sx,8,1,dwgt);void SetPts (NUMBER ptn, POINT *pts, .) va_list ap; va_start(ap,ptn); memcpy(pts,ap,16*ptn);void axbyc(POINT *pt1,POINT *pt2,float *a,fl

22、oat *b,float *c) *a=pt1-y-pt2-y; *b=pt2-x-pt1-x; *c=-(*b)*(pt1-y)+(*a)*(pt1-x);BOOL intspt(POINT *pt,POINT *p11,POINT *p12,POINT *p21,POINT *p22) float a11,a12,b1,a21,a22,b2,r; axbyc(p11,p12,&a11,&a12,&b1); axbyc(p21,p22,&a21,&a22,&b2); r=diz(a11,a12,a21,a22); if (fabs(r)=0.000001) return(FALSE); pt

23、-x=diz(-b1,a12,-b2,a22)/r; pt-y=diz(a11,-b1,a21,-b2)/r; return(TRUE);ANGLE angle(POINT *pt1,POINT *pt2) double dx,dy; dx=pt2-x-pt1-x; dy=pt2-y-pt1-y; if (dx=0 & dy=0) return(MAXANG); return (atan2(dy,dx);DISTANCE perdist(POINT *pt,POINT *p1,POINT *p2) float at,a2; if (at=angle(p1,pt)=MAXANG | (a2=an

24、gle(p1,p2)=MAXANG) return (0.0); return (fabs(Distance(*pt,*p1)*sin(at-a2);void filcpy(long len) char ch; long i; for (i=0; ilen; i+) fputc(fgetc(dwgh),dwgf);long filpcp(long dt) long len; fread(&len,4,1,dwgh); len += dt; fwrite(&len,4,1,dwgf); return len;void filecp(void) char ch; while (!feof(dwgh

25、) fputc(fgetc(dwgh),dwgf);-/* - INT_DWG.H: Interface To AutoCAD DWG file Module. History: 1992.4.12 FCGEOM 1992.11.3 INT_DWG 1994.1.17 Dpbgn/Dpvert/Dpend 1993.3.27 By JYC Co. -*/#define MAXANG MAXFLOAT#define DISTANCE double#define LENGTH double#define ANGLE double#define HEIGHT double#define WIDTH

26、double#define SCALE double#define RADIUS double#define NUMBER int#define sqr(x) (x)*(x)#define dxy(x,y) (double)(x),(double)(y)#define SetLayer(x) D_Layer=x#define SetWidth(x) D_Width=x#define SetTexts(st,ht) D_Tstyle=st; D_Theight=ht#define SetPoint(pt,u,v) pt.x=u; pt.y=v#define SetQpt(pt,p1) memcp

27、y(&pt,&p1,sizeof(pt)#define Polar(p,p1,a,l) (p).x=(p1).x+(l)*cos(a);(p).y=(p1).y+(l)*sin(a)#define Distance(p1,p2) sqrt(sqr(p2).x-(p1).x)+sqr(p2).y-(p1).y)#define Midpt(p,p1,p2) p.x=(p1.x+p2.x)/2; p.y=(p1.y+p2.y)/2#define Angle(p1,p2) angle(&p1,&p2)#define Intspt(p,s,q,u,v) intspt(&p,&s,&q,&u,&v)#de

28、fine Perdist(p,p1,p2) perdist(&p,&p1,&p2)typedef enum FALSE,TRUE BOOL;typedef struct double x,y; POINT;extern void OpenDwg (char *dwgn);extern void CloseDwg (void);extern void SetPts (NUMBER ptn,POINT *pts, .);extern void Dline (POINT pt1,POINT pt2);extern void Dpline (NUMBER ptn,POINT *pts);extern void Dppts (NUMBER ptn, .);extern void Dpbgn (BOOL closed);extern void Dpvert (POINT pt);extern void Dpvertxy (double x,double y);extern void Dpend (void);extern void Dcircl

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1