Serious-Engine/Sources/WorldEditor/Viewers.h
2016-03-11 15:57:17 +02:00

107 lines
3.9 KiB
C++

/* Copyright (c) 2002-2012 Croteam Ltd. All rights reserved. */
#ifndef VIEWERS_H
#define VIEWERS_H
/*
* Definition of viewer and target placement
*/
class CMasterViewer {
friend class CSlaveViewer;
public:
CPlacement3D mv_plViewer; // placement of the viewer
FLOAT mv_fTargetDistance; // distance of virtual target from viewer
// default constructor
CMasterViewer(void);
// get placement of the viewer
inline CPlacement3D GetViewerPlacement(void) const {return mv_plViewer;};
// get placement of the virtual target
CPlacement3D GetTargetPlacement(void) const;
// set placement of the virtual target
void SetTargetPlacement(FLOAT3D f3dTarget);
// convert from slave
void operator = (const CSlaveViewer &svSlave);
};
/*
* Definition of viewing projection viewer placement
*/
class CSlaveViewer {
friend class CMasterViewer;
public:
enum ProjectionType {
PT_ILLEGAL = 0,
PT_PERSPECTIVE,
PT_ISOMETRIC_FRONT,
PT_ISOMETRIC_RIGHT,
PT_ISOMETRIC_TOP,
PT_ISOMETRIC_BACK,
PT_ISOMETRIC_LEFT,
PT_ISOMETRIC_BOTTOM,
};
CDrawPort *sv_pdpDrawPort; // drawport that this viewer was created for
CPlacement3D sv_plViewer; // placement of the viewer
CPlacement3D sv_plGrid; // grid's placement
FLOAT sv_fTargetDistance; // distance of virtual target from viewer
enum ProjectionType sv_ProjectionType; // tyoe of projection
// get orientation angles for type of isometric viewer
ANGLE3D GetAngleForIsometricType(void) const;
public:
// default constructor
CSlaveViewer( const CMasterViewer &mvMaster, enum ProjectionType ptProjectionType,
const CPlacement3D &plGrid, CDrawPort *pdpDrawPort);
// create a projection for this viewer
void MakeProjection(CAnyProjection3D &prProjection);
// create a perspective projection for this viewer
void MakePerspectiveProjection(CPerspectiveProjection3D &prPerspectiveProjection);
// get placement of the viewer
inline CPlacement3D GetViewerPlacement(void) const {return sv_plViewer;};
// test if this is perspective viewer
inline BOOL IsPerspective(void) const { ASSERT( sv_ProjectionType != PT_ILLEGAL);
return sv_ProjectionType == PT_PERSPECTIVE; };
// test if this is isometric viewer
inline BOOL IsIsometric(void) const { ASSERT( sv_ProjectionType != PT_ILLEGAL);
return sv_ProjectionType != PT_PERSPECTIVE; };
/* Get zoom factor for the viewer. */
FLOAT GetZoomFactor(void);
/* Get distance for requested zoom factor for the viewer. */
FLOAT GetDistanceForZoom(FLOAT fZoom);
// get target distance
inline FLOAT GetTargetDistance( void) const { return sv_fTargetDistance; };
// get placement of the virtual target
CPlacement3D GetTargetPlacement(void) const;
// translate slave viewer in his own system
void Translate_OwnSystem( PIX pixDI, PIX pixDJ, PIX pixDK);
void TranslatePlacement_OtherSystem(CPlacement3D &plToTranslate,CPlacement3D &plOtherSystem,
PIX pixDI, PIX pixDJ, PIX pixDK);
// scales target distance using given factor
void ScaleTargetDistance( FLOAT fFactor);
// rotate slave viewer in his own system using HPB method
void Rotate_HPB( PIX pixDI, PIX pixDJ, PIX pixDK);
// translate a placement in viewer's system
void TranslatePlacement_OwnSystem(CPlacement3D &plToTranslate,
PIX pixDI, PIX pixDJ, PIX pixDK);
// rotate a placement in viewer's system
void RotatePlacement_HPB(CPlacement3D &plToRotate,
PIX pixDI, PIX pixDJ, PIX pixDK);
// rotate a placement in viewer's system
void RotatePlacement_TrackBall(CPlacement3D &plToRotate,
PIX pixDI, PIX pixDJ, PIX pixDK);
// convert offset from pixels to meters
FLOAT PixelsToMeters(PIX pix);
void Translate_Local_OwnSystem(FLOAT fdX, FLOAT fdY, FLOAT fdZ);
void Rotate_Local_HPB( FLOAT fdX, FLOAT fdY, FLOAT fdZ);
};
#endif // VIEWERS_H