001/*
002 *   GeomTransform  -- Interface in common to all geometry transformation elements.
003 *
004 *   Copyright (C) 2009-2015, Joseph A. Huwaldt
005 *   All rights reserved.
006 *   
007 *   This library is free software; you can redistribute it and/or
008 *   modify it under the terms of the GNU Lesser General Public
009 *   License as published by the Free Software Foundation; either
010 *   version 2.1 of the License, or (at your option) any later version.
011 *   
012 *   This library is distributed in the hope that it will be useful,
013 *   but WITHOUT ANY WARRANTY; without even the implied warranty of
014 *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
015 *   Lesser General Public License for more details.
016 *
017 *   You should have received a copy of the GNU Lesser General Public License
018 *   along with this program; if not, write to the Free Software
019 *   Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
020 *   Or visit:  http://www.gnu.org/licenses/lgpl.html
021 */
022package geomss.geom;
023
024/**
025 * Represents a transformation element that applies a {@link GTransform transform} to a
026 * child {@link Transformable} object. Changes made to the child object will generally be
027 * reflected in the output of the transform object.
028 * 
029 * <p> Modified by: Joseph A. Huwaldt </p>
030 * 
031 * @author Joseph A. Huwaldt, Date: April 30, 2009
032 * @version August 31, 2015
033 *
034 * @param <T> The sub-type of this GeomTransform object.
035 */
036public interface GeomTransform<T extends Transformable> extends Transformable<T> {
037
038    /**
039     * Returns the transformation represented by this transformation element.
040     *
041     * @return The transformation represented by this transformation element.
042     */
043    public GTransform getTransform();
044
045    /**
046     * Returns the total transformation represented by an entire chain of GeomTransform
047     * objects below this one.
048     *
049     * @return The total transformation represented by an entire chain of GeomTransform
050     *         objects below this one.
051     */
052    public GTransform getTotalTransform();
053
054    /**
055     * Sets the transformation represented by this transformation element.
056     *
057     * @param transform The transform to set this transform element to (may not be
058     *                  <code>null</code>).
059     */
060    public void setTransform(GTransform transform);
061
062    /**
063     * Returns the child object transformed by this transform element.
064     *
065     * @return The child object transformed by this transform element.
066     */
067    public T getChild();
068
069    /**
070     * Return a copy of the child object transformed by this transformation.
071     */
072    @Override
073    public T copyToReal();
074
075}