//============================================================================== //! //! \brief Milagm CAPI header (Magm...) //! //! AUTHOR: Matrox Imaging //! //! COPYRIGHT NOTICE: //! Copyright (c) Matrox Electronic Systems Ltd., 1992-2023. //! All Rights Reserved // Revision: 10.60.0776 //============================================================================== #ifndef __MIL_AGM_H__ #define __MIL_AGM_H__ #if (!M_MIL_LITE) /* C++ directive if needed */ #ifdef __cplusplus extern "C" { #endif //============================================================================== // MagmAlloc/MagmAllocResult Context/ResultTypes #define M_GLOBAL_EDGE_BASED_TRAIN 0x00001000L // TBM #define M_GLOBAL_EDGE_BASED_TRAIN_RESULT 0x00002000L // TBM #define M_GLOBAL_EDGE_BASED_FIND 0x00004000L // TBM #define M_GLOBAL_EDGE_BASED_FIND_RESULT 0x00008000L // TBM //============================================================================== // MagmDefine Operations #define M_ADD 0x0000L // already defined in milim.h #define M_DELETE 3L // already defined in mil.h //////////////////////////////////////////////////////////////////////////////// // MagmControl / MagmInquire // Context #define M_STOP_FIND 115L // already defined in milmod.h #define M_SMOOTHNESS 108L // already defined in milmod.h #define M_THRESHOLD_MODE 33L // Already defined in miledge.h #define M_MODEL_PRECISION 5656L #define M_LOW 1L // Already defined in miledge.h, milcode.h, milmod.h, milocr, milpat.h, mil.h #define M_MEDIUM 2L // Already defined in miledge.h, milcode.h, milmod.h, milocr, milpat.h #define M_HIGH 3L // Already defined in miledge.h, milcode.h, milmod.h, milocr, milpat.h, mil.h #define M_VERY_HIGH 4L // Already defined in miledge.h, milcode.h, milmod.h, milocr, milpat.h #define M_AUTO 444L // Already defined in mil.h #define M_USER_DEFINED 21L // Already defined in mil.h #define M_ENABLE -9997L // Already defined in mil.h #define M_DISABLE -9999L // Already defined in mil.h #define M_TRUE 1L // Already defined in mil.h, milmeas.h, miledge.h, milmod.h #define M_FALSE 0L // Already defined in mil.h, milmeas.h, miledge.h, milmod.h #define M_ACCEPTANCE_DETECTION_SOURCE 5838L #define M_ACCEPTANCE_DETECTION_FROM_TRAIN 5839L #define M_ACCEPTANCE_DETECTION 5840L #define M_ACCEPTANCE_FIT 5841L #define M_ACCEPTANCE_COVERAGE 5842L #define M_MAX_ASSOCIATION_DISTANCE 1503L // Already defined in milmeas.h #define M_EDGEL_ANGLE_MODE 5658L #define M_SINGLE 0x01000000L // Already defined in mil.h #define M_COMPOSITE 1L // Already defined in mil.h #define M_MAX_ACCEPTED_OVERLAP 5661L #define M_MODEL_IMAGE 1019L // Already defined in milim.h #define M_EDGEL_ANGLE_FACTOR 5663L #define M_NUMBER_OF_MODELS 5664L #define M_ORIENTATION 0x00002400L // Already defined in milmeas.h #define M_EMPTY_REGIONS_MODE 5668L #define M_NO_NEIGHBOR 5669L #define M_USE_EDGELS_MAGNITUDE 5670L #define M_NEIGHBOR_TYPE 5671L #define M_STABLE_EDGELS_MODE 5856L #define M_SMOOTHNESS_STABLE 5857L #define M_TRAINED_MODEL 5672L #define M_PERSEVERANCE_DETECTION 5859L #define M_MODEL_SOURCE 5860L #define M_USER_IMAGE 5861L #define M_HAS_USER_MODEL 5862L #define M_FROM_TRAIN 5863L #define M_SMOOTHNESS_SOURCE 5864L #define M_SMOOTHNESS_FROM_TRAIN 5865L #define M_THRESHOLD_MODE_SOURCE 5866L #define M_THRESHOLD_MODE_FROM_TRAIN 5867L #define M_STEP_X 3971L // Already defind #define M_STEP_Y 3972L // Already defind #define M_CERTAINTY 202L // Already defined in milmod.h #define M_APPROXIMATION_TOLERANCE 26L // already defined #define M_GENERAL 0x20000000L // Already defined in milmod.h #define M_CONTEXT 0x08000000L // Already defined in milmod.h, milreg.h, milstr.h, milocr.h #define M_ALL 0x40000000L // Already defined in milmod.h, milmeas.h, milocr.h, milpat.h, mil.h, miledge.h #define M_DEFAULT 0x10000000L // Already defined in milmod.h, milocr.h, milcode.h, mil.h, miledge.h #define M_MODIFICATION_COUNT 5010L // Already define in mil.h #define M_OWNER_SYSTEM 1101L // Already define in mil.h #define M_SIZE_X 1536L // Already in mil.h #define M_SIZE_Y 1537L // Already in mil.h #define M_REFERENCE_X 100L // Already defined in milreg.h #define M_REFERENCE_Y 101L // Already defined in milreg.h #define M_RESET 9L // Already defined // Model #define M_AGM_MODEL_INDEX_FLAG 0x02000000L #define M_AGM_MODEL_INDEX(IndexValue) (M_AGM_MODEL_INDEX_FLAG | (IndexValue)) //////////////////////////////////////////////////////////////////////////////// // MagmGetResult ResultTypes #define M_STATUS 0x00008002L // Already defined #define M_TIMEOUT_REACHED 2554L // Already defined #define M_STOPPED_BY_REQUEST 2555L // Already defined #define M_NOT_ENOUGH_MEMORY 4L // Already defined #define M_COMPLETE 0x00000000L // Already defined #define M_INTERNAL_ERROR 5L // Already defined #define M_CURRENTLY_CALCULATING 2718L // Already defined #define M_STATUS 0x00008002L // Already defined #define M_SCORE_FIT 2461L // Already defined in milmod.h #define M_SCORE_DETECTION 5674L #define M_SCORE_COVERAGE 5675L #define M_SORT_CANDIDATES_SCORE 5868L //////////////////////////////////////////////////////////////////////////////// // MagmDraw options #define M_DRAW_IMAGE 0x00000002L // Already defined in milmod.h #define M_DRAW_EDGES 0x00000004L // Already defined in milmod.h #define M_DRAW_BOX 0x00000020L // Already defined in milmod.h #define M_DRAW_POSITION 0x00000040L // Already defined in milmod.h #define M_DRAW_TRAINED_MODEL 0x00000800L #define M_DRAW_AXIS 0x00000200L // Already define in MilBlob.h // CAPI function prototypes MIL_ID MFTYPE MagmAlloc(MIL_ID SysId, MIL_INT64 ContextType, MIL_INT64 ControlFlag, MIL_ID* ContextIdPtr); MIL_ID MFTYPE MagmAllocResult(MIL_ID SysId, MIL_INT64 ResultType, MIL_INT64 ControlFlag, MIL_ID* AgmResultIdPtr); MIL_INT64 MFTYPE MagmInquire(MIL_ID ContextOrResultId, MIL_INT64 Index, MIL_INT64 InquireType, void* UserVarPtr); MIL_DOUBLE MFTYPE MagmGetResult(MIL_ID AgmResultId, MIL_INT64 Index, MIL_INT64 AgmResultType, void* ResultArrayPtr); void MFTYPE MagmPreprocess(MIL_ID AgmContextId, MIL_INT64 ControlFlag); MIL_INT64 MFTYPE MagmDefine(MIL_ID ContextId, MIL_INT64 Operation, MIL_INT64 SourceType, MIL_INT64 ModelType, MIL_INT64 Param1, MIL_INT64 ControlFlag); void MFTYPE MagmFind(MIL_ID AgmContextId, MIL_ID TargetImageId, MIL_ID AgmResultId, MIL_INT64 ControlFlag); void MFTYPE MagmTrain(MIL_ID TrainContextId, const MIL_ID* ImageArrayPtr, MIL_INT NumImages, MIL_ID TrainResultId, MIL_INT64 ControlFlag); void MFTYPE MagmCopyResult(MIL_ID SrcTrainResultId, MIL_INT64 SrcIndex, MIL_ID DstContextId, MIL_INT64 DstIndex, MIL_INT64 CopyType, MIL_INT64 ControlFlag); void MFTYPE MagmDraw(MIL_ID ContextGraId, MIL_ID ContextOrResultAgmId, MIL_ID DstImageBufOrListGraId, MIL_INT64 Operation, MIL_INT64 Index, MIL_INT64 ControlFlag); void MFTYPE MagmFree(MIL_ID ContextOrResultAgmId); #if M_MIL_USE_64BIT // Prototypes for 64 bits OSs void MFTYPE MagmControlInt64(MIL_ID ContextId, MIL_INT64 Index, MIL_INT64 ControlType, MIL_INT64 ControlValue); void MFTYPE MagmControlDouble(MIL_ID ContextId, MIL_INT64 Index, MIL_INT64 ControlType, MIL_DOUBLE ControlValue); #else // Prototypes for 32 bits OSs #define MagmControlInt64 MagmControl #define MagmControlDouble MagmControl void MFTYPE MagmControl(MIL_ID ContextId, MIL_INT64 Index, MIL_INT64 ControlType, MIL_DOUBLE ControlValue); #endif //M_MIL_USE_64BIT #if M_MIL_USE_UNICODE void MFTYPE MagmSaveA(MIL_CONST_TEXTA_PTR FileName, MIL_ID ContextId, MIL_INT64 ControlFlag); MIL_ID MFTYPE MagmRestoreA(MIL_CONST_TEXTA_PTR FileName, MIL_ID SysId, MIL_INT64 ControlFlag, MIL_ID* ContextAgmPtr); void MFTYPE MagmStreamA(MIL_TEXTA_PTR MemPtrOrFileName, MIL_ID SysId, MIL_INT64 Operation, MIL_INT64 StreamType, MIL_DOUBLE Version, MIL_INT64 ControlFlag, MIL_ID* ContextAgmIdPtr, MIL_INT* SizeByteVarPtr); void MFTYPE MagmSaveW(MIL_CONST_TEXTW_PTR FileName, MIL_ID ContextId, MIL_INT64 ControlFlag); MIL_ID MFTYPE MagmRestoreW(MIL_CONST_TEXTW_PTR FileName, MIL_ID SysId, MIL_INT64 ControlFlag, MIL_ID* ContextAgmPtr); void MFTYPE MagmStreamW(MIL_TEXTW_PTR MemPtrOrFileName, MIL_ID SysId, MIL_INT64 Operation, MIL_INT64 StreamType, MIL_DOUBLE Version, MIL_INT64 ControlFlag, MIL_ID* ContextAgmIdPtr, MIL_INT* SizeByteVarPtr); #if M_MIL_UNICODE_API #define MagmSave MagmSaveW #define MagmRestore MagmRestoreW #define MagmStream MagmStreamW #else #define MagmSave MagmSaveA #define MagmRestore MagmRestoreA #define MagmStream MagmStreamA #endif //M_MIL_UNICODE_API #else void MFTYPE MagmSave(MIL_CONST_TEXT_PTR FileName, MIL_ID ContextId, MIL_INT64 ControlFlag); MIL_ID MFTYPE MagmRestore(MIL_CONST_TEXT_PTR FileName, MIL_ID SysId, MIL_INT64 ControlFlag, MIL_ID* ContextAgmPtr); void MFTYPE MagmStream(MIL_TEXT_PTR MemPtrOrFileName, MIL_ID SysId, MIL_INT64 Operation, MIL_INT64 StreamType, MIL_DOUBLE Version, MIL_INT64 ControlFlag, MIL_ID* ContextAgmIdPtr, MIL_INT* SizeByteVarPtr); #endif //M_MIL_USE_UNICODE /* C++ directive if needed */ #ifdef __cplusplus } #endif //============================================================================== #ifdef __cplusplus inline void MFTYPE MagmStreamCpp(MilStreamParam MemPtrOrFileName, MIL_ID SysId, MIL_INT64 Operation, MIL_INT64 StreamType, MIL_DOUBLE Version, MIL_INT64 ControlFlag, MIL_ID* ContextAgmIdPtr, MIL_INT* SizeByteVarPtr) { MagmStream(MemPtrOrFileName.m_Param, SysId, Operation, StreamType, Version, ControlFlag, ContextAgmIdPtr, SizeByteVarPtr); } #undef MagmStream #define MagmStream MagmStreamCpp #endif // __cplusplus #if M_MIL_USE_STRING #if M_MIL_USE_UNICODE #if M_MIL_UNICODE_API inline void MFTYPE MagmSaveW(const MIL_STRING& FileName, MIL_ID ContextId, MIL_INT64 ControlFlag) { return MagmSaveW(FileName.c_str(), ContextId, ControlFlag); } inline MIL_ID MFTYPE MagmRestoreW(const MIL_STRING& FileName, MIL_ID SysId, MIL_INT64 ControlFlag, MIL_ID* ContextAgmPtr) { return MagmRestoreW(FileName.c_str(), SysId, ControlFlag, ContextAgmPtr); } #else // M_MIL_UNICODE_API inline void MFTYPE MagmSaveA(const MIL_STRING& FileName, MIL_ID ContextId, MIL_INT64 ControlFlag) { return MagmSaveA(FileName.c_str(), ContextId, ControlFlag); } inline MIL_ID MFTYPE MagmRestoreA(const MIL_STRING& FileName, MIL_ID SysId, MIL_INT64 ControlFlag, MIL_ID* ContextAgmPtr) { return MagmRestoreA(FileName.c_str(), SysId, ControlFlag, ContextAgmPtr); } #endif // M_MIL_UNICODE_API #else // M_MIL_USE_UNICODE inline void MFTYPE MagmSave(const MIL_STRING& FileName, MIL_ID ContextId, MIL_INT64 ControlFlag) { return MagmSave(FileName.c_str(), ContextId, ControlFlag); } inline MIL_ID MFTYPE MagmRestore(const MIL_STRING& FileName, MIL_ID SysId, MIL_INT64 ControlFlag, MIL_ID* ContextAgmPtr) { return MagmRestore(FileName.c_str(), SysId, ControlFlag, ContextAgmPtr); } #endif // M_MIL_USE_UNICODE #endif // M_MIL_USE_STRING #if M_MIL_USE_64BIT #ifdef __cplusplus ////////////////////////////////////////////////////////////// // MagmControl function overloads when compiling c++ files ////////////////////////////////////////////////////////////// inline void MagmControl(MIL_ID ContextId, MIL_INT64 Index, MIL_INT64 ControlType, float ControlValue) { MagmControlDouble(ContextId, Index, ControlType, ControlValue); } inline void MagmControl(MIL_ID ContextId, MIL_INT64 Index, MIL_INT64 ControlType, MIL_DOUBLE ControlValue) { MagmControlDouble(ContextId, Index, ControlType, ControlValue); } #if M_MIL_USE_MIL_UNIQUE_ID // Overload for applicable MIL_UNIQUE_..._IDs. inline void MagmControl(MIL_ID ContextId, MIL_INT64 Index, MIL_INT64 ControlType, const MIL_UNIQUE_BUF_ID& ControlValue) { MagmControlInt64(ContextId, Index, ControlType, ControlValue.get()); } #endif template inline void MagmControl(MIL_ID ContextId, MIL_INT64 Index, MIL_INT64 ControlType, T* ControlValue) { MagmControlInt64(ContextId, Index, ControlType, M_PTR_TO_MIL_INT(ControlValue)); } template inline void MagmControl(MIL_ID ContextId, MIL_INT64 Index, MIL_INT64 ControlType, T ControlValue) { MagmControlInt64(ContextId, Index, ControlType, (MIL_INT64) ControlValue); } #else // __cplusplus ////////////////////////////////////////////////////////////// // For C file, call the default function, i.e. Double one ////////////////////////////////////////////////////////////// #define MagmControl MagmControlDouble #endif // __cplusplus #endif // M_MIL_USE_64BIT //============================================================================== // MIL_UNIQUE_ID support #if M_MIL_USE_MIL_UNIQUE_ID #if M_MIL_USE_SAFE_TYPE template <> inline bool MilIsCorrectObjectType<&MagmFree>(MIL_INT64 ObjectType) { return (ObjectType & ~M_USER_DEFINE_LOW_ATTRIBUTE) == M_AGM_OBJECT; } #endif typedef MIL_UNIQUE_ID<&MagmFree> MIL_UNIQUE_AGM_ID; #if M_MIL_USE_MOVE_SEMANTICS inline MIL_UNIQUE_AGM_ID MagmAlloc(MIL_ID SysId, MIL_INT64 ObjectType, MIL_INT64 InitFlag, MIL_UNIQUE_ID_TAG) { return MIL_UNIQUE_AGM_ID(MagmAlloc(SysId, ObjectType, InitFlag, M_NULL)); } inline MIL_UNIQUE_AGM_ID MagmAllocResult(MIL_ID SysId, MIL_INT64 AgmResultType, MIL_INT64 ControlFlag, MIL_UNIQUE_ID_TAG) { return MIL_UNIQUE_AGM_ID(MagmAllocResult(SysId, AgmResultType, ControlFlag, M_NULL)); } inline MIL_UNIQUE_AGM_ID MagmRestore(MIL_CONST_TEXT_PTR FileName, MIL_ID SysId, MIL_INT64 ControlFlag, MIL_UNIQUE_ID_TAG) { return MIL_UNIQUE_AGM_ID(MagmRestore(FileName, SysId, ControlFlag, M_NULL)); } #if M_MIL_USE_STRING inline MIL_UNIQUE_AGM_ID MagmRestore(const MIL_STRING& FileName, MIL_ID SysId, MIL_INT64 ControlFlag, MIL_UNIQUE_ID_TAG) { return MIL_UNIQUE_AGM_ID(MagmRestore(FileName.c_str(), SysId, ControlFlag, M_NULL)); } #endif // M_MIL_USE_STRING template inline void MagmFree(const MIL_UNIQUE_ID&) = delete; inline void MagmStream(MilStreamParam MemPtrOrFileName, MIL_ID SysId, MIL_INT64 Operation, MIL_INT64 StreamType, MIL_DOUBLE Version, MIL_INT64 ControlFlag, MIL_UNIQUE_AGM_ID* ContextAgmIdPtr, MIL_INT* SizeByteVarPtr) { MxxxStreamForMilUniqueId(MemPtrOrFileName, SysId, Operation, StreamType, Version, ControlFlag, ContextAgmIdPtr, SizeByteVarPtr, MagmStream); } inline void MagmTrain(MIL_ID TrainContextId, MilConstArrayIdParam ImageArrayPtr, MIL_INT NumImages, MIL_ID TrainResultId, MIL_INT64 ControlFlag) { MagmTrain(TrainContextId, ImageArrayPtr.m_IdArrayPtr, NumImages, TrainResultId, ControlFlag); } #endif // M_MIL_USE_MOVE_SEMANTICS #endif // M_MIL_USE_MIL_UNIQUE_ID // End of MIL_UNIQUE_ID support //===================================================== #if M_MIL_USE_SAFE_TYPE // ------------------------------------------------------------------------- // MagmGetResult safe type definitions inline MIL_DOUBLE MagmGetResultSafeType(MIL_ID AgmResultId, MIL_INT64 Index, MIL_INT64 AgmResultType, MilVoidPtr ResultArrayPtr) { MIL_INT64 RequiredParamType = M_PARAM_TYPE_MIL_INT64; if((AgmResultType & M_DATA_TYPE_MASK) == 0) { MagmGetResult(AgmResultId, Index, AgmResultType | M_DEFAULT_DATA_TYPE, &RequiredParamType); } if(!MfuncPointerIsCompatible(RequiredParamType, ResultArrayPtr.Type, AgmResultType)) { SafeTypeError(MIL_TEXT("MagmGetResult")); } return MagmGetResult(AgmResultId, Index, AgmResultType, ResultArrayPtr.Ptr); } // ------------------------------------------------------------------------- // MagmGetResult Unsafe type definitions inline MIL_DOUBLE MagmGetResultUnsafe(MIL_ID AgmResultId, MIL_INT64 Index, MIL_INT64 AgmResultType, void* ResultArrayPtr) { return MagmGetResult(AgmResultId, Index, AgmResultType, ResultArrayPtr); } // ---------------------------------------------------------- // MagmInquire safe type definitions inline MIL_INT64 MFTYPE MagmInquireSafeType(MIL_ID ContextOrResultId, MIL_INT64 Index, MIL_INT64 InquireType, MilVoidPtr UserVarPtr) { MIL_INT64 RequiredParamType = M_PARAM_TYPE_MIL_INT64; if((InquireType & M_DATA_TYPE_MASK) == 0) { MagmInquire(ContextOrResultId, Index, InquireType | M_DEFAULT_DATA_TYPE, &RequiredParamType); } if(!MfuncPointerIsCompatible(RequiredParamType, UserVarPtr.Type, InquireType)) { SafeTypeError(MIL_TEXT("MagmInquire")); } return MagmInquire(ContextOrResultId, Index, InquireType, UserVarPtr.Ptr); } inline MIL_INT64 MFTYPE MagmInquireUnsafe(MIL_ID ContextOrResultId, MIL_INT64 Index, MIL_INT64 InquireType, void* UserVarPtr) { return MagmInquire(ContextOrResultId, Index, InquireType, UserVarPtr); } //------------------------------ // Safetype functions assignment #define MagmGetResult MagmGetResultSafeType #define MagmInquire MagmInquireSafeType #else // #if M_MIL_USE_SAFE_TYPE #define MagmGetResultUnsafe MagmGetResult #define MagmInquireUnsafe MagmInquire #endif // #if M_MIL_USE_SAFE_TYPE // ---------------------------------------------------------- // Overload for std::vector. #if defined(M_MIL_USE_VECTOR) && M_MIL_USE_VECTOR template inline MIL_DOUBLE MFTYPE MagmGetResult(MIL_ID AgmResultId, MIL_INT64 Index, MIL_INT64 AgmResultType, std::vector &ResultArrayPtr) { //! 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(AgmResultType) != 0) { SafeTypeError(MIL_TEXT("MagmGetResult"), MIL_TEXT("Combination value for the required data type is not supported with std::vector overload.")); } #endif AgmResultType = M_STRIP_HLVLDATATYPE(AgmResultType) + InternalTrueDataTypeForStdVector; MIL_INT InternalNumberOfElementsForStdVector = 0; MagmGetResult(AgmResultId, Index, M_STRIP_HLVLDATATYPE(AgmResultType) + M_NB_ELEMENTS + M_TYPE_MIL_INT, &InternalNumberOfElementsForStdVector); ResultArrayPtr.resize(InternalNumberOfElementsForStdVector); if(InternalNumberOfElementsForStdVector > 0) { return MagmGetResult(AgmResultId, Index, AgmResultType, &ResultArrayPtr[0]); } return 0; } template inline MIL_INT64 MFTYPE MagmInquire(MIL_ID ContextOrResultId, MIL_INT64 Index, MIL_INT64 InquireType, std::vector &UserVarPtr) { // 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("MagmInquire"), 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; MagmInquire(ContextOrResultId, Index, M_STRIP_HLVLDATATYPE(InquireType) + M_NB_ELEMENTS + M_TYPE_MIL_INT, &InternalNumberOfElementsForStdVector); UserVarPtr.resize(InternalNumberOfElementsForStdVector); if(InternalNumberOfElementsForStdVector > 0) { return MagmInquire(ContextOrResultId, Index, InquireType, &UserVarPtr[0]); } return 0; } //======================================================================================= inline void MFTYPE MagmTrain(MIL_ID TrainContextId, const std::vector& ImageVector, MIL_INT NumImages, MIL_ID TrainResultId, MIL_INT64 ControlFlag) { MIL_INT ImageVectorSize = static_cast(ImageVector.size()); #if M_MIL_USE_SAFE_TYPE if((NumImages > ImageVectorSize) && (NumImages != M_DEFAULT)) { SafeTypeError(MIL_TEXT("MagmTrain"), MIL_TEXT("NumImages parameter must be smaller or equal (M_DEFAULT) to the size of input vector.")); } if(NumImages < 0) { SafeTypeError(MIL_TEXT("MagmTrain"), MIL_TEXT("NumImages parameter must be positive.")); } #endif MIL_INT SafeNumImages = NumImages; if((NumImages > ImageVectorSize) || (NumImages == M_DEFAULT)) { SafeNumImages = ImageVectorSize; } else if(NumImages < 0) { SafeNumImages = 0; } MagmTrain(TrainContextId, ImageVector.empty() ? nullptr : &ImageVector[0], SafeNumImages, TrainResultId, ControlFlag); } // ---------------------------------------------------------- // Overloads for std::vector in MxxxStream. inline void MFTYPE MagmStream(std::vector &MemPtrOrFileName, MIL_ID SysId, MIL_INT64 Operation, MIL_INT64 StreamType, MIL_DOUBLE Version, MIL_INT64 ControlFlag, MIL_ID* ContextAgmIdPtr, MIL_INT* SizeByteVarPtr) { MxxxStreamForStdVector(MemPtrOrFileName, SysId, Operation, StreamType, Version, ControlFlag, ContextAgmIdPtr, SizeByteVarPtr, MagmStream); } #endif // defined(M_MIL_USE_VECTOR) && M_MIL_USE_VECTOR #endif // !M_MIL_LITE #endif // __MIL_AGM_H__