219 lines
7.7 KiB
C++
219 lines
7.7 KiB
C++
|
||
/*=========================================================================*/
|
||
/* DEVVp3D.hpp : Viewport 3D.*/
|
||
/* This is a part of the PCA project.*/
|
||
/**/
|
||
/* Version 1.0*/
|
||
/* Creation date 17/07/96*/
|
||
/* Revision date*/
|
||
/**/
|
||
/* (c) Ubi Studios 1996*/
|
||
/**/
|
||
/* DO NOT MODIFY THAT FILE. IF SOMETHING NEEDS TO BE CHANGE, PLEASE CONTACT*/
|
||
/* OLIVIER DIDELOT.*/
|
||
/*=========================================================================*/
|
||
|
||
#ifndef __DEVVP3D_HPP__
|
||
#define __DEVVP3D_HPP__
|
||
#include "DEVViewp.hpp"
|
||
/*#include "CPACam.hpp"*/
|
||
#include "itf/DEVDevic.hpp"
|
||
#include "lst.hpp"
|
||
#include "spo.h"
|
||
|
||
#ifdef ACTIVE_EDITOR
|
||
class CPA_SuperObject;
|
||
class CPA_BaseObject;
|
||
class CPA_CameraDLLBase;
|
||
class CPA_MainWorld;
|
||
#endif
|
||
|
||
/****************************************/
|
||
#ifndef CPA_EXPORT
|
||
#if defined(CPA_WANTS_IMPORT)
|
||
#define CPA_EXPORT __declspec(dllimport)
|
||
#elif defined(CPA_WANTS_EXPORT)
|
||
#define CPA_EXPORT __declspec(dllexport)
|
||
#else
|
||
#define CPA_EXPORT
|
||
#endif
|
||
#endif
|
||
/****************************************/
|
||
|
||
/*##########################################################################*/
|
||
/* Definition of mouse position in main view*/
|
||
typedef struct tdstMousePos_
|
||
{
|
||
CPoint stPos; /* 2D pos of editor*/
|
||
GLI_tdst2DVertex stPos2D; /* GLI 2D pos of editor*/
|
||
MTH3D_tdstVector stPos3D; /* GLI 3D pos of editor*/
|
||
} tdstMousePos;
|
||
/*##########################################################################*/
|
||
|
||
/*#################################################################################*/
|
||
/* Definition of mouse swap in main view*/
|
||
typedef enum eForceSwap
|
||
{
|
||
eNone,
|
||
eSwapRight,
|
||
eSwapLeft,
|
||
eSwapBoth
|
||
}
|
||
tdeForceSwap;
|
||
/*#################################################################################*/
|
||
|
||
/*##########################################################################*/
|
||
/* Definition of light for selection*/
|
||
typedef struct tdstSaveLight_
|
||
{
|
||
GLI_tdxHandleToLight hLight;
|
||
long lInitialState;
|
||
} tdstSaveLight;
|
||
/*##########################################################################*/
|
||
|
||
template <class DEV_ViewPort3D> class DEV_Timer;
|
||
|
||
class CPA_EXPORT DEV_ViewPort3D : public DEV_ViewPort
|
||
{
|
||
/* public functions, with and without editor*/
|
||
public:
|
||
DEV_ViewPort3D();
|
||
virtual ~DEV_ViewPort3D();
|
||
DECLARE_DYNCREATE(DEV_ViewPort3D)
|
||
void CreateViewPort(void *, GLD_tdhDevice);
|
||
GLI_tdxHandleToCamera GetEngineCamera ();
|
||
void m_vFakeMouseMove(CPoint oScreenMousePoint);
|
||
void m_vFakeMouseLButtonDown(CPoint oScreenMousePoint);
|
||
BOOL m_bWasInSecondScreen;
|
||
BOOL m_bIsVerticalSwap;
|
||
|
||
/* private member, with and without editor*/
|
||
private:
|
||
GLI_tdstSpecificAttributesFor3D m_Attributes3D;
|
||
UINT m_uiLastMouseState;
|
||
|
||
|
||
#ifdef ACTIVE_EDITOR
|
||
private:
|
||
CPA_SuperObject *m_p_oCameraSO;
|
||
CPA_BaseObject *m_p_oCamera;
|
||
CPA_CameraDLLBase *m_p_oCameraInterface;
|
||
CPoint m_oLastCursorScreenPos;
|
||
|
||
MTH3D_tdstVector m_stMousePos; /* The 3D-coordinates of the mouse*/
|
||
MTH3D_tdstVector m_stInitMousePos; /* The 3D-coordinates of the initial position of the mouse ( when we start to move the object )*/
|
||
|
||
public:
|
||
tdstSaveLight m_a_tdxhArrayOfLights[C_lMaxLightInViewport];
|
||
long m_lCurrentLights;
|
||
|
||
CPA_SuperObject *GetCameraSO (void) { return m_p_oCameraSO; }
|
||
CPA_BaseObject *GetCamera (void) { return m_p_oCamera; }
|
||
CPA_CameraDLLBase *GetCameraInterface (void) { return m_p_oCameraInterface; }
|
||
|
||
CPA_SuperObject *ChangeCamera (CPA_SuperObject *p_oCamera, BOOL bWithPrevCam = TRUE);
|
||
|
||
void fn_vInitLightsInViewport (GLD_tdxHandleToViewportAttributes _hVpt, GLI_tdxHandleToLight _hLight, CPA_MainWorld *pMainWorld);
|
||
|
||
void DrawObject (GLI_tdxHandleToLight hLight, HIE_tdxHandleToSuperObject hObject);
|
||
void DrawEditorObject(GLI_tdxHandleToLight hLight, CPA_SuperObject *pRoot);
|
||
|
||
void DetectMouseSwap (BOOL bDrawCursor = FALSE, GLD_tdstViewportAttributes *p_stViewportAttr = NULL);
|
||
|
||
void fn_vUpdateStatusBarMessage (void);
|
||
|
||
void SetSelectedInstance (CString csName) { m_csSelectedInstance = csName; }
|
||
void SetPickedInstance (CString csName) { m_csPickedInstance = csName; }
|
||
void SetPosition (MTH3D_tdstVector *pNewPos);
|
||
void SetMoveVector (MTH3D_tdstVector *pNewMove);
|
||
void AddtoMoveVector (MTH3D_tdstVector *pNewMove);
|
||
void SetDistanceVector (MTH3D_tdstVector *pDist);
|
||
void SetDistanceToCamera (MTH3D_tdstVector *pDist);
|
||
|
||
/*fonctions <20> revoire FBFFBF*/
|
||
|
||
/* void SetPlaneForMouseMove (MTH3D_tdstVector * p_stX_Axe , MTH3D_tdstVector * p_stY_Axe);*/
|
||
/*void GetPlaneForMouseMove (MTH3D_tdstVector * p_stX_Axe , MTH3D_tdstVector * p_stY_Axe);*/
|
||
void Convert3dTo2d(GLI_tdst2DVertex *p_stDest, MTH3D_tdstVector *p_stSource);
|
||
void InitMouseMove (MTH3D_tdstVector *stMousePos3D, GLI_tdst2DVertex* stMousePos2D);
|
||
void DoneMouseMove (void);
|
||
|
||
/*CPA2 Gabi Dumitrascu 98/06/26*/
|
||
BOOL IsCursorInFirstScreen ();
|
||
void SetCursorInFirstScreen ();
|
||
void SetCursorInSecondScreen ();
|
||
BOOL IsCursorInDeadScreen ();
|
||
void mfn_vChangeCursorFrom1To2 (CPoint &rptMouse, tdeForceSwap eSwapMode, BOOL bVerticalSwap = FALSE);
|
||
void mfn_vChangeCursorFrom2To1 (CPoint &rptMouse, tdeForceSwap eSwapMode, BOOL bVerticalSwap = FALSE);
|
||
/*End CPA2 Gabi Dumitrascu 98/06/26*/
|
||
|
||
|
||
private:
|
||
CString m_csMessage;
|
||
CString m_csSelectedInstance;
|
||
CString m_csPickedInstance;
|
||
MTH3D_tdstVector m_stPosition;
|
||
MTH3D_tdstVector m_stMoveVector;
|
||
MTH3D_tdstVector m_stCameraDistance;
|
||
MTH3D_tdstVector m_stDistance;
|
||
|
||
CString fn_csGetSelectedInstanceName( ACP_tdxIndex, HIE_tdstPickInfo*, tdstMousePos* );
|
||
|
||
/* Function used by OnMouseMove to compute mouse move into the selected plane*/
|
||
/* Input : p_stOriginalMouseMove, output : p_stConstrainedMouseMove*/
|
||
BOOL ComputeMouseMoveIntoPlane(MTH3D_tdstVector *p_stConstrainedMouseMove, MTH3D_tdstVector *p_stOriginalMouseMove);
|
||
|
||
/*FBFFBF to remove when we have rush voodoo cards*/
|
||
public:
|
||
BOOL m_bObjectIsMoving;
|
||
BOOL m_bBeginMove;
|
||
MTH3D_tdstVector m_stCamToEndingPos;
|
||
|
||
void ClientToVoodooFullScreen(CPoint &point);
|
||
void ClientToVoodoo(CPoint &point);
|
||
void VoodooToClient(CPoint &point);
|
||
void ClientToVoodoo(GLI_tdst2DVertex & point);
|
||
|
||
void PointToMousePos(CPoint point, tdstMousePos* pPos);
|
||
|
||
#endif /* ACTIVE_EDITOR*/
|
||
|
||
|
||
protected:
|
||
/*{{AFX_MSG(DEV_ViewPort3D)*/
|
||
afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);
|
||
afx_msg void OnDestroy();
|
||
#ifdef ACTIVE_EDITOR
|
||
afx_msg void OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags);
|
||
afx_msg void OnKeyUp(UINT nChar, UINT nRepCnt, UINT nFlags);
|
||
afx_msg void OnSysKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags); /* CPA2 Corneliu Babiuc (Alt Key) 14-05-98 */
|
||
afx_msg void OnSysKeyUp(UINT nChar, UINT nRepCnt, UINT nFlags); /* CPA2 Corneliu Babiuc (Alt Key) 14-05-98 */
|
||
afx_msg void OnSetFocus(CWnd* pOldWnd);
|
||
afx_msg void OnLButtonDown(UINT nFlags, CPoint point);
|
||
afx_msg void OnLButtonUp(UINT nFlags, CPoint point);
|
||
afx_msg void OnRButtonDown(UINT nFlags, CPoint point);
|
||
afx_msg void OnRButtonUp(UINT nFlags, CPoint point); /* CPA_Ed_1 FS*/
|
||
afx_msg void OnLButtonDblClk(UINT nFlags, CPoint point);
|
||
afx_msg void OnMouseMove(UINT nFlags, CPoint point);
|
||
afx_msg LONG OnDragDropEnd(WPARAM wparam, LPARAM lparam);
|
||
afx_msg LONG OnDragDropLooseFocus(WPARAM wparam, LPARAM lparam);
|
||
afx_msg LONG OnDragDropGainFocus(WPARAM wparam, LPARAM lparam);
|
||
afx_msg LONG OnDragDropMove(WPARAM wparam, LPARAM lparam);
|
||
afx_msg void OnTimer( UINT nIDEvent );
|
||
/*CPA2 Gabi Dumitrascu 98/07/13*/
|
||
afx_msg void OnNcMouseMove (UINT nHitTest, CPoint point);
|
||
afx_msg UINT OnNcHitTest (CPoint point);
|
||
afx_msg void OnKillFocus(CWnd* pNewWnd);
|
||
/*End CPA2 Gabi Dumitrascu 98/07/13*/
|
||
#endif /* ACTIVE_EDITOR*/
|
||
/*}}AFX_MSG*/
|
||
|
||
DECLARE_MESSAGE_MAP()
|
||
};
|
||
|
||
/*///////////////////////////////////////////////////////////////////////////*/
|
||
|
||
#endif /* __DEVVP3D_HPP__*/
|
||
|
||
|