声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 11987|回复: 29

[共享资源] [原创]把matlab中的复杂曲面导入autoCAD

[复制链接]
发表于 2007-11-6 13:53 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?我要加入

x
看到精华区里有个帖子是关于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;
[x,y,z]=cylinder(2+cos(t));
surf(x,y,z);
cylinder_matlab.jpg
%调用转换函数,生成脚本文件cylinder.scr
mat2acad3('cylinder',x,y,z);

脚本文件的可以有两种使用方法:
1.用文本编辑器打开脚本文件,复制所有内容,粘贴到autoCAD的command框;
2.在command框输入"script",弹出对话框中选择刚刚生成的cylinder.scr

之后就会生成如下的图形啦!ok,成功!~~
cylinder.jpg

例子2
[x,y]=meshgrid(-1:0.1:1);
z=x.*exp(-x.^2-y.^2);
[u,v,w]=surfnorm(x,y,z);
surf(x,y,z); axis equal
mat2acad3('exp',x,y,z);
exp_matlab.jpg
exp.jpg

例子3
[x,y]=meshgrid(1:51);
L = 40*membrane(1,25);
surface(x,y,L);
mat2acad3('Mlogo',x,y,L);
mlogo_matlab.jpg
mlogo.jpg


例子4
%%%%%%%%%%peaks
[x,y]=meshgrid(-3:.5:3,-3:.1:3);
z=peaks(x,y);
surf(x,y,z)
mat2acad3('peaks',x,y,z);

peaks_matlab.jpg
peaks.jpg

最后是函数源代码
  1. function mat2acad3(filename,x,y,z)
  2. x1=x(:);
  3. y1=y(:);
  4. z1=z(:);
  5. fid=fopen([filename,'.scr'],'w');
  6. fprintf(fid,'3dmesh\n');
  7. [a,b]=size(x);
  8. fprintf(fid,'%d\n',b);
  9. fprintf(fid,'%d\n',a);
  10. for i=1:length(x1)
  11.     fprintf(fid,'%g,%g,%g\n',x1(i),y1(i),z1(i));
  12. end
  13. fprintf(fid,'zoom\ne\n_3DORBIT\n');
  14. fclose(fid);
复制代码
有什么问题再交流,have fun~~

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

点评

赞成: 5.0
赞成: 5
  发表于 2014-3-27 18:48

评分

2

查看全部评分

回复
分享到:

使用道具 举报

 楼主| 发表于 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);
使用方法不再赘述,效果如下
ajmd_matlab.jpg

ajmd.jpg


例子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)
jkx_matlab.jpg
jkx.jpg

例子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);

lxx.jpg
lxx_matlab.jpg

最后是源代码,需要稍微说明一下的是,输入数据可以是只有x,y两列数据——程序将绘制平面图形;也可以是x,y,z三列数据——程序将绘制三维图形。
  1. function mat2acad(filename,x,y,z)
  2. nargin
  3. if nargin==3
  4.     fid=fopen([filename,'.scr'],'w');
  5.     fprintf(fid,'spline\n');
  6.     for i=1:length(x)
  7.     fprintf(fid,'%g,%g\n',x(i),y(i));
  8.     end
  9.     fprintf(fid,'\n\n\nzoom\ne\n');
  10.     fclose(fid);
  11. end
  12. if nargin==4
  13.     fid=fopen([filename,'.scr'],'w');
  14.     fprintf(fid,'spline\n');
  15.     for i=1:length(x)
  16.     fprintf(fid,'%g,%g,%g\n',x(i),y(i),z(i));
  17.     end
  18.     fprintf(fid,'\n\n\nzoom\ne\n');
  19.     fclose(fid);
  20. end
复制代码

点评

赞成: 5.0
赞成: 5
  发表于 2014-3-27 18:49

评分

1

查看全部评分

发表于 2007-11-7 06:01 | 显示全部楼层
学习,鼓励这种奉献精神!:victory:
发表于 2007-11-7 19:14 | 显示全部楼层
不错,支持原创!
发表于 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
发表于 2007-11-13 10:06 | 显示全部楼层

请教

我是初学者,有个问题请教一下。
函数mat2acad3和mat2acad在那里定义?是在matlab中,还是在acad中,我试了几次,没有成功
发表于 2007-11-14 13:56 | 显示全部楼层
本帖最后由 wdhd 于 2016-3-30 13:22 编辑
原帖由 whb-gy 于 2007-11-13 10:06 发表
我是初学者,有个问题请教一下。
函数mat2acad3和mat2acad在那里定义?是在matlab中,还是在acad中,我试了几次,没有成功

看格式可以知道是在Matlab中
发表于 2007-11-15 14:21 | 显示全部楼层
下面是不是该攻克pro/e了?呵呵,真强!不过大家一般都是在cad里面画二维图,在pro/e里面画三维,你们这些程序最终要造成的后果是:所有的图形都在matlab里面建函数,cad,pro/e等最终成为一个显示终端(显示器)了,不过想想,这样其实挺方便的,学习学习!

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

[ 本帖最后由 eight 于 2007-11-15 15:17 编辑 ]
发表于 2007-11-20 08:54 | 显示全部楼层

回复 #8 spano 的帖子

谢谢,我再试试。
发表于 2007-11-20 10:09 | 显示全部楼层

求助!!!

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

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

非常感谢!!!!
发表于 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 这个帖子在置顶帖中就有
发表于 2007-11-20 21:38 | 显示全部楼层

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

发表于 2008-5-5 16:10 | 显示全部楼层
http://forum.vibunion.com/forum/thread-2012-1-150.html
楼主的帖子和这个连接中的帖子有些神似啊!

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

楼主也试试实体吧。
发表于 2008-5-28 12:21 | 显示全部楼层

回复 14楼 的帖子

给一些代码和实例看看
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

QQ|小黑屋|Archiver|手机版|联系我们|声振论坛

GMT+8, 2024-11-29 02:54 , Processed in 0.063434 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表