使用Matlab生成脚本文件实现在autoCAD中绘制复杂图形(参数化绘图)
2007-10-24 09:01阅读:
问题的提出:使用autoCAD绘制重复的但略有差别的图形是很麻烦的事情,希望实现参数化绘图;或者使用脚本文件来播放幻灯片;绘制一个复杂的函数图形。
下面将以参数化绘图和绘制复杂函数图形为例进行说明。
什么是脚本文件?
脚本是每行包含一个命令的文本文件(类似于dos的批处理文件),其扩展名为.scr。
脚本文件的格式
autoCAD脚本,其实可以看作是键盘输入的记录。编写的规则为:
(1)空格即代表回车
(2)每行末尾无论有无空格都自动加一空格
(3)以';'开头注释行
(4)字母大小写不敏感
运行
在autoCAD命令窗中输入'script',则会弹出对话框,选择要运行的脚本即可。
一个小例子
例如,下面的一段脚本
;
circle 6.5,5.0 0.5
arc 7.5,5.0 6.5,6.0 5.5,5.0
line 5.5,5.0 5.5,3.0 7.5,5.0 7.5,3.0
rectang 5.0,3.0 8.0,2.5
zoom e
;
将会生成如下图形。
若采用高级语言(如matlab或C++等)生成上述脚本文件,则可以实现参数化的绘图,具体方法不详述。
下面是
我们要解决的问题——绘制复杂的图形
具体方法就是使用matlab生成所需数据,并产生脚本文件,之后在autoCAD中执行该脚本。
例如,下面的matlab程序产生的脚本可以在autoCAD中绘制y=sin(5x)/x的图形。
x=-pi:0.01:pi;
y=sin(5*x)./x;
fid=fopen('sss.scr','w');
fprintf(fid,'line');
for i=1:length(x)
fprintf(fid,'%g,%g',x(i),y(i));
end
fclose(fid);
最后是一个绘制较简单拱桥立面的例子。下面的matlab程序将生成sg.scr。
%%%%%%%%%%%%%%%%%%%
x=-180:5:180;
R=300;
r=290;
y1=sqrt(R^2-x.^2);
y2=sqrt(r^2-x.^2);
fid=fopen('sg.scr','w');
fprintf(fid,'line');
for i=1:length(x)
fprintf(fid,'%g,%g',x(i),y1(i));
end
fprintf(fid,'line');
for i=1:length(x)
fprintf(fid,'%g,%g',x(i),y2(i));
end
fprintf(fid,'');
for i=1:length(x)-1
fprintf(fid,'line %g,%g %g,%g
',x(i),y2(i),x(i),y1(i));
if x(i)<0
fprintf(fid,'line %g,%g %g,%g ',x(i),y1(i),x(i+1),y2(i+1));
elseif x(i)>=0
fprintf(fid,'line %g,%g %g,%g ',x(i),y2(i),x(i+1),y1(i+1));
end
end
fclose(fid);
%%%%%%%%%%%%%%%%%%%%%
在autoCAD中运行sg.scr,则生成拱桥的立面图如下。
当然上边的例子还比较简单,但是复杂的内容也就是在具体实现上比较复杂吧。
ps:上述程序和脚本在matlab7.0及autoCAD2004下测试通过。
good luck~~