Click here to show toolbars of the Web Online Help System: show toolbars |
//*************************************************************************************** // // File name: MeasOverviewExample.cpp // Location: See Matrox Example Launcher in the MIL Control Center // // // Synopsis: This file contains the implementation of the CMeasOverviewExample class // which manages simple measurement examples. // // Copyright (C) Matrox Electronic Systems Ltd., 1992-2016. // All Rights Reserved #include <mil.h> #include <math.h> #include "MeasOverviewExample.h" #include "ProfileDisplay.h" //***************************************************************************** // Constructor. Allocates the general mil objects and set up the displays. //***************************************************************************** CMeasOverviewExample::CMeasOverviewExample(bool UseProfileDisplay) : m_pProfileDisplay(NULL) { // Allocate the general mil objects. MappAlloc(M_DEFAULT, &m_MilApplication); m_MilSystem = M_DEFAULT_HOST; MdispAlloc(m_MilSystem, M_DEFAULT, MIL_TEXT("M_DEFAULT"), M_WINDOWED, &m_MilDisplay); MgraAllocList(m_MilSystem, M_DEFAULT, &m_MilGraList); MdispControl(m_MilDisplay, M_ASSOCIATED_GRAPHIC_LIST_ID, m_MilGraList); // Allocate the profile display. if(UseProfileDisplay) { m_pProfileDisplay = new CProfileDisplay(m_MilSystem); // Move the display below the profile display. MdispControl(m_MilDisplay, M_WINDOW_INITIAL_POSITION_Y, m_pProfileDisplay->ProfileImageSizeY() + WINDOWS_OFFSET_Y); } } //***************************************************************************** // Destructor. Frees the general mil objects. //***************************************************************************** CMeasOverviewExample::~CMeasOverviewExample() { // Delete the profile display. if(m_pProfileDisplay) delete m_pProfileDisplay; // Free the mil objects. MgraFree(m_MilGraList); MdispFree(m_MilDisplay); if (m_MilSystem != M_DEFAULT_HOST) MsysFree(m_MilSystem); MappFree(m_MilApplication); } //***************************************************************************** // RunMeasCase. Runs one example case scenario. //***************************************************************************** void CMeasOverviewExample::RunMeasCase(MIL_CONST_TEXT_PTR ImageFile, MIL_INT MarkerType, const SMeasRegion& rMeasBox, SetupFunc pSetupFunc, MIL_INT MeasurementList, const SDrawList& rDrawList) { // Disable display updates and clear the graphic lists. MdispControl(m_MilDisplay, M_UPDATE, M_DISABLE); MgraClear(M_DEFAULT, m_MilGraList); if (m_pProfileDisplay) { m_pProfileDisplay->SetUpdate(M_DISABLE); m_pProfileDisplay->ClearAnnotations(); } // Allocate a marker and set its region. MIL_ID MilMeasMarker = MmeasAllocMarker(m_MilSystem, MarkerType, M_DEFAULT, M_NULL); rMeasBox.SetMarkerRegion(MilMeasMarker, MarkerType); // Set up the marker. if(pSetupFunc) (pSetupFunc)(MilMeasMarker); // Restore the image, set a uniform calibration and display it. MIL_ID MilImage = MbufRestore(ImageFile, m_MilSystem, M_NULL); MIL_INT ImageSizeX = MbufInquire(MilImage, M_SIZE_X, M_NULL); MIL_INT ImageSizeY = MbufInquire(MilImage, M_SIZE_Y, M_NULL); McalUniform(MilImage, 0.0, 0.0, 1.0, 1.0, 0.0, M_DEFAULT); MdispSelect(m_MilDisplay, MilImage); // Set up the drawing. MgraControl(M_DEFAULT, M_INPUT_UNITS, M_WORLD); if(MarkerType != M_CIRCLE) MmeasSetMarker(MilMeasMarker, M_DRAW_PROFILE_SCALE_OFFSET, M_AUTO_SCALE_PROFILE, M_DEFAULT); // Find the marker. MmeasFindMarker(M_DEFAULT, MilImage, MilMeasMarker, MeasurementList); // Check the status. MIL_INT ValidFlag; MmeasGetResult(MilMeasMarker, M_VALID_FLAG + M_TYPE_MIL_INT, &ValidFlag, M_NULL); if(ValidFlag == M_TRUE) { // Draw the results in the graphic list. rDrawList.DrawList(MilMeasMarker, m_MilGraList); // Create the profile. if(m_pProfileDisplay) m_pProfileDisplay->CreateProfile(MilImage, MilMeasMarker); } else MosPrintf(MIL_TEXT("Unable to find the marker...")); // Enable display updates. MdispControl(m_MilDisplay, M_UPDATE, M_ENABLE); if(m_pProfileDisplay) m_pProfileDisplay->SetUpdate(M_ENABLE); MosPrintf(MIL_TEXT("Press <Enter> to continue.\n\n")); MosGetch(); // Free allocations. MbufFree(MilImage); MmeasFree(MilMeasMarker); } //***************************************************************************** // SetDisplayZoom. Sets the zoom of the display. //***************************************************************************** void CMeasOverviewExample::SetDisplayZoom(MIL_DOUBLE DisplayZoom) { MdispZoom(m_MilDisplay, DisplayZoom, DisplayZoom); }