import java.awt.*; import java.util.*; /* This should not be here for Java 1.4 import Point2D; */ public class Curve2D extends Object { // Constants public final static int m_iMaxSlices = 100; public final static int m_iMaxControlPoints = 25; // Member Variables Point2D m_selectedPoint = null; double m_dT = 0.1; boolean m_bDrawSubdivisionSegments = false; //////////////////////////////////////////////////////////////////////////// // CS284: These are the variable you will be dealing with // Array of the control points Point2D[] m_aControlPoints = new Point2D[m_iMaxControlPoints]; // The number of control points there are int m_iControlPoints = 0; // Number of line segments that approximiate the curve. // The number of curve points = m_iSlices + 1 int m_iSlices = 10; // //////////////////////////////////////////////////////////////////////////// // Member Functions public Curve2D(boolean bDrawSub, double t) { m_bDrawSubdivisionSegments = bDrawSub; m_dT = t; } public void addPoint(Point2D pt) { if( m_iControlPoints < m_iMaxControlPoints - 1) { m_aControlPoints[m_iControlPoints] = pt; m_iControlPoints++; m_selectedPoint = pt; calculateCurve(); } else { System.out.println("Only " + m_iMaxControlPoints + " control points can be added"); } } public void setSlices(int slices) { if( slices > m_iMaxSlices ) { m_iSlices = m_iMaxSlices; } else { m_iSlices = slices; } calculateCurve(); } public void setTValue(double t) { m_dT = t; } public void setDrawT(boolean b) { m_bDrawSubdivisionSegments = b; } public void removeAllPoints() { m_iControlPoints = 0; } public boolean selectedControlPoint(int x, int y) { int i; Point2D pt; // Points for( i=0; i < m_iControlPoints; i++ ) { pt = m_aControlPoints[i]; if( pt.contains(x, y ) ) { m_selectedPoint = pt; return true; } } return false; } public void deselectControlPoint() { m_selectedPoint = null; } public void moveSelectedControlPoint(int x, int y) { if( m_selectedPoint != null ) { m_selectedPoint.set(x, y); calculateCurve(); } } public void deleteSelectedControlPoint() { if( m_selectedPoint != null ) { int i; for( i=0; i < m_iControlPoints; i++ ) { if( m_aControlPoints[i] == m_selectedPoint ) { break; } } for( ; i < m_iControlPoints-1; i++ ) { m_aControlPoints[i] = m_aControlPoints[i+1]; } m_iControlPoints--; calculateCurve(); } } public void calculateCurve() { } public void paint(Graphics g) { } public void drawControlLines(Graphics g) { Point2D pt, pt1, pt2; int i; Color c = g.getColor(); // Lines if( m_iControlPoints > 1 ) { g.setColor(Color.white); { for( i=0; i < m_iControlPoints - 1; i++ ) { pt1 = m_aControlPoints[i]; pt2 = m_aControlPoints[i+1]; g.drawLine( pt1.getPixelX(), pt1.getPixelY(), pt2.getPixelX(), pt2.getPixelY()); } } g.setColor(c); } } public void drawControlPoints(Graphics g) { Point2D pt, pt1, pt2; int i; // Points for( i=0; i < m_iControlPoints; i++ ) { pt = m_aControlPoints[i]; pt.paint(g); } } public void display() { Point2D pt; int i; System.out.println( "Control Points (" + m_iControlPoints + "): " ); for( i=0; i < m_iControlPoints; i++ ) { pt = m_aControlPoints[i]; pt.display(); } } public void displayVector2D(Point2D[][] ppArray) { int i, j; Point2D pt; System.out.println( " " ); System.out.println( "DisplayVector2D " + m_iControlPoints ); for( i=0; i < m_iControlPoints; i++) { for( j=0; j < m_iControlPoints-i; j++) { pt = ppArray[i][j]; System.out.print( "(" + pt.getX() + ", " + pt.getY() + ") " ); } System.out.println( " " ); } System.out.println( " " ); } }