uiacceltk/hitchcock/Client/src/alfm3gmesh.cpp
changeset 0 15bf7259bb7c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/uiacceltk/hitchcock/Client/src/alfm3gmesh.cpp	Tue Feb 02 07:56:43 2010 +0200
@@ -0,0 +1,127 @@
+/*
+* Copyright (c) 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:   M3G 3D Mesh
+*
+*/
+
+
+
+#include "alf/alfm3gmesh.h"
+#include "alf/alfenv.h"
+#include "alf/alfgencomponent.h"
+#include "alf/alfconstants.h"
+#include "alflogger.h"
+
+struct CAlfM3GMesh::TM3GMeshPrivateData
+    {
+    CAlfEnv* iEnv; // Not owned
+    CAlfGenComponent* iComms; // Not owned
+    };
+
+// ======== MEMBER FUNCTIONS ========
+
+// ---------------------------------------------------------------------------
+// Exposed constructor
+// ---------------------------------------------------------------------------
+//
+CAlfM3GMesh* CAlfM3GMesh::NewL( CAlfGenComponent& aComms, CAlfEnv& aEnv )
+    {
+    CAlfM3GMesh* self = new( ELeave ) CAlfM3GMesh;
+    CleanupStack::PushL( self );
+    self->ConstructL( aComms, aEnv );
+    CleanupStack::Pop( self );
+    return self;
+    }
+
+// ---------------------------------------------------------------------------
+// First phase constructor
+// ---------------------------------------------------------------------------
+//
+CAlfM3GMesh::CAlfM3GMesh()
+    {
+    }
+
+// ---------------------------------------------------------------------------
+// Second phase constructor
+// ---------------------------------------------------------------------------
+//
+void CAlfM3GMesh::ConstructL( CAlfGenComponent& aComms, CAlfEnv& aEnv )
+    {
+    // Construct the base class
+    CAlfMesh::ConstructL(aComms, EAlfMeshTypeM3G);
+    
+    // Create object data.
+    iData = new (ELeave) TM3GMeshPrivateData;
+    
+    // Zero all object data
+    iData->iEnv = NULL;
+    iData->iComms = NULL;
+    
+    // Fill data
+    iData->iEnv = &aEnv;
+    iData->iComms = &aComms;
+    
+    // Create input and output buffers for inter-process communication
+    TBuf8<1> outDummy;
+    TInt param = EAlfMeshTypeM3G;
+    TPckgC<TInt> buf(param);
+        
+    // Call a synchronous command to create an associated server-side M3G mesh.
+    TInt err = iData->iComms->DoSynchronousCmd(EAlfMeshVisualCreateMesh, buf, outDummy);
+    if (err)
+        {
+        __ALFLOGSTRING1( "CAlfM3GMesh::ConstructL leave error %d", err )
+        User::Leave( err );
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// Destructor
+// ---------------------------------------------------------------------------
+//
+CAlfM3GMesh::~CAlfM3GMesh()
+    {
+    delete iData;
+    iData = NULL;
+    }
+
+
+// ---------------------------------------------------------------------------
+// Loads a new M3G Mesh scene into this M3G mesh
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CAlfM3GMesh::LoadSceneL(const TDesC& aFileName)
+    {
+    ASSERT(iData != NULL);
+    
+    TFileName filename = aFileName;
+    
+    // Prepend the image file path to the filename.
+    iData->iEnv->TextureManager().PrependImagePath(filename);
+    
+    // Create input and output buffers for inter-process communication
+    TBuf8<1> outDummy;
+    TAlfMeshLoadM3GSceneParams params;
+    params.iFilename = filename;
+    
+    TPckg<TAlfMeshLoadM3GSceneParams> paramsPckg(params);
+    
+    // Call a synchronous command to load the M3G scene graph
+    TInt err = iData->iComms->DoSynchronousCmd(EAlfMeshLoadM3GScene, paramsPckg, outDummy);
+    if (err)
+        {
+        __ALFLOGSTRING1( "CAlfM3GMesh::LoadSceneL leave error %d", err )
+        User::Leave( err );
+        }    
+    }