cotton_double/Include/ClassicMIL/MILDyn/mil3dgeo.h

873 lines
42 KiB
C++

/////////////////////////////////////////////////////////////////
//
// Filename : MIL3DGEO.H
// Content : Define for the MIL 3D module
// Revision : 10.60.0776
//
// Copyright © Matrox Electronic Systems Ltd., 1992-2023.
// All Rights Reserved
//
/////////////////////////////////////////////////////////////////
#ifndef __MIL3DGEO_H__
#define __MIL3DGEO_H__
////////////////////////////////////////////////////////////////////////////////////////////////
// M3DGEO
////////////////////////////////////////////////////////////////////////////////////////////////
/* C++ directive if needed */
#ifdef __cplusplus
extern "C"
{
#endif
#define M_GEOMETRY_TYPE 1321L
#define M_GEOMETRY 1306L // Already defined
#define M_PLANE 1353L // Already defined in 3dmap
#define M_SPHERE 2931L
#define M_CYLINDER 3656
#define M_BOX 0x101L // Already defined in milblob.h
#define M_LINE 0x00000080L // Already defined
#define M_POINT 1L // Already defined in milmeas.h
#define M_UNCHANGED 0x40000005L // Already defined
#define M_DIMENSION 5058
//BoX
#define M_SIZE_X 1536L //Already defined elsewhere
#define M_SIZE_Y 1537L //Already defined elsewhere
#define M_SIZE_Z 1538L // also in mil.h
#define M_AXIS_ALIGNED 0x00040000 // Already defined in mil.h
#define M_BOX_ORIENTATION 3814
#define M_CORNER_X(N) (1221L + (N)+ ((N) > 3 ? 2595 : 0))
#define M_CORNER_Y(N) (1225L + (N)+ ((N) > 3 ? 2595 : 0))
#define M_CORNER_Z(N) (3828+(N))
#define M_CORNER_X_ALL 3847
#define M_CORNER_Y_ALL 3848
#define M_CORNER_Z_ALL 3849
#define M_UNROTATED_MIN_X 3850
#define M_UNROTATED_MIN_Y 3851
#define M_UNROTATED_MIN_Z 3852
#define M_UNROTATED_MAX_X 3853
#define M_UNROTATED_MAX_Y 3854
#define M_UNROTATED_MAX_Z 3855
#define M_ORIENTATION_UNCHANGED 0x8000L
//Plane type
#define M_COEFFICIENTS 3388
#define M_POINT_AND_NORMAL 3389
#define M_THREE_POINTS 3390
#define M_POINT_AND_TWO_VECTORS 3391
//Sphere
#define M_CENTER_Z 3400
#define M_RADIUS 0x00000040L // Already defined in MilMod.h
//Plane
#define M_COEFFICIENT_A 3401
#define M_COEFFICIENT_B 3402
#define M_COEFFICIENT_C 3403
#define M_COEFFICIENT_D 3404
#define M_NORMAL_X 3537
#define M_NORMAL_Y 3538
#define M_NORMAL_Z 3539
#define M_CLOSEST_TO_ORIGIN_X 3540
#define M_CLOSEST_TO_ORIGIN_Y 3541
#define M_CLOSEST_TO_ORIGIN_Z 3542
//Cylinder
#define M_TWO_POINTS 3657
#define M_START_POINT_X 3658
#define M_START_POINT_Y 3659
#define M_START_POINT_Z 3660
#define M_END_POINT_X 3661
#define M_END_POINT_Y 3662
#define M_END_POINT_Z 3663
#define M_AXIS_X 3664
#define M_AXIS_Y 3665
#define M_AXIS_Z 3666
#define M_INFINITE -1L // Also defined in Mil.h
#define M_POINT_AND_VECTOR 4670
#define M_WITHOUT_BASES 0x00000040L
#define M_WITH_BASES 0x00000080L
#define M_BASES 4153 // Also in mil3dgra.h
// Point
#define M_POSITION_X 0x00003400L // Already defined in mil3dgra.h
#define M_POSITION_Y 0x00004400L // Already defined in mil3dgra.h
#define M_POSITION_Z 3960L // Already defined in mil3dgra.h
//SetMatrix
#define M_TRANSFORMATION_MATRIX 72L // Already defined in milreg.h
#define M_TRANSFORM_TYPES_SHIFT 8L // =utilities= (also defined in milcal.h)
#define M_ASSIGN (1 << M_TRANSFORM_TYPES_SHIFT) /* (also defined in milcal.h) */
#define M_COMPOSE_WITH_CURRENT (2 << M_TRANSFORM_TYPES_SHIFT) /* (also defined in milcal.h) */
#define M_TRANSFORMATION_TYPE 3L // Already defined in Milreg.h
#define M_INVERSE 0x00100
#define M_IDENTITY 6L // already defined in milcal.h
#define M_TRANSLATION 1L // already defined in milcal.h
#define M_ROTATION 3410
#define M_RIGID 3411
#define M_SCALE_UNIFORM 3413
#define M_SIMILARITY 3415
#define M_AFFINE 3416
#define M_PROJECTION 3417
#define M_COMPOSE_TWO_MATRICES 3766
#define M_ROTATION_AXIS_ANGLE 2L // already defined in milcal.h
#define M_ROTATION_QUATERNION 3L // already defined in milcal.h
#define M_ROTATION_X 7L // already defined in milcal.h
#define M_ROTATION_Y 8L // already defined in milcal.h
#define M_ROTATION_Z 9L // already defined in milcal.h
#define M_ROTATION_YXZ 4L // already defined in milcal.h
#define M_ROTATION_XYZ 10L // already defined in milcal.h
#define M_ROTATION_XZY 11L // already defined in milcal.h
#define M_ROTATION_YZX 12L // already defined in milcal.h
#define M_ROTATION_ZXY 13L // already defined in milcal.h
#define M_ROTATION_ZYX 14L // already defined in milcal.h
#define M_ROTATION_AXIS_X 17L // already defined in milcal.h
#define M_ROTATION_AXIS_Y 18L // already defined in milcal.h
#define M_ROTATION_AXIS_Z 19L // already defined in milcal.h
#define M_FIXTURE_TO_PLANE 20L // already defined in milcal.h
#define M_FIXTURE_TO_GEOMETRY 21L // already defined in milcal.h
//MatrixDefine
#define M_XY_AXES 3926L
#define M_XZ_AXES 3927L
#define M_YX_AXES 3928L
#define M_YZ_AXES 3929L
#define M_ZX_AXES 3930L
#define M_ZY_AXES 3931L
////////////////////////////////////////////////////////////////////////////////
// Deprecated starting 10 SP6 //
////////////////////////////////////////////////////////////////////////////////
#if OldDefinesSupport
#define M_FORWARD_TRANSFORMATION 0x00001000L
#define M_BACKWARD_TRANSFORMATION 0x00002000L
MIL_DEPRECATED(M_FORWARD_TRANSFORMATION , 1060)
MIL_DEPRECATED(M_BACKWARD_TRANSFORMATION, 1060)
#endif
#define M_POSITION_TRANSFORMATION 0x00001000L
#define M_COORDINATE_SYSTEM_TRANSFORMATION 0x00002000L
//Draw3d
#define M_ROOT_NODE 0
//Copy
#define M_ROTATION_AND_SCALE 3993
//Construct
#define M_START_POINT 4762L
#define M_END_POINT 4763L
#define M_CENTER 0x00000080L // already defined in milim.h
#define M_CLOSEST_TO_ORIGIN 4764L
#define M_NORMAL 8L // already defined in milmeas.h
#define M_EDGE 2L // already defined in milmeas.h
#define M_AXIS 4765L
#define M_LINE_AND_POINT 4766L
#define M_FACE 4767L
#define M_CENTER_AND_RADIUS 4768L
#define M_DIAMETER 4769L
#define M_CORNER 4770L
//Evaluation
#define M_EVAL_X 5219L
#define M_EVAL_Y 5220L
#define M_EVAL_Z 5221L
#define M_EVAL_XY 5223L
#define M_EVAL_XZ 5224L
#define M_EVAL_YZ 5225L
#define M_MIN_VALUE MAKE_INT64(0x0000010000000000) // already defined in milim.h
#define M_MAX_VALUE MAKE_INT64(0x0000020000000000) // already defined in milim.h
#define M_PACKED 0x00020000L // Already defined in mil.h, miledge.h
#define M_PACKED_SRC 0x00040000L
#define M_PACKED_DST 0x00080000L
#define M_NONE 0x08000000L // Already defined in milstr.h
// CAPI function prototypes
MIL_ID MFTYPE M3dgeoAlloc(MIL_ID SysId,
MIL_INT64 ObjectType,
MIL_INT64 ControlFlag,
MIL_ID* GeometryOrMatrix3dgeoIdPtr);
MIL_DOUBLE MFTYPE M3dgeoInquire(MIL_ID GeometryOrMatrix3dgeoId,
MIL_INT64 InquireType,
void* UserVarPtr);
void MFTYPE M3dgeoFree(MIL_ID GeometryOrMatrix3dgeoId);
void MFTYPE M3dgeoBox(MIL_ID Geometry3dgeoId,
MIL_INT64 CreationMode,
MIL_DOUBLE XPos1,
MIL_DOUBLE YPos1,
MIL_DOUBLE ZPos1,
MIL_DOUBLE XPos2OrLength,
MIL_DOUBLE YPos2OrLength,
MIL_DOUBLE ZPos2OrLength,
MIL_INT64 ControlFlag);
void MFTYPE M3dgeoSphere(MIL_ID Geometry3dgeoId,
MIL_DOUBLE CenterX,
MIL_DOUBLE CenterY,
MIL_DOUBLE CenterZ,
MIL_DOUBLE Radius,
MIL_INT64 ControlFlag);
void MFTYPE M3dgeoPoint(MIL_ID Geometry3dgeoId,
MIL_DOUBLE PositionX,
MIL_DOUBLE PositionY,
MIL_DOUBLE PositionZ,
MIL_INT64 ControlFlag);
void MFTYPE M3dgeoPlane(MIL_ID Geometry3dgeoId,
MIL_INT64 CreationMode,
MIL_DOUBLE X1,
MIL_DOUBLE Y1,
MIL_DOUBLE Z1,
MIL_DOUBLE X2OrD,
MIL_DOUBLE Y2,
MIL_DOUBLE Z2,
MIL_DOUBLE X3,
MIL_DOUBLE Y3,
MIL_DOUBLE Z3,
MIL_INT64 ControlFlag);
void MFTYPE M3dgeoCopy(MIL_ID SrcMilObjectId,
MIL_ID DstMilObjectId,
MIL_INT64 CopyType,
MIL_INT64 ControlFlag);
void MFTYPE M3dgeoMatrixSetTransformDouble(MIL_ID Matrix3dgeoId,
MIL_INT64 TransformType,
MIL_DOUBLE Param1,
MIL_DOUBLE Param2,
MIL_DOUBLE Param3,
MIL_DOUBLE Param4,
MIL_INT64 ControlFlag);
void MFTYPE M3dgeoMatrixPutDouble(MIL_ID Matrix3dgeoId,
MIL_INT64 PutType,
const MIL_DOUBLE* UserArrayPtr);
void MFTYPE M3dgeoMatrixPutFloat(MIL_ID Matrix3dgeoId,
MIL_INT64 PutType,
const MIL_FLOAT* UserArrayPtr);
void MFTYPE M3dgeoMatrixGetDouble(MIL_ID Matrix3dgeoId,
MIL_INT64 GetType,
MIL_DOUBLE* UserArrayPtr);
void MFTYPE M3dgeoMatrixGetFloat(MIL_ID Matrix3dgeoId,
MIL_INT64 GetType,
MIL_FLOAT* UserArrayPtr);
void MFTYPE M3dgeoMatrixGetTransform(MIL_ID Matrix3dgeoId,
MIL_INT64 InquireType,
MIL_DOUBLE *Param1Ptr,
MIL_DOUBLE *Param2Ptr,
MIL_DOUBLE *Param3Ptr,
MIL_DOUBLE *Param4Ptr,
MIL_INT64 ControlFlag);
void MFTYPE M3dgeoCylinder(MIL_ID Geometry3dgeoId,
MIL_INT64 CreationMode,
MIL_DOUBLE XPos1,
MIL_DOUBLE YPos1,
MIL_DOUBLE ZPos1,
MIL_DOUBLE XPos2OrVector,
MIL_DOUBLE YPos2OrVector,
MIL_DOUBLE ZPos2OrVector,
MIL_DOUBLE Radius,
MIL_DOUBLE Length,
MIL_INT64 ControlFlag);
MIL_INT64 MFTYPE M3dgeoDraw3d(MIL_ID OperationDraw3dContext3dgeoId,
MIL_ID SrcGeometry3dgeoId,
MIL_ID DstList3dgraId,
MIL_INT64 DstParentLabel,
MIL_INT64 ControlFlag);
void MFTYPE M3dgeoLine(MIL_ID Geometry3dgeoId,
MIL_INT64 CreationMode,
MIL_DOUBLE XPos1,
MIL_DOUBLE YPos1,
MIL_DOUBLE ZPos1,
MIL_DOUBLE XPos2OrVector,
MIL_DOUBLE YPos2OrVector,
MIL_DOUBLE ZPos2OrVector,
MIL_DOUBLE Length,
MIL_INT64 ControlFlag);
void MFTYPE M3dgeoMatrixSetWithAxes(MIL_ID Matrix3dgeoId,
MIL_INT64 Mode,
MIL_DOUBLE OriginX,
MIL_DOUBLE OriginY,
MIL_DOUBLE OriginZ,
MIL_DOUBLE Axis1VectorX,
MIL_DOUBLE Axis1VectorY,
MIL_DOUBLE Axis1VectorZ,
MIL_DOUBLE Axis2VectorX,
MIL_DOUBLE Axis2VectorY,
MIL_DOUBLE Axis2VectorZ,
MIL_INT64 ControlFlag);
void MFTYPE M3dgeoConstruct(MIL_ID Src1Geometry3dgeoId,
MIL_ID Src2Geometry3dgeoId,
MIL_ID DstGeometry3dgeoId,
MIL_INT GeometryType,
MIL_INT64 Operation,
MIL_DOUBLE Param,
MIL_INT64 ControlFlag);
MIL_INT MFTYPE M3dgeoEvalCurveDouble(MIL_ID Geometry3dgeoId,
MIL_INT64 Operation,
MIL_INT NumPoints,
const MIL_DOUBLE* SrcCoordArrayPtr,
MIL_DOUBLE* Dst1CoordArrayPtr,
MIL_DOUBLE* Dst2CoordArrayPtr,
MIL_INT64 ControlFlag);
MIL_INT MFTYPE M3dgeoEvalCurveFloat(MIL_ID Geometry3dgeoId,
MIL_INT64 Operation,
MIL_INT NumPoints,
const MIL_FLOAT* SrcCoordArrayPtr,
MIL_FLOAT* Dst1CoordArrayPtr,
MIL_FLOAT* Dst2CoordArrayPtr,
MIL_INT64 ControlFlag);
MIL_INT MFTYPE M3dgeoEvalSurfaceDouble(MIL_ID Geometry3dgeoId,
MIL_INT64 Operation,
MIL_INT NumPoints,
const MIL_DOUBLE* Src1CoordArrayPtr,
const MIL_DOUBLE* Src2CoordArrayPtr,
MIL_DOUBLE* DstCoordArrayPtr,
MIL_INT64 ControlFlag);
MIL_INT MFTYPE M3dgeoEvalSurfaceFloat(MIL_ID Geometry3dgeoId,
MIL_INT64 Operation,
MIL_INT NumPoints,
const MIL_FLOAT* Src1CoordArrayPtr,
const MIL_FLOAT* Src2CoordArrayPtr,
MIL_FLOAT* DstCoordArrayPtr,
MIL_INT64 ControlFlag);
//M3dgeo Control
#if M_MIL_USE_UNICODE
void MFTYPE M3dgeoSaveA(MIL_CONST_TEXTA_PTR FileName,
MIL_ID GeometryOrMatrix3dgeoId,
MIL_INT64 ControlFlag);
MIL_ID MFTYPE M3dgeoRestoreA(MIL_CONST_TEXTA_PTR FileName,
MIL_ID SysId,
MIL_INT64 ControlFlag,
MIL_ID* GeometryOrMatrix3dgeoIdPtr);
void MFTYPE M3dgeoStreamA(MIL_TEXTA_PTR MemPtrOrFileName,
MIL_ID SysId,
MIL_INT64 Operation,
MIL_INT64 StreamType,
MIL_DOUBLE Version,
MIL_INT64 ControlFlag,
MIL_ID* GeometryOrMatrix3dgeoIdPtr,
MIL_INT* SizeByteVarPtr);
void MFTYPE M3dgeoSaveW(MIL_CONST_TEXTW_PTR FileName,
MIL_ID GeometryOrMatrix3dgeoId,
MIL_INT64 ControlFlag);
MIL_ID MFTYPE M3dgeoRestoreW(MIL_CONST_TEXTW_PTR FileName,
MIL_ID SysId,
MIL_INT64 ControlFlag,
MIL_ID* GeometryOrMatrix3dgeoIdPtr);
void MFTYPE M3dgeoStreamW(MIL_TEXTW_PTR MemPtrOrFileName,
MIL_ID SysId,
MIL_INT64 Operation,
MIL_INT64 StreamType,
MIL_DOUBLE Version,
MIL_INT64 ControlFlag,
MIL_ID* GeometryOrMatrix3dgeoIdPtr,
MIL_INT* SizeByteVarPtr);
#if M_MIL_UNICODE_API
#define M3dgeoSave M3dgeoSaveW
#define M3dgeoRestore M3dgeoRestoreW
#define M3dgeoStream M3dgeoStreamW
//#define M3dgeoImport M3dgeoImportW
#else
#define M3dgeoSave M3dgeoSaveA
#define M3dgeoRestore M3dgeoRestoreA
#define M3dgeoStream M3dgeoStreamA
//#define M3dgeoImport M3dgeoImportA
#endif
#else
void MFTYPE M3dgeoSave(MIL_CONST_TEXT_PTR FileName,
MIL_ID GeometryOrMatrix3dgeoId,
MIL_INT64 ControlFlag);
MIL_ID MFTYPE M3dgeoRestore(MIL_CONST_TEXT_PTR FileName,
MIL_ID SysId,
MIL_INT64 ControlFlag,
MIL_ID* GeometryOrMatrix3dgeoIdPtr);
void MFTYPE M3dgeoStream(MIL_TEXT_PTR MemPtrOrFileName,
MIL_ID SysId,
MIL_INT64 Operation,
MIL_INT64 StreamType,
MIL_DOUBLE Version,
MIL_INT64 ControlFlag,
MIL_ID* GeometryOrMatrix3dgeoIdPtr,
MIL_INT* SizeByteVarPtr);
#endif // M_MIL_USE_UNICODE
/* C++ directive if needed */
#ifdef __cplusplus
}
#endif
#ifdef __cplusplus
inline void MFTYPE M3dgeoStreamCpp(MilStreamParam MemPtrOrFileName,
MIL_ID SysId,
MIL_INT64 Operation,
MIL_INT64 StreamType,
MIL_DOUBLE Version,
MIL_INT64 ControlFlag,
MIL_ID* GeometryOrMatrix3dgeoIdPtr,
MIL_INT* SizeByteVarPtr)
{
M3dgeoStream(MemPtrOrFileName.m_Param, SysId, Operation, StreamType, Version, ControlFlag, GeometryOrMatrix3dgeoIdPtr, SizeByteVarPtr);
}
#undef M3dgeoStream
#define M3dgeoStream M3dgeoStreamCpp
#endif // __cplusplus
#ifdef __cplusplus
inline void M3dgeoMatrixGet(MIL_ID Matrix3dgeoId,
MIL_INT64 GetType,
MIL_DOUBLE* UserArrayPtr)
{
return M3dgeoMatrixGetDouble(Matrix3dgeoId, GetType, UserArrayPtr);
}
inline void M3dgeoMatrixGet(MIL_ID Matrix3dgeoId,
MIL_INT64 GetType,
MIL_FLOAT* UserArrayPtr)
{
return M3dgeoMatrixGetFloat(Matrix3dgeoId, GetType, UserArrayPtr);
}
inline void M3dgeoMatrixPut(MIL_ID Matrix3dgeoId,
MIL_INT64 PutType,
const MIL_DOUBLE* UserArrayPtr)
{
return M3dgeoMatrixPutDouble(Matrix3dgeoId, PutType, UserArrayPtr);
}
inline void M3dgeoMatrixPut(MIL_ID Matrix3dgeoId,
MIL_INT64 PutType,
const MIL_FLOAT* UserArrayPtr)
{
return M3dgeoMatrixPutFloat(Matrix3dgeoId, PutType, UserArrayPtr);
}
inline MIL_INT M3dgeoEvalCurve(MIL_ID Geometry3dgeoId,
MIL_INT64 Operation,
MIL_INT NumPoints,
const MIL_DOUBLE* SrcCoordArrayPtr,
MIL_DOUBLE* Dst1CoordArrayPtr,
MIL_DOUBLE* Dst2CoordArrayPtr,
MIL_INT64 ControlFlag)
{
return M3dgeoEvalCurveDouble(Geometry3dgeoId,
Operation,
NumPoints,
SrcCoordArrayPtr,
Dst1CoordArrayPtr,
Dst2CoordArrayPtr,
ControlFlag);
}
inline MIL_INT M3dgeoEvalCurve(MIL_ID Geometry3dgeoId,
MIL_INT64 Operation,
MIL_INT NumPoints,
const MIL_FLOAT* SrcCoordArrayPtr,
MIL_FLOAT* Dst1CoordArrayPtr,
MIL_FLOAT* Dst2CoordArrayPtr,
MIL_INT64 ControlFlag)
{
return M3dgeoEvalCurveFloat(Geometry3dgeoId,
Operation,
NumPoints,
SrcCoordArrayPtr,
Dst1CoordArrayPtr,
Dst2CoordArrayPtr,
ControlFlag);
}
inline MIL_INT M3dgeoEvalSurface(MIL_ID Geometry3dgeoId,
MIL_INT64 Operation,
MIL_INT NumPoints,
const MIL_DOUBLE* Src1CoordArrayPtr,
const MIL_DOUBLE* Src2CoordArrayPtr,
MIL_DOUBLE* DstCoordArrayPtr,
MIL_INT64 ControlFlag)
{
return M3dgeoEvalSurfaceDouble(Geometry3dgeoId,
Operation,
NumPoints,
Src1CoordArrayPtr,
Src2CoordArrayPtr,
DstCoordArrayPtr,
ControlFlag);
}
inline MIL_INT M3dgeoEvalSurface(MIL_ID Geometry3dgeoId,
MIL_INT64 Operation,
MIL_INT NumPoints,
const MIL_FLOAT* Src1CoordArrayPtr,
const MIL_FLOAT* Src2CoordArrayPtr,
MIL_FLOAT* DstCoordArrayPtr,
MIL_INT64 ControlFlag)
{
return M3dgeoEvalSurfaceFloat(Geometry3dgeoId,
Operation,
NumPoints,
Src1CoordArrayPtr,
Src2CoordArrayPtr,
DstCoordArrayPtr,
ControlFlag);
}
#else
#define M3dgeoMatrixGet M3dgeoMatrixGetDouble
#define M3dgeoMatrixPut M3dgeoMatrixPutDouble
#define M3dgeoEvalCurve M3dgeoEvalCurveDouble
#define M3dgeoEvalSurface M3dgeoEvalSurfaceDouble
#endif
#ifdef __cplusplus
#if M_MIL_USE_SAFE_TYPE
// ----------------------------------------------------------
// M3dgeoInquire
inline MIL_DOUBLE MFTYPE M3dgeoInquireSafeType(MIL_ID GeometryOrMatrix3dgeoId, 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)))
{
M3dgeoInquire(GeometryOrMatrix3dgeoId, InquireType | M_DEFAULT_DATA_TYPE, &RequiredParamType);
}
if(!MfuncPointerIsCompatible(RequiredParamType, UserVarPtr.Type, InquireType))
{
SafeTypeError(MIL_TEXT("M3dgeoInquire"));
}
return M3dgeoInquire(GeometryOrMatrix3dgeoId, InquireType, UserVarPtr.Ptr);
}
inline MIL_DOUBLE MFTYPE M3dgeoInquireUnsafe(MIL_ID GeometryOrMatrix3dgeoId, MIL_INT64 InquireType, void* UserVarPtr)
{
return M3dgeoInquire(GeometryOrMatrix3dgeoId, InquireType, UserVarPtr);
}
#define M3dgeoInquire M3dgeoInquireSafeType
#else // #if M_MIL_USE_SAFE_TYPE
#define M3dgeoInquireUnsafe M3dgeoInquire
#endif // #if M_MIL_USE_SAFE_TYPE
#endif
#if M_MIL_USE_STRING
inline void MFTYPE M3dgeoSave(const MIL_STRING& FileName, MIL_ID GeometryOrMatrix3dgeoId, MIL_INT64 ControlFlag)
{
return M3dgeoSave(FileName.c_str(), GeometryOrMatrix3dgeoId, ControlFlag);
}
inline MIL_ID MFTYPE M3dgeoRestore(const MIL_STRING& FileName, MIL_ID SysId, MIL_INT64 ControlFlag, MIL_ID* GeometryOrMatrix3dgeoIdPtr)
{
return M3dgeoRestore(FileName.c_str(), SysId, ControlFlag, GeometryOrMatrix3dgeoIdPtr);
}
#endif /* M_MIL_USE_STRING */
// ----------------------------------------------------------
// Overload for std::vector.
#if defined(M_MIL_USE_VECTOR) && M_MIL_USE_VECTOR
// ----------------------------------------------------------
// Overloads for std::vector in M3dgeoInquire.
template <typename UserType>
inline MIL_DOUBLE MFTYPE M3dgeoInquire(MIL_ID GeometryOrMatrix3dgeoId, MIL_INT64 InquireType, std::vector<UserType> &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<UserType>::TypeFlag;
#if M_MIL_USE_SAFE_TYPE
if(M_GET_HLVLDATATYPE(InquireType) != 0)
{
SafeTypeError(MIL_TEXT("M3dgeoInquire"), 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;
M3dgeoInquire(GeometryOrMatrix3dgeoId, M_STRIP_HLVLDATATYPE(InquireType) + M_NB_ELEMENTS + M_TYPE_MIL_INT, &InternalNumberOfElementsForStdVector);
UserVarPtr.resize(InternalNumberOfElementsForStdVector);
if(InternalNumberOfElementsForStdVector > 0)
{
return M3dgeoInquire(GeometryOrMatrix3dgeoId, InquireType, &UserVarPtr[0]);
}
return 0;
}
// ----------------------------------------------------------
// Overloads for std::vector in M3dgeoMatrixPut.
template <typename T>
inline void MFTYPE M3dgeoMatrixPut(MIL_ID Matrix3dgeoId,
MIL_INT64 PutType,
const std::vector<T>& ArrayPtr)
{
#if M_MIL_USE_SAFE_TYPE
if(ArrayPtr.empty())
{
SafeTypeError(MIL_TEXT("M3dgeoMatrixPut"), MIL_TEXT("The input vector cannot be empty."));
}
if(ArrayPtr.size() != 16)
{
SafeTypeError(MIL_TEXT("M3dgeoMatrixPut"), MIL_TEXT("The size of the input vector must be 16."));
}
#endif
M3dgeoMatrixPut(Matrix3dgeoId,
PutType,
&ArrayPtr[0]);
}
// Overloads for std::vector in M3dgeoMatrixGet.
template <typename T>
inline void M3dgeoMatrixGet(MIL_ID Matrix3dgeoId,
MIL_INT64 GetType,
std::vector<T>& ArrayPtr)
{
ArrayPtr.resize(16);//InternalNbElementRequired
M3dgeoMatrixGet(Matrix3dgeoId,
GetType,
&ArrayPtr[0]);
}
// Overloads for std::vector in M3dgeoEvalCurve.
template <typename T>
inline MIL_INT MFTYPE M3dgeoEvalCurve(MIL_ID Geometry3dgeoId,
MIL_INT64 Operation,
MIL_INT NumPoints,
const std::vector<T>& SrcCoordArrayPtr,
std::vector<T>& Dst1CoordArrayPtr,
CMilArrayParamOut Dst2CoordArrayPtr,
MIL_INT64 ControlFlag)
{
const bool PackedSource = ((Operation & M_PACKED) == M_PACKED) || ((Operation & M_PACKED_SRC) == M_PACKED_SRC);
const bool PackedDestination = ((Operation & M_PACKED) == M_PACKED) || ((Operation & M_PACKED_DST) == M_PACKED_DST);
#if M_MIL_USE_SAFE_TYPE
if(!Dst2CoordArrayPtr.IsValidParam())
{
SafeTypeError(MIL_TEXT("M3dgeoEvalCurve"), MIL_TEXT("The arrays cannot be a non-zero integer."));
}
if(!Dst2CoordArrayPtr.IsNullPtr() && Dst2CoordArrayPtr.GetMilDataType() != MilTraits<T>::TypeFlag)
{
SafeTypeError(MIL_TEXT("M3dgeoEvalCurve"), MIL_TEXT("The output arrays must have the same data type."));
}
if(NumPoints > (MIL_INT)SrcCoordArrayPtr.size() && NumPoints != M_DEFAULT)
{
SafeTypeError(MIL_TEXT("M3dgeoEvalCurve"), MIL_TEXT("NumPoints parameter must be smaller or equal (M_DEFAULT) to the size of input vector."));
}
if(NumPoints <= 0)
{
SafeTypeError(MIL_TEXT("M3dgeoEvalCurve"), MIL_TEXT("NumPoints must be greater than zero."));
}
if(PackedSource && SrcCoordArrayPtr.size() % 3 != 0)
{
SafeTypeError(MIL_TEXT("M3dgeoEvalCurve"), MIL_TEXT("Packed source array length is not multiple of 3"));
}
if(PackedDestination && !Dst2CoordArrayPtr.IsNullPtr())
{
SafeTypeError(MIL_TEXT("M3dimGetList"), MIL_TEXT("The second output array must be null when the output is M_PACKED."));
}
#endif
MIL_INT EffectiveNumPoints = (MIL_INT)(PackedSource ? SrcCoordArrayPtr.size() / 3 : SrcCoordArrayPtr.size());
if(EffectiveNumPoints > NumPoints)
EffectiveNumPoints = NumPoints;
Dst1CoordArrayPtr.resize((PackedDestination ? 3 : 1) * EffectiveNumPoints);
Dst2CoordArrayPtr.Resize<T>(EffectiveNumPoints);
if(EffectiveNumPoints == 0)
return EffectiveNumPoints;
return M3dgeoEvalCurve(Geometry3dgeoId,
Operation,
EffectiveNumPoints,
&SrcCoordArrayPtr[0],
&Dst1CoordArrayPtr[0],
Dst2CoordArrayPtr.GetData<T>(),
ControlFlag);
}
// Overloads for std::vector in M3dgeoEvalSurface.
template <typename T>
inline MIL_INT M3dgeoEvalSurface(MIL_ID Geometry3dgeoId,
MIL_INT64 Operation,
MIL_INT NumPoints,
const std::vector<T>& Src1CoordArrayPtr,
CMilArrayParamIn Src2CoordArrayPtr,
std::vector<T>& DstCoordArrayPtr,
MIL_INT64 ControlFlag)
{
const bool PackedSource = ((Operation & M_PACKED) == M_PACKED) || ((Operation & M_PACKED_SRC) == M_PACKED_SRC);
const bool PackedDestination = ((Operation & M_PACKED) == M_PACKED) || ((Operation & M_PACKED_DST) == M_PACKED_DST);
#if M_MIL_USE_SAFE_TYPE
if(!Src2CoordArrayPtr.IsValidParam())
{
SafeTypeError(MIL_TEXT("M3dgeoEvalSurface"), MIL_TEXT("The arrays cannot be a non-zero integer."));
}
if(!Src2CoordArrayPtr.IsNullPtr() && Src2CoordArrayPtr.GetMilDataType() != MilTraits<T>::TypeFlag)
{
SafeTypeError(MIL_TEXT("M3dgeoEvalSurface"), MIL_TEXT("The input arrays must have the same data type."));
}
if(!Src2CoordArrayPtr.IsNullPtr() && (MIL_INT)Src1CoordArrayPtr.size() != Src2CoordArrayPtr.Size<T>())
{
SafeTypeError(MIL_TEXT("M3dgeoEvalSurface"), MIL_TEXT("The input arrays must have the same size."));
}
if(NumPoints > (MIL_INT)Src1CoordArrayPtr.size() && NumPoints != M_DEFAULT)
{
SafeTypeError(MIL_TEXT("M3dgeoEvalSurface"), MIL_TEXT("NumPoints parameter must be smaller or equal (M_DEFAULT) to the size of input vector."));
}
if(NumPoints <= 0)
{
SafeTypeError(MIL_TEXT("M3dgeoEvalSurface"), MIL_TEXT("NumPoints must be greater than zero."));
}
if(PackedSource && Src1CoordArrayPtr.size() % 3 != 0)
{
SafeTypeError(MIL_TEXT("M3dgeoEvalSurface"), MIL_TEXT("Packed source array length is not multiple of 3"));
}
if(PackedSource && !Src2CoordArrayPtr.IsNullPtr())
{
SafeTypeError(MIL_TEXT("M3dgeoEvalSurface"), MIL_TEXT("The second input array must be null when the input is M_PACKED."));
}
#endif
MIL_INT EffectiveNumPoints = (MIL_INT)(PackedSource ? Src1CoordArrayPtr.size() / 3 : Src1CoordArrayPtr.size());
if(EffectiveNumPoints > NumPoints)
EffectiveNumPoints = NumPoints;
DstCoordArrayPtr.resize((PackedDestination ? 3 : 1) * EffectiveNumPoints);
return M3dgeoEvalSurface(Geometry3dgeoId,
Operation,
EffectiveNumPoints,
&Src1CoordArrayPtr[0],
Src2CoordArrayPtr.GetData<T>(),
&DstCoordArrayPtr[0],
ControlFlag);
}
// ----------------------------------------------------------
// Overloads for std::vector in M3dgeoStream.
inline void MFTYPE M3dgeoStream(std::vector<MIL_UINT8> &MemPtrOrFileName,
MIL_ID SysId,
MIL_INT64 Operation,
MIL_INT64 StreamType,
MIL_DOUBLE Version,
MIL_INT64 ControlFlag,
MIL_ID* GeometryOrMatrix3dgeoIdPtr,
MIL_INT* SizeByteVarPtr)
{
MxxxStreamForStdVector(MemPtrOrFileName,
SysId,
Operation,
StreamType,
Version,
ControlFlag,
GeometryOrMatrix3dgeoIdPtr,
SizeByteVarPtr,
M3dgeoStream);
}
#endif // defined(M_MIL_USE_VECTOR) && M_MIL_USE_VECTOR
// Automatic double casting
#define M3dgeoMatrixSetTransform(Matrix3dgeoId, TransformType, Param1, Param2, Param3, Param4, ControlFlag) \
M3dgeoMatrixSetTransformDouble(Matrix3dgeoId, TransformType, M_MILID_TO_DOUBLE(Param1), M_MILID_TO_DOUBLE(Param2), M_MILID_TO_DOUBLE(Param3), M_MILID_TO_DOUBLE(Param4), ControlFlag)
////////////////////////////////////////////////////////////////////////////////
// MIL_UNIQUE_ID support
#if M_MIL_USE_MIL_UNIQUE_ID
#if M_MIL_USE_SAFE_TYPE
template <> inline bool MilIsCorrectObjectType<&M3dgeoFree>(MIL_INT64 ObjectType)
{
return (ObjectType == M_3DGEO_GEOMETRY || ObjectType == M_3DGEO_TRANSFORMATION_MATRIX);
}
#endif
typedef MIL_UNIQUE_ID<&M3dgeoFree > MIL_UNIQUE_3DGEO_ID;
#if M_MIL_USE_MOVE_SEMANTICS
//3DGEO
inline MIL_UNIQUE_3DGEO_ID M3dgeoAlloc(MIL_ID SysId, MIL_INT64 ObjectType, MIL_INT64 InitFlag, MIL_UNIQUE_ID_TAG)
{
return MIL_UNIQUE_3DGEO_ID(M3dgeoAlloc(SysId, ObjectType, InitFlag, M_NULL));
}
inline MIL_UNIQUE_3DGEO_ID M3dgeoRestore(MIL_CONST_TEXT_PTR FileName, MIL_ID SysId, MIL_INT64 ControlFlag, MIL_UNIQUE_ID_TAG)
{
return MIL_UNIQUE_3DGEO_ID(M3dgeoRestore(FileName, SysId, ControlFlag, M_NULL));
}
#if M_MIL_USE_STRING
inline MIL_UNIQUE_3DGEO_ID M3dgeoRestore(const MIL_STRING& FileName, MIL_ID SysId, MIL_INT64 ControlFlag, MIL_UNIQUE_ID_TAG)
{
return MIL_UNIQUE_3DGEO_ID(M3dgeoRestore(FileName.c_str(), SysId, ControlFlag, M_NULL));
}
#endif // M_MIL_USE_STRING
template <MilFreeFuncType FreeFunc> inline void M3dgeoFree(const MIL_UNIQUE_ID<FreeFunc>&) = delete;
inline void M3dgeoStream(MilStreamParam MemPtrOrFileName,
MIL_ID SysId,
MIL_INT64 Operation,
MIL_INT64 StreamType,
MIL_DOUBLE Version,
MIL_INT64 ControlFlag,
MIL_UNIQUE_3DGEO_ID* Context3dgeoIdPtr,
MIL_INT* SizeByteVarPtr)
{
MxxxStreamForMilUniqueId(MemPtrOrFileName, SysId, Operation, StreamType, Version, ControlFlag, Context3dgeoIdPtr, SizeByteVarPtr, M3dgeoStream);
}
#endif // M_MIL_USE_MOVE_SEMANTICS
#endif // M_MIL_USE_MIL_UNIQUE_ID
// End of MIL_UNIQUE_ID support
////////////////////////////////////////////////////////////////////////////////
/* C++ directive if needed */
#ifdef __cplusplus
extern "C"
{
#endif
// MbufConvert3d
#define M_COMPENSATE 3713
#define M_REMOVE_NON_FINITE 0x00000001L
//Export
#define M_WITH_ORGANIZATION 0x0100000
void MFTYPE MbufConvert3d(MIL_ID SrcContainerOrImageBufId,
MIL_ID DstContainerOrImageBufId,
MIL_ID ExternalYArrayBufId,
MIL_INT64 DstOptions,
MIL_INT64 ControlFlag);
/* C++ directive if needed */
#ifdef __cplusplus
}
#endif
////////////////////////////////////////////////////////////////////////////////
#endif // __MIL3D_H__