/* @(#)Transform3D.java   6 February 2008 */

import edu.neu.ccs.*;
import edu.neu.ccs.gui.*;
import edu.neu.ccs.codec.*;
import edu.neu.ccs.console.*;
import edu.neu.ccs.filter.*;
import edu.neu.ccs.jpf.*;
import edu.neu.ccs.parser.*;
import edu.neu.ccs.pedagogy.*;
import edu.neu.ccs.quick.*;
import edu.neu.ccs.util.*;

import java.awt.*;
import java.awt.event.*;
import java.awt.geom.*;
import java.awt.font.*;
import java.awt.image.*;
import javax.swing.*;
import javax.swing.border.*;
import java.io.*;
import java.util.*;
import java.math.*;
import java.beans.*;
import java.lang.reflect.*;
import java.net.URL;
import java.util.regex.*;
import java.text.ParseException;

public interface Transform3D {
    
    XPoint3D transform(XPoint3D p);
    
    public static class Factory {
        public static Shape3D transform(Transform3D t, Shape3D shape) {
            Shape3D result = new Shape3D();
            
            if ((t == null) || (shape == null))
                return result;
            
            XPoint3D[] point = shape.getPoints();
            int[][] edge = shape.getEdges();
            int[][] face = shape.getFaces();
            
            if (point != null) {
                int n = point.length;
                
                XPoint3D[] newpoint = new XPoint3D[n];
                
                for (int i = 0; i < n; i++)
                    newpoint[i] = t.transform(point[i]);
                
                result.setPoints(newpoint);
            }
            
            result.setEdges(edge);
            result.setFaces(face);
            
            return result;
        }
    }
}

