javauis/m3g_qt/javasrc/javax/microedition/m3g/Transform.java
branchRCL_3
changeset 19 04becd199f91
--- /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);
+}