Determining Curve Object Types
Windows only
        
        
    
Problem
Given an ON_Curve, how can one determine which kind of ON_Curve-derived object it really is?  (e.g. ON_LineCurve, ON_ArcCurve, ON_PolylineCurve, ON_PolyCurve, ON_NurbsCurve, etc.)?
Solution
Basically, you try to cast the ON_Curve object to one of the ON_Curve-derived classes using its Cast operator.  If the cast operation is success, you are good to go.  If it fails, then you know the test object is some other ON_Curve-derived object.
Sample
const ON_LineCurve* GetLineCurve( const ON_Curve* crv )
{
  const ON_LineCurve* p = 0;
  if( crv != 0 )
    p = ON_LineCurve::Cast( crv );
  return p;
}
const ON_ArcCurve* GetArcCurve( const ON_Curve* crv )
{
  const ON_ArcCurve* p = 0;
  if( crv != 0 )
    p = ON_ArcCurve::Cast( crv );
  return p;
}
const ON_PolylineCurve* GetPolylineCurve( const ON_Curve* crv )
{
  const ON_PolylineCurve* p = 0;
  if( crv != 0 )
    p = ON_PolylineCurve::Cast( crv );
  return p;
}
const ON_PolyCurve* GetPolyCurve( const ON_Curve* crv )
{
  const ON_PolyCurve* p = 0;
  if( crv != 0 )
    p = ON_PolyCurve::Cast( crv );
  return p;
}
const ON_NurbsCurve* GetNurbsCurve( const ON_Curve* crv )
{
  const ON_NurbsCurve* p = 0;
  if( crv != 0 )
    p = ON_NurbsCurve::Cast( crv );
  return p;
}
