APP下载

AutoCAD与C语言接口程序的参数化设计与实现

2010-08-15内蒙古科技大学薄少军

河南科技 2010年12期
关键词:C语言调用绘图

内蒙古科技大学 薄少军

AutoCAD与C语言接口程序的参数化设计与实现

内蒙古科技大学 薄少军

在开发参数化机械CAD系统时,设计了AutoCAD与高级语言的接口程序,把AutoCAD强大的绘图功能与C语言强有力的计算、输入和输出等功能结合起来,实现了自动绘图。

AutoCAD C语言接口

一、引言

AutoCAD具有较强的绘图功能,但它所提供的计算能力有限,对于大量的计算问题显得不太方便。为了充分利用高级语言中强有力的计算、输入、输出功能以及其它功能,必需考虑如何利用高级语言调用AutoCAD中的绘图命令、编辑命令、尺寸标注命令以及其它一些功能命令,这就要为高级语言与AutoCAD之间设计一个接口,以实现高级语言对AutoCAD的功能调用1。

二、AutoCAD与高级语言接口程序的设计

AutoCAD绘图软件与高级语言连接方式主要有以下3种:DXF图形交换文件;命令组文件(3.SCR);IGS类型的图形交换文件。相比之下,命令组文件有以下优点:程序易编、易读、易修改;命令组文件格式比较紧凑、占用内存少,在AutoCAD上运行迅速,操作简单2。

鉴于命令组文件有上述优点,本文选择了命令组文件作为高级语言与AutoCAD的接口。在编写函数时,主要应考虑AutoCAD的命令格式,即基于命令格式来写函数。编写函数的目的实际上就是设计一个高级语言的函数集,通过调用这些函数,可以形成与其功能相对应的命令组文件,用户可以通过高级语言调用这些函数实现对AutoCAD功能的调用,通过Auto2 CAD就可以方便地绘出图形来。

三、AutoCAD与高级语言接口程序的实现

在设计函数之前,首先要将AutoCAD的菜单命令进行分类,然后归纳出各类命令的主要功能,最后编制实现这些功能的高级语言函数。本文将AutoCAD菜单命令分为4类,分别为:图形绘制命令;图形编辑命令;文本注释命令;尺寸标注命令3。下面以尺寸标注命令为例阐述其实现方法。

尺寸标注是一般绘图过程中不可缺少的步骤,为此,AutoCAD提供了一套完整的尺寸标注命令。通过这些命令,可方便地标注图形上的各种尺寸,如线性尺寸、角度、直径、半径等。与这些功能相对应,就必须编写一些函数以实现这些功能。函数的命令与其菜单名基本一致,其参数与在交互方式下实现这一功能时所输入的参数也基本相同。

例如,函数dim liner(floatX,floatY,float Z,float L,int I,int J,int K)的功能是自动进行水平标注和垂直标注。其中,X、Y是起点的坐标,L是相对于起点的长度,Z是相对于上一点的长度。I、J、K是状态控制参数,取值为:

I=0 标注水平尺寸

I=1 标注垂直尺寸

J=0 标注直径符号

J=1 标注半径符号

K=0 起点坐标为绝对坐标

K=1 起点坐标为相对坐标

函数清单如下:

/3 dim liner.c 3

#include

#include

char XX[16],YY[16],ZZ[16],LL[16],UU [16],TT[16],SS[12];

void mid(char 3 pl,char 3 p2,inti,intj)/3定义从字符串中取子串函数3/

{

int k;

for(k=i-1;k

}

void right(char 3 p1,char 3 p2,inti)/3定义从字符串右端取子串函数3/

{

intj,k=strlen(p1);

for(j=k-i;j

}

void dim liner(float X,float Y,float Z,float L,float I,int J,int K)

{ /3定义标注函数3/

int xl,yl,zl,110,i;

float ll;

FILE 3 fp;

p rintf(″Enter your SCR filename: );

gets(SS); /3输入要建立的SCR文件名3/

strcat(SS,″.SCR″);/3加扩展名3/

if((fp=fopen(SS,″W″))==NULL)

{ /3建立SCR文件3/

p rintf(″Can’t open SCR file!″);

exit(0);

}

sp rintf(XX,″%f″,X);

sp rintf(YY,″%f″,Y);

sp rintf(ZZ,″%f″,Z);

xl=Z>=0?strlen(XX)-l:strlen(XX);

yl=Y>=0?strlen(YY)-l:strlen(YY);

zl=Z>=0?strlen(ZZ)-l:strlen(ZZ);

L=(int)(L 3 100+.5)/100;

sp rintf(LL,″%d″L);

110=strlen(LL);

strcpy(UU,″″);

for(i=0<110;i++)

{

mid(LL,TT,i,l);

strcat(UU,TT);

if(!strcmp(TT,″.″))

{

mid(LL,TT,i+1,2);

strcat(UU,TT);

break;

}

}

strcpy(LL,UU);

ll=L>=0?strlen(LL)-l:strlen(LL);

right(LL,LL,ll);

right(XX,XX,xl);

right(YY,YY,yl);

right(ZZ,ZZ,zl);

if(I==0)

{

fp rintf(fp,″dim hor″);/3向SCR文件中写标注命令和标注参数3/

if(K==1)fp rintf(fp,″@″);

fp rintf(fp,:″%s″,XX);

fp rintf(fp,″,″);

fp rintf(fp,″%s″,YY);

fp rintf(fp,″@″);

fp rintf(fp,″%s″,LL);

fp rintf(fp,″,0@0,″);

fp rintf(fp,″%s″,ZZ);

fp rintf(fp,″″);

}

else

{

fp rintf(fp,″dim ver″);

if(K==1)fp rintf(fp,″@″);

fp rintf(fp,″%s″,XX);

fp rintf(fp,″,″);

fp rintf(fp,″%s″,YY);

fp rintf(fp,″@″);

fp rintf(fp,″%s″,LL);

fp rintf(fp,″,0@0,″);

fp rintf(fp,″%s″,ZZ);

fp rintf(fp,″″);

}

if(J==1)fp rintf(fp,″%%%%c″); if(J==2)fp rintf(fp,″r″);

if(L<0)right(LL,LL,ll-l);

fp rintf(fp,″%s″,LL);

fp rintf(fp,″exit″);

fclose(fp); /3关闭SCR文件3/

}

如果用dim liner(100,60,8,70,0,0,0)调用该函数,则在命令组文件中形成如下形式的数据:

D IM HOR 100,60@70,0@8,0 70 EXIT

在绘AutoCAD的编辑状态下,用SCRIPT命令调用含有命令组的文本文件即可生成所需绘制的直线。

四、结论

我们为AutoCAD命令编写函数,设计AutoCAD与高级语言的接口,从而成功地将高级语言的优点和AutoCAD的绘图功能有机结合起来,取得了很好的效果。

[1]方贵盛,王建军.AutoCAD二次开发技术及其应用研究[J].机床与液压,2007.06

[2]王军政.TURBO C 3.0实用高级编程技巧.北京:北京科海培训中心,2002

[3]应道宁,胡树根.中国CAD/CAM应用与研究.成都:电子科技大学出版社,2002

book=56,ebook=151

猜你喜欢

C语言调用绘图
来自河流的你
“禾下乘凉图”绘图人
基于Visual Studio Code的C语言程序设计实践教学探索
核电项目物项调用管理的应用研究
垂涎三尺
LabWindows/CVI下基于ActiveX技术的Excel调用
基于C语言的计算机软件编程
基于系统调用的恶意软件检测技术研究
高职高专院校C语言程序设计教学改革探索
Surfer和ArcView结合在气象绘图中的应用