找回密码
 注册
Simdroid-非首页
查看: 186|回复: 4

【求助】VC6.0和matlab6.5混合编程时,图形函数库的调用方法

[复制链接]
发表于 2008-11-5 10:51:09 | 显示全部楼层 |阅读模式 来自 江苏镇江
各位会员,大家好!
    如何在vc6.0中使用matlab的C++图形函数库,这个问题困扰我两个星期了,请大家伸手相助。
    先介绍一下我混合编程的水平,通过阅读论坛里关于混合编程的帖子,目前我已经能够熟练掌握混合编程时的VC6.0工程设置方法,debug和release模式都可以调试了,matlab图形界面嵌入VC的方法也基本掌握,数学函数库有相关pdf可以参考,但是图形函数的调用还是一头雾水。
    我阅读了MATLAB6p5\extern\include目录和MATLAB6p5\extern\include\cpp目录下的头文件,主要看了其中的少量注释,这些应该是相关图形库dll的接口函数,有很多函数还看不懂,我最关心的是图形库接口头文件libsgl.hpp,其中的函数大多有32个输入变量,并且变量类型都一样,编号递增,有些有输出变量,有些没有,举例如下:
inline mwArray axes(const mwVarargin &in1, const mwArray &in2=mwArray::DIN, const mwArray &in3=mwArray::DIN, const mwArray &in4=mwArray::DIN, const mwArray &in5=mwArray::DIN, const mwArray &in6=mwArray::DIN, const mwArray &in7=mwArray::DIN, const mwArray &in8=mwArray::DIN, const mwArray &in9=mwArray::DIN, const mwArray &in10=mwArray::DIN, const mwArray &in11=mwArray::DIN, const mwArray &in12=mwArray::DIN, const mwArray &in13=mwArray::DIN, const mwArray &in14=mwArray::DIN, const mwArray &in15=mwArray::DIN, const mwArray &in16=mwArray::DIN, const mwArray &in17=mwArray::DIN, const mwArray &in18=mwArray::DIN, const mwArray &in19=mwArray::DIN, const mwArray &in20=mwArray::DIN, const mwArray &in21=mwArray::DIN, const mwArray &in22=mwArray::DIN, const mwArray &in23=mwArray::DIN, const mwArray &in24=mwArray::DIN, const mwArray &in25=mwArray::DIN, const mwArray &in26=mwArray::DIN, const mwArray &in27=mwArray::DIN, const mwArray &in28=mwArray::DIN, const mwArray &in29=mwArray::DIN, const mwArray &in30=mwArray::DIN, const mwArray &in31=mwArray::DIN, const mwArray &in32=mwArray::DIN)

    我学习了SCIE大哥:) 的【原创】MATLAB与VC界面混合编程尝试,现在正在研究nostalgica大哥:) 的【原创】VC6.0调用Matlab6.5数学库函数和图形库函数编程实例,随着使用的函数增多,对它们的困惑也多起来。
    比如VC使用matlab里面的figure函数,SCIE和nostalgica大哥定义的参数名和matlab编写的GUI函数参数类似,我把它们进行了比较:
原GUI函数中figure调用格式:

h0 = figure('Units','points', ...
'Color',[0.8 0.8 0.8], ...
'Colormap',mat0, ...
'DeleteFcn','clear gui_*;', ...
'MenuBar','none', ...
'PointerShapeCData',mat1, ...
'Position',[88.5 272.25 438.75 309.75], ...
'Renderer','zbuffer', ...
'RendererMode','manual', ...
'Tag','Fig1', ...
'WindowButtonDownFcn','[gui_bdx,gui_bdy,gui_bnd] = nginput(0);', ...
'WindowButtonUpFcn',mat2);


在VC中调用figure的格式:

m_mwhFigure = figure(
mwArray("DoubleBuffer"), mwArray("On"),
mwArray("NumberTitle"), mwArray("Off"),
mwArray("Name"), strFigName,
mwArray("Menubar"), mwArray("None"),
mwArray("Color"), BKColor,
mwArray("Renderer"), mwArray("zbuffer"),
mwArray("Visible"), strVisible);

由此我不禁联想是否VC中调用matlab图形函数的格式都是像这样,加上mwArray("")就行了?
    但是其它例如plot3()函数却不太相同:
matlab中plot3()函数

t=(0:0.02:2)*pi;
x=sin(t);
y=cos(t);
z=cos(2*t);
plot3(x,y,z,'b-',x,y,z,'bd');
view([-82,58]),box on,


VC中调用plot3()函数
mwArray pi=3.14;
mwArray t0= colon(mwArray(0), mwArray(0.02), mwArray(2));
mwArray t=t0*pi;
mwArray x=sin(t);
mwArray y=cos(t);
mwArray z=cos(2*t);
plot3(x,y,z,"b-",x,y,z,"bd");
view(m_mwhAxis,-82,58);


    VC里面的plot3()函数调用格式几乎和matlab中一样,不用加mwArray("")。这种区别令我不解,到底matlab中图形函数如何调用,希望大家指点一二,谢谢。

测试程序界面:



[ 本帖最后由 bainhome 于 2008-11-5 18:25 编辑 ]

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
发表于 2008-11-6 09:13:44 | 显示全部楼层 来自 山东青岛
Simdroid开发平台
其实在VC中调用figure函数时,对于字符串参数也可以不加 mwArray的,因为编译器会自动完成字符串到mwArray的转换。
在dblmtrx.h中可以看到mwArray类的定义,其中有一个构造函数为:mwArray(const char *str);,允许从一个C类型的字符串构造 mwArray 对象,这样你在函数参数中仅写一个常值字符串,编译器就可以替你进行自动类型转换了。就像在混合运算中会自动将整型转换为浮点数一样。

评分

1

查看全部评分

回复 不支持

使用道具 举报

 楼主| 发表于 2008-11-6 10:45:42 | 显示全部楼层 来自 江苏镇江

回复 2# SCIE 的帖子

感谢SCIE大哥的回复!我刚才试了试,把mwArray("")去掉果然可以实现,只需要把在matlab中定义的函数属性的单引号换成双引号就行了。

matlab中
(...'PropertyName',PropertyValue,...)

VC中换成
(..."PropertyName",PropertyValue,...)


我编程水平还处于初级阶段,对于很多程序的理解还停留在表面,理解不深入,我想这是影响我使用matlab函数库的主要障碍。我会努力赶上的。
昨晚参考了一下matlab数学函数库的声明和原型,有了一点认识:
mathworks公司在发布数学函数库时肯定是至少考虑了以下两个方面:
1.针对matlab原型,要保证C++函数的易用性,保持matlab函数的原有风格;
2.考虑函数输入输出,函数重载等问题。
我目前的思路是通过matlab的help搜索相关图形函数在matlab中的调用格式,然后在Visual Asist的帮助下,对相关C++函数进行实验,不知道能不能逐渐理解?

[ 本帖最后由 lyzero0 于 2008-11-6 21:44 编辑 ]

评分

1

查看全部评分

回复 不支持

使用道具 举报

发表于 2009-4-24 18:03:43 | 显示全部楼层 来自 西安交通大学
太帅了,我何时可以达到你这种程度啊,羡慕

评分

1

查看全部评分

回复 不支持

使用道具 举报

发表于 2009-4-27 09:05:36 | 显示全部楼层 来自 北京
Visual Asist很有用,我那时也最到后面也是靠它, 能提示库里有哪些函数,也能提示函数原型.
回复 不支持

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Simapps系列直播

Archiver|小黑屋|联系我们|仿真互动网 ( 京ICP备15048925号-7 )

GMT+8, 2024-10-7 09:23 , Processed in 0.065243 second(s), 19 queries , Gzip On, MemCache On.

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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