-void wxPoint2DInt::ReadFrom( wxDataInputStream &stream )
-{
- m_x = stream.Read32() ;
- m_y = stream.Read32() ;
+void wxPoint2DInt::ReadFrom( wxDataInputStream &stream )
+{
+ m_x = stream.Read32();
+ m_y = stream.Read32();
+}
+#endif // wxUSE_STREAMS
+
+wxDouble wxPoint2DInt::GetVectorAngle() const
+{
+ if ( m_x == 0 )
+ {
+ if ( m_y >= 0 )
+ return 90;
+ else
+ return 270;
+ }
+ if ( m_y == 0 )
+ {
+ if ( m_x >= 0 )
+ return 0;
+ else
+ return 180;
+ }
+
+ // casts needed for MIPSpro compiler under SGI
+ wxDouble deg = atan2( (double)m_y , (double)m_x ) * 180 / M_PI;
+ if ( deg < 0 )
+ {
+ deg += 360;
+ }
+ return deg;
+}
+
+
+void wxPoint2DInt::SetVectorAngle( wxDouble degrees )
+{
+ wxDouble length = GetVectorLength();
+ m_x = (int)(length * cos( degrees / 180 * M_PI ));
+ m_y = (int)(length * sin( degrees / 180 * M_PI ));
+}
+
+wxDouble wxPoint2DDouble::GetVectorAngle() const
+{
+ if ( wxIsNullDouble(m_x) )
+ {
+ if ( m_y >= 0 )
+ return 90;
+ else
+ return 270;
+ }
+ if ( wxIsNullDouble(m_y) )
+ {
+ if ( m_x >= 0 )
+ return 0;
+ else
+ return 180;
+ }
+ wxDouble deg = atan2( m_y , m_x ) * 180 / M_PI;
+ if ( deg < 0 )
+ {
+ deg += 360;
+ }
+ return deg;