⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mavis.h

📁 机器人程序
💻 H
字号:
// Mavis.h - by Robin Hewitt, 2004-2005
// http://www.robinhewitt.com/mavis
// This is free software. See license at the bottom
// of this file for terms of use.
//

//////////////////////////////////////////////////////////////
// Header file for the Mavis class, the main control class
// for mavis.
//

// special project settings:
//    added post-build command: copy Debug\mavis.lib ..\..\lib

#ifndef __MAVIS_CLASS_
#define __MAVIS_CLASS_

#include "MVLib.h"
#include <string>
#include <windows.h>

using namespace std;

class MVFrame;
class MavisErr;
class Camera;
class Params;
class Logger;
class CalibrationHelper;
class MVObjFactory;
class Pixel;
class MVObj;
class ImgDB;
struct CtlData_t;
struct ObjLoc_t;
struct CameraData_t;

// prototype for the optional callback to display frames
// from Mavis
typedef int (*MAVISCB)(BYTE *, int);


//////////////////////////////////////////////////////////////
//  Class: Mavis
//
class Mavis
{

public:
	//////////////////
	//  Constructor
	//
	//  INPUTS:  MAVISCB - optional callback function for receiving frames
	//           that Mavis has processed.
	//
	Mavis(MAVISCB cb=NULL);

	~Mavis();


	//////////////////
	//  FUNCTION: setFrameCB()
	//
	//  PURPOSE:  Set a callback for receiving frames that Mavis has processed.
	//
	//  INPUTS:   MAVISCB - the callback function for receiving frames.
	//
	void setFrameCB(MAVISCB);


	//////////////////
	//  FUNCTION: run()
	//
	//  PURPOSE:  Run Mavis - listens for and processes vision requests.
	//
	//  COMMENTS: This method contains the main processing loop. This loop
	//            should run in a separate thread because the run() method
	//            does not return until processing is stopped. To exit the
	//            processing loop, call Mavis::stop() from another thread.
	//
	void run();

	// Halts the processing loop. After calling stop(), Mavis will not respond
	// to requests until run() is called again.
	void stop();

	// Accessor functions for Mavis objects
	CalibrationHelper * getCalibrationHelper();
	Params * getParams() {return pParams;}
	Logger * getLogger() {return pLogger;}
	Camera * getCamera() {return pCamera;}
	ImgDB * getImgDB() {return pImgDB;}

	void getCameraData(CameraData_t *);


	// Video-frame data and metadata
	VideoFrame * pCurrentFrame;
	VideoFrame * getNextFrame();

	int  getImgWidth();
	int  getImgHeight();
	int  getFrameSize() { return frameSize; }


	// Draw a cross onto the image to mark a pixel location.
	void markLoc(Pixel_t &, int rgb, int h, int w);

protected:
	friend class CalibrationHelper;
	void showFrame();

private:
	MAVISCB   displayCB;  //optional callback function for frame display

	bool      bStop;
	MVFrame * pFrame;
	int       frameSize;

	Params *  pParams;
	Logger *  pLogger;
	Camera * pCamera;
	CalibrationHelper * pCalibrationHelper;
	MVObjFactory * pObjFactory;
	ImgDB * pImgDB;

	// Mavis is a singleton object. The instances variable is used
	// to enforce that.
	static int instances;

	// communication objects
	HANDLE  hResultEvent;
	HANDLE  hResultMutex;
	HANDLE  hResultMem;
	LPVOID  lpvResultAdd;

	HANDLE  hMavisCtlEvent;
	HANDLE  hCtlMutex;
	HANDLE  hCtlMem;
	LPVOID  lpvCtlAdd;

	void lookOnce(CtlData_t *, ObjLoc_t *, MVObj **);
	void getNextObj(CtlData_t *, ObjLoc_t *, MVObj **);
	void fwdRawFrames();
	void sendResult(void * pData, int nBytes);
	void defaultValues();

	//Prevent access to copy constructor and assignment operator
	Mavis(const Mavis &);
	Mavis & Mavis::operator=(const Mavis &);
};


#endif


///////////////////////////////////////////////////////////////////////////////////////
// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.
//
// By downloading, copying, installing or using the software you agree to this
// license. If you do not agree to this license, do not download, install, copy or
// use the software.
//
//
//                        Mavis License Agreement
//
// Copyright (c) 2004-2005, Robin Hewitt (http://www.robin-hewitt.com).
// Third party copyrights are property of their respective owners.
//
// Redistribution and use in source and binary forms, with or without modification,
// are permitted provided that the following conditions are met:
//
//   * Redistributions of source code must retain the above copyright notice,
//     this list of conditions and the following disclaimer.
//
//   * Redistributions in binary form must reproduce the above copyright notice,
//     this list of conditions and the following disclaimer in the documentation
//     and/or other materials provided with the distribution.
//
// This software is provided "as is" and any express or implied warranties, including,
// but not limited to, the implied warranties of merchantability and fitness for a
// particular purpose are disclaimed. In no event shall the authors or contributors be
// liable for any direct, indirect, incidental, special, exemplary, or consequential
// damages (including, but not limited to, procurement of substitute goods or services;
// loss of use, data, or profits; or business interruption) however caused and on any
// theory of liability, whether in contract, strict liability, or tort (including
// negligence or otherwise) arising in any way out of the use of this software, even
// if advised of the possibility of such damage.
///////////////////////////////////////////////////////////////////////////////////////

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -