1 // File: GLViewer_Context.cxx
2 // Created: November, 2004
4 // Copyright (C) CEA 2004
6 //================================================================
7 // Class : GLViewer_CoordSystem
8 // Description : Class implementing mathematical model of 2D coordinate system
9 //================================================================
10 #include "GLViewer_CoordSystem.h"
13 //=======================================================================
14 // Function: GLViewer_CoordSystem
16 //=======================================================================
17 GLViewer_CoordSystem::GLViewer_CoordSystem( CSType aType, double X0, double Y0,
18 double XUnit, double YUnit, double Rotation )
22 setUnits( XUnit, YUnit );
23 setRotation( Rotation );
26 //=======================================================================
27 // Function: getOrigin
29 //=======================================================================
30 void GLViewer_CoordSystem::getOrigin( double& x, double& y ) const
36 //=======================================================================
37 // Function: setOrigin
39 //=======================================================================
40 void GLViewer_CoordSystem::setOrigin( double x, double y )
46 //=======================================================================
49 //=======================================================================
50 void GLViewer_CoordSystem::getUnits( double& x, double& y ) const
56 //=======================================================================
59 //=======================================================================
60 void GLViewer_CoordSystem::setUnits( double x, double y )
72 //=======================================================================
73 // Function: getRotation
75 //=======================================================================
76 double GLViewer_CoordSystem::getRotation() const
81 //=======================================================================
82 // Function: setRotation
84 //=======================================================================
85 void GLViewer_CoordSystem::setRotation( double rotation )
87 myRotation = rotation;
90 //=======================================================================
93 //=======================================================================
94 GLViewer_CoordSystem::CSType GLViewer_CoordSystem::getType() const
99 //=======================================================================
102 //=======================================================================
103 void GLViewer_CoordSystem::setType( CSType type )
108 //=======================================================================
109 // Function: toReference
111 //=======================================================================
112 void GLViewer_CoordSystem::toReference( double& x, double& y )
114 if( myType==Cartesian )
116 double newx = myX0 + myXUnit*x*cos(myRotation) - myYUnit*y*sin(myRotation),
117 newy = myY0 + myXUnit*x*sin(myRotation) + myYUnit*y*cos(myRotation);
121 else if( myType==Polar )
123 double r = x, phi = y;
124 x = myX0 + myXUnit*r*cos(phi+myRotation);
125 y = myY0 + myXUnit*r*sin(phi+myRotation);
129 //=======================================================================
130 // Function: fromReference
132 //=======================================================================
133 void GLViewer_CoordSystem::fromReference( double& x, double& y )
135 x = (x - myX0) / myXUnit;
136 y = (y - myY0) / myYUnit;
138 if( myType==Cartesian )
140 double newx = x*cos(myRotation) + y*sin(myRotation),
141 newy = -x*sin(myRotation) + y*cos(myRotation);
145 else if( myType==Polar )
147 double r = sqrt( x*x+y*y );
149 double eps = 1E-8, pi = 3.14159265;
156 if( x<0 ) // 2-nd or 4-rd quarter
169 //=======================================================================
170 // Function: transform
172 //=======================================================================
173 void GLViewer_CoordSystem::transform( GLViewer_CoordSystem& aSystem, double& x, double& y )
176 aSystem.fromReference( x, y );
179 //=======================================================================
180 // Function: getStretching
182 //=======================================================================
183 void GLViewer_CoordSystem::getStretching( GLViewer_CoordSystem& aSystem, double& theX, double& theY )
185 theX = myXUnit / aSystem.myXUnit;
186 theY = myYUnit / aSystem.myYUnit;