Esempio n. 1
0
ON_BOOL32 ON_ArcCurve::SetEndPoint(ON_3dPoint end_point)
{
  if (IsCircle())
    return false;
  ON_BOOL32 rc = false;
  if ( m_dim == 3 || end_point.z == 0.0 )
  {
    ON_3dPoint P;
    ON_3dVector T;
    double t = Domain()[0];
    Ev1Der( t, P, T );
    ON_Arc a;
    rc = a.Create( P, T, end_point );
    if ( rc )
    {
      m_arc = a;
    }
    else {
      ON_3dPoint start_point = PointAt(Domain()[0]);
      if (end_point.DistanceTo(start_point) < ON_ZERO_TOLERANCE*m_arc.Radius()){
        //make arc into circle
        m_arc.plane.xaxis = start_point - m_arc.Center();
        m_arc.plane.xaxis.Unitize();
        m_arc.plane.yaxis = ON_CrossProduct(m_arc.Normal(), m_arc.plane.xaxis);
        m_arc.plane.yaxis.Unitize();
        m_arc.SetAngleRadians(2.0*ON_PI);
        rc = true;
      }
    }
  }
  return rc;  
}
Esempio n. 2
0
ON_BOOL32 ON_ArcCurve::ChangeClosedCurveSeam( 
            double t ){
	bool rc = false;
	if( IsCircle() ){
		double angle_delta = m_t.NormalizedParameterAt(t);
		angle_delta*= 2*ON_PI;
		
		m_arc.Rotate(angle_delta, m_arc.plane.Normal());
		m_t = ON_Interval( t, m_t[1] + t - m_t[0]);
		rc = true;
	}
	return rc;
}
Esempio n. 3
0
void Location::CalculateBoundingBox()
{
    if(IsCircle())
    {
        boundingBox.AddBoundingVertex(pos.x-radius,pos.z-radius);
        boundingBox.AddBoundingVertex(pos.x+radius,pos.z+radius);
    }
    else
    {
        for(size_t i=0; i< locs.GetSize(); i++)
        {
            boundingBox.AddBoundingVertex(locs[i]->pos.x,locs[i]->pos.z);
        }
    }
}