sogooda 发表于 2007-11-6 13:53

[原创]把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 编辑 ]

sogooda 发表于 2007-11-6 14:35

[继续原创]曲线转入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

superliu 发表于 2007-11-7 06:01

学习,鼓励这种奉献精神!:victory:

star198311 发表于 2007-11-7 19:14

不错,支持原创!

bainhome 发表于 2007-11-7 20:55

相当不错的思路!鼓掌!
吾友waitingforme也曾经实现将MATLAB中的矩阵插入cad自动生成表格,但是调用了几个activeX。
sogooda这个思想我很早以前就想实现——当时是一种比较直觉和粗糙的想法,毕竟数据格式都支持双精度,完全可以实现接口。但是由于不大了解autocad内脚本文件的运行机制,后来作罢。今天才知道scr文件的用途,不知道它和另一种CAD文件格式*.dxf之间功能上有多大区别?
最近比较忙,过段时间把它调整一下写成GUI。进一步地,这个思想完全可以扩展:例如UG、solidwork和catia等三维软件之间如果与MATLAB实现几何模型数据共享,将会为比较复杂的空间曲面建模带来一些方便。
PS:我将此贴转贴到simwe论坛,希望楼主不要介意。

花如月 发表于 2007-11-7 22:23

本帖最后由 wdhd 于 2016-3-30 13:21 编辑

原帖由 superliu 于 2007-11-7 06:01 发表
学习,鼓励这种奉献精神!:victory:
非常同意,期待楼主新作:handshake

whb-gy 发表于 2007-11-13 10:06

请教

我是初学者,有个问题请教一下。
函数mat2acad3和mat2acad在那里定义?是在matlab中,还是在acad中,我试了几次,没有成功

spano 发表于 2007-11-14 13:56

本帖最后由 wdhd 于 2016-3-30 13:22 编辑

原帖由 whb-gy 于 2007-11-13 10:06 发表
我是初学者,有个问题请教一下。
函数mat2acad3和mat2acad在那里定义?是在matlab中,还是在acad中,我试了几次,没有成功
看格式可以知道是在Matlab中

vib 发表于 2007-11-15 14:21

下面是不是该攻克pro/e了?呵呵,真强!不过大家一般都是在cad里面画二维图,在pro/e里面画三维,你们这些程序最终要造成的后果是:所有的图形都在matlab里面建函数,cad,pro/e等最终成为一个显示终端(显示器)了,不过想想,这样其实挺方便的,学习学习!

可不可以在matlab里面直接做成实体,然后导入呢?

[ 本帖最后由 eight 于 2007-11-15 15:17 编辑 ]

whb-gy 发表于 2007-11-20 08:54

回复 #8 spano 的帖子

谢谢,我再试试。

whb-gy 发表于 2007-11-20 10:09

求助!!!

我刚学matlab软件,定义函数mat2acad3和mat2acad时,总提示我“Error: Function definitions are not permitted at the prompt or in scripts.”

那位大侠能给指点一下啊???

非常感谢!!!!

eight 发表于 2007-11-20 15:44

本帖最后由 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 这个帖子在置顶帖中就有

whb-gy 发表于 2007-11-20 21:38

感谢eight,我把帖子收藏了.

paradiseboy 发表于 2008-5-5 16:10

http://forum.vibunion.com/forum/thread-2012-1-150.html
楼主的帖子和这个连接中的帖子有些神似啊!

当时用那个程序还换了不少积分呢。
我的程序已经逐渐完善,可以把实体特征导入。

楼主也试试实体吧。

16443 发表于 2008-5-28 12:21

回复 14楼 的帖子

给一些代码和实例看看
页: [1] 2
查看完整版本: [原创]把matlab中的复杂曲面导入autoCAD