--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/javauis/m3g_qt/javasrc/javax/microedition/m3g/Transform.java Tue Apr 27 16:30:29 2010 +0300
@@ -0,0 +1,169 @@
+/*
+* Copyright (c) 2003 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+*
+*/
+
+
+package javax.microedition.m3g;
+
+public class Transform
+{
+ //------------------------------------------------------------------
+ // Static data
+ //------------------------------------------------------------------
+
+ //------------------------------------------------------------------
+ // Instance data
+ //------------------------------------------------------------------
+
+ // Check size from m3g_math.h Matrix
+ byte[] matrix = new byte[72];
+
+ //------------------------------------------------------------------
+ // Constructor(s)
+ //------------------------------------------------------------------
+
+ public Transform()
+ {
+ if (!Platform.uiThreadAvailable())
+ {
+ throw new Error("UI thread not initialized");
+ }
+ setIdentity();
+ }
+
+ /**
+ */
+ public Transform(Transform other)
+ {
+ if (!Platform.uiThreadAvailable())
+ {
+ throw new Error("UI thread not initialized");
+ }
+ set(other);
+ }
+
+ //------------------------------------------------------------------
+ // Public methods
+ //------------------------------------------------------------------
+
+ public void setIdentity()
+ {
+ _setIdentity(matrix);
+ }
+
+ public void set(Transform transform)
+ {
+ System.arraycopy(transform.matrix, 0,
+ this.matrix, 0,
+ this.matrix.length);
+ }
+
+ public void set(float[] matrix)
+ {
+ _setMatrix(this.matrix, matrix);
+ }
+
+ public void get(float[] matrix)
+ {
+ _getMatrix(this.matrix, matrix);
+ }
+
+ public void invert()
+ {
+ _invert(matrix);
+ }
+
+ public void transpose()
+ {
+ _transpose(matrix);
+ }
+
+ public void postMultiply(Transform transform)
+ {
+ _mul(this.matrix, this.matrix, transform.matrix);
+ }
+
+ public void postScale(float sx, float sy, float sz)
+ {
+ _scale(matrix, sx, sy , sz);
+ }
+
+ /**
+ */
+ public void postRotate(float angle, float ax, float ay, float az)
+ {
+ _rotate(matrix, angle, ax, ay, az);
+ }
+
+ /**
+ */
+ public void postRotateQuat(float qx, float qy, float qz, float qw)
+ {
+ _rotateQuat(matrix, qx, qy, qz, qw);
+ }
+
+ /**
+ */
+ public void postTranslate(float tx, float ty, float tz)
+ {
+ _translate(matrix, tx, ty, tz);
+ }
+
+ /**
+ */
+ public void transform(float[] v)
+ {
+ if ((v.length % 4) != 0)
+ {
+ throw new IllegalArgumentException();
+ }
+
+ if (v.length != 0)
+ {
+ _transformTable(matrix, v);
+ }
+ }
+
+ /**
+ */
+ public void transform(VertexArray in, float[] out, boolean W)
+ {
+ if (in == null || out == null)
+ {
+ throw new NullPointerException();
+ }
+
+ _transformArray(matrix, in.handle, out, W);
+ }
+
+ //------------------------------------------------------------------
+ // Private methods
+ //------------------------------------------------------------------
+
+ // Native methods
+ private static native void _mul(byte[] prod, byte[] left, byte[] right);
+ private static native void _setIdentity(byte[] matrix);
+ private static native void _setMatrix(byte[] matrix, float[] srcMatrix);
+ private static native void _getMatrix(byte[] matrix, float[] dstMatrix);
+ private static native void _invert(byte[] matrix);
+ private static native void _transpose(byte[] matrix);
+ private static native void _rotate(byte[] matrix, float angle, float ax, float ay, float az);
+ private static native void _rotateQuat(byte[] matrix, float qx, float qy, float qz, float qw);
+ private static native void _scale(byte[] matrix, float sx, float sy, float sz);
+ private static native void _translate(byte[] matrix, float tx, float ty, float tz);
+ private static native void _transformTable(byte[] matrix, float[] v);
+ private static native void _transformArray(byte[] matrix, int handle, float[] out, boolean W);
+}