#ifndef _ENGINE_VIEWSYSTEM_HPP_ #define _ENGINE_VIEWSYSTEM_HPP_ #ifndef _ENGINE_PUREVIEWSYSTEM_HPP_ #include #endif #ifndef _ENGINE_TRIANGLE3D_HPP_ #include #endif #ifndef _ENGINE_TRIANGLE_HPP_ #include #endif class ViewSystem : public PureViewSystem { public: ViewSystem(void); virtual ~ViewSystem(); void translatePoint(const Vector3D &vector3D,Vector2D &vector2D,PureViewSystem::MapMode mapMode=CartesianSystem); void translatePoint(Polygon3D &polygon,PureViewSystem::MapMode mapMode=CartesianSystem); void translatePoint(Point &dimensionPoint,Point &screenPoint,const Point3D &initialPoint,PureViewSystem::MapMode mapMode=CartesianSystem); void mapCoordinates(Point3D &firstPoint3D,Point &firstPoint,bool useCartesian=true); void mapCoordinates(Triangle3D &triangle3D,Triangle &triangle); WORD isInView(const Point &somePoint)const; WORD isInView(const Vector3D &vector3D); protected: virtual WORD viewPortWidth(void)const=0; virtual WORD viewPortHeight(void)const=0; private: }; inline ViewSystem::ViewSystem(void) { } inline ViewSystem::~ViewSystem() { } inline WORD ViewSystem::isInView(const Point &somePoint)const { if(somePoint.x()>viewPortWidth()||somePoint.x()<0)return FALSE; if(somePoint.y()>viewPortHeight()||somePoint.y()<0)return FALSE; return TRUE; } inline void ViewSystem::translatePoint(const Vector3D &vector3D,Vector2D &vector2D,PureViewSystem::MapMode mapMode) { PureViewSystem::viewPortWidth(viewPortWidth()); PureViewSystem::viewPortHeight(viewPortHeight()); PureViewSystem::translatePoint(vector3D,vector2D,mapMode); } inline void ViewSystem::translatePoint(Polygon3D &polygon,PureViewSystem::MapMode mapMode) { PureViewSystem::viewPortWidth(viewPortWidth()); PureViewSystem::viewPortHeight(viewPortHeight()); PureViewSystem::translatePoint(polygon,mapMode); } inline void ViewSystem::translatePoint(Point &dimensionPoint,Point &screenPoint,const Point3D &initialPoint,PureViewSystem::MapMode mapMode) { PureViewSystem::viewPortWidth(viewPortWidth()); PureViewSystem::viewPortHeight(viewPortHeight()); PureViewSystem::translatePoint(dimensionPoint,screenPoint,initialPoint,mapMode); } inline void ViewSystem::mapCoordinates(Point3D &firstPoint3D,Point &firstPoint,bool useCartesian) { PureViewSystem::viewPortWidth(viewPortWidth()); PureViewSystem::viewPortHeight(viewPortHeight()); PureViewSystem::mapCoordinates(firstPoint3D,firstPoint,useCartesian); } inline void ViewSystem::mapCoordinates(Triangle3D &triangle3D,Triangle &triangle) { PureViewSystem::viewPortWidth(viewPortWidth()); PureViewSystem::viewPortHeight(viewPortHeight()); PureViewSystem::mapCoordinates(triangle3D[0],triangle[0]); PureViewSystem::mapCoordinates(triangle3D[1],triangle[1]); PureViewSystem::mapCoordinates(triangle3D[2],triangle[2]); } #endif