X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/11e82c1ba38223407b21cd30c0003f0d3a5d902d..a4ea083bbdf710d3234dcbd2eafb5d0e078f8348:/src/common/geometry.cpp?ds=sidebyside diff --git a/src/common/geometry.cpp b/src/common/geometry.cpp index d53b1f9a57..3f1cd03a89 100644 --- a/src/common/geometry.cpp +++ b/src/common/geometry.cpp @@ -1,33 +1,30 @@ ///////////////////////////////////////////////////////////////////////////// -// Name: common/geometry.cpp +// Name: src/common/geometry.cpp // Purpose: Common Geometry Classes // Author: Stefan Csomor // Modified by: // Created: 08/05/99 -// RCS-ID: // Copyright: (c) 1999 Stefan Csomor // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// -#ifdef __GNUG__ - #pragma implementation "geometry.cpp" -#endif - // For compilers that support precompilation, includes "wx.h". #include "wx/wxprec.h" - #ifdef __BORLANDC__ -#pragma hdrstop + #pragma hdrstop #endif #if wxUSE_GEOMETRY -#include "wx/log.h" -#include +#include "wx/geometry.h" +#ifndef WX_PRECOMP + #include "wx/log.h" +#endif + +#include -#include "wx/geometry.h" #include "wx/datstrm.h" // @@ -53,9 +50,9 @@ bool wxRect2DDouble::Intersects( const wxRect2DDouble &rect ) const if ( left < right && top < bottom ) { - return TRUE; + return true; } - return FALSE; + return false; } void wxRect2DDouble::Intersect( const wxRect2DDouble &src1 , const wxRect2DDouble &src2 , wxRect2DDouble *dest ) @@ -141,6 +138,15 @@ void wxRect2DDouble::ConstrainTo( const wxRect2DDouble &rect ) SetTop( rect.GetTop() ); } +wxRect2DDouble& wxRect2DDouble::operator=( const wxRect2DDouble &r ) +{ + m_x = r.m_x; + m_y = r.m_y; + m_width = r.m_width; + m_height = r.m_height; + return *this; +} + // integer version // for the following calculations always remember @@ -148,6 +154,7 @@ void wxRect2DDouble::ConstrainTo( const wxRect2DDouble &rect ) // wxPoint2D +#if wxUSE_STREAMS void wxPoint2DInt::WriteTo( wxDataOutputStream &stream ) const { stream.Write32( m_x ); @@ -159,8 +166,9 @@ void wxPoint2DInt::ReadFrom( wxDataInputStream &stream ) m_x = stream.Read32(); m_y = stream.Read32(); } +#endif // wxUSE_STREAMS -wxDouble wxPoint2DInt::GetVectorAngle() +wxDouble wxPoint2DInt::GetVectorAngle() const { if ( m_x == 0 ) { @@ -177,8 +185,8 @@ wxDouble wxPoint2DInt::GetVectorAngle() return 180; } - // casts needed MIPSpro compiler under SGI - wxDouble deg = atan2( (double)m_y , (double)m_x ) * 180 / 3.14159265359; + // casts needed for MIPSpro compiler under SGI + wxDouble deg = atan2( (double)m_y , (double)m_x ) * 180 / M_PI; if ( deg < 0 ) { deg += 360; @@ -187,6 +195,44 @@ wxDouble wxPoint2DInt::GetVectorAngle() } +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; +} + +void wxPoint2DDouble::SetVectorAngle( wxDouble degrees ) +{ + wxDouble length = GetVectorLength(); + m_x = length * cos( degrees / 180 * M_PI ); + m_y = length * sin( degrees / 180 * M_PI ); +} + // wxRect2D bool wxRect2DInt::Intersects( const wxRect2DInt &rect ) const @@ -199,9 +245,9 @@ bool wxRect2DInt::Intersects( const wxRect2DInt &rect ) const if ( left < right && top < bottom ) { - return TRUE; + return true; } - return FALSE; + return false; } void wxRect2DInt::Intersect( const wxRect2DInt &src1 , const wxRect2DInt &src2 , wxRect2DInt *dest ) @@ -296,6 +342,7 @@ wxRect2DInt& wxRect2DInt::operator=( const wxRect2DInt &r ) return *this; } +#if wxUSE_STREAMS void wxRect2DInt::WriteTo( wxDataOutputStream &stream ) const { stream.Write32( m_x ); @@ -311,5 +358,53 @@ void wxRect2DInt::ReadFrom( wxDataInputStream &stream ) m_width = stream.Read32(); m_height = stream.Read32(); } +#endif // wxUSE_STREAMS + + +// wxTransform2D + +void wxTransform2D::Transform( wxRect2DInt* r ) const +{ + wxPoint2DInt a = r->GetLeftTop(), b = r->GetRightBottom(); + Transform( &a ); + Transform( &b ); + *r = wxRect2DInt( a, b ); +} + +wxPoint2DInt wxTransform2D::Transform( const wxPoint2DInt &pt ) const +{ + wxPoint2DInt res = pt; + Transform( &res ); + return res; +} + +wxRect2DInt wxTransform2D::Transform( const wxRect2DInt &r ) const +{ + wxRect2DInt res = r; + Transform( &res ); + return res; +} + +void wxTransform2D::InverseTransform( wxRect2DInt* r ) const +{ + wxPoint2DInt a = r->GetLeftTop(), b = r->GetRightBottom(); + InverseTransform( &a ); + InverseTransform( &b ); + *r = wxRect2DInt( a , b ); +} + +wxPoint2DInt wxTransform2D::InverseTransform( const wxPoint2DInt &pt ) const +{ + wxPoint2DInt res = pt; + InverseTransform( &res ); + return res; +} + +wxRect2DInt wxTransform2D::InverseTransform( const wxRect2DInt &r ) const +{ + wxRect2DInt res = r; + InverseTransform( &res ); + return res; +} #endif // wxUSE_GEOMETRY