--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/javauis/amms_akn/mmacontrol/src/cammsorientationcontrol.cpp Tue Apr 27 16:30:29 2010 +0300
@@ -0,0 +1,142 @@
+/*
+* Copyright (c) 2005-2007 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: Manipulates the virtual orientation of an object.
+*
+*/
+
+
+
+// INCLUDE FILES
+#include <e32math.h>
+#include <jdebug.h>
+#include "cammsorientationcontrol.h"
+
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// Destructor
+CAMMSOrientationControl::~CAMMSOrientationControl()
+{
+ DEBUG("AMMS::CAMMSOrientationControl::~CAMMSOrientationControl");
+}
+
+// -----------------------------------------------------------------------------
+// CAMMSOrientationControl::SetOrientationL
+// Turns the object to the new orientation.
+// -----------------------------------------------------------------------------
+void CAMMSOrientationControl::SetOrientationL(
+ TInt aHeading,
+ TInt aPitch,
+ TInt aRoll)
+{
+ // Sets the Heading, Pitch, Roll values for the source/listener orientation.
+ // Parameters are given in thousandths of radians.
+ // SourceOrientationBase/ListenerLocationBase :
+ //
+ // NOTE: Effect API uses thousandths of radians for all three parameters,
+ // but JSR234 uses degrees.
+ //
+ // From e32Math.h: The multiplying factor to convert degrees to radians.
+
+ DEBUG_INT3("AMMS::CAMMSOrientationControl::SetOrientationL: %d, %d, %d",
+ aHeading, aPitch, aRoll);
+
+ TInt32 convertedHeading = (TInt32)(aHeading * KDegToRad *
+ 1000); // CSI: 47 Effect API uses thousands of radians #
+
+ TInt32 convertedPitch = (TInt32)(aPitch * KDegToRad *
+ 1000); // CSI: 47 Effect API uses thousands of radians #
+
+ TInt32 convertedRoll = (TInt32)(aRoll * KDegToRad *
+ 1000); // CSI: 47 Effect API uses thousands of radians #
+
+ DEBUG_INT3("AMMS::CAMMSOrientationControl::SetOrientationL: %d, %d, %d",
+ convertedHeading, convertedPitch, convertedRoll);
+
+ iOrientationEffect->SetOrientationL(
+ convertedHeading, convertedPitch, convertedRoll);
+
+ // Apply updated settings to Effect API.
+ iOrientationEffect->ApplyL();
+}
+
+// -----------------------------------------------------------------------------
+// CAMMSOrientationControl::SetOrientationL
+// Turns the object to the new orientation.
+// -----------------------------------------------------------------------------
+void CAMMSOrientationControl::SetOrientationL(
+ TInt aFrontX, TInt aFrontY, TInt aFrontZ,
+ TInt aAboveX, TInt aAboveY, TInt aAboveZ)
+{
+ // Check in debug build that parameters are not zero vectors.
+ __ASSERT_DEBUG(((aFrontX != 0) ||
+ (aFrontY != 0) ||
+ (aFrontZ != 0)) &&
+ ((aAboveX != 0) ||
+ (aAboveY != 0) ||
+ (aAboveZ != 0)),
+ User::Invariant());
+
+ // Check in debug build that vectors are not parallel.
+ // Two vectors are parallel if their cross product is zero vector.
+ // Cross product of vectors a1*i + a2*j + a3*k and b1*i + b2*j + b3*k :
+ // (a2*b3 - a3*b2)i + (a3*b1 - a1*b3)j + (a1*b2 - a2*b1)k
+ __ASSERT_DEBUG(
+ ((aFrontY * aAboveZ) - (aFrontZ * aAboveY) != 0) ||
+ ((aFrontZ * aAboveX) - (aFrontX * aAboveZ) != 0) ||
+ ((aFrontX * aAboveY) - (aFrontY * aAboveX) != 0),
+ User::Invariant());
+
+ // Sets the Front and Above vectors for the orientation of the source/listener.
+
+ DEBUG_INT3("AMMS::CAMMSOrientationControl::SetOrientationL: Front %d, %d, %d",
+ aFrontX, aFrontY, aFrontZ);
+
+ DEBUG_INT3("AMMS::CAMMSOrientationControl::SetOrientationL: Above %d, %d, %d",
+ aAboveX, aAboveY, aAboveZ);
+
+ iOrientationEffect->SetOrientationVectorsL(
+ (TInt32)aFrontX, (TInt32)aFrontY, (TInt32)aFrontZ,
+ (TInt32)aAboveX, (TInt32)aAboveY, (TInt32)aAboveZ);
+
+ // Apply updated settings to Effect API.
+ iOrientationEffect->ApplyL();
+}
+
+// -----------------------------------------------------------------------------
+// CAMMSOrientationControl::OrientationVectors
+// Gets the orientation of the object using two vectors.
+// -----------------------------------------------------------------------------
+void CAMMSOrientationControl::OrientationVectors(
+ TInt& aFrontX, TInt& aFrontY, TInt& aFrontZ,
+ TInt& aAboveX, TInt& aAboveY, TInt& aAboveZ)
+{
+ // Gets the orientation of the source.
+
+ iOrientationEffect->OrientationVectors(
+ (TInt32&)aFrontX, (TInt32&)aFrontY, (TInt32&)aFrontZ,
+ (TInt32&)aAboveX, (TInt32&)aAboveY, (TInt32&)aAboveZ);
+}
+
+// -----------------------------------------------------------------------------
+// CAMMSOrientationControl::CAMMSOrientationControl
+// C++ constructor can NOT contain any code, that
+// might leave.
+// -----------------------------------------------------------------------------
+CAMMSOrientationControl::CAMMSOrientationControl(CMMAPlayer* aPlayer)
+ : CAMMSControl(aPlayer)
+{
+}
+
+// End of File