/***************************************************************************/ /* Filename: MilMod.h Owner : Matrox Imaging Revision: 10.60.0776 Content : This file contains the defines and the prototypes for the MIL geometric pattern matching module. (Mmod...). Copyright © Matrox Electronic Systems Ltd., 1992-2023. All Rights Reserved */ /***************************************************************************/ #ifndef __MILMOD_H__ #define __MILMOD_H__ #if (!M_MIL_LITE) // MIL FULL ONLY /* C++ directive if needed */ #ifdef __cplusplus extern "C" { #endif /***************************************************************************/ /* MilMod CAPI defines */ /***************************************************************************/ /***************************************************************************/ /* MmodAlloc() */ /***************************************************************************/ /* Object types */ #define M_RESULT 0x00001000L #define M_GEOMETRIC 0x00002000L #define M_GEOMETRIC_CONTROLLED 0x00008000L #define M_SHAPE_CIRCLE 0x00010000L #define M_SHAPE_ELLIPSE 0x00020000L #define M_SHAPE_RECTANGLE 0x00040000L #define M_SHAPE_SEGMENT 0x00080000L /***************************************************************************/ /* MmodGetResult() */ /***************************************************************************/ /* For ResultIndex */ #define M_ALL 0x40000000L // already defined in Mil.h /* For Result Type */ #define M_NUMBER 1009L // already defined in Mil.h #define M_GENERAL 0x20000000L // also defined in milreg.h #define M_CONTEXT_ID 0x00001010L #define M_TIMEOUT_END 10L #define M_SCORE 0x00001400L // already defined in MilPat.h #define M_TARGET_COVERAGE 0x00001500L #define M_MODEL_COVERAGE 0x00001600L #define M_FIT_ERROR 0x00001700L #define M_SCORE_TARGET 0x00001800L #define M_POSITION_X 0x00003400L // already defined in MilPat.h #define M_POSITION_Y 0x00004400L // already defined in MilPat.h #define M_ANGLE 0x00000800L // already defined in Mil.h #define M_SCALE 0x00008010L // already defined in Milpat.h #define M_A_FORWARD 0x00004001L #define M_B_FORWARD 0x00004002L #define M_C_FORWARD 0x00004003L #define M_D_FORWARD 0x00004004L #define M_E_FORWARD 0x00004005L #define M_F_FORWARD 0x00004006L #define M_A_REVERSE 0x00004011L #define M_B_REVERSE 0x00004012L #define M_C_REVERSE 0x00004013L #define M_D_REVERSE 0x00004014L #define M_E_REVERSE 0x00004015L #define M_F_REVERSE 0x00004016L #define M_RADIUS 0x00000040L #define M_CIRCLE_ASPECT_RATIO 0x00002018L #define M_SQUARE_ASPECT_RATIO 0x00000008L // already defined in Mil.h #define M_CENTER_X 4L #define M_CENTER_Y 5L #define M_SCORE_FIT 2461L #define M_TOP_LEFT_X 1004L // already defined in MilCode.h #define M_TOP_LEFT_Y 1005L // already defined in MilCode.h #define M_TOP_RIGHT_X 1014L // already defined in MilCode.h #define M_TOP_RIGHT_Y 1015L // already defined in MilCode.h #define M_BOTTOM_LEFT_X 1016L // already defined in MilCode.h #define M_BOTTOM_LEFT_Y 1017L // already defined in MilCode.h #define M_BOTTOM_RIGHT_X 1018L // already defined in MilCode.h #define M_BOTTOM_RIGHT_Y 1019L // already defined in MilCode.h #define M_AVAILABLE MAKE_INT64(0x0000400000000000) // Also defined in mil.h /***************************************************************************/ /* MmodDefine() */ /***************************************************************************/ #define M_DELETE 3L // 3 Already defined in Milblob.h #define M_IMAGE 0x00000004L // 4 Already defined in Mil.h #define M_CIRCLE 0x00000008L // 8 Already defined in MilBga.h #define M_ELLIPSE 0x00000010L // 16 #define M_SQUARE 0x00000020L // 32 #define M_RECTANGLE 0x00000040L // 64 #define M_LINE 0x00000080L // 128 #define M_RING 0x00000100L // 256 #define M_DXF_FILE 0x00000200L // 512 #define M_CROSS 0x00002000L // 8192 Already defined in MilBga.h #define M_DIAMOND 0x00008000L // 32768 #define M_TRIANGLE 0x00010000L // 65536 #define M_MERGE_MODEL 0x00020000L // 131072 #define M_AUTO_DEFINE 0x00040000L // 262144 #define M_NO_CHECK 0x40000000L // already defined. #define M_SEGMENT 0x00000082L // Already defined in milmetrol.h /***************************************************************************/ /* MmodDefineFromFile() */ /***************************************************************************/ #define M_MEMORY (M_APP_INQUIRE_SYS_START+120L) /*5120*/ // Already defined in Mil.h #define M_INTERACTIVE M_NULL // Already defined in mil.h, milcal.h, milcode.h, miledge.h, milmeas.h, milocr.h, milpat.h #define M_DXF_FILE 0x00000200L // 512 /***************************************************************************/ /* MmodControl() / MmodInquire() */ /***************************************************************************/ // For Index #define M_DEFAULT 0x10000000L // already defined in Mil.h #define M_CONTEXT 0x08000000L #define M_ALL 0x40000000L // already defined in Mil.h // Modifier #define M_SUPPORTED MAKE_INT64(0x0000800000000000) // Also defined in mil.h // Context controls/inquires #define M_IMAGE_ID 0x04000000L #define M_NUMBER 1009L // already defined in Mil.h #define M_REFERENCE_X 100L // also defined in milreg.h #define M_REFERENCE_Y 101L // also defined in milreg.h #define M_REFERENCE_ANGLE 110L #if OldDefinesSupport #define M_SEARCH_OFFSET_X 102L #define M_SEARCH_OFFSET_Y 103L #define M_SEARCH_SIZE_X 104L #define M_SEARCH_SIZE_Y 105L // MIL_DEPRECATED(M_SEARCH_OFFSET_X, 1010) // Also defined in MilPat.h // MIL_DEPRECATED(M_SEARCH_OFFSET_Y, 1010) // Also defined in MilPat.h // MIL_DEPRECATED(M_SEARCH_SIZE_X , 1010) // Also defined in MilPat.h // MIL_DEPRECATED(M_SEARCH_SIZE_Y , 1010) // Also defined in MilPat.h #endif #define M_ACCURACY 106L #define M_SPEED 8L // Already define in milpat.h #define M_SMOOTHNESS 108L #define M_EDGE_ACCURACY 5021L #if OldDefinesSupport #define M_KERNEL_WIDTH 109L //MIL_DEPRECATED(M_KERNEL_WIDTH, 1010) #endif #define M_FILTER_MODE 122L // allready defined in miledge.h #define M_DETAIL_LEVEL 111L #define M_SEARCH_ANGLE_RANGE 113L // also defined in milreg.h #define M_SEARCH_SCALE_RANGE 114L // also defined in milreg.h #define M_SEARCH_POSITION_RANGE 119L // also defined in milreg.h #define M_TIMEOUT 2077L // already define in mil.h #define M_STOP_FIND 115L #define M_SHARED_EDGES 220L #define M_TARGET_CACHING 39L // Already define in milpat.h #define M_SAVE_TARGET_EDGES 121L // Already define in milpat.h #define M_OVERSCAN 53L // Already define in mil.h #define M_OVERSCAN_REPLACE_VALUE 54L // Already define in mil.h #define M_CONTEXT_CONVERT 535L // Already define in milocr.h #define M_SEARCH_POSITION_FROM_GRAPHIC_LIST 1723L // Context controls/inquires for M_GEOMETRIC_CONTROLLED #define M_FIRST_LEVEL 31L //Already defined in milpat.h #define M_LAST_LEVEL 32L //Already defined in milpat.h #define M_AUTO 444L //Already defined in milocr.h // Model controls/inquires #define M_ACCEPTANCE 200L #define M_ACCEPTANCE_TARGET 201L #define M_CERTAINTY 202L #define M_CERTAINTY_TARGET 203L #define M_POLARITY 0x00004000L // already defined in MilMeas.h #if OldDefinesSupport #define M_POLARITY_CHECK M_POLARITY MIL_DEPRECATED(M_POLARITY_CHECK, 1010) #endif #define M_MIN_SEPARATION_X 35L // already defined in MilPat.h #define M_MIN_SEPARATION_Y 36L // already defined in MilPat.h #define M_SCALE 0x00008010L // already defined in MilPat.h #define M_SCALE_MIN_FACTOR 210L // also defined in milreg.h #define M_SCALE_MAX_FACTOR 211L // also defined in milreg.h #define M_ASPECT_RATIO 6001L // (Already defined in milcal.h) #define M_EMPTY 236L #define M_ACTIVE_EDGELS 1719L // also defined in MilMetrol.h #define M_CORNER_RADIUS 239L #define M_ANGLE 0x00000800L // already defined in Mil.h #define M_ANGLE_DELTA_NEG 0x00000200L // Already define in MilPat.h #define M_ANGLE_DELTA_POS 0x00000400L // Already define in MilPat.h #define M_INDEX 217L #define M_FIT_ERROR_WEIGHTING_FACTOR 221L #define M_USER_LABEL 228L // also defined in milreg.h #define M_INDEX_FROM_LABEL 229L // also defined in milreg.h #define M_NUMBER_OF_CHAINED_PIXELS 56L // Already define in MilBlob.h #define M_NUMBER_OF_CHAINED_EDGELS M_NUMBER_OF_CHAINED_PIXELS #define M_CHAIN_X 65L // Already define in MilBlob.h #define M_CHAIN_Y 144L // Already define in MilBlob.h #define M_CHAIN_ANGLE 258L // Already define in MilEdge.h #define M_CHAIN_INDEX 67L // Already define in MilBlob.h #define M_MIN_SEPARATION_SCALE 68L #define M_MIN_SEPARATION_ANGLE 69L #define M_MIN_SEPARATION_ASPECT_RATIO 2016L #define M_SEARCH_ASPECT_RATIO_CONSTRAINT 2215L #define M_ASSOCIATED_CALIBRATION 125L // Already define in MilCal.h #define M_CALIBRATED 0x0000300L #define M_POSITION_DELTA_NEG_X 127L // also defined in milreg.h #define M_POSITION_DELTA_POS_X 128L // also defined in milreg.h #define M_POSITION_DELTA_NEG_Y 129L // also defined in milreg.h #define M_POSITION_DELTA_POS_Y 130L // also defined in milreg.h #define M_SAGITTA_TOLERANCE 1969L #define M_DEVIATION_TOLERANCE 3035L #define M_RESOLUTION_COARSENESS_LEVEL 2184L #define M_MODEL_ASPECT_RATIO 2219L #define M_MODEL_ASPECT_RATIO_MIN_FACTOR 2220L #define M_MODEL_ASPECT_RATIO_MAX_FACTOR 2221L #define M_COVERAGE_MAX 2457L #define M_FIT_SCORE_MIN 2458L #define M_LINE_PRESEARCH 2801L #define M_MIN_SIDE_COVERAGE 2802L #define M_ANGLE_MULTIPLE_RANGE 2803L #define M_STEP_180 2818L #define M_STEP_90 2905L #define M_USE_GRID_DECOMPOSITION 2849L //=internal #define M_COVERAGE_MIN 2453L #define M_ANGLE_REGION 3095L #define M_ELLIPSE_TOLERANCE_TO_CIRCLE 3585L #define M_SEGMENT_CONSISTENT_GRADIENT 2943L #define M_TRUE 1L // Already defined in mil.h, milmeas.h, miledge.h #define M_FALSE 0L // Already defined in mil.h, milmeas.h, miledge.h // Controls/inquires for Synthetic models #define M_BOX_MARGIN_LEFT 308L #define M_BOX_MARGIN_RIGHT 309L #define M_BOX_MARGIN_TOP 310L #define M_BOX_MARGIN_BOTTOM 311L #define M_PIXEL_SCALE 316L #define M_CAD_Y_AXIS 318L // Controls/inquires for results #define M_RESULT_OUTPUT_UNITS 1300L // Also in milim.h // CAD Y Axis control values #define M_FLIP 0x00010000L // Already defined in Mil.h #define M_NO_FLIP 0x04000000L // Already defined in Mil.h // Types of polarity check #define M_SAME -1L // Already defined in MilMeas.h #define M_REVERSE 4L // Already defined in Mil.h #define M_SAME_OR_REVERSE 5L #define M_ANY 0x11000000L // Already defined in MilMeas.h #if OldDefinesSupport #define M_MIX M_ANY MIL_DEPRECATED(M_MIX, 1010) #endif // To remove user label #define M_NO_LABEL 0x20000000L // Also defined in milreg.h // Control values #define M_VERY_LOW 0L // Already define in milpat.h #define M_LOW 1L // Already define in milpat.h #define M_MEDIUM 2L // Already define in milpat.h #define M_HIGH 3L // Already define in milpat.h #define M_VERY_HIGH 4L // Already define in milpat.h #if OldDefinesSupport #define M_KERNEL_DEPTH 368L ///MIL_DEPRECATED(M_KERNEL_DEPTH, 1010) #endif #define M_SIZE 0xC00L // Already define in medge.h #define M_RECURSIVE 0x00040000 // Already defined in mildev.h #define M_KERNEL 0x00400000L // Already defined in mil.h // Parameters for output units #define M_PIXEL 0x1000L #define M_WORLD 0x2000L #define M_ACCORDING_TO_CALIBRATION 1301L /***************************************************************************/ /* MmodInquire() */ /***************************************************************************/ #define M_VALID 0x00000001L // Already define in Mil.h #define M_CONTEXT_TYPE 162 #define M_MODEL_TYPE 162 #define M_PREPROCESSED 14L // Already define in MilPat.h #define M_KERNEL_SIZE 301L #define M_NUMBER_MODELS 302L #define M_MODIFICATION_COUNT 5010L // Already define in Mil.h #define M_OWNER_SYSTEM 1101L // already define in mil.h #define M_SIZE_BYTE 5061L // already defined in Mil.h #define M_ALLOC_OFFSET_X 15L // Already define in MilPat.h #define M_ALLOC_OFFSET_Y 16L // Already define in MilPat.h #define M_ALLOC_ANGLE 3329L // Already define in MilPat.h #define M_ALLOC_SIZE_X 2L // Already define in MilPat.h #define M_ALLOC_SIZE_Y 3L // Already define in MilPat.h #define M_ORIGINAL_X 6L // Already define in MilPat.h #define M_ORIGINAL_Y 7L // Already define in MilPat.h #define M_WARNINGS 306L #define M_ALLOC_SIZE_BAND 321L #define M_ALLOC_TYPE 322L // Already defined in MilPat.h #define M_ALLOC_SIGN 323L #define M_ALLOC_SIZE_BIT 26L // Already defined in MilPat.h // Model inquires for Misc Synthetic Model #define M_RADIUS 0x00000040L #define M_FOREGROUND_VALUE 4L // Already defined in MilBlob.h #define M_FOREGROUND_WHITE 0x80L // Already define in MilBlob.h #define M_FOREGROUND_BLACK 0x100L // Already define in MilBlob.h #define M_FOREGROUND_ANY M_FOREGROUND_WHITE+M_FOREGROUND_BLACK #define M_LENGTH 0x00002000L // already defined in Mil.h #define M_WIDTH 0x00010000L // Already defined in Milmeas.h #define M_HEIGHT 317L #define M_HORIZONTAL_THICKNESS 233L #define M_VERTICAL_THICKNESS 232L #define M_INNER_RADIUS 234L #define M_OUTER_RADIUS 235L #define M_BOX_OFFSET_X 312L #define M_BOX_OFFSET_Y 313L #define M_BOX_SIZE_X 314L #define M_BOX_SIZE_Y 315L #define M_MOD_DEFINE_COMPATIBLE 330L #define M_MODEL_IMAGE_ORIGIN_X 2007 #define M_MODEL_IMAGE_ORIGIN_Y 2008 #define M_HAS_DONT_CARE_MASK 2391 // also defined in milpat.h #define M_HAS_FLAT_REGIONS_MASK 2392 #define M_HAS_WEIGHT_REGIONS_MASK 2393 #define M_START_POS_X 2820 #define M_START_POS_Y 2821 #define M_END_POS_X 2822 #define M_END_POS_Y 2823 #define M_LINE_TYPE 2824 #define M_CREST_WHITE 2825 #define M_CREST_BLACK 2826 #define M_RESULT_TYPE 1L // Already defined in milmeas.h, milim.h #define M_HAS_TARGET_EDGES_SAVED 2679 /***************************************************************************/ /* MmodDraw() */ /***************************************************************************/ #define M_DRAW_IMAGE 0x00000002L // Already define in MilPat.h #define M_DRAW_EDGES 0x00000004L #define M_DRAW_DONT_CARE 0x00000008L // Already define in MilPat.h #if OldDefinesSupport #define M_DRAW_DONT_CARES M_DRAW_DONT_CARE //MIL_DEPRECATED(M_DRAW_DONT_CARES, 1010) #endif #define M_DRAW_FLAT_REGIONS 0x00000010L #define M_DRAW_BOX 0x00000020L // Already define in MilPat.h #define M_DRAW_POSITION 0x00000040L // Already define in MilPat.h #define M_DRAW_WEIGHT_REGIONS 0x00000100L #define M_DRAW_AXIS 0x00000200L // Already define in MilBlob.h #define M_ORIGINAL 0x00000199L // Already define in MilPat.h #define M_MODEL 0x00010000L //65536 #define M_TARGET 0x00080000L // Also defined in milreg.h #define M_DRAW_ACTIVE_EDGELS 0x00100000L // Also defined in milmetrol.h #if OldDefinesSupport #define M_DRAW_RELATIVE_ORIGIN_X 319L // deprecated : Use MgraControl(... M_DRAW_OFFSET_X...) #define M_DRAW_RELATIVE_ORIGIN_Y 320L // deprecated : Use MgraControl(... M_DRAW_OFFSET_Y...) #define M_DRAW_SCALE_X 3203L // deprecated : Use MgraControl(... M_DRAW_ZOOM_X ...) #define M_DRAW_SCALE_Y 3204L // deprecated : Use MgraControl(... M_DRAW_ZOOM_Y ...) // MIL_DEPRECATED(M_DRAW_RELATIVE_ORIGIN_X, 1010) Already defined in mil.h // MIL_DEPRECATED(M_DRAW_RELATIVE_ORIGIN_Y, 1010) Already defined in mil.h // MIL_DEPRECATED(M_DRAW_SCALE_X, 1010) Already defined in mil.h // MIL_DEPRECATED(M_DRAW_SCALE_Y, 1010) Already defined in mil.h #endif /***************************************************************************/ /* MmodMask() */ /***************************************************************************/ #if OldDefinesSupport #define M_DONT_CARES M_DONT_CARE MIL_DEPRECATED(M_DONT_CARES, 1010) #endif #define M_DONT_CARE 0x00008000L // already defined in mil.h, milpat.h, milmod.h #define M_FLAT_REGIONS 501L #define M_WEIGHT_REGIONS 502L /***************************************************************************/ /* MmodPreprocess() */ /***************************************************************************/ #define M_RESET 9L #define M_COMPLETE 0x00000000L // Already defined in Mil.h #define M_PARTIAL 0x00000001L // Already defined in Mil.h /***************************************************************************/ /* MmodSave()/MmodRestore()/MmodStream() */ /***************************************************************************/ #define M_MEMORY (M_APP_INQUIRE_SYS_START+120L) /*5120*/ // Already defined in Mil.h #define M_INTERACTIVE M_NULL // Already defined in mil.h, milcal.h, milcode.h, milmeas.h, milocr.h, milpat.h, milmod.h #define M_SAVE 0x100L #define M_RESTORE 0x10L #define M_LOAD 1L #define M_INQUIRE_SIZE_BYTE 2L #define M_WITH_CALIBRATION 0x00020000L // Already in mil.h /***************************************************************************/ /* WARNINGS definitions and string table */ /***************************************************************************/ // Deprecated flag names. #if OldDefinesSupport // #define M_MAJOR_AXIS_MAX 216L already defined in milmeas.h // MIL_DEPRECATED(M_MAJOR_AXIS_MAX, 1000) already defined in milmeas.h // #define M_MAJOR_AXIS_MIN 214L already defined in milmeas.h // MIL_DEPRECATED(M_MAJOR_AXIS_MIN, 1000) already defined in milmeas.h // #define M_MAJOR_AXIS M_RADIUS already defined in milmeas.h // MIL_DEPRECATED(M_MAJOR_AXIS, 1000) already defined in milmeas.h #endif /***************************************************************************/ /* MilMod CAPI function prototypes */ /***************************************************************************/ MIL_ID MFTYPE MmodAlloc (MIL_ID SysId, MIL_INT64 ModelFinderType, MIL_INT64 ControlFlag, MIL_ID* ContextIdPtr); MIL_ID MFTYPE MmodAllocResult (MIL_ID SysId, MIL_INT64 ControlFlag, MIL_ID* ModResultIdPtr); #if M_MIL_USE_64BIT // Prototypes for 64 bits OSs void MFTYPE MmodDefineInt64 (MIL_ID ContextId, MIL_INT64 ModelType, MIL_INT64 Param1, MIL_DOUBLE Param2, MIL_DOUBLE Param3, MIL_DOUBLE Param4, MIL_DOUBLE Param5); void MFTYPE MmodDefineDouble (MIL_ID ContextId, MIL_INT64 ModelType, MIL_DOUBLE Param1, MIL_DOUBLE Param2, MIL_DOUBLE Param3, MIL_DOUBLE Param4, MIL_DOUBLE Param5); #else // Prototypes for 32 bits OSs #define MmodDefineInt64 MmodDefine #define MmodDefineDouble MmodDefine void MFTYPE MmodDefine (MIL_ID ContextId, MIL_INT64 ModelType, MIL_DOUBLE Param1, MIL_DOUBLE Param2, MIL_DOUBLE Param3, MIL_DOUBLE Param4, MIL_DOUBLE Param5); #endif #if M_MIL_USE_64BIT // Prototypes for 64 bits OSs void MFTYPE MmodControlInt64 (MIL_ID ContextOrResultId, MIL_INT Index, MIL_INT64 ControlType, MIL_INT64 ControlValue); void MFTYPE MmodControlDouble (MIL_ID ContextOrResultId, MIL_INT Index, MIL_INT64 ControlType, MIL_DOUBLE ControlValue); #else // Prototypes for 32 bits OSs #define MmodControlInt64 MmodControl #define MmodControlDouble MmodControl void MFTYPE MmodControl (MIL_ID ContextOrResultId, MIL_INT Index, MIL_INT64 ControlType, MIL_DOUBLE ControlValue); #endif MIL_INT MFTYPE MmodInquire (MIL_ID ContextOrResultId, MIL_INT Index, MIL_INT64 InquireType, void* UserVarPtr); void MFTYPE MmodMask (MIL_ID ContextId, MIL_INT Index, MIL_ID MaskBufferId, MIL_INT64 MaskType, MIL_INT64 ControlFlag); void MFTYPE MmodPreprocess (MIL_ID ContextId, MIL_INT64 ControlFlag); void MFTYPE MmodFind (MIL_ID ContextId, MIL_ID TargetImageOrResultId, MIL_ID ModResultId); void MFTYPE MmodGetResult (MIL_ID ResultId, MIL_INT ResultIndex, MIL_INT64 ResultType, void* ResultArrayPtr); void MFTYPE MmodGetResultOutputUnits(MIL_ID ResultId, MIL_INT ResultIndex, MIL_INT64 ResultType, MIL_INT64 OutputUnits, void* ResultArrayPtr); void MFTYPE MmodDraw (MIL_ID ContextGraId, MIL_ID ContextOrResultModId, MIL_ID DstImageBufOrListGraId, MIL_INT64 Operation, MIL_INT Index, MIL_INT64 ControlFlag); #if M_MIL_USE_UNICODE void MFTYPE MmodDefineFromFileW (MIL_ID ContextModId, MIL_INT64 FileType, MIL_CONST_TEXTW_PTR FileName, MIL_INT64 ControlFlag ); void MFTYPE MmodSaveW (MIL_CONST_TEXTW_PTR FileName, MIL_ID ContextId, MIL_INT64 ControlFlag); MIL_ID MFTYPE MmodRestoreW (MIL_CONST_TEXTW_PTR FileName, MIL_ID SysId, MIL_INT64 ControlFlag, MIL_ID* ContextIdPtr); void MFTYPE MmodStreamW (MIL_TEXTW_PTR MemPtrOrFileName, MIL_ID SysId, MIL_INT64 Operation, MIL_INT64 StreamType, MIL_DOUBLE Version, MIL_INT64 ControlFlag, MIL_ID *ContextModIdPtr, MIL_INT *SizeByteVarPtr); void MFTYPE MmodDefineFromFileA (MIL_ID ContextModId, MIL_INT64 FileType, MIL_CONST_TEXTA_PTR FileName, MIL_INT64 ControlFlag ); void MFTYPE MmodSaveA (MIL_CONST_TEXTA_PTR FileName, MIL_ID ContextId, MIL_INT64 ControlFlag); MIL_ID MFTYPE MmodRestoreA (MIL_CONST_TEXTA_PTR FileName, MIL_ID SysId, MIL_INT64 ControlFlag, MIL_ID* ContextIdPtr); void MFTYPE MmodStreamA (MIL_TEXTA_PTR MemPtrOrFileName, MIL_ID SysId, MIL_INT64 Operation, MIL_INT64 StreamType, MIL_DOUBLE Version, MIL_INT64 ControlFlag, MIL_ID *ContextModIdPtr, MIL_INT *SizeByteVarPtr); #if M_MIL_UNICODE_API #define MmodDefineFromFile MmodDefineFromFileW #define MmodSave MmodSaveW #define MmodRestore MmodRestoreW #define MmodStream MmodStreamW #else #define MmodDefineFromFile MmodDefineFromFileA #define MmodSave MmodSaveA #define MmodRestore MmodRestoreA #define MmodStream MmodStreamA #endif #else void MFTYPE MmodDefineFromFile (MIL_ID ContextModId, MIL_INT64 FileType, MIL_CONST_TEXT_PTR FileName, MIL_INT64 ControlFlag ); void MFTYPE MmodSave (MIL_CONST_TEXT_PTR FileName, MIL_ID ContextId, MIL_INT64 ControlFlag); MIL_ID MFTYPE MmodRestore (MIL_CONST_TEXT_PTR FileName, MIL_ID SysId, MIL_INT64 ControlFlag, MIL_ID* ContextIdPtr); void MFTYPE MmodStream (MIL_TEXT_PTR MemPtrOrFileName, MIL_ID SysId, MIL_INT64 Operation, MIL_INT64 StreamType, MIL_DOUBLE Version, MIL_INT64 ControlFlag, MIL_ID *ContextModIdPtr, MIL_INT *SizeByteVarPtr); #endif // M_MIL_USE_UNICODE void MFTYPE MmodFree (MIL_ID ObjectId); /* C++ directive if needed */ #ifdef __cplusplus } #endif #ifdef __cplusplus inline void MFTYPE MmodStreamCpp(MilStreamParam MemPtrOrFileName, MIL_ID SysId, MIL_INT64 Operation, MIL_INT64 StreamType, MIL_DOUBLE Version, MIL_INT64 ControlFlag, MIL_ID* ContextModIdPtr, MIL_INT* SizeByteVarPtr) { MmodStream(MemPtrOrFileName.m_Param, SysId, Operation, StreamType, Version, ControlFlag, ContextModIdPtr, SizeByteVarPtr); } #undef MmodStream #define MmodStream MmodStreamCpp #endif // __cplusplus #if M_MIL_USE_64BIT #ifdef __cplusplus ////////////////////////////////////////////////////////////// // MmodControl function definition when compiling c++ files ////////////////////////////////////////////////////////////// #if !M_MIL_USE_LINUX inline void MmodControl(MIL_ID ContextOrResultId, MIL_INT Index, MIL_INT64 ControlType, int ControlValue) { MmodControlInt64(ContextOrResultId, Index, ControlType, ControlValue); }; #endif inline void MmodControl(MIL_ID ContextOrResultId, MIL_INT Index, MIL_INT64 ControlType, MIL_INT32 ControlValue) { MmodControlInt64(ContextOrResultId, Index, ControlType, ControlValue); } inline void MmodControl(MIL_ID ContextOrResultId, MIL_INT Index, MIL_INT64 ControlType, MIL_INT64 ControlValue) { MmodControlInt64(ContextOrResultId, Index, ControlType, ControlValue); } inline void MmodControl(MIL_ID ContextOrResultId, MIL_INT Index, MIL_INT64 ControlType, MIL_DOUBLE ControlValue) { MmodControlDouble(ContextOrResultId, Index, ControlType, ControlValue); } ////////////////////////////////////////////////////////////// // MmodDefine function definition when compiling c++ files ////////////////////////////////////////////////////////////// #if !M_MIL_USE_LINUX inline void MmodDefine(MIL_ID ContextId, MIL_INT64 ModelType, int Param1, MIL_DOUBLE Param2, MIL_DOUBLE Param3, MIL_DOUBLE Param4, MIL_DOUBLE Param5) { MmodDefineInt64(ContextId, ModelType, Param1, Param2, Param3, Param4, Param5); } #endif inline void MmodDefine(MIL_ID ContextId, MIL_INT64 ModelType, MIL_INT32 Param1, MIL_DOUBLE Param2, MIL_DOUBLE Param3, MIL_DOUBLE Param4, MIL_DOUBLE Param5) { MmodDefineInt64(ContextId, ModelType, Param1, Param2, Param3, Param4, Param5); } inline void MmodDefine(MIL_ID ContextId, MIL_INT64 ModelType, MIL_INT64 Param1, MIL_DOUBLE Param2, MIL_DOUBLE Param3, MIL_DOUBLE Param4, MIL_DOUBLE Param5) { MmodDefineInt64(ContextId, ModelType, Param1, Param2, Param3, Param4, Param5); } inline void MmodDefine(MIL_ID ContextId, MIL_INT64 ModelType, MIL_DOUBLE Param1, MIL_DOUBLE Param2, MIL_DOUBLE Param3, MIL_DOUBLE Param4, MIL_DOUBLE Param5) { MmodDefineDouble(ContextId, ModelType, Param1, Param2, Param3, Param4, Param5); } #else ////////////////////////////////////////////////////////////// // For C file, call the default function, i.e. Double one ////////////////////////////////////////////////////////////// #define MmodControl MmodControlDouble #define MmodDefine MmodDefineDouble #endif // __cplusplus #endif // M_MIL_USE_64BIT #if M_MIL_USE_SAFE_TYPE ////////////////////////////////////////////////////////////// // See milos.h for explanation about these functions. ////////////////////////////////////////////////////////////// //------------------------------------------------------------------------------------- // MmodGetResult inline void MFTYPE MmodGetResultUnsafe (MIL_ID ResultId, MIL_INT Index, MIL_INT64 ResultType, void *ResultArrayPtr); // ---------------------------------------------------------- // MmodInquire inline MIL_INT MFTYPE MmodInquireUnsafe (MIL_ID ContextOrResultId, MIL_INT Index, MIL_INT64 InquireType, void *ResultArrayPtr); inline MIL_INT MFTYPE MmodInquireSafeType(MIL_ID ContextOrResultId, MIL_INT Index, MIL_INT64 InquireType, MilVoidPtr ResultArrayPtr); inline void MFTYPE MmodGetResultUnsafe (MIL_ID ResultId, MIL_INT Index, MIL_INT64 ResultType, void *ResultPtr) {MmodGetResult(ResultId, Index, ResultType, ResultPtr);} // ---------------------------------------------------------- // MmodGetResult safe type definitions inline void MFTYPE MmodGetResultSafeType(MIL_ID ResultId, MIL_INT Index, MIL_INT64 ResultType, MilVoidPtr UserVarPtr) { MIL_INT64 RequiredParamType = M_PARAM_TYPE_MIL_INT64; if(!(M_DEFAULT_DATA_TYPE_BIT_SET(ResultType) || M_RECOMMENDED_DATA_TYPE_BIT_SET(ResultType))) { MmodGetResult(ResultId, Index, ResultType | M_DEFAULT_DATA_TYPE, &RequiredParamType); } if(!MfuncPointerIsCompatible(RequiredParamType, UserVarPtr.Type, ResultType)) { SafeTypeError(MIL_TEXT("MmodGetResult")); } MmodGetResult(ResultId, Index, ResultType, UserVarPtr.Ptr); } // ---------------------------------------------------------- // MmodInquire // ---------------------------------------------------------- // MmodInquire safe type definitions inline MIL_INT MFTYPE MmodInquireSafeType(MIL_ID ContextOrResultId, MIL_INT Index, MIL_INT64 InquireType, MilVoidPtr UserVarPtr) { MIL_INT64 RequiredParamType = M_PARAM_TYPE_MIL_INT64; if(!(M_DEFAULT_DATA_TYPE_BIT_SET(InquireType) || M_RECOMMENDED_DATA_TYPE_BIT_SET(InquireType))) { MmodInquire(ContextOrResultId, Index, InquireType | M_DEFAULT_DATA_TYPE, &RequiredParamType); } if(!MfuncPointerIsCompatible(RequiredParamType, UserVarPtr.Type, InquireType)) { SafeTypeError(MIL_TEXT("MmodInquire")); } return MmodInquire(ContextOrResultId, Index, InquireType, UserVarPtr.Ptr); } inline MIL_INT MFTYPE MmodInquireUnsafe (MIL_ID ContextOrResultId, MIL_INT Index, MIL_INT64 InquireType, void *UserVarPtr) {return MmodInquire (ContextOrResultId, Index, InquireType, UserVarPtr );} #define MmodGetResult MmodGetResultSafeType #define MmodInquire MmodInquireSafeType #else // #if M_MIL_USE_SAFE_TYPE #define MmodGetResultUnsafe MmodGetResult #define MmodInquireUnsafe MmodInquire #endif // #if M_MIL_USE_SAFE_TYPE // ---------------------------------------------------------- // Overload for std::vector. #if defined(M_MIL_USE_VECTOR) && M_MIL_USE_VECTOR template inline MIL_INT MFTYPE MmodInquire(MIL_ID ContextId, MIL_INT Index, MIL_INT64 InquireType, std::vector &ValuePtr) { // If the given MIL data type is not the same as the SrcType, change it to the correct one // and give a warning. MIL_INT64 InternalTrueDataTypeForStdVector = MilTraits::TypeFlag; #if M_MIL_USE_SAFE_TYPE if(M_GET_HLVLDATATYPE(InquireType) != 0) { SafeTypeError(MIL_TEXT("MmodInquire"), MIL_TEXT("Combination value for the required data type is not supported with std::vector overload.")); } #endif InquireType = M_STRIP_HLVLDATATYPE(InquireType) + InternalTrueDataTypeForStdVector; MIL_INT InternalNumberOfElementsForStdVector = 0; MmodInquire(ContextId, Index, M_STRIP_HLVLDATATYPE(InquireType) + M_NB_ELEMENTS + M_TYPE_MIL_INT, &InternalNumberOfElementsForStdVector); ValuePtr.resize(InternalNumberOfElementsForStdVector); if(InternalNumberOfElementsForStdVector > 0) { return MmodInquire(ContextId, Index, InquireType, &ValuePtr[0]); } return 0; } template inline void MFTYPE MmodGetResult(MIL_ID ResultId, MIL_INT Index, MIL_INT64 ResultType, std::vector &ValuePtr) { //! If the given MIL data type is not the same as the SrcType, change it to the correct one //! and give a warning. MIL_INT64 InternalTrueDataTypeForStdVector = MilTraits::TypeFlag; #if M_MIL_USE_SAFE_TYPE if(M_GET_HLVLDATATYPE(ResultType) != 0) { SafeTypeError(MIL_TEXT("MmodGetResult"), MIL_TEXT("Combination value for the required data type is not supported with std::vector overload.")); } #endif ResultType = M_STRIP_HLVLDATATYPE(ResultType) + InternalTrueDataTypeForStdVector; MIL_INT InternalNumberOfElementsForStdVector = 0; MmodGetResult(ResultId, Index, M_STRIP_HLVLDATATYPE(ResultType) + M_NB_ELEMENTS + M_TYPE_MIL_INT, &InternalNumberOfElementsForStdVector); ValuePtr.resize(InternalNumberOfElementsForStdVector); if(InternalNumberOfElementsForStdVector > 0) { MmodGetResult(ResultId, Index, ResultType, &ValuePtr[0]); } } // ---------------------------------------------------------- // Overloads for std::vector in MxxxStream. inline void MFTYPE MmodStream(std::vector &MemPtrOrFileName, MIL_ID SysId, MIL_INT64 Operation, MIL_INT64 StreamType, MIL_DOUBLE Version, MIL_INT64 ControlFlag, MIL_ID* McontextIdPtr, MIL_INT* SizeByteVarPtr) { MxxxStreamForStdVector(MemPtrOrFileName, SysId, Operation, StreamType, Version, ControlFlag, McontextIdPtr, SizeByteVarPtr, MmodStream); } #endif // defined(M_MIL_USE_VECTOR) && M_MIL_USE_VECTOR #if M_MIL_USE_STRING /***************************************************************************/ /* GMF MODULE */ /***************************************************************************/ #if M_MIL_USE_UNICODE #if M_MIL_UNICODE_API inline void MFTYPE MmodSaveW(const MIL_STRING& FileName, MIL_ID ContextId, MIL_INT64 ControlFlag) { return MmodSaveW(FileName.c_str(), ContextId, ControlFlag); } inline MIL_ID MFTYPE MmodRestoreW(const MIL_STRING& FileName, MIL_ID SysId, MIL_INT64 ControlFlag, MIL_ID* ContextIdPtr) { return MmodRestoreW(FileName.c_str(), SysId, ControlFlag, ContextIdPtr); } inline void MFTYPE MmodDefineFromFileW(MIL_ID ContextModId, MIL_INT64 FileType, const MIL_STRING& FileName, MIL_INT64 ControlFlag) { MmodDefineFromFileW(ContextModId, FileType, FileName.c_str(), ControlFlag); } #else inline void MFTYPE MmodSaveA(const MIL_STRING& FileName, MIL_ID ContextId, MIL_INT64 ControlFlag) { return MmodSaveA(FileName.c_str(), ContextId, ControlFlag); } inline MIL_ID MFTYPE MmodRestoreA(const MIL_STRING& FileName, MIL_ID SysId, MIL_INT64 ControlFlag, MIL_ID* ContextIdPtr) { return MmodRestoreA(FileName.c_str(), SysId, ControlFlag, ContextIdPtr); } inline void MFTYPE MmodDefineFromFileA(MIL_ID ContextModId, MIL_INT64 FileType, const MIL_STRING& FileName, MIL_INT64 ControlFlag) { MmodDefineFromFileA(ContextModId, FileType, FileName.c_str(), ControlFlag); } #endif /* M_MIL_UNICODE_API */ #else inline void MFTYPE MmodSave(const MIL_STRING& FileName, MIL_ID ContextId, MIL_INT64 ControlFlag) { return MmodSave(FileName.c_str(), ContextId, ControlFlag); } inline MIL_ID MFTYPE MmodRestore(const MIL_STRING& FileName, MIL_ID SysId, MIL_INT64 ControlFlag, MIL_ID* ContextIdPtr) { return MmodRestore(FileName.c_str(), SysId, ControlFlag, ContextIdPtr); } inline void MFTYPE MmodDefineFromFile(MIL_ID ContextModId, MIL_INT64 FileType, const MIL_STRING& FileName, MIL_INT64 ControlFlag) { MmodDefineFromFile(ContextModId, FileType, FileName.c_str(), ControlFlag); } #endif /* M_MIL_USE_UNICODE */ #endif /* M_MIL_USE_STRING*/ //////////////////////////////////////////////////////////////////////////////// // MIL_UNIQUE_ID support #if M_MIL_USE_MIL_UNIQUE_ID #if M_MIL_USE_SAFE_TYPE template <> inline bool MilIsCorrectObjectType<&MmodFree>(MIL_INT64 ObjectType) { return (ObjectType & ~M_USER_DEFINE_LOW_ATTRIBUTE) == M_MOD_OBJECT; } #endif typedef MIL_UNIQUE_ID<&MmodFree> MIL_UNIQUE_MOD_ID; #if M_MIL_USE_MOVE_SEMANTICS inline MIL_UNIQUE_MOD_ID MmodAlloc(MIL_ID SysId, MIL_INT64 ModelFinderType, MIL_INT64 ControlFlag, MIL_UNIQUE_ID_TAG) { return MIL_UNIQUE_MOD_ID(MmodAlloc(SysId, ModelFinderType, ControlFlag, M_NULL)); } inline MIL_UNIQUE_MOD_ID MmodAllocResult(MIL_ID SysId, MIL_INT64 ControlFlag, MIL_UNIQUE_ID_TAG) { return MIL_UNIQUE_MOD_ID(MmodAllocResult(SysId, ControlFlag, M_NULL)); } inline MIL_UNIQUE_MOD_ID MmodRestore(MIL_CONST_TEXT_PTR FileName, MIL_ID SysId, MIL_INT64 ControlFlag, MIL_UNIQUE_ID_TAG) { return MIL_UNIQUE_MOD_ID(MmodRestore(FileName, SysId, ControlFlag, M_NULL)); } #if M_MIL_USE_STRING inline MIL_UNIQUE_MOD_ID MmodRestore(const MIL_STRING& FileName, MIL_ID SysId, MIL_INT64 ControlFlag, MIL_UNIQUE_ID_TAG) { return MIL_UNIQUE_MOD_ID(MmodRestore(FileName, SysId, ControlFlag, M_NULL)); } #endif // M_MIL_USE_STRING template inline void MmodFree(const MIL_UNIQUE_ID&) = delete; inline void MmodStream(MilStreamParam MemPtrOrFileName, MIL_ID SysId , MIL_INT64 Operation , MIL_INT64 StreamType , MIL_DOUBLE Version , MIL_INT64 ControlFlag , MIL_UNIQUE_MOD_ID* ContextModIdPtr , MIL_INT* SizeByteVarPtr ) { MxxxStreamForMilUniqueId(MemPtrOrFileName, SysId, Operation, StreamType, Version, ControlFlag, ContextModIdPtr, SizeByteVarPtr, MmodStream); } #endif // M_MIL_USE_MOVE_SEMANTICS #endif // M_MIL_USE_MIL_UNIQUE_ID // End of MIL_UNIQUE_ID support //////////////////////////////////////////////////////////////////////////////// #endif // !M_MIL_LITE #endif // __MILMOD_H__