/* ************************************************************************************************** ************************************************************************************************** ************************************************************************************************** ************************************************************************************************** */ #define D_CineInfo_StructureDefine #include "AIUseCPA.h" #include "specif/AIOption.h" #include "AIMacros.h" #include "AI_Erm.h" #include "Intell.h" #include "StrIntel.h" #include "AI_Struc.h" #include "EnumFunc.h" #include "Operator.h" #include "Convert.h" #include "CAM_Base.h" #include "CAM_Tool.h" #include "Cam_Vis.h" /* ************************************************************************************************** ************************************************************************************************** ************************************************************************************************** ************************************************************************************************** */ /* *================================================================================================= * To retrieve a real. * _lCurrentValue : -1 Initial * 0 Actual current (current or visibility) * 1 The actual one (current or work) *================================================================================================= */ MTH_tdxReal CAM_fn_xGetARealParameter ( MS_tdxHandleToCineinfo _hCineInfo, MTH_tdxReal *_p_xInitialValue, MTH_tdxReal *_p_xCurrentValue, MTH_tdxReal *_p_xWorkValue, MTH_tdxReal *_p_xVisValue, long _lCurrentValue ) { /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */ MTH_tdxReal xValue = MTH_C_ZERO; /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */ if (_lCurrentValue == 1) { if (_hCineInfo->ucVolIAFlags & C_VolIAFlags_CurrentAlreadyCopiedInWork) xValue = *_p_xWorkValue; else xValue = *_p_xCurrentValue; } else if (_lCurrentValue == -1) { xValue = *_p_xInitialValue; } else { if (_hCineInfo->ucPerIAFlags & C_PerIAFlags_VisibilityCopied) xValue = *_p_xVisValue; else xValue = *_p_xCurrentValue; } return xValue; } /* *================================================================================================= * To retrieve a vector. * _lCurrentValue : -1 Initial * 0 Actual current (current or visibility) * 1 The actual one (current or work) *================================================================================================= */ MTH3D_tdstVector *CAM_fn_p_stGetAVectorParameter ( MS_tdxHandleToCineinfo _hCineInfo, MTH3D_tdstVector *_p_stInitialValue, MTH3D_tdstVector *_p_stCurrentValue, MTH3D_tdstVector *_p_stWorkValue, MTH3D_tdstVector *_p_stVisValue, long _lCurrentValue ) { /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */ MTH3D_tdstVector *p_stValue = NULL; /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */ if (_lCurrentValue == 1) { if (_hCineInfo->ucVolIAFlags & C_VolIAFlags_CurrentAlreadyCopiedInWork) p_stValue = _p_stWorkValue; else p_stValue = _p_stCurrentValue; } else if (_lCurrentValue == -1) { p_stValue = _p_stInitialValue; } else { if (_hCineInfo->ucPerIAFlags & C_PerIAFlags_VisibilityCopied) p_stValue = _p_stVisValue; else p_stValue = _p_stCurrentValue; } return p_stValue; } /* ************************************************************************************************** ************************************************************************************************** ************************************************************************************************** ************************************************************************************************** */ /* *================================================================================================= * Get a vector parameter. *================================================================================================= */ tdstNodeInterpret *CAM_fn_p_stGetVectorParameter(HIE_tdxHandleToSuperObject p_SuperObjPerso, tdstNodeInterpret *p_stTree, tdstGetSetParam *p_stValue) { /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */ HIE_tdxHandleToSuperObject hCamera; MS_tdxHandleToCineinfo hCineInfo; long lCurrentValue; MTH3D_tdstVector *p_stInitialValue = NULL; MTH3D_tdstVector *p_stCurrentValue = NULL; MTH3D_tdstVector *p_stWorkValue = NULL; MTH3D_tdstVector *p_stVisValue = NULL; enum tdeFuncId_ eFuncId = M_eFuncIdInterpret(p_stTree-1); /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */ /********************************************************************************/ /* BEWARE THE ULTRA OPERATOR : Must be at the beginning and respect this syntax */ /********************************************************************************/ fn_vGetUltraOperatorPerso(fn_ucGetFunctionUltraOperator(eFuncId),p_SuperObjPerso,&hCamera); /********************************************************************************/ hCineInfo = M_GetMSHandle(hCamera, Cineinfo); #if defined(__DEBUG_AI__) if (hCineInfo == NULL) M_AIFatalError(E_uwAIFatalNotMSCamera); #endif M_EvalNextParameter(p_stValue); lCurrentValue = M_GetSetParam_lValue(p_stValue); switch(eFuncId) { /*---------------------------------------------------------------------------------------*/ case eFct_Cam_GetShiftTarget: p_stInitialValue = &(hCineInfo->hInit->stShiftTarget); p_stCurrentValue = &(hCineInfo->hCurrent->stShiftTarget); p_stWorkValue = &(hCineInfo->hWork->stShiftTarget); p_stVisValue = &(hCineInfo->hVisibility->stShiftTarget); break; /*---------------------------------------------------------------------------------------*/ case eFct_Cam_GetShiftPos: p_stInitialValue = &(hCineInfo->hInit->stShiftPos); p_stCurrentValue = &(hCineInfo->hCurrent->stShiftPos); p_stWorkValue = &(hCineInfo->hWork->stShiftPos); p_stVisValue = &(hCineInfo->hVisibility->stShiftPos); break; /*---------------------------------------------------------------------------------------*/ default: break; } M_Full_GetSetParam_p_stVertex ( p_stValue, CAM_fn_p_stGetAVectorParameter ( hCineInfo, p_stInitialValue, p_stCurrentValue, p_stWorkValue, p_stVisValue, lCurrentValue ) ); return(p_stTree); } /* *================================================================================================= * Get a Real Parameter. *================================================================================================= */ tdstNodeInterpret *CAM_fn_p_stGetRealParameter(HIE_tdxHandleToSuperObject p_SuperObjPerso, tdstNodeInterpret *p_stTree, tdstGetSetParam *p_stValue) { /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */ HIE_tdxHandleToSuperObject hCamera; MS_tdxHandleToCineinfo hCineInfo; long lCurrentValue; MTH_tdxReal *p_xInitialValue = NULL; MTH_tdxReal *p_xCurrentValue = NULL; MTH_tdxReal *p_xWorkValue = NULL; MTH_tdxReal *p_xVisValue = NULL; enum tdeFuncId_ eFuncId = M_eFuncIdInterpret(p_stTree-1); /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */ /********************************************************************************/ /* BEWARE THE ULTRA OPERATOR : Must be at the beginning and respect this syntax */ /********************************************************************************/ fn_vGetUltraOperatorPerso(fn_ucGetFunctionUltraOperator(eFuncId),p_SuperObjPerso,&hCamera); /********************************************************************************/ hCineInfo = M_GetMSHandle(hCamera, Cineinfo); #if defined(__DEBUG_AI__) if (hCineInfo == NULL) M_AIFatalError(E_uwAIFatalNotMSCamera); #endif M_EvalNextParameter(p_stValue); lCurrentValue = M_GetSetParam_lValue(p_stValue); switch(eFuncId) { /*---------------------------------------------------------------------------------------*/ case eFct_Cam_GetDistMin : p_xInitialValue = &(hCineInfo->hInit->xDistMin); p_xCurrentValue = &(hCineInfo->hCurrent->xDistMin); p_xWorkValue = &(hCineInfo->hWork->xDistMin); p_xVisValue = &(hCineInfo->hVisibility->xDistMin); break; /*---------------------------------------------------------------------------------------*/ case eFct_Cam_GetDistMax : p_xInitialValue = &(hCineInfo->hInit->xDistMax); p_xCurrentValue = &(hCineInfo->hCurrent->xDistMax); p_xWorkValue = &(hCineInfo->hWork->xDistMax); p_xVisValue = &(hCineInfo->hVisibility->xDistMax); break; #if !defined(_AI_EXCLUDE_NEVER_USED_) /* MT {*/ /*---------------------------------------------------------------------------------------*/ case eFct_Cam_GetBoundDistMin : p_xInitialValue = &(hCineInfo->hInit->xBoundDistMin); p_xCurrentValue = &(hCineInfo->hCurrent->xBoundDistMin); p_xWorkValue = &(hCineInfo->hWork->xBoundDistMin); p_xVisValue = &(hCineInfo->hVisibility->xBoundDistMin); break; /*---------------------------------------------------------------------------------------*/ case eFct_Cam_GetBoundDistMax : p_xInitialValue = &(hCineInfo->hInit->xBoundDistMax); p_xCurrentValue = &(hCineInfo->hCurrent->xBoundDistMax); p_xWorkValue = &(hCineInfo->hWork->xBoundDistMax); p_xVisValue = &(hCineInfo->hVisibility->xBoundDistMax); break; /*---------------------------------------------------------------------------------------*/ case eFct_Cam_GetAngleAlpha : p_xInitialValue = &(hCineInfo->hInit->xAngleAlpha); p_xCurrentValue = &(hCineInfo->hCurrent->xAngleAlpha); p_xWorkValue = &(hCineInfo->hWork->xAngleAlpha); p_xVisValue = &(hCineInfo->hVisibility->xAngleAlpha); break; /*---------------------------------------------------------------------------------------*/ case eFct_Cam_GetAngleShiftAlpha : p_xInitialValue = &(hCineInfo->hInit->xAngleShiftAlpha); p_xCurrentValue = &(hCineInfo->hCurrent->xAngleShiftAlpha); p_xWorkValue = &(hCineInfo->hWork->xAngleShiftAlpha); p_xVisValue = &(hCineInfo->hVisibility->xAngleShiftAlpha); break; #endif /* _AI_EXCLUDE_NEVER_USED_ }*/ /*---------------------------------------------------------------------------------------*/ case eFct_Cam_GetAngleTheta : p_xInitialValue = &(hCineInfo->hInit->xAngleTheta); p_xCurrentValue = &(hCineInfo->hCurrent->xAngleTheta); p_xWorkValue = &(hCineInfo->hWork->xAngleTheta); p_xVisValue = &(hCineInfo->hVisibility->xAngleTheta); break; #if !defined(_AI_EXCLUDE_NEVER_USED_) /* MT {*/ /*---------------------------------------------------------------------------------------*/ case eFct_Cam_GetAngleShiftTheta : p_xInitialValue = &(hCineInfo->hInit->xAngleShiftTheta); p_xCurrentValue = &(hCineInfo->hCurrent->xAngleShiftTheta); p_xWorkValue = &(hCineInfo->hWork->xAngleShiftTheta); p_xVisValue = &(hCineInfo->hVisibility->xAngleShiftTheta); break; /*---------------------------------------------------------------------------------------*/ case eFct_Cam_GetLinearSpeed: p_xInitialValue = &(hCineInfo->hInit->xLinearSpeed); p_xCurrentValue = &(hCineInfo->hCurrent->xLinearSpeed); p_xWorkValue = &(hCineInfo->hWork->xLinearSpeed); p_xVisValue = &(hCineInfo->hVisibility->xLinearSpeed); break; /*---------------------------------------------------------------------------------------*/ case eFct_Cam_GetLinearIncreaseSpeed : p_xInitialValue = &(hCineInfo->hInit->xLinearIncreaseSpeed); p_xCurrentValue = &(hCineInfo->hCurrent->xLinearIncreaseSpeed); p_xWorkValue = &(hCineInfo->hWork->xLinearIncreaseSpeed); p_xVisValue = &(hCineInfo->hVisibility->xLinearIncreaseSpeed); break; /*---------------------------------------------------------------------------------------*/ case eFct_Cam_GetLinearDecreaseSpeed : p_xInitialValue = &(hCineInfo->hInit->xLinearDecreaseSpeed); p_xCurrentValue = &(hCineInfo->hCurrent->xLinearDecreaseSpeed); p_xWorkValue = &(hCineInfo->hWork->xLinearDecreaseSpeed); p_xVisValue = &(hCineInfo->hVisibility->xLinearDecreaseSpeed); break; /*---------------------------------------------------------------------------------------*/ case eFct_Cam_GetAngularSpeed: p_xInitialValue = &(hCineInfo->hInit->xAngularSpeed); p_xCurrentValue = &(hCineInfo->hCurrent->xAngularSpeed); p_xWorkValue = &(hCineInfo->hWork->xAngularSpeed); p_xVisValue = &(hCineInfo->hVisibility->xAngularSpeed); break; /*---------------------------------------------------------------------------------------*/ case eFct_Cam_GetAngularIncreaseSpeed : p_xInitialValue = &(hCineInfo->hInit->xAngularIncreaseSpeed); p_xCurrentValue = &(hCineInfo->hCurrent->xAngularIncreaseSpeed); p_xWorkValue = &(hCineInfo->hWork->xAngularIncreaseSpeed); p_xVisValue = &(hCineInfo->hVisibility->xAngularIncreaseSpeed); break; /*---------------------------------------------------------------------------------------*/ case eFct_Cam_GetAngularDecreaseSpeed : p_xInitialValue = &(hCineInfo->hInit->xAngularDecreaseSpeed); p_xCurrentValue = &(hCineInfo->hCurrent->xAngularDecreaseSpeed); p_xWorkValue = &(hCineInfo->hWork->xAngularDecreaseSpeed); p_xVisValue = &(hCineInfo->hVisibility->xAngularDecreaseSpeed); break; /*---------------------------------------------------------------------------------------*/ case eFct_Cam_GetTargetSpeed: p_xInitialValue = &(hCineInfo->hInit->xTargetSpeed); p_xCurrentValue = &(hCineInfo->hCurrent->xTargetSpeed); p_xWorkValue = &(hCineInfo->hWork->xTargetSpeed); p_xVisValue = &(hCineInfo->hVisibility->xTargetSpeed); break; /*---------------------------------------------------------------------------------------*/ case eFct_Cam_GetTargetIncreaseSpeed : p_xInitialValue = &(hCineInfo->hInit->xTargetIncreaseSpeed); p_xCurrentValue = &(hCineInfo->hCurrent->xTargetIncreaseSpeed); p_xWorkValue = &(hCineInfo->hWork->xTargetIncreaseSpeed); p_xVisValue = &(hCineInfo->hVisibility->xTargetIncreaseSpeed); break; /*---------------------------------------------------------------------------------------*/ case eFct_Cam_GetTargetDecreaseSpeed : p_xInitialValue = &(hCineInfo->hInit->xTargetDecreaseSpeed); p_xCurrentValue = &(hCineInfo->hCurrent->xTargetDecreaseSpeed); p_xWorkValue = &(hCineInfo->hWork->xTargetDecreaseSpeed); p_xVisValue = &(hCineInfo->hVisibility->xTargetDecreaseSpeed); break; #endif /* _AI_EXCLUDE_NEVER_USED_ }*/ /*---------------------------------------------------------------------------------------*/ case eFct_Cam_GetFocal : p_xInitialValue = &(hCineInfo->hInit->xFocal); p_xCurrentValue = &(hCineInfo->hCurrent->xFocal); p_xWorkValue = &(hCineInfo->hWork->xFocal); p_xVisValue = &(hCineInfo->hVisibility->xFocal); break; #if !defined(_AI_EXCLUDE_NEVER_USED_) /* MT {*/ /*---------------------------------------------------------------------------------------*/ case eFct_Cam_GetZMin: p_xInitialValue = &(hCineInfo->hInit->xZMin); p_xCurrentValue = &(hCineInfo->hCurrent->xZMin); p_xWorkValue = &(hCineInfo->hWork->xZMin); p_xVisValue = &(hCineInfo->hVisibility->xZMin); break; /*---------------------------------------------------------------------------------------*/ case eFct_Cam_GetZMax: p_xInitialValue = &(hCineInfo->hInit->xZMax); p_xCurrentValue = &(hCineInfo->hCurrent->xZMax); p_xWorkValue = &(hCineInfo->hWork->xZMax); p_xVisValue = &(hCineInfo->hVisibility->xZMax); break; #endif /* _AI_EXCLUDE_NEVER_USED_ }*/ /*---------------------------------------------------------------------------------------*/ default: break; } M_Full_GetSetParam_Float ( p_stValue, CAM_fn_xGetARealParameter ( hCineInfo, p_xInitialValue, p_xCurrentValue, p_xWorkValue, p_xVisValue, lCurrentValue ) ); return(p_stTree); } /* *================================================================================================= * Get Super Object Targeted. *================================================================================================= */ #if !defined(_AI_EXCLUDE_NEVER_USED_) /* MT {*/ tdstNodeInterpret *CAM_fn_p_stGetTargetedSuperObject ( HIE_tdxHandleToSuperObject p_SuperObjPerso, tdstNodeInterpret *p_stTree, tdstGetSetParam *p_stValue ) { /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */ HIE_tdxHandleToSuperObject hCamera; MS_tdxHandleToCineinfo hCineInfo; HIE_tdxHandleToSuperObject hSuperObjectTargeted; long lCurrentValue; enum tdeFuncId_ eFuncId=M_eFuncIdInterpret(p_stTree-1); /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */ /********************************************************************************/ /* BEWARE THE ULTRA OPERATOR : Must be at the beginning and respect this syntax */ /********************************************************************************/ fn_vGetUltraOperatorPerso(fn_ucGetFunctionUltraOperator(eFuncId),p_SuperObjPerso,&hCamera); /********************************************************************************/ hCineInfo = M_GetMSHandle(hCamera, Cineinfo); #if defined(__DEBUG_AI__) if (hCineInfo == NULL) M_AIFatalError(E_uwAIFatalNotMSCamera); #endif M_EvalNextParameter(p_stValue); lCurrentValue = M_GetSetParam_lValue(p_stValue); if (lCurrentValue == 1) { if (hCineInfo->ucVolIAFlags & C_VolIAFlags_CurrentAlreadyCopiedInWork) hSuperObjectTargeted = hCineInfo->hWork->hSuperObjectTargeted; else hSuperObjectTargeted = hCineInfo->hCurrent->hSuperObjectTargeted; } else if(lCurrentValue == -1) { hSuperObjectTargeted = hCineInfo->hInit->hSuperObjectTargeted; } else { if (hCineInfo->ucPerIAFlags & C_PerIAFlags_VisibilityCopied) hSuperObjectTargeted = hCineInfo->hVisibility->hSuperObjectTargeted; else hSuperObjectTargeted = hCineInfo->hCurrent->hSuperObjectTargeted; } M_Full_GetSetParam_Perso ( p_stValue, hSuperObjectTargeted ); return(p_stTree); } #endif /* _AI_EXCLUDE_NEVER_USED_ }*/ /* *================================================================================================= * Get Type of Viewport. *================================================================================================= */ #if !defined(_AI_EXCLUDE_NEVER_USED_) /* MT {*/ tdstNodeInterpret *CAM_fn_p_stGetTypeOfViewport ( HIE_tdxHandleToSuperObject p_SuperObjPerso, tdstNodeInterpret *p_stTree, tdstGetSetParam *p_stValue ) { /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */ HIE_tdxHandleToSuperObject hCamera; MS_tdxHandleToCineinfo hCineInfo; long lTypeOfViewport; long lCurrentValue; enum tdeFuncId_ eFuncId=M_eFuncIdInterpret(p_stTree-1); /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */ /********************************************************************************/ /* BEWARE THE ULTRA OPERATOR : Must be at the beginning and respect this syntax */ /********************************************************************************/ fn_vGetUltraOperatorPerso(fn_ucGetFunctionUltraOperator(eFuncId),p_SuperObjPerso,&hCamera); /********************************************************************************/ hCineInfo = M_GetMSHandle(hCamera, Cineinfo); #if defined(__DEBUG_AI__) if (hCineInfo == NULL) M_AIFatalError(E_uwAIFatalNotMSCamera); #endif M_EvalNextParameter(p_stValue); lCurrentValue = M_GetSetParam_lValue(p_stValue); if (lCurrentValue == 1) { if (hCineInfo->ucVolIAFlags & C_VolIAFlags_CurrentAlreadyCopiedInWork) lTypeOfViewport = (long)(hCineInfo->hWork->eTypeOfViewport); else lTypeOfViewport = (long)(hCineInfo->hCurrent->eTypeOfViewport); } else if(lCurrentValue == -1) { lTypeOfViewport = (long)(hCineInfo->hInit->eTypeOfViewport); } else { if (hCineInfo->ucPerIAFlags & C_PerIAFlags_VisibilityCopied) lTypeOfViewport = (long)(hCineInfo->hVisibility->eTypeOfViewport); else lTypeOfViewport = (long)(hCineInfo->hCurrent->eTypeOfViewport); } M_Full_GetSetParam_Integer ( p_stValue, lTypeOfViewport ); return(p_stTree); } #endif /* _AI_EXCLUDE_NEVER_USED_ }*/ /* *================================================================================================= * Get camera type in current camera sector. *================================================================================================= */ #if !defined(_AI_EXCLUDE_NEVER_USED_) /* MT {*/ tdstNodeInterpret *CAM_fn_p_stGetSectorCameraType ( HIE_tdxHandleToSuperObject p_SuperObjPerso, tdstNodeInterpret *p_stTree, tdstGetSetParam *p_stValue ) { /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */ HIE_tdxHandleToSuperObject hCamera; long lType; enum tdeFuncId_ eFuncId=M_eFuncIdInterpret(p_stTree-1); MS_tdxHandleToSectInfo hCamCineinfo; HIE_tdxHandleToSuperObject hCurrentSectorCamera; /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */ /********************************************************************************/ /* BEWARE THE ULTRA OPERATOR : Must be at the beginning and respect this syntax */ /********************************************************************************/ fn_vGetUltraOperatorPerso(fn_ucGetFunctionUltraOperator(eFuncId),p_SuperObjPerso,&hCamera); /********************************************************************************/ hCamCineinfo = M_GetMSHandle(hCamera, SectInfo); hCurrentSectorCamera = fn_h_SectInfoGetCurrentSector(hCamCineinfo); lType = (long) fn_cGetSectorCameraType(hCurrentSectorCamera); M_Full_GetSetParam_Integer ( p_stValue, lType ); return(p_stTree); } #endif /* _AI_EXCLUDE_NEVER_USED_ }*/ /* *================================================================================================= * Get the camera handle * Parameter : * Constant : Viewport number (1 : Main Viewport, ...) *================================================================================================= */ #if !defined(_AI_EXCLUDE_NEVER_USED_) /* MT {*/ tdstNodeInterpret *CAM_fn_p_stGetCameraOfViewport ( HIE_tdxHandleToSuperObject p_SuperObjPerso, tdstNodeInterpret *p_stTree, tdstGetSetParam *p_stValue ) { /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */ enum tdeFuncId_ eFuncId = M_eFuncIdInterpret(p_stTree-1); /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */ p_SuperObjPerso =p_SuperObjPerso; switch(eFuncId) { /*---------------------------------------------------------------------------------------*/ case eFct_Cam_GetCameraOfViewport : M_EvalNextParameter(p_stValue); M_Full_GetSetParam_Perso(p_stValue, CAM_fn_hGetActiveCamera(M_GetSetParam_lValue(p_stValue))); return(p_stTree); /*---------------------------------------------------------------------------------------*/ case eFct_Cam_GetMainCamera : M_Full_GetSetParam_Perso(p_stValue, CAM_fn_hGetActiveCamera(CAM_e_MainViewport)); return(p_stTree); /*---------------------------------------------------------------------------------------*/ default : break; } M_AIFatalError(E_uwAIFatalNotValidFunction); return(p_stTree); } #endif /* _AI_EXCLUDE_NEVER_USED_ }*/ /* ************************************************************************************************** ************************************************************************************************** ************************************************************************************************** ************************************************************************************************** */ /* *================================================================================================= * Compute the target *================================================================================================= */ tdstNodeInterpret *CAM_fn_p_stComputeTargetWithTgtPerso ( HIE_tdxHandleToSuperObject p_SuperObjPerso, tdstNodeInterpret *p_stTree, tdstGetSetParam *p_stValue ) { /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */ HIE_tdxHandleToSuperObject hCamera; MS_tdxHandleToCineinfo hCineInfo; CAM_tdstUpdateCamera stStruct; enum tdeFuncId_ eFuncId = M_eFuncIdInterpret(p_stTree-1); unsigned short uwMemoFlags; /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */ /********************************************************************************/ /* BEWARE THE ULTRA OPERATOR : Must be at the beginning and respect this syntax */ /********************************************************************************/ fn_vGetUltraOperatorPerso(fn_ucGetFunctionUltraOperator(eFuncId),p_SuperObjPerso,&hCamera); /********************************************************************************/ hCineInfo = M_GetMSHandle(hCamera, Cineinfo); #if defined(__DEBUG_AI__) if (hCineInfo == NULL) M_AIFatalError(E_uwAIFatalNotMSCamera); #endif /* * Else we copy current to work (basic function to compute target took their * parameters in work cineinfo) and initialise a temporary structure. */ CAM_fn_vSetCineinfoWorkFromCurrent(hCineInfo); CAM_fn_vInitCameraStructure(hCamera, &stStruct); /* * If no perso, no target... */ if(stStruct.hCineinfoCurrent->hSuperObjectTargeted == NULL) { M_Full_GetSetParam_p_stVertex ( p_stValue, NULL ); return (p_stTree); } /* * We doesn't want dynamic target, and we inhibit force target to force * function to compute target with the targeted perso. */ uwMemoFlags = stStruct.hCineinfoWork->uwIAFlags; stStruct.hCineinfoWork->uwIAFlags |= C_IAFlags_NoDynamicTarget; stStruct.hCineinfoWork->uwIAFlags &= ~C_IAFlags_TargetIsAlreadyComputed; /* * Compute target. */ CAM_fn_vComputeReferencePoint(&stStruct); CAM_fn_vComputeTarget(&stStruct); /* * Restore flags. */ stStruct.hCineinfoWork->uwIAFlags = uwMemoFlags; /* * Return value. */ M_Full_GetSetParam_p_stVertex ( p_stValue, &stStruct.stCptPos.stTarget ); return(p_stTree); } /* *================================================================================================= * Get the current target Position * No Parameter. *================================================================================================= */ tdstNodeInterpret *CAM_fn_p_stComputeCurrentTarget ( HIE_tdxHandleToSuperObject p_SuperObjPerso, tdstNodeInterpret *p_stTree, tdstGetSetParam *p_stValue ) { /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */ HIE_tdxHandleToSuperObject hCamera; MS_tdxHandleToCineinfo hCineInfo; MS_tdxHandleToDynam h_Dynam; DNM_tdstParsingDatas *p_stParsingDatas; enum tdeFuncId_ eFuncId=M_eFuncIdInterpret(p_stTree-1); /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */ /********************************************************************************/ /* BEWARE THE ULTRA OPERATOR : Must be at the beginning and respect this syntax */ /********************************************************************************/ fn_vGetUltraOperatorPerso(fn_ucGetFunctionUltraOperator(eFuncId),p_SuperObjPerso,&hCamera); /********************************************************************************/ hCineInfo = M_GetMSHandle(hCamera, Cineinfo); #if defined(__DEBUG_AI__) if (hCineInfo == NULL) M_AIFatalError(E_uwAIFatalNotMSCamera); #endif if((h_Dynam = M_GetMSHandle(hCamera, Dynam)) == NULL ) return (p_stTree); if((p_stParsingDatas = fn_p_stDynamGetParsingDatas(h_Dynam)) == NULL) return (p_stTree); M_Full_GetSetParam_p_stVertex ( p_stValue, DNM_M_p_stCPDGetTarget(p_stParsingDatas) ); return(p_stTree); } /* *================================================================================================= * Get the best pos for a camera. * No Parameter. *================================================================================================= */ extern char cRefAxisIsAlreadyComputed; extern char cNoDynChangeTheta; extern char cCanTestStatic; tdstNodeInterpret *CAM_fn_p_stGetBestPos ( HIE_tdxHandleToSuperObject p_SuperObjPerso, tdstNodeInterpret *p_stTree, tdstGetSetParam *p_stValue ) { /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */ HIE_tdxHandleToSuperObject hCamera; MS_tdxHandleToCineinfo hCineinfo; CAM_tdstUpdateCamera stStruct; MTH3D_tdstVector stVec; enum tdeFuncId_ eFuncId=M_eFuncIdInterpret(p_stTree-1); /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */ /********************************************************************************/ /* BEWARE THE ULTRA OPERATOR : Must be at the beginning and respect this syntax */ /********************************************************************************/ fn_vGetUltraOperatorPerso(fn_ucGetFunctionUltraOperator(eFuncId),p_SuperObjPerso,&hCamera); /********************************************************************************/ hCineinfo = M_GetMSHandle(hCamera, Cineinfo); #if defined(__DEBUG_AI__) if (hCineinfo == NULL) M_AIFatalError(E_uwAIFatalNotMSCamera); #endif /* ANNECY MT - 12/07/99 { */ if (!hCineinfo->bCanDoBestPos) { M_Full_GetSetParam_p_stVertex ( p_stValue, &(hCamera->hGlobalMatrix->stTranslationVector) ); return(p_stTree); } /* END ANNECY MT } */ /* * To have the actual good camera parameters. */ CAM_fn_vSetCineinfoWorkFromCurrent(hCineinfo); CAM_fn_vInitCameraStructure(hCamera, &stStruct); cRefAxisIsAlreadyComputed = stStruct.hCineinfoWork->uwIAFlags & C_IAFlags_RefAxisIsAlreadyComputed ? 1 : 0; cNoDynChangeTheta = stStruct.hCineinfoWork->uwIAFlags & C_IAFlags_NoDynChangeTheta ? 1 : 0; cCanTestStatic = 1; /* * Compute target and real wanted camera pos (this is necessary * for failure when we want a more correct position. */ CAM_fn_vComputeReferencePoint(&stStruct); CAM_fn_vComputeTarget(&stStruct); CAM_fn_vComputeRealWantedPos(&stStruct); CAM_fn_vComputeMovePosWithDynTheta(&stStruct); /* * If no perso, can't do it. */ if(stStruct.hCineinfoCurrent->hSuperObjectTargeted == NULL) return(p_stTree); /* * Force visibility failure. */ CAM_fn_vForceFailureVisibility(&stStruct); if(stStruct.hCineinfo->eState == CAM_e_State_FailureVisibility) { MTH3D_M_vCopyVector(&stVec, &stStruct.hCineinfo->stLastFailedWanted); /* ANNECY MT - 12/07/99 { */ hCineinfo->bCanDoBestPos = FALSE; /* END ANNECY MT } */ } else { MTH3D_M_vNullVector(&stVec); } stStruct.hCineinfo->eState = CAM_e_State_GoToOptimal; M_Full_GetSetParam_p_stVertex ( p_stValue, &stVec ); return(p_stTree); }