helper functions for normalizing angles added
This commit is contained in:
parent
93fdaf79e6
commit
a124bd67c6
|
@ -4,6 +4,7 @@
|
|||
*****************************************************************************/
|
||||
|
||||
#include "QskArcMetrics.h"
|
||||
#include "QskFunctions.h"
|
||||
|
||||
#include <qhashfunctions.h>
|
||||
#include <qvariant.h>
|
||||
|
@ -38,12 +39,12 @@ void QskArcMetrics::setThickness( qreal thickness ) noexcept
|
|||
|
||||
void QskArcMetrics::setStartAngle( qreal startAngle ) noexcept
|
||||
{
|
||||
m_startAngle = startAngle;
|
||||
m_startAngle = qskConstrainedDegrees( startAngle );
|
||||
}
|
||||
|
||||
void QskArcMetrics::setSpanAngle( qreal spanAngle ) noexcept
|
||||
{
|
||||
m_spanAngle = spanAngle;
|
||||
m_spanAngle = qBound( -360.0, spanAngle, 360.0 );
|
||||
}
|
||||
|
||||
void QskArcMetrics::setSizeMode( Qt::SizeMode sizeMode ) noexcept
|
||||
|
@ -51,6 +52,26 @@ void QskArcMetrics::setSizeMode( Qt::SizeMode sizeMode ) noexcept
|
|||
m_sizeMode = sizeMode;
|
||||
}
|
||||
|
||||
bool QskArcMetrics::containsAngle( qreal angle ) const
|
||||
{
|
||||
angle = qskConstrainedDegrees( angle );
|
||||
|
||||
if ( m_spanAngle >= 0.0 )
|
||||
{
|
||||
if ( angle < m_startAngle )
|
||||
angle += 360.0;
|
||||
|
||||
return ( angle >= m_startAngle ) && ( angle <= m_startAngle + m_spanAngle );
|
||||
}
|
||||
else
|
||||
{
|
||||
if ( angle > m_startAngle )
|
||||
angle -= 360.0;
|
||||
|
||||
return ( angle <= m_startAngle ) && ( angle >= m_startAngle + m_spanAngle );
|
||||
}
|
||||
}
|
||||
|
||||
QskArcMetrics QskArcMetrics::interpolated(
|
||||
const QskArcMetrics& to, qreal ratio ) const noexcept
|
||||
{
|
||||
|
|
|
@ -45,6 +45,8 @@ class QSK_EXPORT QskArcMetrics
|
|||
constexpr qreal endAngle() const noexcept;
|
||||
constexpr qreal angleAtRatio( qreal ratio ) const noexcept;
|
||||
|
||||
bool containsAngle( qreal ) const;
|
||||
|
||||
void setThickness( qreal ) noexcept;
|
||||
constexpr qreal thickness() const noexcept;
|
||||
|
||||
|
|
|
@ -177,3 +177,43 @@ qreal qskFuzzyCeil( qreal value, qreal stepSize )
|
|||
value = ( value - eps ) / stepSize;
|
||||
return std::ceil( value ) * stepSize;
|
||||
}
|
||||
|
||||
double qskConstrainedDegrees( double degrees )
|
||||
{
|
||||
degrees = fmod( degrees, 360.0 );
|
||||
if ( degrees < 0.0 )
|
||||
degrees += 360.0;
|
||||
|
||||
return degrees;
|
||||
}
|
||||
|
||||
float qskConstrainedDegrees( float degrees )
|
||||
{
|
||||
degrees = fmodf( degrees, 360.0f );
|
||||
if ( degrees < 0.0f )
|
||||
degrees += 360.0f;
|
||||
|
||||
return degrees;
|
||||
}
|
||||
|
||||
double qskConstrainedRadians( double radians )
|
||||
{
|
||||
constexpr double pi2 = 2.0 * M_PI;
|
||||
|
||||
radians = fmod( radians, pi2 );
|
||||
if ( radians < 0.0 )
|
||||
radians += pi2;
|
||||
|
||||
return radians;
|
||||
}
|
||||
|
||||
float qskConstrainedRadians( double float )
|
||||
{
|
||||
constexpr float pi2 = 2.0f * M_PI;
|
||||
|
||||
radians = fmodf( radians, pi2 );
|
||||
if ( radians < 0.0f )
|
||||
radians += pi2;
|
||||
|
||||
return radians;
|
||||
}
|
||||
|
|
|
@ -71,4 +71,10 @@ inline bool qskFuzzyCompare( qreal value1, qreal value2 )
|
|||
QSK_EXPORT qreal qskFuzzyFloor( qreal value, qreal stepSize );
|
||||
QSK_EXPORT qreal qskFuzzyCeil( qreal value, qreal stepSize );
|
||||
|
||||
QSK_EXPORT double qskConstrainedDegrees( double );
|
||||
QSK_EXPORT float qskConstrainedDegrees( float );
|
||||
|
||||
QSK_EXPORT double qskConstrainedRadians( double );
|
||||
QSK_EXPORT float qskConstrainedRadians( float );
|
||||
|
||||
#endif
|
||||
|
|
Loading…
Reference in New Issue