www.pudn.com > cad3d.zip > Range.h


#ifndef __Range_h__ 
#define __Range_h__ 
 
#include "3DMath/MathDefs.h" 
 
template  
class CRange  
{ 
protected: 
    T	    m_min; 
    T	    m_max; 
 
public: 
 
    CRange(const T& rMin = T(), const T& rMax = T()) : m_min(rMin), m_max(rMax) {}; 
 
    T		GetMin() const { return m_min; } 
    T		GetMax() const { return m_max; } 
 
    void	SetMin(const T& rMin) { m_min = rMin; } 
    void	SetMax(const T& rMax) { m_max = rMax; } 
 
    bool	IsEmpty() const { return m_min > m_max; } 
    bool	IsPoint() const { return Equal(m_min, m_max); } 
     
    CRange	Intersect(const CRange& rOther) const 
    { 
		T minimal = max(m_min, rOther.m_min); 
		T maximal = min(m_max, rOther.m_max); 
 
		return CRange(minimal, maximal); 
    } 
 
    bool	IsIn(const T&  rValue) const 
    { 
		return ( IsLe(m_min,rValue) && IsLe(rValue,m_max) ); 
    } 
 
    bool	IsSubRange(const CRange& rRange) const 
    { 
		return IsLe(m_min,rRange.m_min) && IsLe(rRange.m_max,m_max); 
    } 
     
    bool	IsLimit(math_real dVal) const 
    { 
		return Equal(dVal, m_min) || Equal(dVal, m_max); 
    } 
 
 
 
}; 
 
typedef CRange CDoubleRange; 
 
class CEmptyDoubleRange : public CRange 
{ 
public: 
    CEmptyDoubleRange() : CRange(1,0) {}; 
}; 
 
class CPointSetPos 
{ 
public: 
    typedef enum { OUTSIDE, INSIDE, BOUNDARY } PosEnum;  
    PosEnum		m_ePos; 
}; 
 
class CLineLineInter 
{ 
public: 
    typedef enum { NO, ONE_POINT, RANGE } InterEnum; 
    InterEnum		m_eInter; 
    C3DPoint		m_interPoint1; 
    C3DPoint		m_interPoint2; 
}; 
 
#endif//__Range_h__