// (c) MIT 2003.  All rights reserved.

////////////////////////////////////////////////////////////////////////////////
//
// FILE:	ArcRecognizer.java
//
// AUTHOR:	Manoj D. Muzumdar
//		archon@ai.mit.edu
//
// DATE:	Mar 99
//
// COPYRIGHT:	Massachusetts Institute of Technology
//		All rights reserved.
//
// PURPOSE:	Arc recognition
//
// HISTORY:     Mar 99  archon  created
//
////////////////////////////////////////////////////////////////////////////////

package rec.core.recognizers;

import java.util.*;
import java.awt.*;
import rec.geo.*;
import rec.sys.*;
import rec.core.widgets.*;

public class ArcRecognizer extends Recognizer
{
  public static boolean isArc( Squiggle s )
  {
    if( !CurveParser.isCurve( s ) )
      return( false );

    Rectangle r = s.getBounds();

    double avDist = ((double)r.width + (double)r.height) / 2.0;

    return( avDist
	    <= 4.0
	    * Geometry.distance( s.getPointAt( 0 ),
				 s.getPointAt( s.getNumberOfPoints() - 1 ) ) );
  }

  //////////////////////////////////////////////////////////////////////////////

  public ArcRecognizer()
  {
  }

  //////////////////////////////////////////////////////////////////////////////

  public boolean recognize( Surface s, Widget w )
  {
    Squiggle sq = (Squiggle)w;

    if( isArc( sq ) ) {

      s.removeWidget( sq );
      s.addWidget( new WArc( sq ) );

      return( true );
    }

    return( false );
  }

  //////////////////////////////////////////////////////////////////////////////

  public Iterator getInputTypes()
  {
    Vector v = new Vector();

    v.addElement( "rec.sys.Squiggle" );

    return( v.iterator() );
  }

  public Iterator getOutputTypes()
  {
    Vector v = new Vector();

    v.addElement( "rec.core.widgets.WArc" );

    return( v.iterator() );
  }
}

////////////////////////////////////////////////////////////////////////////////
