//################################################################################# // // BASE CLASS OF YOUR DLL interface // //################################################################################# #include #include "stdafx.h" #include "acp_base.h" #include "geo.h" #include "gli.h" #include "ITF.h" #include "caminter.hpp" #include "ogd.h" #include "X:\Cpa\Main\inc\_EditID.h" //CPA 2 Corneliu Babiuc 04-05-98 //include files for level path & name #include "incGAM.h" #include "DPT.h" //END CPA2 Corneliu Babiuc 04-05-98 // infos static CString g_csOCAName = "Camera"; static CString g_csOCAAuthor = "Fabien Bole-Feysot & Chantal Oury"; static CString g_csOCAVersion = "V 3.0.1 18/03/98"; static CString g_csOCAFrenchHelpFile = "Camera.hlp"; static CString g_csOCAEnglishHelpFile = ""; // the DLL global definition tdstDLLIdentity g_stCameraIdentity; #define C_PI 3.14159265 //******************************************************************************************************** //******************************************************************************************************** //******************************************************************************************************** Camera_Interface::Camera_Interface(void) { // CPA_Ed_1 MP BEGIN //mouse handler m_bRotateOn=FALSE; m_bIsMoving=FALSE; hcursorR=AfxGetApp()->LoadCursor(MAKEINTRESOURCE(CPA_IDC_ROTATECAMERA)); hcursorM=AfxGetApp()->LoadCursor(MAKEINTRESOURCE(CPA_IDC_MOVECAMERA)); // CPA_Ed_1 MP END m_p_stDLLIdentity = &g_stCameraIdentity; // Does your DLL can output in main game view ? m_stBaseDLLDefinition.bCanOutputIn3DView = FALSE; m_fTranslationStep = 1; m_fRotationStep = (float) (C_PI/32); // TODO : Add your own code here SetCurrent(FALSE); SetEditorInfo(g_csOCAName, g_csOCAAuthor, g_csOCAVersion, g_csOCAFrenchHelpFile, g_csOCAEnglishHelpFile); m_p_oKeyConfiguration = NULL; m_p_oInertCameraGeomObject = NULL; m_hLastEngineCamera = NULL; m_bFirstTime = TRUE; m_lSlotForEngineCamera = -1; m_lSlotForLastEditorCamera = -1; m_bCameraTargetMode = FALSE; // ANNECY MT NewInterface 26/03/98 { m_eReferentialDisplayMode = DisplayDownLeft; // ENDANNECY MT NewInterface } } //******************************************************************************************************** //******************************************************************************************************** //******************************************************************************************************** void Camera_Interface::fn_vJustAfterRegistered() { CString types[] = {C_szCameraObjectTypeName}; fn_vRegisterObjectsType(types,1); Camera::StaticInit(); } //******************************************************************************************************** //******************************************************************************************************** //******************************************************************************************************** void Camera_Interface::fn_vConstruct() { // Keyboard InitKeyboard(); // Display SetReferentialDisplayMode( m_eReferentialDisplayMode ); // update ToolBar } //******************************************************************************************************** //******************************************************************************************************** //******************************************************************************************************** void Camera_Interface::fn_vInitListByType (CPA_World *pWorld) { pWorld->fn_vAddANewListByType ("Camera", this); } //******************************************************************************************************** //******************************************************************************************************** //******************************************************************************************************** void Camera_Interface::fn_vBeforeEditor(void) { DEV_ViewPort3D *p_oMainvp; GLI_tdxHandleToCamera hEngineCamera, hCopyOfEngineCamera; ACP_tdxHandleOfObject hObject; CPA_CameraSlots *p_oSlotCamera; CPA_EditorBase *pGeomDLL; Camera *p_oEngineCamera; CPA_SuperObject *p_oCameraSO; CPA_BaseObject *p_oOwnerFile; CString csCameraName = "Inert_Camera_Picture"; p_oSlotCamera = GetMainWorld()->GetWorld()->GetCameraSlots(); p_oMainvp = (DEV_ViewPort3D*)(M_GetMainDeviceNum(0)->GetViewPort()); // get the game engine camera hEngineCamera = p_oMainvp->GetEngineCamera(); ASSERT(hEngineCamera != NULL); // there's no game camera!!! // save the real game engine camera in the specific variable m_hLastEngineCamera = hEngineCamera; if (m_p_oInertCameraGeomObject == NULL) { // load the camera geometric representation hObject = GLI_pLoadGeometricInFile("edt_data\\objects\\camera\\camera.mod^Geometric:camera"); //create the corresponding editor geometric object pGeomDLL = GetMainWorld () -> GetObjectDLLWithName (C_szDLLGeometryName); p_oOwnerFile = (CPA_BaseObject*) pGeomDLL -> OnQueryAction( this, C_uiGetOwnerByFileName, (LPARAM)"edt_data\\objects\\camera\\camera.mod"); m_p_oInertCameraGeomObject = new Geometry3D(pGeomDLL, p_oOwnerFile, (ACP_tdxHandleOfObject)hObject, csCameraName); } if (m_bFirstTime) { // this part is executed only once, the first time //CPA2 Corneliu Babiuc 30-04-98 // m_bFirstTime = FALSE; //END CPA2 Corneliu Babiuc 30-04-98 // init the main world camera slots m_lSlotForEngineCamera = p_oSlotCamera->ReserveASlot("Copy Of Engine Camera"); m_lSlotForLastEditorCamera = p_oSlotCamera->ReserveASlot("Last Editor Camera"); //Stefan Dumitrean 24-06-98 ( slots ) p_oSlotCamera->ActivatePrevCamTip(); p_oSlotCamera->SetCurrentSlot(p_oSlotCamera->SetSpecialSlotNr(p_oSlotCamera->ReserveASlot("Default Slot"))); //End Stefan Dumitrean 24-06-98 ( slots ) } // make a copy of the engine camera GLI_xCreateCamera(&hCopyOfEngineCamera, GLI_C_lPersCamWithoutDistorsion); GLI_vCopyCamera(hCopyOfEngineCamera,hEngineCamera); // make a new Camera from the copy of the engine structure p_oEngineCamera = new Camera(InertCamera,this,GetMainWorld(),hCopyOfEngineCamera); // and put this new camera in the slot 0 p_oSlotCamera->SaveCameraInSlot(m_lSlotForEngineCamera,"Copy Of Engine Camera",p_oEngineCamera,MakeACopy); //Stefan Dumitrean 26-06-98 ( slots ) p_oSlotCamera->SaveCameraInSlot(p_oSlotCamera->GetSpecialSlotNr(),"Default Slot",p_oEngineCamera,MakeACopy); //End Stefan Dumitrean 26-06-98 (slots) // associate a camera superobject and a geometric superobject and a geometric object to the camera //Stefan Dumitrean 24-06-98 ( slots ) //if the current slot is the "mode change slot" initialize with engine camera if( !m_bFirstTime && p_oSlotCamera->GetCurrentSlot() >= 0 ) p_oCameraSO = AssociateSuperObject( (Camera*)p_oSlotCamera->GetCameraFromSlot( p_oSlotCamera->GetCurrentSlot(), MakeACopy ) ); else p_oCameraSO = AssociateSuperObject(p_oEngineCamera); //End Stefan Dumitrean 24-06-98 ( slots ) // put this camera in the main viewport p_oMainvp->ChangeCamera(p_oCameraSO); // and put this camera in the hierarchy InsertCameraInHierarchy(p_oCameraSO); // move the camera ahead a bit to avoid auto-selection of stdcam CPA_CameraCoords oCoords(CameraCoordinates,0,0,(float)0.3); p_oEngineCamera->Translate(&oCoords); //CPA2 Corneliu Babiuc 30-04-98 //read the saved slots if (m_bFirstTime) { m_bFirstTime = FALSE; LoadSlotsPositions(p_oEngineCamera); } //END CPA2 Corneliu Babiuc 30-04-98 // get the active camera p_oEngineCamera = (Camera*) GetMainWorld()->GetFRMBase()->m_oGeneralDialogBar.m_p_oCamera; // and show its dialogbar if (p_oEngineCamera != NULL) p_oEngineCamera->ShowDialogBar(); } //******************************************************************************************************** //******************************************************************************************************** //******************************************************************************************************** void Camera_Interface::fn_vBeforeEngine(void) { DEV_ViewPort3D *p_oMainvp; CPA_SuperObject *p_oCameraSO; Camera *p_oCamera; CPA_CameraSlots *p_oCameraslots; // get the main world slots p_oCameraslots = GetMainWorld()->GetWorld()->GetCameraSlots(); // get the game viewport p_oMainvp = (DEV_ViewPort3D*)(M_GetMainDeviceNum(0)->GetViewPort()); // put a NULL camera in the game viewport, and get the game viewport last camera // don't remember the previous camera p_oCameraSO = p_oMainvp->ChangeCamera(NULL,FALSE); p_oCamera = (Camera*)p_oCameraSO->GetObject(); // save this camera in the reserved slot p_oCameraslots->SaveCameraInSlot(m_lSlotForLastEditorCamera,"Last Editor Camera",p_oCamera,MakeACopy); //Stefan Dumitrean 24-06-98 ( slots ) //saves the current slot //when we go back to the editor this slot will be restored if( p_oCameraslots->GetCurrentSlot() >= 0 ) p_oCameraslots->SaveCameraInSlot(p_oCameraslots->GetCurrentSlot(),"",p_oCamera,MakeACopy); SaveSlotsPositions(); //End Stefan Dumitrean 24-06-98 ( slots ) // put back the engine camera in the game viewport GLI_xSetViewportCamera(p_oMainvp->m_hDisplayDevice,p_oMainvp->m_hDisplayViewport,m_hLastEngineCamera); GLI_xAdjustCameraToViewport (p_oMainvp->m_hDisplayDevice,p_oMainvp->m_hDisplayViewport,m_hLastEngineCamera); // get the active camera p_oCamera = (Camera*) GetMainWorld()->GetFRMBase()->m_oGeneralDialogBar.m_p_oCamera; // and hide its dialogbar if (p_oCamera != NULL) p_oCamera->HideDialogBar(); // destroy the old game viewport editor camera DestroyCamera(p_oCameraSO); } //******************************************************************************************************** //******************************************************************************************************** //******************************************************************************************************** void Camera_Interface::fn_vAddObjectsToDraw(GLD_tdstViewportAttributes *p1 , GLI_tdstLight *p2, DEV_ViewPort* p3) { MTH3D_tdstVector stOrigin,stP1,stP2,stP3; POS_tdstCompletePosition stMatrix,stMatrix2; DEV_ViewPort3D *p_oViewPort; Camera *p_oCamera; GEO_tdstColor ColBidon; long lLineColor; POS_fn_vSetIdentityMatrix(&stMatrix); POS_fn_vSetIdentityMatrix(&stMatrix2); // ANNECY MT NewInterface 26/03/98 { if (m_eReferentialDisplayMode ==DisplayNone) return; // ENDANNECY MT NewInterface } // get the current camera p_oViewPort = (DEV_ViewPort3D*)p3; p_oCamera = (Camera*)p_oViewPort->GetCamera(); if (p_oCamera == NULL) return; ColBidon.xR=0.5; ColBidon.xG=0.5; ColBidon.xB=0.5; ColBidon.xA=0.5; GLI_xGetCameraMatrix(((GLI_tdstSpecificAttributesFor3D*)(p1->p_vSpecificToXD))->p_stCam,&stMatrix); // init for drawing GLI_xLoadMatrix(&stMatrix); GLI_vSetFog(100,100,200,&ColBidon); #define C_Grid_Offset 0.008 #define C_Grid_NbLines 9 // prepare the Origin Point // get the camera matrix p_oCamera->GetMatrix(&stMatrix2); // get the camera position POS_fn_vGetTranslationVector(&stMatrix2,&stOrigin); // buil the offset vector, in camera coordinates, from camera to origin // ANNECY MT NewInterface 26/03/98 { if( m_eReferentialDisplayMode == DisplayDownLeft ) { MTH3D_M_vSetVectorElements(&stP1,0.22 - C_Grid_Offset*(C_Grid_NbLines-1)/2, -0.17 + C_Grid_Offset*(C_Grid_NbLines-1)/2, 0.35); } else if( m_eReferentialDisplayMode == DisplayDownRight ) { MTH3D_M_vSetVectorElements(&stP1,-0.21 + C_Grid_Offset*(C_Grid_NbLines-1)/2, -0.17 + C_Grid_Offset*(C_Grid_NbLines-1)/2, 0.35); } // ENDANNECY MT NewInterface } // translate it in world coordinates p_oCamera->CameraToWorldCoordinates_Vector(stP1); // add it to camera position --> origin MTH3D_M_vAddVector(&stOrigin,&stP1,&stOrigin); // put the origin at the beginning of the grid MTH3D_M_vSetVectorElements(&stP1,- C_Grid_Offset * (C_Grid_NbLines-1)/2, - C_Grid_Offset * (C_Grid_NbLines-1)/2, (float)0.00); MTH3D_M_vAddVector(&stOrigin,&stOrigin,&stP1); // draw the grid X lines // p3 = origin // p2 = offset // p1 = extremite MTH3D_M_vSetVectorElements(&stP2,(float)0.0,(float)C_Grid_Offset,(float)0.00); MTH3D_M_vCopyVector(&stP3,&stOrigin); MTH3D_M_vCopyVector(&stP1,&stOrigin); MTH3D_M_vSetXofVector(&stP1,MTH3D_M_xGetXofVector(&stP3) + C_Grid_Offset * (C_Grid_NbLines-1)); lLineColor = 0xf0f0f0; for (int i=0;ifn_bConsX()) for(int i=0; i<20; i++) { MTH3D_M_vSetVectorElements(&stP1, 0.0f, (float)CYLINDER*sin(i*6.28/20), (float)CYLINDER*cos(i*6.28/20)); MTH3D_M_vAddVector(&stP2, &stP1, &stOrigin); stP1.xX = 0.02f; MTH3D_M_vAddVector(&stP1, &stP1, &stOrigin); GLI_xDraw3DLine16 (p1, &stP1, &stP2, 0x00FF00); } if(GetInterface()->fn_bConsY()) for(int i=0; i<20; i++) { MTH3D_M_vSetVectorElements(&stP1, (float)CYLINDER*sin(i*6.28/20), 0.0f, (float)CYLINDER*cos(i*6.28/20)); MTH3D_M_vAddVector(&stP2, &stP1, &stOrigin); stP1.xY = 0.02f; MTH3D_M_vAddVector(&stP1, &stP1, &stOrigin); GLI_xDraw3DLine16 (p1, &stP1, &stP2, 0xFF00FF); } if(GetInterface()->fn_bConsZ()) for(int i=0; i<20; i++) { MTH3D_M_vSetVectorElements(&stP1, (float)CYLINDER*sin(i*6.28/20), (float)CYLINDER*cos(i*6.28/20), 0.0f); MTH3D_M_vAddVector(&stP2, &stP1, &stOrigin); stP1.xZ = 0.03f; MTH3D_M_vAddVector(&stP1, &stP1, &stOrigin); GLI_xDraw3DLine16 (p1, &stP1, &stP2, 0x00FFFF); } // End CPA2 ASilvescu 98-04-13 // draw the X axis MTH3D_M_vSetVectorElements(&stP1,(float)0.02,(float)0,(float)0); MTH3D_M_vAddVector(&stP1,&stP1,&stOrigin); GLI_xDraw3DLine16 (p1,&stOrigin,&stP1,0x00FF00); // draw the X letter MTH3D_M_vSetVectorElements(&stP1,(float)0.022,(float)0,(float)-0.002); MTH3D_M_vSetVectorElements(&stP2,(float)0.026,(float)0,(float)0.002); MTH3D_M_vAddVector(&stP1,&stP1,&stOrigin); MTH3D_M_vAddVector(&stP2,&stP2,&stOrigin); GLI_xDraw3DLine16 (p1,&stP1,&stP2,0x00FF00); MTH3D_M_vSetVectorElements(&stP1,(float)0.022,(float)0,(float)0.002); MTH3D_M_vSetVectorElements(&stP2,(float)0.026,(float)0,(float)-0.002); MTH3D_M_vAddVector(&stP1,&stP1,&stOrigin); MTH3D_M_vAddVector(&stP2,&stP2,&stOrigin); GLI_xDraw3DLine16 (p1,&stP1,&stP2,0x00FF00); // draw the Y axis MTH3D_M_vSetVectorElements(&stP2,(float)0,(float)0.02,(float)0); MTH3D_M_vAddVector(&stP2,&stP2,&stOrigin); GLI_xDraw3DLine16 (p1,&stOrigin,&stP2,0xFF00FF); // draw the Y letter MTH3D_M_vSetVectorElements(&stP1,(float)0,(float)0.022,(float)0.002); MTH3D_M_vSetVectorElements(&stP2,(float)0,(float)0.024,(float)0); MTH3D_M_vAddVector(&stP1,&stP1,&stOrigin); MTH3D_M_vAddVector(&stP2,&stP2,&stOrigin); GLI_xDraw3DLine16 (p1,&stP1,&stP2,0xFF00FF); MTH3D_M_vSetVectorElements(&stP1,(float)0,(float)0.026,(float)0.002); MTH3D_M_vSetVectorElements(&stP2,(float)0,(float)0.022,(float)-0.002); MTH3D_M_vAddVector(&stP1,&stP1,&stOrigin); MTH3D_M_vAddVector(&stP2,&stP2,&stOrigin); GLI_xDraw3DLine16 (p1,&stP1,&stP2,0xFF00FF); // draw the Z axis MTH3D_M_vSetVectorElements(&stP3,(float)0,(float)0,(float)0.03); MTH3D_M_vAddVector(&stP3,&stP3,&stOrigin); GLI_xDraw3DLine16 (p1,&stOrigin,&stP3,0x00FFFF); // draw the Z letter MTH3D_M_vSetVectorElements(&stP1,(float)-0.002,(float)0,(float)0.036); MTH3D_M_vSetVectorElements(&stP2,(float)0.002,(float)0,(float)0.036); MTH3D_M_vAddVector(&stP1,&stP1,&stOrigin); MTH3D_M_vAddVector(&stP2,&stP2,&stOrigin); GLI_xDraw3DLine16 (p1,&stP1,&stP2,0x00FFFF); MTH3D_M_vSetVectorElements(&stP1,(float)-0.002,(float)0,(float)0.032); MTH3D_M_vAddVector(&stP1,&stP1,&stOrigin); GLI_xDraw3DLine16 (p1,&stP1,&stP2,0x00FFFF); MTH3D_M_vSetVectorElements(&stP2,(float)0.002,(float)0,(float)0.032); MTH3D_M_vAddVector(&stP2,&stP2,&stOrigin); GLI_xDraw3DLine16 (p1,&stP1,&stP2,0x00FFFF); GLI_xPopMatrix(); } //******************************************************************************************************** //******************************************************************************************************** //******************************************************************************************************** ACP_tdxHandleOfObject Camera_Interface::fn_hGetBoundingVolume(CPA_BaseObject *_p_oCamera) { Camera *p_oCamera; ASSERT(_p_oCamera != NULL); p_oCamera = (Camera*)_p_oCamera; ASSERT(p_oCamera->fn_bIsOfType(C_szCameraObjectTypeName)); if (p_oCamera->GetCameraType() == InertCamera) { ASSERT(m_p_oInertCameraGeomObject != NULL); return ((CPA_ObjectDLLBase*)m_p_oInertCameraGeomObject->GetEditor())->fn_hGetBoundingVolume(m_p_oInertCameraGeomObject); } else { return NULL; } } //******************************************************************************************************** //******************************************************************************************************** //******************************************************************************************************** void Camera_Interface::fn_vComputeBoundingVolume(CPA_BaseObject *_p_oCamera) { Camera *p_oCamera; ASSERT(_p_oCamera != NULL); p_oCamera = (Camera*)_p_oCamera; ASSERT(p_oCamera->fn_bIsOfType(C_szCameraObjectTypeName)); if (p_oCamera->GetCameraType() == InertCamera) { ASSERT(m_p_oInertCameraGeomObject != NULL); ((CPA_ObjectDLLBase*)m_p_oInertCameraGeomObject->GetEditor())->fn_vComputeBoundingVolume(m_p_oInertCameraGeomObject); return; } else { return; } } //================================================================================================== //================================================================================================== //================================================================================================== //================================================================================================== //================================================================================================== //================================================================================================== //================================================================================================== // communication with viewport //******************************************************************************************************** //******************************************************************************************************** //******************************************************************************************************** void Camera_Interface::DestroyCamera(CPA_SuperObject *_p_oCameraSO) { Camera *p_oCamera = (Camera *) _p_oCameraSO->GetObject(); ASSERT(p_oCamera != NULL); ASSERT(p_oCamera->fn_bIsOfType(C_szCameraObjectTypeName)); // disactivate camera p_oCamera->Disactivate(); // if the old camera was in the hierarchy, if (_p_oCameraSO->fn_bIsUnderObject(M_GetWorld()->GetRoot())) { // remove camera SO from hierarchy and delete SO GetInterface()->fn_bDeleteObjectInHierarchy(_p_oCameraSO,FALSE,FALSE,TRUE); // and delete camera delete p_oCamera; } else { // delete SuperObject and camera delete _p_oCameraSO; delete p_oCamera; } } //========================================================================================= //========================================================================================= //========================================================================================= //========================================================================================= //========================================================================================= //******************************************************************************************************** //******************************************************************************************************** //******************************************************************************************************** void Camera_Interface::Activate(CPA_BaseObject *_p_oCamera, DEV_ViewPort3D *p_oViewPort, CPA_DialogBar *p_oPopUpParent, CPoint oPos) { Camera *p_oCamera; ASSERT(_p_oCamera != NULL); p_oCamera = (Camera*)_p_oCamera; ASSERT(p_oCamera->fn_bIsOfType(C_szCameraObjectTypeName)); p_oCamera->Activate(p_oViewPort,p_oPopUpParent,oPos); } //******************************************************************************************************** //******************************************************************************************************** //******************************************************************************************************** void Camera_Interface::Disactivate(CPA_BaseObject *_p_oCamera) { Camera *p_oCamera; ASSERT(_p_oCamera != NULL); p_oCamera = (Camera*)_p_oCamera; ASSERT(p_oCamera->fn_bIsOfType(C_szCameraObjectTypeName)); p_oCamera->Disactivate(); } //******************************************************************************************************** //******************************************************************************************************** //******************************************************************************************************** void Camera_Interface::SetRotationAxisSystem(CPA_BaseObject *_p_oCamera, tdeAxisSystem eSystem) { Camera *p_oCamera; ASSERT(_p_oCamera != NULL); p_oCamera = (Camera*)_p_oCamera; ASSERT(p_oCamera->fn_bIsOfType(C_szCameraObjectTypeName)); p_oCamera->SetRotationAxisSystem(eSystem); } //******************************************************************************************************** //******************************************************************************************************** //******************************************************************************************************** void Camera_Interface::SetTranslationAxisSystem(CPA_BaseObject *_p_oCamera, tdeAxisSystem eSystem) { Camera *p_oCamera; ASSERT(_p_oCamera != NULL); p_oCamera = (Camera*)_p_oCamera; ASSERT(p_oCamera->fn_bIsOfType(C_szCameraObjectTypeName)); p_oCamera->SetTranslationAxisSystem(eSystem); } //******************************************************************************************************** //******************************************************************************************************** //******************************************************************************************************** tdeAxisSystem Camera_Interface::GetRotationAxisSystem(CPA_BaseObject *_p_oCamera) { Camera *p_oCamera; ASSERT(_p_oCamera != NULL); p_oCamera = (Camera*)_p_oCamera; ASSERT(p_oCamera->fn_bIsOfType(C_szCameraObjectTypeName)); return p_oCamera->GetRotationAxisSystem(); } //******************************************************************************************************** //******************************************************************************************************** //******************************************************************************************************** void Camera_Interface::GetMatrix(CPA_BaseObject *_p_oCamera, POS_tdstCompletePosition *p_oMatrix) { Camera *p_oCamera; ASSERT(_p_oCamera != NULL); p_oCamera = (Camera*)_p_oCamera; ASSERT(p_oCamera->fn_bIsOfType(C_szCameraObjectTypeName)); p_oCamera->GetMatrix(p_oMatrix); } //******************************************************************************************************** //******************************************************************************************************** //******************************************************************************************************** void Camera_Interface::SetMatrix(CPA_BaseObject *_p_oCamera, POS_tdstCompletePosition *p_oMatrix) { Camera *p_oCamera; ASSERT(_p_oCamera != NULL); p_oCamera = (Camera*)_p_oCamera; ASSERT(p_oCamera->fn_bIsOfType(C_szCameraObjectTypeName)); p_oCamera->SetMatrix(p_oMatrix); } //******************************************************************************************************** //******************************************************************************************************** //******************************************************************************************************** tdeAxisSystem Camera_Interface::GetTranslationAxisSystem(CPA_BaseObject *_p_oCamera) { Camera *p_oCamera; ASSERT(_p_oCamera != NULL); p_oCamera = (Camera*)_p_oCamera; ASSERT(p_oCamera->fn_bIsOfType(C_szCameraObjectTypeName)); return p_oCamera->GetTranslationAxisSystem(); } //******************************************************************************************************** //******************************************************************************************************** //******************************************************************************************************** BOOL Camera_Interface::SetRotationCenterType(CPA_BaseObject *_p_oCamera, tdeRotationCenterType eRotCenterType) { Camera *p_oCamera; ASSERT(_p_oCamera != NULL); p_oCamera = (Camera*)_p_oCamera; ASSERT(p_oCamera->fn_bIsOfType(C_szCameraObjectTypeName)); return p_oCamera->SetRotationCenterType(eRotCenterType); } //******************************************************************************************************** //******************************************************************************************************** //******************************************************************************************************** tdeRotationCenterType Camera_Interface::GetRotationCenterType(CPA_BaseObject *_p_oCamera) { Camera *p_oCamera; ASSERT(_p_oCamera != NULL); p_oCamera = (Camera*)_p_oCamera; ASSERT(p_oCamera->fn_bIsOfType(C_szCameraObjectTypeName)); return p_oCamera->GetRotationCenterType(); } //******************************************************************************************************** //******************************************************************************************************** //******************************************************************************************************** tdeRotationCenterType Camera_Interface::GetEffectiveRotationCenterType(CPA_BaseObject *_p_oCamera) { Camera *p_oCamera; ASSERT(_p_oCamera != NULL); p_oCamera = (Camera*)_p_oCamera; ASSERT(p_oCamera->fn_bIsOfType(C_szCameraObjectTypeName)); return p_oCamera->GetEffectiveRotationCenterType(); } //******************************************************************************************************** //******************************************************************************************************** //******************************************************************************************************** BOOL Camera_Interface::SetTargetType(CPA_BaseObject *_p_oCamera, tdeTargetType eTargetType) { Camera *p_oCamera; ASSERT(_p_oCamera != NULL); p_oCamera = (Camera*)_p_oCamera; ASSERT(p_oCamera->fn_bIsOfType(C_szCameraObjectTypeName)); return p_oCamera->SetTargetType(eTargetType); } //******************************************************************************************************** //******************************************************************************************************** //******************************************************************************************************** tdeTargetType Camera_Interface::GetTargetType(CPA_BaseObject *_p_oCamera) { Camera *p_oCamera; ASSERT(_p_oCamera != NULL); p_oCamera = (Camera*)_p_oCamera; ASSERT(p_oCamera->fn_bIsOfType(C_szCameraObjectTypeName)); return p_oCamera->GetTargetType(); } //******************************************************************************************************** //******************************************************************************************************** //******************************************************************************************************** BOOL Camera_Interface::ZoomOnTarget(CPA_BaseObject *_p_oCamera, CPA_SuperObject *pTarget) { Camera *p_oCamera; ASSERT(_p_oCamera != NULL); p_oCamera = (Camera*)_p_oCamera; ASSERT(p_oCamera->fn_bIsOfType(C_szCameraObjectTypeName)); p_oCamera->ZoomOnTarget(pTarget); return TRUE; } //******************************************************************************************************** //******************************************************************************************************** //******************************************************************************************************** void Camera_Interface::SetRotationCenterPoint(CPA_BaseObject *_p_oCamera, CPA_CameraCoords *p_oRotationCenter, tdeCoordsType eType) { Camera *p_oCamera; ASSERT(_p_oCamera != NULL); p_oCamera = (Camera*)_p_oCamera; ASSERT(p_oCamera->fn_bIsOfType(C_szCameraObjectTypeName)); p_oCamera->SetRotationCenterPoint(p_oRotationCenter,eType); } //******************************************************************************************************** //******************************************************************************************************** //******************************************************************************************************** BOOL Camera_Interface::SetRotationCenterSuperObject(CPA_BaseObject *_p_oCamera, CPA_SuperObject *p_oSuperObject) { Camera *p_oCamera; ASSERT(_p_oCamera != NULL); p_oCamera = (Camera*)_p_oCamera; ASSERT(p_oCamera->fn_bIsOfType(C_szCameraObjectTypeName)); return p_oCamera->SetRotationCenterSuperObject(p_oSuperObject); } //******************************************************************************************************** //******************************************************************************************************** //******************************************************************************************************** BOOL Camera_Interface::GetRotationCenter(CPA_BaseObject *_p_oCamera, MTH3D_tdstVector &r_stCenter) { Camera *p_oCamera; ASSERT(_p_oCamera != NULL); p_oCamera = (Camera*)_p_oCamera; ASSERT(p_oCamera->fn_bIsOfType(C_szCameraObjectTypeName)); return p_oCamera->GetRotationCenter(r_stCenter); } //******************************************************************************************************** //******************************************************************************************************** //******************************************************************************************************** void Camera_Interface::SetTargetPoint(CPA_BaseObject *_p_oCamera, CPA_CameraCoords *p_oRotationCenter) { Camera *p_oCamera; ASSERT(_p_oCamera != NULL); p_oCamera = (Camera*)_p_oCamera; ASSERT(p_oCamera->fn_bIsOfType(C_szCameraObjectTypeName)); p_oCamera->SetTargetPoint(p_oRotationCenter); } //******************************************************************************************************** //******************************************************************************************************** //******************************************************************************************************** BOOL Camera_Interface::SetTargetSuperObject(CPA_BaseObject *_p_oCamera, CPA_SuperObject *p_oSuperObject) { Camera *p_oCamera; ASSERT(_p_oCamera != NULL); p_oCamera = (Camera*)_p_oCamera; ASSERT(p_oCamera->fn_bIsOfType(C_szCameraObjectTypeName)); return p_oCamera->SetTargetSuperObject(p_oSuperObject); } //******************************************************************************************************** //******************************************************************************************************** //******************************************************************************************************** BOOL Camera_Interface::GetTarget(CPA_BaseObject *_p_oCamera, MTH3D_tdstVector &r_stTarget) { Camera *p_oCamera; ASSERT(_p_oCamera != NULL); p_oCamera = (Camera*)_p_oCamera; ASSERT(p_oCamera->fn_bIsOfType(C_szCameraObjectTypeName)); return p_oCamera->GetTarget(r_stTarget); } //******************************************************************************************************** //******************************************************************************************************** //******************************************************************************************************** void Camera_Interface::Translate(CPA_BaseObject *_p_oCamera, CPA_CameraCoords *p_oOffset, BOOL bUserDefinedAxis) { Camera *p_oCamera; ASSERT(_p_oCamera != NULL); p_oCamera = (Camera*)_p_oCamera; ASSERT(p_oCamera->fn_bIsOfType(C_szCameraObjectTypeName)); p_oCamera->Translate(p_oOffset,bUserDefinedAxis); } //******************************************************************************************************** //******************************************************************************************************** //******************************************************************************************************** void Camera_Interface::SetPosition(CPA_BaseObject *_p_oCamera, CPA_CameraCoords *p_oPos) { Camera *p_oCamera; ASSERT(_p_oCamera != NULL); p_oCamera = (Camera*)_p_oCamera; ASSERT(p_oCamera->fn_bIsOfType(C_szCameraObjectTypeName)); p_oCamera->SetPosition(p_oPos); } //******************************************************************************************************** //******************************************************************************************************** //******************************************************************************************************** void Camera_Interface::Rotate(CPA_BaseObject *_p_oCamera, tdeAxis eAxis, double dAngle) { Camera *p_oCamera; ASSERT(_p_oCamera != NULL); p_oCamera = (Camera*)_p_oCamera; ASSERT(p_oCamera->fn_bIsOfType(C_szCameraObjectTypeName)); p_oCamera->Rotate(eAxis,dAngle); } //******************************************************************************************************** //******************************************************************************************************** //******************************************************************************************************** void Camera_Interface::SetRotation(CPA_BaseObject *_p_oCamera, double dAngleX, double dAngleY, double dAngleZ) { Camera *p_oCamera; ASSERT(_p_oCamera != NULL); p_oCamera = (Camera*)_p_oCamera; ASSERT(p_oCamera->fn_bIsOfType(C_szCameraObjectTypeName)); p_oCamera->SetRotation(dAngleX,dAngleY,dAngleZ); } //******************************************************************************************************** //******************************************************************************************************** //******************************************************************************************************** void Camera_Interface::Update(CPA_BaseObject *_p_oCamera) { Camera *p_oCamera; ASSERT(_p_oCamera != NULL); p_oCamera = (Camera*)_p_oCamera; ASSERT(p_oCamera->fn_bIsOfType(C_szCameraObjectTypeName)); p_oCamera->Update(); } //******************************************************************************************************** //******************************************************************************************************** //******************************************************************************************************** void Camera_Interface::CameraToWorldCoordinates_Point(CPA_BaseObject *_p_oCamera, MTH3D_tdstVector &r_stVector) { Camera *p_oCamera; ASSERT(_p_oCamera != NULL); p_oCamera = (Camera*)_p_oCamera; ASSERT(p_oCamera->fn_bIsOfType(C_szCameraObjectTypeName)); p_oCamera->CameraToWorldCoordinates_Point(r_stVector); } //******************************************************************************************************** //******************************************************************************************************** //******************************************************************************************************** void Camera_Interface::CameraToWorldCoordinates_Vector(CPA_BaseObject *_p_oCamera, MTH3D_tdstVector &r_stVector) { Camera *p_oCamera; ASSERT(_p_oCamera != NULL); p_oCamera = (Camera*)_p_oCamera; ASSERT(p_oCamera->fn_bIsOfType(C_szCameraObjectTypeName)); p_oCamera->CameraToWorldCoordinates_Vector(r_stVector); } //******************************************************************************************************** //******************************************************************************************************** //******************************************************************************************************** void Camera_Interface::WorldToCameraCoordinates_Point(CPA_BaseObject *_p_oCamera, MTH3D_tdstVector &r_stVector) { Camera *p_oCamera; ASSERT(_p_oCamera != NULL); p_oCamera = (Camera*)_p_oCamera; ASSERT(p_oCamera->fn_bIsOfType(C_szCameraObjectTypeName)); p_oCamera->WorldToCameraCoordinates_Point(r_stVector); } //******************************************************************************************************** //******************************************************************************************************** //******************************************************************************************************** void Camera_Interface::WorldToCameraCoordinates_Vector(CPA_BaseObject *_p_oCamera, MTH3D_tdstVector &r_stVector) { Camera *p_oCamera; ASSERT(_p_oCamera != NULL); p_oCamera = (Camera*)_p_oCamera; ASSERT(p_oCamera->fn_bIsOfType(C_szCameraObjectTypeName)); p_oCamera->WorldToCameraCoordinates_Vector(r_stVector); } //******************************************************************************************************** //******************************************************************************************************** //******************************************************************************************************** CPA_SuperObject *Camera_Interface::CreateDefaultCamera() { // make a new inert camera return CreateInertCamera(NULL,"default_camera"); } //******************************************************************************************************** //******************************************************************************************************** //******************************************************************************************************** void Camera_Interface::InsertCameraInHierarchy(CPA_SuperObject *p_oCameraSO) { Camera *p_oCamera; ASSERT(p_oCameraSO != NULL); p_oCamera = (Camera*)p_oCameraSO->GetObject(); ASSERT(p_oCamera != NULL); ASSERT(p_oCamera->fn_bIsOfType(C_szCameraObjectTypeName)); GetInterface()->fn_bInsertObjectInHierarchy(p_oCameraSO,GetInterface()->GetSpecificInterface()->GetDynamicRoot(), FALSE,FALSE,FALSE); // must pass FALSE else crash when a new device is created because the redraw // occurs before the new camera is ready ! //ANNECY Shaitan Correction 20/02/98 // GetInterface()->fn_vCancelCurrentSelection(FALSE); //ENDANNECY Shaitan Correction } //******************************************************************************************************** //******************************************************************************************************** //******************************************************************************************************** CPA_BaseObject *Camera_Interface::CopySlotCamera(CPA_BaseObject* _p_oCamera) { Camera *p_oCamera; ASSERT(_p_oCamera != NULL); p_oCamera = (Camera*)_p_oCamera; ASSERT(p_oCamera->fn_bIsOfType(C_szCameraObjectTypeName)); return new Camera(*p_oCamera); } //******************************************************************************************************** //******************************************************************************************************** //******************************************************************************************************** void Camera_Interface::PutCameraInViewPort(CPA_BaseObject *_p_oCamera,DEV_ViewPort3D *p_oViewPort, BOOL bWithPrevCam) { Camera *p_oNewCamera,*p_oOldCamera; CPA_SuperObject *p_oSO,*p_oSOGeom; GEO_tdxHandleToMatrix hCameraMatrix,hSOMatrix; long lSlotNum = -1; ASSERT(_p_oCamera != NULL); p_oNewCamera = (Camera*)_p_oCamera; ASSERT(_p_oCamera->fn_bIsOfType(C_szCameraObjectTypeName)); // get actual viewport camera p_oSO = p_oViewPort->GetCameraSO(); p_oOldCamera = (Camera *)p_oSO->GetObject(); ASSERT(p_oOldCamera != NULL); // Get the name of the old camera CString csOldCameraName = p_oOldCamera->GetName (); // Delete the old camera so that the new camera can have the same name // delete p_oOldCamera; // rename new camera with name of old camera if (p_oNewCamera->fn_eRename(csOldCameraName)) p_oNewCamera->SetDefaultUniqueName(); // attach the new camera to the old camera superobject p_oSO->SetObject(p_oNewCamera); // sets the SO at the same place that the camera // ( ==> copy the camera matrix in the SO matrix) hCameraMatrix = p_oNewCamera->GetCameraMatrix(); hSOMatrix = HIE_fn_hGetSuperObjectMatrix((HIE_tdxHandleToSuperObject) p_oSO->GetData()); GEO_M_vCopyMatrix(hSOMatrix,hCameraMatrix); // change the camera geometric representation according to the camera type p_oSOGeom = p_oSO->GetSuperObjectFirstChild(); switch (p_oNewCamera->GetCameraType()) { case InertCamera: p_oSOGeom->SetObject(GetInertCameraGeomObject()); break; case ActorCamera: break; } // change the camera in the viewport p_oViewPort->ChangeCamera(p_oSO,bWithPrevCam); } //******************************************************************************************************** //******************************************************************************************************** //******************************************************************************************************** // accept delete if the camera is not active BOOL Camera_Interface::fn_bAcceptModifDelete(CPA_List *p_oListObjects, tdeStatus eStatus) { POSITION stPos; BOOL bResult; CPA_SuperObject *p_oSO; Camera *p_oCamera; bResult = TRUE; stPos = p_oListObjects->GetHeadPosition(); while (stPos) { p_oSO = p_oListObjects->GetNext(stPos); if (p_oSO->GetObject()->fn_bIsOfType(C_szCameraObjectTypeName)) { p_oCamera = (Camera*)p_oSO->GetObject(); if (p_oCamera->IsActive()) return FALSE; } } return TRUE; } // ANNECY MT NewInterface 26/03/98 { //******************************************************************************************************** //******************************************************************************************************** //******************************************************************************************************** void Camera_Interface::SetReferentialDisplayMode(tdeDisplayReferential eDisplayMode) { m_eReferentialDisplayMode = eDisplayMode; GetInterface() -> GetFrameBase() -> m_oGeneralDialogBar . fn_vUpdateAxisMode( (int) m_eReferentialDisplayMode ); } //******************************************************************************************************** //******************************************************************************************************** //******************************************************************************************************** tdeDisplayReferential Camera_Interface::GetReferentialDisplayMode() { return m_eReferentialDisplayMode; } // ENDANNECY MT NewInterface } //================================================================================================== //================================================================================================== //================================================================================================== //================================================================================================== //================ P R I V A T E =================================================================== //================================================================================================== //================================================================================================== //******************************************************************************************************** //******************************************************************************************************** //******************************************************************************************************** // create an inert camera with its SuperObject and graphic object CPA_SuperObject *Camera_Interface::CreateInertCamera(GLI_tdxHandleToCamera hEngineCamera,CString csName,CString csFileName,CString csSectionName) { Camera *p_oCamera; // create the camera if (hEngineCamera == NULL) p_oCamera = new Camera(InertCamera,this,GetMainWorld(),csName,csFileName,csSectionName); else p_oCamera = new Camera(InertCamera,this,GetMainWorld(),hEngineCamera,csName,csFileName,csSectionName); // create SuperObject associated return AssociateSuperObject(p_oCamera); } //******************************************************************************************************** //******************************************************************************************************** //******************************************************************************************************** // create a superObject, a Geometric superobject and a geometric object for this camera CPA_SuperObject *Camera_Interface::AssociateSuperObject(Camera *p_oCamera) { CPA_SuperObject *p_oCameraSO,*p_oCameraGeom; GEO_tdxHandleToMatrix hCameraMatrix,hSOGeomMatrix; MTH3D_tdstVector stRelativePos; // create the superobject p_oCameraSO = GetInterface()->GetNewSuperObject(E_ss_NoSave,C_Dynamic); // link camera and object p_oCameraSO->SetObject(p_oCamera); // sets the SO at the same place that the camera // (replace the SO matrix by the camera matrix so that camera and SO have the same matrix) hCameraMatrix = p_oCamera->GetCameraMatrix(); HIE_fn_vSetSuperObjectMatrix ((HIE_tdxHandleToSuperObject) p_oCameraSO->GetData() , hCameraMatrix); // create the camera geometric SuperObject p_oCameraGeom = GetInterface()->GetNewSuperObject(E_ss_NoSave,C_Protected); p_oCameraGeom->SetEditProtected(TRUE); p_oCameraGeom->SetSuperObjectOwner(p_oCameraSO); //move the camera geometric representation back a little bit to avoid auto-selection MTH3D_M_vSetVectorElements(&stRelativePos,0,0,(float)-0.05); hSOGeomMatrix = HIE_fn_hGetSuperObjectMatrix(p_oCameraGeom->GetStruct()); POS_fn_vSetTranslationVector(hSOGeomMatrix,&stRelativePos); // link the SO with the geometric object p_oCameraGeom->SetObject(m_p_oInertCameraGeomObject); // the geom SO is the son of the camera SO p_oCameraSO->AddTail(p_oCameraGeom); return p_oCameraSO; } //CPA 2 Corneliu Babiuc 30-04-98 //*********************************************************************************************** // Method : void Camera_Interface::LoadSlotsPositions(CPA_BaseObject * p_oCamera) // Date : 24-03-98 //*********************************************************************************************** // Description : // Load from .ECA file, camera position and name // Parameters: // p_oCamera: - pointer to current camera // Author : Laurentiu Barza // Modification: Corneliu Babiuc 05-05-98 //*********************************************************************************************** //BEGIN CPA2 Laurentiu Barza 24-03-98 void Camera_Interface::LoadSlotsPositions(CPA_BaseObject * p_oCamera) { FILE * fInitialPositionsFile; char szName[250]; char readData[80]; char readChar; //Stefan Dumitrean 2-07-98 ( slots ) char szNameEditor[250], szNameSelection[250]; //End Stefan Dumitrean 2-07-98 ( slots ) //get the camera slots CPA_CameraSlots * p_oSlotCamera = GetMainWorld()->GetWorld()->GetCameraSlots(); ASSERT(p_oSlotCamera); POS_tdstCompletePosition stSlotMatrix; //construct the ECA file name strcpy(szName, fn_szGetLevelsDataPath()); strcat(szName,"\\"); strcat(szName,fn_p_szGetLevelName()); strcat(szName,"\\"); strcat(szName,fn_p_szGetLevelName()); strcat(szName,".eca"); if((fInitialPositionsFile = fopen(szName, "r")) != NULL) { while (!feof(fInitialPositionsFile)) { POS_fn_vSetIdentityMatrix(&stSlotMatrix); //read camera's description if( fscanf(fInitialPositionsFile,"%s %c %[^\"] %c", readData, &readChar, szName, &readChar) <4) { //wrong format break; } // STM - camera's never have scale, so transform mat == rotation matrix fscanf(fInitialPositionsFile,"%s %c %f %f %f %c", readData,&readChar,&stSlotMatrix.stTranslationVector.xX,&stSlotMatrix.stTranslationVector.xY,&stSlotMatrix.stTranslationVector.xZ,&readChar ); fscanf(fInitialPositionsFile,"%s %c %f %f %f %c", readData,&readChar,&stSlotMatrix.stTransformMatrix.stCol_0.xX,&stSlotMatrix.stTransformMatrix.stCol_0.xY,&stSlotMatrix.stTransformMatrix.stCol_0.xZ,&readChar ); fscanf(fInitialPositionsFile,"%s %f %f %f %c", readData,&stSlotMatrix.stTransformMatrix.stCol_1.xX,&stSlotMatrix.stTransformMatrix.stCol_1.xY,&stSlotMatrix.stTransformMatrix.stCol_1.xZ,&readChar ); fscanf(fInitialPositionsFile,"%s %f %f %f %c", readData,&stSlotMatrix.stTransformMatrix.stCol_2.xX,&stSlotMatrix.stTransformMatrix.stCol_2.xY,&stSlotMatrix.stTransformMatrix.stCol_2.xZ,&readChar ); fscanf(fInitialPositionsFile,"%s %c %f %f %f %c", readData,&readChar,&stSlotMatrix.stTransformMatrix.stCol_0.xX,&stSlotMatrix.stTransformMatrix.stCol_0.xY,&stSlotMatrix.stTransformMatrix.stCol_0.xZ,&readChar ); fscanf(fInitialPositionsFile,"%s %f %f %f %c", readData,&stSlotMatrix.stTransformMatrix.stCol_1.xX,&stSlotMatrix.stTransformMatrix.stCol_1.xY,&stSlotMatrix.stTransformMatrix.stCol_1.xZ,&readChar ); fscanf(fInitialPositionsFile,"%s %f %f %f %c", readData,&stSlotMatrix.stTransformMatrix.stCol_2.xX,&stSlotMatrix.stTransformMatrix.stCol_2.xY,&stSlotMatrix.stTransformMatrix.stCol_2.xZ,&readChar ); //Stefan Dumitrean 2-07-98 ( slots ) fscanf(fInitialPositionsFile,"%s %c %[^\"] %c", readData, &readChar, szNameEditor, &readChar ); fscanf(fInitialPositionsFile,"%s %c %[^\"] %c", readData, &readChar, szNameSelection, &readChar ); //End Stefan Dumitrean 2-07-98 ( slots ) fscanf(fInitialPositionsFile,"%s", readData); //make a copy of camera CPA_BaseObject * p_oTempCamera = CopySlotCamera(p_oCamera); //set new camera matrix SetMatrix(p_oTempCamera, &stSlotMatrix); //save camera in slot without copy it CString csName = szName; long lSlotNum = p_oSlotCamera->SaveCameraInSlot(p_oSlotCamera->GetSlotNumber(szName), csName, p_oTempCamera, DontMakeACopy); //Stefan Dumitrean 2-07-98 ( slots ) p_oSlotCamera->SetEditorNameForSlotNr( lSlotNum, szNameEditor ); p_oSlotCamera->SetSelectionNameForSlotNr( lSlotNum, szNameSelection ); //End Stefan Dumitrean 2-07-98 ( slots ) } fclose(fInitialPositionsFile); } else { // wsprintf(szName, "Error: could not open %s file !", szName); // AfxMessageBox( szName, MB_ICONWARNING|MB_OK); } } //*********************************************************************************************** // Method : void Camera_Interface::SaveSlotsPositions() // Date : 24-03-98 //*********************************************************************************************** // Description : // Save all non empty slots in an .ECA file // Parameters: // Author : Laurentiu Barza // Modification: Corneliu Babiuc 05-05-98 //*********************************************************************************************** void Camera_Interface::SaveSlotsPositions() { FILE * fInitialPositionsFile; POS_tdstCompletePosition stSlotMatrix; CPA_CameraSlots * p_oSlotCamera = GetMainWorld()->GetWorld()->GetCameraSlots(); ASSERT(p_oSlotCamera); char szName[250]; char szBuf[250]; //construct the ECA file name strcpy(szName, fn_szGetLevelsDataPath()); strcat(szName,"\\"); strcat(szName,fn_p_szGetLevelName()); strcat(szName,"\\"); strcat(szName,fn_p_szGetLevelName()); strcat(szName,".eca"); if((fInitialPositionsFile = fopen(szName, "w")) == NULL) { wsprintf(szBuf, "Error: could not open the file %s!", szName); AfxMessageBox(szBuf, MB_ICONWARNING|MB_OK); return; } for (long lSlotNum = 0; lSlotNumGetTotalSlotsNumber(); lSlotNum++) { //if slot is empty do nothing if (p_oSlotCamera->IsEmpty(lSlotNum)) continue; //Stefan Dumitrean 2-07-98 ( slots ) // do not save reserved slots if (p_oSlotCamera->IsSlotReserved(lSlotNum)) continue; /* //do not save "Copy Of Engine Camera" slot and "Engine Camera Mode" if ( p_oSlotCamera->GetSlotName(lSlotNum) == "Copy Of Engine Camera" || p_oSlotCamera->GetSlotName(lSlotNum) == "Engine Camera Mode") continue; */ //End Stefan Dumitrean 2-07-98 ( slots ) //try to get camera CPA_BaseObject * p_oCamera = p_oSlotCamera->GetCameraFromSlot(lSlotNum, DontMakeACopy); if (p_oCamera == NULL) continue; //get the matrix POS_fn_vSetIdentityMatrix(&stSlotMatrix); GetMatrix(p_oCamera, &stSlotMatrix); //save camera's position // STM- cameras never have scale, no rotation matrix == transform matrix fprintf(fInitialPositionsFile,"\n{NameOfCameraSlot: \"%s\"\n", p_oSlotCamera->GetSlotName(lSlotNum)); fprintf(fInitialPositionsFile,"TranslationVector: ( %f %f %f )\n\n",stSlotMatrix.stTranslationVector.xX,stSlotMatrix.stTranslationVector.xY,stSlotMatrix.stTranslationVector.xZ); fprintf(fInitialPositionsFile,"RotationMatrix: ( %f %f %f )\n",stSlotMatrix.stTransformMatrix.stCol_0.xX,stSlotMatrix.stTransformMatrix.stCol_0.xY,stSlotMatrix.stTransformMatrix.stCol_0.xZ); fprintf(fInitialPositionsFile," ( %f %f %f )\n",stSlotMatrix.stTransformMatrix.stCol_1.xX,stSlotMatrix.stTransformMatrix.stCol_1.xY,stSlotMatrix.stTransformMatrix.stCol_1.xZ); fprintf(fInitialPositionsFile," ( %f %f %f )\n\n",stSlotMatrix.stTransformMatrix.stCol_2.xX,stSlotMatrix.stTransformMatrix.stCol_2.xY,stSlotMatrix.stTransformMatrix.stCol_2.xZ); fprintf(fInitialPositionsFile,"TransformMatrix: ( %f %f %f )\n",stSlotMatrix.stTransformMatrix.stCol_0.xX,stSlotMatrix.stTransformMatrix.stCol_0.xY,stSlotMatrix.stTransformMatrix.stCol_0.xZ); fprintf(fInitialPositionsFile," ( %f %f %f )\n",stSlotMatrix.stTransformMatrix.stCol_1.xX,stSlotMatrix.stTransformMatrix.stCol_1.xY,stSlotMatrix.stTransformMatrix.stCol_1.xZ); fprintf(fInitialPositionsFile," ( %f %f %f )\n\n",stSlotMatrix.stTransformMatrix.stCol_2.xX,stSlotMatrix.stTransformMatrix.stCol_2.xY,stSlotMatrix.stTransformMatrix.stCol_2.xZ); //Stefan Dumitrean 2-07-98 ( slots ) fprintf(fInitialPositionsFile,"EditorName: \"%s\"\n", p_oSlotCamera->GetEditorNameForSlotNr( lSlotNum ) ); fprintf(fInitialPositionsFile,"SelectionName: \"%s\"\n", p_oSlotCamera->GetSelectionNameForSlotNr( lSlotNum ) ); //End Stefan Dumitrean 2-07-98 ( slots ) fprintf(fInitialPositionsFile,"}\n"); } fclose(fInitialPositionsFile); } //END CPA2 Laurentiu Barza 24-03-98 //END CPA2 Corneliu Babiuc 05-05-98 /*=========================================================================*/ /*=========================================================================*/ void Camera_Interface::ChangeCameraTarget() { POS_tdstCompletePosition stCameraMatrix; MTH3D_tdstVector point; CPA_CameraCoords oCoords; Camera *p_oCamera; p_oCamera = (Camera*) GetMainWorld()->GetFRMBase()->m_oGeneralDialogBar.m_p_oCamera; GetMatrix(p_oCamera, &stCameraMatrix); point.xX = 0; point.xY = 0; point.xZ = GetInterface()->GetCameraTargetDepth(); POS_fn_vMulMatrixVertex(&point, &stCameraMatrix, &point); oCoords.SetXYZ(point.xX, point.xY, point.xZ); SetTargetPoint(p_oCamera, &oCoords); SetTargetType(p_oCamera,tPoint); Update(p_oCamera); }