//***************************************************************************************
// 
// File name: GraphicRegion.cpp
// Location:  ...\Matrox Imaging\MILxxx\Examples\Processing\ProductInspection\ExampleBase\C++
//             \InspectionTaskBase\Region
//
// Synopsis: This file contains the implementation of the CGraphicRegion class.
//
// Copyright (C) Matrox Electronic Systems Ltd., 1992-2015.
// All Rights Reserved

#include <mil.h>
#include "GraphicRegion.h"

//*****************************************************************************
// Constants.
//*****************************************************************************

//*****************************************************************************
// Constructor.
//*****************************************************************************
CGraphicRegion::CGraphicRegion(MIL_INT InputUnits, CInspectionTask* RegionProvider /* = M_NULL */)
 : CInspectionTask(M_NONE, M_NULL, M_NULL, RegionProvider),
   m_RegionInputUnits(InputUnits)
   {
   }

//*****************************************************************************
// Destructor.
//*****************************************************************************
CGraphicRegion::~CGraphicRegion()
   {
   }


//*****************************************************************************
// Init.
//*****************************************************************************
void CGraphicRegion::Init(MIL_ID MilSystem, MIL_INT ImageSizeX /* = 0 */, MIL_INT ImageSizeY /* = 0 */)
   {
   // Initialize the base classes.
   CInspectionTask::Init(MilSystem, ImageSizeX, ImageSizeY);

   // Allocate the region list if necessary.
   CInspectionTask::AllocateRegionGraList(MilSystem);
   
   // If there is a region provider copy the graphics list
   MIL_INT CurNbGraphics = 0;
   if(HasRegionProvider())
      {
      MgraCopy(GetInputRegionList(), GetOutputRegionList(), M_COPY, M_DEFAULT, M_ALL, M_NULL, M_NULL, M_DEFAULT);
      MgraInquireList(GetInputRegionList(), M_LIST, M_DEFAULT, M_NUMBER_OF_GRAPHICS + M_TYPE_MIL_INT, &CurNbGraphics);
      }

   // Allocate a graphic context.
   MIL_ID MilGraContext = MgraAlloc(MilSystem, M_NULL);

   // Set it to the correct input units.
   MgraControl(MilGraContext, M_INPUT_UNITS, (MIL_DOUBLE)m_RegionInputUnits);

   // Set the drawing color of the next primitive.
   MgraColor(MilGraContext, (MIL_DOUBLE)(CurNbGraphics + 1));

   // Draw the region.
   DrawGraphicRegionInRegionList(MilGraContext);

   // Free the graphic context
   MgraFree(MilGraContext);
   }

//*****************************************************************************
// Inspect.
//*****************************************************************************
ResultStatusEnum CGraphicRegion::Inspect(MIL_ID MilImage)
   {
   return eValid;
   }

//*****************************************************************************
// Draw output region function.
//*****************************************************************************
void CGraphicRegion::DrawOutputRegion(MIL_ID MilGraContext, MIL_ID MilDest)
   {
   // Draw the input region since the graphic region are combined   
   DrawInputRegion(MilGraContext, MilDest);
   }

//*****************************************************************************
// Draw text result.
//*****************************************************************************
void CGraphicRegion::DrawTextResult(MIL_ID MilGraContext, MIL_ID MilDest)
   {   
   }

//*****************************************************************************
// Draw graphical result.
//*****************************************************************************
void CGraphicRegion::DrawGraphicalResult(MIL_ID MilGraContext, MIL_ID MilDest)
   {
   }