摘要:“.SRC”是AutoCAD與高級語言的一個聯結接口,文章主要闡述利用高級C語言產生命令組文件“.SRC”,在AutoCAD環境下實現參數化繪圖。以繪制整體式小齒輪為例,編寫了產生命令組文件“.SRC”的C語言程序,介紹了從C語言到產生命令組文件“.SRC”,再到AutoCAD環境下實現參數化繪圖的整個過程。
關鍵詞:AutoCAD;高級語言;參數化繪圖;C語言;命令組文件
中圖分類號:TP391文獻標識碼:A文章編號:1009-3044(2008)26-1861-03
Application of Advanced Language in the AutoCAD
ZOU Hai-hua, HUANG Jin
(School of Power and Mechanical Engineering, Wuhan University, Wuhan 430072, China)
Abstract: \".SRC\" is the interface to link the advanced language and AutoCAD. The article expound that use the C language to produce script files \".SRC\",then , the parametric drawing has been realized in the AutoCAD.For example,to draw anintegral pinion,compile a script file \".SRC\" produced by C language and introducedhow to produce script files by C language and parametric drawing how to realize in the AutoCAD.
Key words: AutoCAD; advanced language; parametric drawing; C language; script file
1 前言
AutoCAD具有很強的圖形編輯能力,但是在現今,交互式繪圖遠遠不能滿足我們的工程要求,CAD正朝著智能化方向發展。AutoCAD中提供了與高級語言的一個聯結接口“.SRC”,我們可以利用高級語言產生命令組文件“.SRC”,在AutoCAD環境下實現參數化繪圖。高級語言中,C語言應用比較廣,所以本文主要介紹C語言在AutoCAD實現命令組文件參數化繪圖中的應用。
AutoCAD允許用戶建立一個后綴為.SCR的命令組文件,命令組文件的內容為一組命令,AutoCAD運行這個命令組文件時,可執行預定的命令序列。因此,可利用命令組文件實現參數化繪圖。命令組文件可以通過高級語言的寫程序產生,其過程如圖1所示。
下面以繪制整體式小齒輪為例,介紹C語言在AutoCAD實現命令組文件參數化繪圖中的應用。
2 實現過程
2.1 AutoCAD環境的設置
先在AutoCAD 2007中新建粗實線圖層“0”,細實線圖層“2”,中心線圖層“3”,并進行相關的設置。當然圖層的新建及設置可以在程序中實現。
2.2 用Turbo C for Windows 集成實驗與學習環境編寫程序
#include \"stdio.h\"
#include \"string.h\"
main()
{drawpart();
return 0;}
int drawpart()
{ FILE *fp;
float x0,y0,m,z,b,d0,da,df,d,r0,r,ra,rf,ha,c,b0;
/*模數m,齒數z,齒寬b,軸孔直徑d0,分度圓直徑d,齒頂圓直徑da,齒根圓直徑df,齒頂高系數ha,頂隙系數c*/
printf(\"請輸入x0,y0:\\");
scanf(\"%f%f\", x0,y0);
printf(\"請輸入模數m,齒數z,軸孔直徑d0,齒寬b:\\");
scanf(\"%f%f%f%f,\", m,z,d0,b);
printf(\"請輸入齒頂高系數ha,頂隙系數c:\\");
scanf(\"%f%f\", ha,c);
d=m*z; da=(z+2*ha)*m; df=(z-2*ha-2*c)*m;
ra=da/2.0;rf=df/2.0;r0=d0/2.0;b0=b/2.0;r=d/2.0;
printf(\"d0=%f,b=%f,d=%f,da=%f,df=%f:\\",d0,b,d,da,df);
printf(\"b0=%f,r0=%f,ra=%f,rf=%f:\\",b0,r0,ra,rf);
fp=fopen(\"ZHH.scr\", \"w\");
fprintf(fp,\"limits 0,0 500,500\\");
fprintf(fp,\"zoom a\\");
fprintf(fp,\"layer s 0 \\");
fprintf(fp,\"line %.2f,%.2f %.2f,%.2f %.2f,%.2f %.2f,%.2f %.2f,%.2f %.2f,%.2f \\",
x0,y0,x0,y0+r0+2,x0+2,y0+r0,x0+b-2,y0+r0,x0+b,y0+r0+2,x0+b,y0);
fprintf(fp,\"line %.2f,%.2f %.2f,%.2f \\", x0+2,y0+r0,x0+2,y0);
fprintf(fp,\"line %.2f,%.2f %.2f,%.2f \\", x0+b-2,y0+r0,x0+b-2,y0);
fprintf(fp,\"line %.2f,%.2f %.2f,%.2f %.2f,%.2f %.2f,%.2f C\\",
x0,y0+r0+5,x0+b,y0+r0+5,x0+b,y0+rf,x0,y0+rf);
fprintf(fp,\"line %.2f,%.2f %.2f,%.2f \\",x0,y0+r0+5,x0,y0+r0+2);
fprintf(fp,\"line %.2f,%.2f %.2f,%.2f \\",x0+b,y0+r0+5,x0+b,y0+r0+2);
fprintf(fp,\"line %.2f,%.2f %.2f,%.2f %.2f,%.2f %.2f,%.2f %.2f,%.2f %.2f,%.2f \\",
x0,y0+rf,x0,y0+ra-2,x0+2,y0+ra,x0+b-2,y0+ra,x0+b,y0+ra-2,x0+b,y0+rf);
fprintf(fp,\"layer s 3 \\");
fprintf(fp,\"line %.2f,%.2f %.2f,%.2f \\",x0-5,y0+r,x0+b+5,y0+r);
fprintf(fp,\"line %.2f,%.2f %.2f,%.2f \\",x0-5,y0,x0+b+5,y0);
fprintf(fp,\"mirror w %.2f,%.2f %.2f,%.2f%.2f,%.2f %.2f,%.2f n\\",
x0-8,y0-5,x0+b+5,y0+ra+8,x0-5,y0,x0+b+5,y0);/*鏡像*/
fprintf(fp,\"layer s 2 \\");
fprintf(fp,\"hatch u 45 4 n w %.2f,%.2f %.2f,%.2f \\",
x0-5,y0+r0+2,x0+b+5,y0+rf+2);/*畫剖面線*/
fprintf(fp,\"hatch u 45 4 n w %.2f,%.2f %.2f,%.2f \\",
x0-5,y0-r0+2,x0+b+5,y0-rf-2);/*畫剖面線*/
fprintf(fp,\"erase w %.2f,%.2f %.2f,%.2f \\",
x0-0.5,y0-r0-5.5,x0+b+0.5,y0-r0-4.5);/*刪除其中一條直線*/
fprintf(fp,\"layer s 2 \\");
fprintf(fp,\"dim\\");/*開始標注相關尺寸*/
fprintf(fp,\"dimtxt 4\\");
fprintf(fp,\"hor %.2f,%.2f %.2f,%.2f %.2f,%.2f %.2f \\",
x0,y0+rf,x0+b,y0+rf,x0+b0,y0+ra+6,b);
fprintf(fp,\"ver %.2f,%.2f %.2f,%.2f %.2f,%.2f %%%%C%.2f \\",
x0,y0-r0,x0,y0+r0+5,x0-8,y0,d0+5);
fprintf(fp,\"ver %.2f,%.2f %.2f,%.2f %.2f,%.2f %%%%C%.2f \\",
x0,y0-rf,x0,y0+rf,x0-16,y0,df);
fprintf(fp,\"ver %.2f,%.2f %.2f,%.2f %.2f,%.2f %%%%C%.2f \\",
x0,y0-r,x0,y0+r,x0-24,y0,d);
fprintf(fp,\"ver %.2f,%.2f %.2f,%.2f %.2f,%.2f %%%%C%.2f \\",
x0,y0-ra,x0,y0+ra,x0-32,y0,da);
fprintf(fp,\"EXIT\\");
fclose(fp);
return 0;}
2.4 調用命令組文件,實現參數化繪圖
在AutoCAD Command狀態下,鍵入“SCRIPT”,找到命令組文件“ZHH.SRC”,打開便可。繪圖結果如圖3。
3 命令組文件其它常用的命令
命令組文件中除了SCRIPT命令,還有常用的幾個命令,利用這些命令可以方便我們用戶繪圖,提高效率。
1) delay命令:delay命令用于延時。
2) RSCRIPT命令:在命令組文件中加入一條RSCRIPT命令,可直接請求重新運行用SCRIPT命令調用的命令組文件。
4 結語
在進行尺寸標注時,直徑 的標注利用了C語言printf函數的特點,如fprintf(fp,\"ver %.2f,%.2f %.2f,%.2f %.2f,%.2f %%%%C%.2f \\", x0,y0-rf,x0,y0+rf,x0-16,y0,df);先在命令組文件中產生%%Cdf,AutoCAD調用命令組文件繪圖時,就可以自動標注直徑 。值得注意的是利用C語言產生命令組文件時,C語言程序中對空格的要求極為嚴格,程序中的空格,就相當于AutoCAD中的“回車”鍵。因此,在書寫程序時,應認真仔細。
利用高級語言在AutoCAD中實現參數化繪圖,提高工作效率,給用戶也帶來了很大的方便。同時,由于C語言應用面很廣,這種方法很容易推廣。
參考文獻:
[1] 袁澤虎,戴錦春.計算機輔助設計與制造[M].北京:中國水利水電出版社,2004.
[2] 濮良貴,紀名剛.機械設計[M].北京:高等教育出版社,2006.
[3] 徐灝.機械設計手冊[M].北京:機械工業出版社,1988.
[4] 孫桓,陳作模,葛文杰.機械原理[M].北京:高等教育出版社,2006.
[5] 胡建國,李亞萍,汪鳴琦.機械工程圖學[M].武漢:武漢大學出版社,2004.