============
Introduction
============

HOOPS/MVO is a C++ class library that sits on top of HOOPS 3D graphics system (HOOPS/3dGS). It has a model/view/operator architecture that encapsulates various HOOPS/3dGS data structures and concepts as well as a range of common application-level logic. HOOPS/MVO makes the key capabilities of HOOPS/3dGS more accessible, facilitating efficient development and rapid prototyping of full-featured, high-performance applications.

This guide explains how to use the HOOPS/MVO Classes to incorporate Model, View, and Operator objects into an application and build custom MVO objects using the HOOPS/MVO class library. It assumes familiarity with the :doc:`architecture of the HOOPS/MVO classes </tech_overview/mvo_technical_overview>`.


Compiling and Linking
=====================

The source code for the HOOPS/MVO library is provided as part of the Visualize package, and can be recompiled if necessary (the MVO library is not supported if modified). The */Dev_Tools/hoops_mvo/source* directory includes the Microsoft Visual Studio project files or Unix makefiles. The HOOPS/MVO headers, source code, and exported library are located in the following directories:
  
.. csv-table::
	:header: "Platform", "Location", "MVO library names"
	
	"Windows", "*/Dev_Tools/hoops_mvo/lib/<platform>*", "*hoops_mvo.dll*, *hoops_mvo_mgk.dll*"
	"Linux", "*/Dev_Tools/hoops_mvo/lib/linux*", "*libhoops_mvo.so*, *libhoops_mvo_mgk.so* \*"
	"OS X", "*/Dev_Tools/hoops_mvo/lib/<platform>*", "*libhoops_mvo.dylib*, *libhoops_mvo_mgk.dylib* \*"

* If using ImageMagick functions

Windows runtime DLLs are located in the */bin/<platform>* directory. The DLLs are:

*hoops_mvo.dll*
*hoops_mvo_mgk.dll* \*

* If using ImageMagick functions

Linux and OS X runtimes are the same as the exported libaries. Regardless of platform, you must include the MVO runtime libraries in the execution environment if you are using the MVO library in your application.
  

Cross-Platform Notes
--------------------

If you choose to *extend the existing HOOPS/MVO library* by adding new classes to it, you will need to include MVO_API in your new class definitions. For example, if you wanted to add a new operator called HOpCameraSpin to the MVO library, the header would look like::

	class MVO_API HOpCameraSpin : public HBaseOperator
	{
	   ...
	}

For more details, please see the definition of MVO_API in *HTools.h*.
