[原创]把matlab中的复杂曲面导入autoCAD
看到精华区里有个帖子是关于matlab 曲面转ansys的,很精彩。最后hunter_009 提出了一个导入autoCAD的问题,我觉得也很有意义,就自己弄了个函数,实现把matlab可以绘制的复杂图形导入autoCAD.先举个例子,再附函数源代码。这个就是精华区里,导入ansys的那个曲面。
mat2acad3(filename,x,y,z)
filename--指定生成的autoCAD脚本文件名。
x,y,z--数据数组,测试一下,在matlab里能用surface画出来就可以啦。
t=0:pi/10:2*pi;
=cylinder(2+cos(t));
surf(x,y,z);
%调用转换函数,生成脚本文件cylinder.scr
mat2acad3('cylinder',x,y,z);
脚本文件的可以有两种使用方法:
1.用文本编辑器打开脚本文件,复制所有内容,粘贴到autoCAD的command框;
2.在command框输入"script",弹出对话框中选择刚刚生成的cylinder.scr
之后就会生成如下的图形啦!ok,成功!~~
例子2
=meshgrid(-1:0.1:1);
z=x.*exp(-x.^2-y.^2);
=surfnorm(x,y,z);
surf(x,y,z); axis equal
mat2acad3('exp',x,y,z);
例子3
=meshgrid(1:51);
L = 40*membrane(1,25);
surface(x,y,L);
mat2acad3('Mlogo',x,y,L);
例子4
%%%%%%%%%%peaks
=meshgrid(-3:.5:3,-3:.1:3);
z=peaks(x,y);
surf(x,y,z)
mat2acad3('peaks',x,y,z);
最后是函数源代码function mat2acad3(filename,x,y,z)
x1=x(:);
y1=y(:);
z1=z(:);
fid=fopen(,'w');
fprintf(fid,'3dmesh\n');
=size(x);
fprintf(fid,'%d\n',b);
fprintf(fid,'%d\n',a);
for i=1:length(x1)
fprintf(fid,'%g,%g,%g\n',x1(i),y1(i),z1(i));
end
fprintf(fid,'zoom\ne\n_3DORBIT\n');
fclose(fid);有什么问题再交流,have fun~~
[ 本帖最后由 eight 于 2007-11-15 15:18 编辑 ]
[继续原创]曲线转入autoCAD函数及示例
和曲面的情况类似的,还有曲线的情形。还是先看例子吧阿基米德螺线
clear;clc
t=0:0.02:10;
r=10*(1+t);
x=r.*cos(t*2*pi);
y=r.*sin(t*2*pi);
z=zeros(1,length(t));
plot(x,y);
axis equal
mat2acad('ajmd',x,y);
使用方法不再赘述,效果如下
例子2 渐开线
br=10;
a=2*pi*t;
x=br*(cos(a)+a.*sin(a));
y=br*(sin(a)-a.*cos(a));
z=zeros(length(t),1);
plot(x,y);
axis equal
mat2acad('jkx',x,y)
例子3 螺旋线
r=5;
x=r*cos(2*pi*t);
y=r*sin(2*pi*t);
z=t;
plot3(x,y,z);
axis equal
mat2acad('lxx',x,y,z);
最后是源代码,需要稍微说明一下的是,输入数据可以是只有x,y两列数据——程序将绘制平面图形;也可以是x,y,z三列数据——程序将绘制三维图形。function mat2acad(filename,x,y,z)
nargin
if nargin==3
fid=fopen(,'w');
fprintf(fid,'spline\n');
for i=1:length(x)
fprintf(fid,'%g,%g\n',x(i),y(i));
end
fprintf(fid,'\n\n\nzoom\ne\n');
fclose(fid);
end
if nargin==4
fid=fopen(,'w');
fprintf(fid,'spline\n');
for i=1:length(x)
fprintf(fid,'%g,%g,%g\n',x(i),y(i),z(i));
end
fprintf(fid,'\n\n\nzoom\ne\n');
fclose(fid);
end 学习,鼓励这种奉献精神!:victory: 不错,支持原创! 相当不错的思路!鼓掌!
吾友waitingforme也曾经实现将MATLAB中的矩阵插入cad自动生成表格,但是调用了几个activeX。
sogooda这个思想我很早以前就想实现——当时是一种比较直觉和粗糙的想法,毕竟数据格式都支持双精度,完全可以实现接口。但是由于不大了解autocad内脚本文件的运行机制,后来作罢。今天才知道scr文件的用途,不知道它和另一种CAD文件格式*.dxf之间功能上有多大区别?
最近比较忙,过段时间把它调整一下写成GUI。进一步地,这个思想完全可以扩展:例如UG、solidwork和catia等三维软件之间如果与MATLAB实现几何模型数据共享,将会为比较复杂的空间曲面建模带来一些方便。
PS:我将此贴转贴到simwe论坛,希望楼主不要介意。 本帖最后由 wdhd 于 2016-3-30 13:21 编辑
原帖由 superliu 于 2007-11-7 06:01 发表
学习,鼓励这种奉献精神!:victory:
非常同意,期待楼主新作:handshake
请教
我是初学者,有个问题请教一下。函数mat2acad3和mat2acad在那里定义?是在matlab中,还是在acad中,我试了几次,没有成功 本帖最后由 wdhd 于 2016-3-30 13:22 编辑
原帖由 whb-gy 于 2007-11-13 10:06 发表
我是初学者,有个问题请教一下。
函数mat2acad3和mat2acad在那里定义?是在matlab中,还是在acad中,我试了几次,没有成功
看格式可以知道是在Matlab中 下面是不是该攻克pro/e了?呵呵,真强!不过大家一般都是在cad里面画二维图,在pro/e里面画三维,你们这些程序最终要造成的后果是:所有的图形都在matlab里面建函数,cad,pro/e等最终成为一个显示终端(显示器)了,不过想想,这样其实挺方便的,学习学习!
可不可以在matlab里面直接做成实体,然后导入呢?
[ 本帖最后由 eight 于 2007-11-15 15:17 编辑 ]
回复 #8 spano 的帖子
谢谢,我再试试。求助!!!
我刚学matlab软件,定义函数mat2acad3和mat2acad时,总提示我“Error: Function definitions are not permitted at the prompt or in scripts.”那位大侠能给指点一下啊???
非常感谢!!!! 本帖最后由 wdhd 于 2016-3-30 13:22 编辑
原帖由 whb-gy 于 2007-11-20 10:09 发表
我刚学matlab软件,定义函数mat2acad3和mat2acad时,总提示我“Error: Function definitions are not permitted at the prompt or in scripts.”
那位大侠能给指点一下啊???
非常感谢!!!!
我希望初来的朋友都习惯一下我们论坛的不成文约定:先自己动脑、动手解决,搞不懂了再发帖。
你提到的问题在置顶帖中就找到答案:http://www.chinavib.com/forum/thread-46001-1-1.html 这个帖子在置顶帖中就有
感谢eight,我把帖子收藏了.
http://forum.vibunion.com/forum/thread-2012-1-150.html楼主的帖子和这个连接中的帖子有些神似啊!
当时用那个程序还换了不少积分呢。
我的程序已经逐渐完善,可以把实体特征导入。
楼主也试试实体吧。
回复 14楼 的帖子
给一些代码和实例看看
页:
[1]
2