Matlab VC 联合编程 控制台以及MFC中实现(三)

下面给出第一个程序,

Matlab函数文件为Scan_Data_Display.m

function Scan_Data_Display(fileName) %二维扫描数据,直接显示出来 %fileName 激光测距仪采集出来的一帧数据 %% %读入数据 fileID = fopen(fileName); tempData = fscanf(fileID, '%3x'); data = tempData(9:size(tempData,1)-3); %数据重组,distanceData=[distance,theta,x,y] distanceData = zeros(size(data,1)/2, 4); for i=1:size(data,1)/2 distanceData(i,1) = (data(2*i)*256 + data(2*i-1))/1000;%距离,高字节在后,低字节在前 distanceData(i,2) = (i-1)*0.5;%theta角度,角度制 distanceData(i,3) = distanceData(i,1)*cos(distanceData(i,2)*pi/180);%x轴方向 distanceData(i,4) = distanceData(i,1)*sin(distanceData(i,2)*pi/180);%y轴方向 end distanceData(:,1) %% %%数据显示 figure plot(distanceData(:,3),distanceData(:,4),'LineWidth',2); title('2D Scanning Data'); xlabel('m'); ylabel('m') hold on grid on

该函数主要作用是读取一个保存有激光测距仪SICK LMS 221一次测量数据的文档,对数据进行转化,并调用plot画出来,其中参数为文件名.

按照demo中的方法,即切换到m文件所在目录,运行deploytool,这时候的name就是以后生成的lib文件名,这里输入plot,target选择C++ Shared Library,将m函数文件添加进去,build完成后最好再package一下,可以根据需要选择是否打包MCR (MCR的主要作用就是在没有安装matlab的电脑上面安装MCR就可以正常运行之后的程序,而不需要安装完整的matlab, MCR在/toolbox/compiler/deploy/win32目录下,也可以直接拷到其他电脑上安装),打包完成后会生成一个plot_pkg.exe文件.

打开VS2005新建一个console程序,将之前得到的plot_pkg.exe复制到程序目录下,运行一下,就会得到相应的plot.h,plot.lib,plot.dll.新建一个cpp文件,写入如下代码

#include "matlab_header.h" #pragma comment(lib, "plot.lib") #include "plot.h" #include <iostream> int main() { if( !mclInitializeApplication(NULL,0) ) { std::cerr<<"could not initialize the application"<<std::endl; return -2; } if (!plotInitialize()) { std::cerr<<"could not initialize plot/n"; return -3; } mwArray fileName("2D_Scan_data_2010_10_19_10_10.txt"); Scan_Data_Display(fileName); mclWaitForFiguresToDie(NULL); plotTerminate(); mclTerminateApplication(); return 0; }

这里需要注意几个函数调用的顺序.

然后编译运行,等待一段时间就可以看到画出来的图了,注意这里的mclWaitForFiguresToDie(NULL);该函数等待用户关闭所有的figure文件后返回,如果没有这一句,figure只会停留很短的时间,甚至根本看不到.

运行截图如下:

Matlab VC 联合编程 控制台以及MFC中实现(三)_第1张图片

所有源程序在这里可以下到 http://download.csdn.net/source/2827645    

你可能感兴趣的:(Matlab VC 联合编程 控制台以及MFC中实现(三))