/**
* License: GPL
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License 2
* as published by the Free Software Foundation.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*
* @author Stephan Saalfeld saalfeld@mpi-cbg.de
*
*/
package mpicbg.trakem2.transform;
public class AffineModel3D extends mpicbg.models.AffineModel3D implements InvertibleCoordinateTransform
{
private static final long serialVersionUID = 4661684107044575726L;
@Override
final public void init( final String data )
{
final String[] fields = data.split( "\\s+" );
if ( fields.length == 12 )
{
final double m00 = Double.parseDouble( fields[ 0 ] );
final double m01 = Double.parseDouble( fields[ 1 ] );
final double m02 = Double.parseDouble( fields[ 2 ] );
final double m03 = Double.parseDouble( fields[ 3 ] );
final double m10 = Double.parseDouble( fields[ 4 ] );
final double m11 = Double.parseDouble( fields[ 5 ] );
final double m12 = Double.parseDouble( fields[ 6 ] );
final double m13 = Double.parseDouble( fields[ 7 ] );
final double m20 = Double.parseDouble( fields[ 8 ] );
final double m21 = Double.parseDouble( fields[ 9 ] );
final double m22 = Double.parseDouble( fields[ 10 ] );
final double m23 = Double.parseDouble( fields[ 11 ] );
set(
m00, m01, m02, m03,
m10, m11, m12, m13,
m20, m21, m22, m23 );
}
else throw new NumberFormatException( "Inappropriate parameters for " + this.getClass().getCanonicalName() );
}
//@Override
@Override
final public String toXML( final String indent )
{
return indent + "<iict_transform class=\"" + this.getClass().getCanonicalName() + "\" data=\"" + toDataString() + "\" />";
}
//@Override
@Override
final public String toDataString()
{
return
m00 + " " + m01 + " " + m02 + " " + m03 + " " +
m10 + " " + m11 + " " + m12 + " " + m13 + " " +
m20 + " " + m21 + " " + m22 + " " + m23;
}
@Override
public AffineModel3D copy()
{
final AffineModel3D m = new AffineModel3D();
m.m00 = m00;
m.m10 = m10;
m.m20 = m20;
m.m01 = m01;
m.m11 = m11;
m.m21 = m21;
m.m02 = m02;
m.m12 = m12;
m.m22 = m22;
m.m03 = m03;
m.m13 = m13;
m.m23 = m23;
m.cost = cost;
m.invert();
return m;
}
@Override
public AffineModel3D createInverse()
{
final AffineModel3D ict = new AffineModel3D();
ict.m00 = i00;
ict.m10 = i10;
ict.m20 = i20;
ict.m01 = i01;
ict.m11 = i11;
ict.m21 = i21;
ict.m02 = i02;
ict.m12 = i12;
ict.m22 = i22;
ict.m03 = i03;
ict.m13 = i13;
ict.m23 = i23;
ict.i00 = m00;
ict.i10 = m10;
ict.i20 = m20;
ict.i01 = m01;
ict.i11 = m11;
ict.i21 = m21;
ict.i02 = m02;
ict.i12 = m12;
ict.i22 = m22;
ict.i03 = m03;
ict.i13 = m13;
ict.i23 = m23;
ict.cost = cost;
return ict;
}
}