-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;