/* @(#)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 {
    
    /**
     * If p is not null return is not null;
     * otherwise returns null.
     */
    XPoint3D transform(XPoint3D p);
    
    public static class apply {
        /** Condition: t and shape are unchanged. */
        public static Shape3D transform(Transform3D t, Shape3D shape) {
            if ((t == null) || (shape == null))
                return null;
            
            Shape3D result = shape.copy();
            
            XPoint3D[] point = result.getPoints();
            
            if (point != null) {
                int n = point.length;
                
                 for (int i = 0; i < n; i++)
                    point[i] = t.transform(point[i]);
                
                result.setPoints(point);
            }
            
            return result;
        }
    }
}

