001 //$HeadURL: svn+ssh://rbezema@svn.wald.intevation.org/deegree/base/tags/2.1/src/org/deegree/model/csct/ct/ConcatenedTransformDirect.java $ 002 /*---------------- FILE HEADER ------------------------------------------ 003 004 This file is part of deegree. 005 Copyright (C) 2001 by: 006 EXSE, Department of Geography, University of Bonn 007 http://www.giub.uni-bonn.de/exse/ 008 lat/lon GmbH 009 http://www.lat-lon.de 010 011 It has been implemented within SEAGIS - An OpenSource implementation of OpenGIS specification 012 (C) 2001, Institut de Recherche pour le D�veloppement (http://sourceforge.net/projects/seagis/) 013 SEAGIS Contacts: Surveillance de l'Environnement Assist�e par Satellite 014 Institut de Recherche pour le D�veloppement / US-Espace 015 mailto:seasnet@teledetection.fr 016 017 018 This library is free software; you can redistribute it and/or 019 modify it under the terms of the GNU Lesser General Public 020 License as published by the Free Software Foundation; either 021 version 2.1 of the License, or (at your option) any later version. 022 023 This library is distributed in the hope that it will be useful, 024 but WITHOUT ANY WARRANTY; without even the implied warranty of 025 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 026 Lesser General Public License for more details. 027 028 You should have received a copy of the GNU Lesser General Public 029 License along with this library; if not, write to the Free Software 030 Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 031 032 Contact: 033 034 Andreas Poth 035 lat/lon GmbH 036 Aennchenstr. 19 037 53115 Bonn 038 Germany 039 E-Mail: poth@lat-lon.de 040 041 Klaus Greve 042 Department of Geography 043 University of Bonn 044 Meckenheimer Allee 166 045 53115 Bonn 046 Germany 047 E-Mail: klaus.greve@uni-bonn.de 048 049 050 ---------------------------------------------------------------------------*/ 051 package org.deegree.model.csct.ct; 052 053 import org.deegree.model.csct.pt.CoordinatePoint; 054 055 056 /** 057 * Concatened transform where the transfert dimension 058 * is the same than source and target dimension. This 059 * fact allows some optimizations, the most important 060 * one being the possibility to avoid the use of an 061 * intermediate buffer. 062 * 063 * @version 1.0 064 * @author Martin Desruisseaux 065 */ 066 class ConcatenedTransformDirect extends ConcatenedTransform { 067 /** 068 * Serial number for interoperability with different versions. 069 */ 070 private static final long serialVersionUID = -3568975979013908920L; 071 072 /** 073 * Construct a concatenated transform. 074 */ 075 public ConcatenedTransformDirect( final MathTransformFactory provider, 076 final MathTransform transform1, 077 final MathTransform transform2 ) { 078 super( provider, transform1, transform2 ); 079 } 080 081 /** 082 * Check if transforms are compatibles 083 * with this implementation. 084 */ 085 protected boolean isValid() { 086 return super.isValid() && 087 ( transform1.getDimSource() == transform1.getDimTarget() ) && 088 ( transform2.getDimSource() == transform2.getDimTarget() ); 089 } 090 091 /** 092 * Transforms the specified <code>ptSrc</code> and stores the result in <code>ptDst</code>. 093 */ 094 public CoordinatePoint transform( final CoordinatePoint ptSrc, CoordinatePoint ptDst ) 095 throws TransformException { 096 ptDst = transform1.transform( ptSrc, ptDst ); 097 return transform2.transform( ptDst, ptDst ); 098 } 099 100 /** 101 * Transforms a list of coordinate point ordinal values. 102 */ 103 public void transform( final double[] srcPts, final int srcOff, final double[] dstPts, 104 final int dstOff, final int numPts ) throws TransformException { 105 106 transform1.transform( srcPts, srcOff, dstPts, dstOff, numPts ); 107 transform2.transform( dstPts, dstOff, dstPts, dstOff, numPts ); 108 } 109 110 /** 111 * Transforms a list of coordinate point ordinal values. 112 */ 113 public void transform( final float[] srcPts, final int srcOff, final float[] dstPts, 114 final int dstOff, final int numPts ) throws TransformException { 115 116 transform1.transform( srcPts, srcOff, dstPts, dstOff, numPts ); 117 transform2.transform( dstPts, dstOff, dstPts, dstOff, numPts ); 118 } 119 }