123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120 |
- /* Copyright (c) 2002-2012 Croteam Ltd.
- This program is free software; you can redistribute it and/or modify
- it under the terms of version 2 of the GNU General Public License as published by
- the Free Software Foundation
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
- You should have received a copy of the GNU General Public License along
- with this program; if not, write to the Free Software Foundation, Inc.,
- 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */
- #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
|