Revision: 20955
          
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=20955
Author:   kazanbas
Date:     2009-06-17 13:16:18 +0200 (Wed, 17 Jun 2009)

Log Message:
-----------
Importer base for Chingiz.

Modified Paths:
--------------
    branches/soc-2009-chingachgook/config/linux2-config.py
    branches/soc-2009-chingachgook/source/blender/collada/DocumentExporter.h
    branches/soc-2009-chingachgook/source/blender/collada/SConscript
    branches/soc-2009-chingachgook/source/blender/collada/collada.cpp
    branches/soc-2009-chingachgook/source/blender/collada/collada.h
    branches/soc-2009-chingachgook/source/blender/editors/include/ED_object.h
    branches/soc-2009-chingachgook/source/blender/editors/object/object_edit.c
    
branches/soc-2009-chingachgook/source/blender/editors/space_info/info_header.c
    
branches/soc-2009-chingachgook/source/blender/windowmanager/intern/wm_operators.c
    branches/soc-2009-chingachgook/tools/Blender.py
    branches/soc-2009-chingachgook/tools/btools.py

Added Paths:
-----------
    branches/soc-2009-chingachgook/source/blender/collada/DocumentImporter.cpp
    branches/soc-2009-chingachgook/source/blender/collada/DocumentImporter.h

Modified: branches/soc-2009-chingachgook/config/linux2-config.py
===================================================================
--- branches/soc-2009-chingachgook/config/linux2-config.py      2009-06-17 
11:01:05 UTC (rev 20954)
+++ branches/soc-2009-chingachgook/config/linux2-config.py      2009-06-17 
11:16:18 UTC (rev 20955)
@@ -170,6 +170,9 @@
 BF_PCRE = ''
 BF_PCRE_LIB = 'pcre'
 BF_PCRE_LIBPATH = '/usr/lib'
+BF_EXPAT = '/usr'
+BF_EXPAT_LIB = 'expat'
+BF_EXPAT_LIBPATH = '/usr/lib'
 
 ##
 CC = 'gcc'

Modified: 
branches/soc-2009-chingachgook/source/blender/collada/DocumentExporter.h
===================================================================
--- branches/soc-2009-chingachgook/source/blender/collada/DocumentExporter.h    
2009-06-17 11:01:05 UTC (rev 20954)
+++ branches/soc-2009-chingachgook/source/blender/collada/DocumentExporter.h    
2009-06-17 11:16:18 UTC (rev 20955)
@@ -1,3 +1,4 @@
+struct Scene;
 
 class DocumentExporter
 {

Added: 
branches/soc-2009-chingachgook/source/blender/collada/DocumentImporter.cpp
===================================================================
--- branches/soc-2009-chingachgook/source/blender/collada/DocumentImporter.cpp  
                        (rev 0)
+++ branches/soc-2009-chingachgook/source/blender/collada/DocumentImporter.cpp  
2009-06-17 11:16:18 UTC (rev 20955)
@@ -0,0 +1,238 @@
+#include "COLLADAFWStableHeaders.h"
+#include "COLLADAFWIWriter.h"
+#include "COLLADAFWRoot.h"
+#include "COLLADAFWNode.h"
+#include "COLLADAFWVisualScene.h"
+#include "COLLADAFWInstanceGeometry.h"
+#include "COLLADAFWFileInfo.h"
+#include "COLLADAFWRoot.h"
+#include "COLLADAFWLight.h"
+#include "COLLADAFWImage.h"
+#include "COLLADAFWMaterial.h"
+#include "COLLADAFWGeometry.h"
+#include "COLLADAFWMesh.h"
+
+#include "COLLADASaxFWLLoader.h"
+
+extern "C" 
+{
+#include "BKE_main.h"
+#include "BKE_mesh.h"
+#include "BKE_context.h"
+
+#include "DNA_object_types.h"
+
+#include "ED_object.h"
+
+#include "DocumentImporter.h"
+}
+
+
+/** Class that needs to be implemented by a writer. 
+       IMPORTANT: The write functions are called in arbitrary order.*/
+class Writer: public COLLADAFW::IWriter
+{
+private:
+       std::string mFilename;
+       
+       std::vector<COLLADAFW::VisualScene> mVisualScenes;
+
+       bContext *mContext;
+
+       class UnitConverter
+       {
+       private:
+               COLLADAFW::FileInfo::Unit mUnit;
+               COLLADAFW::FileInfo::UpAxisType mUpAxis;
+       public:
+               UnitConverter(COLLADAFW::FileInfo::UpAxisType upAxis, 
COLLADAFW::FileInfo::Unit& unit) :
+                       mUpAxis(upAxis), mUnit(unit)
+               {
+               }
+
+               // TODO
+               // convert vector vec from COLLADA format to Blender
+               void convertVec3(float *vec)
+               {
+               }
+               
+               // TODO need also for angle conversion, time conversion...
+       };
+
+public:
+
+       /** Constructor. */
+       Writer(bContext *C, const char *filename) : mContext(C), 
mFilename(filename) {};
+
+       /** Destructor. */
+       ~Writer() {};
+
+       bool write()
+       {
+               COLLADASaxFWL::Loader loader;
+               COLLADAFW::Root root(&loader, this);
+
+               // XXX report error
+               if (!root.loadDocument(mFilename))
+                       return false;
+       }
+
+       /** This method will be called if an error in the loading process 
occurred and the loader cannot
+               continue to to load. The writer should undo all operations that 
have been performed.
+               @param errorMessage A message containing informations about the 
error that occurred.
+       */
+       virtual void cancel(const COLLADAFW::String& errorMessage)
+       {
+       }
+
+       /** This is the method called. The writer hast to prepare to receive 
data.*/
+       virtual void start()
+       {
+       }
+
+       /** This method is called after the last write* method. No other 
methods will be called after this.*/
+       virtual void finish()
+       {
+               // using mVisualScenes, do:
+               // - write <node> data to Objects: materials, transforms, etc.
+       }
+
+       /** When this method is called, the writer must write the global 
document asset.
+               @return The writer should return true, if writing succeeded, 
false otherwise.*/
+       virtual bool writeGlobalAsset ( const COLLADAFW::FileInfo* asset ) 
+       {
+               // XXX take up_axis, unit into account
+               // COLLADAFW::FileInfo::Unit unit = asset->getUnit();
+               // COLLADAFW::FileInfo::UpAxisType upAxis = 
asset->getUpAxisType();
+
+               return true;
+       }
+
+       /** When this method is called, the writer must write the scene.
+               @return The writer should return true, if writing succeeded, 
false otherwise.*/
+       virtual bool writeScene ( const COLLADAFW::Scene* scene ) 
+       {
+               // XXX could store the scene id, but do nothing for now
+               return true;
+       }
+
+       /** When this method is called, the writer must write the entire visual 
scene.
+               @return The writer should return true, if writing succeeded, 
false otherwise.*/
+       virtual bool writeVisualScene ( const COLLADAFW::VisualScene* 
visualScene ) 
+       {
+               // for the sake of clarity link nodes to geometries at a later 
stage
+               mVisualScenes.push_back(*visualScene);
+               return true;
+       }
+
+       /** When this method is called, the writer must handle all nodes 
contained in the 
+               library nodes.
+               @return The writer should return true, if writing succeeded, 
false otherwise.*/
+       virtual bool writeLibraryNodes ( const COLLADAFW::LibraryNodes* 
libraryNodes ) 
+       {
+               return true;
+       }
+
+       /** When this method is called, the writer must write the geometry.
+               @return The writer should return true, if writing succeeded, 
false otherwise.*/
+       virtual bool writeGeometry ( const COLLADAFW::Geometry* geometry ) 
+       {
+               // - create a mesh object
+               // - enter editmode getting editmesh
+               // - write geometry
+               // - exit editmode
+
+               // check geometry->getType() first
+               COLLADAFW::Mesh *mesh = (COLLADAFW::Mesh*)geometry;
+
+               // create a mesh object
+               Object *ob = ED_object_add_type(mContext, OB_MESH);
+               Mesh *me = (Mesh*)ob->data;
+
+               // enter editmode
+               ED_object_enter_editmode(mContext, 0);
+
+               EditMesh *em = BKE_mesh_get_editmesh(me);
+
+               // write geometry
+               // currently only support <triangles>
+
+               BKE_mesh_end_editmesh(me, em);
+
+               // exit editmode
+               ED_object_exit_editmode(mContext, EM_FREEDATA);
+
+               return true;
+       }
+
+       /** When this method is called, the writer must write the material.
+               @return The writer should return true, if writing succeeded, 
false otherwise.*/
+       virtual bool writeMaterial( const COLLADAFW::Material* material ) 
+       {
+               // TODO: create and store a material.
+               // Let it have 0 users for now.
+               return true;
+       }
+
+       /** When this method is called, the writer must write the effect.
+               @return The writer should return true, if writing succeeded, 
false otherwise.*/
+       virtual bool writeEffect( const COLLADAFW::Effect* effect ) 
+       {
+               return true;
+       }
+
+       /** When this method is called, the writer must write the camera.
+               @return The writer should return true, if writing succeeded, 
false otherwise.*/
+       virtual bool writeCamera( const COLLADAFW::Camera* camera ) 
+       {
+               return true;
+       }
+
+       /** When this method is called, the writer must write the image.
+               @return The writer should return true, if writing succeeded, 
false otherwise.*/
+       virtual bool writeImage( const COLLADAFW::Image* image ) 
+       {
+               return true;
+       }
+
+       /** When this method is called, the writer must write the light.
+               @return The writer should return true, if writing succeeded, 
false otherwise.*/
+       virtual bool writeLight( const COLLADAFW::Light* light ) 
+       {
+               return true;
+       }
+
+       /** When this method is called, the writer must write the Animation.
+               @return The writer should return true, if writing succeeded, 
false otherwise.*/
+       virtual bool writeAnimation( const COLLADAFW::Animation* animation ) 
+       {
+               return true;
+       }
+
+       /** When this method is called, the writer must write the AnimationList.
+               @return The writer should return true, if writing succeeded, 
false otherwise.*/
+       virtual bool writeAnimationList( const COLLADAFW::AnimationList* 
animationList ) 
+       {
+               return true;
+       }
+
+       /** When this method is called, the writer must write the skin 
controller data.
+               @return The writer should return true, if writing succeeded, 
false otherwise.*/
+       virtual bool writeSkinControllerData( const 
COLLADAFW::SkinControllerData* skinControllerData ) 
+       {
+               return true;
+       }
+
+       /** When this method is called, the writer must write the controller.
+               @return The writer should return true, if writing succeeded, 
false otherwise.*/
+       virtual bool writeController( const COLLADAFW::Controller* Controller ) 
+       {
+               return true;
+       }
+};
+
+void DocumentImporter::import(bContext *C, const char *filename)
+{
+       Writer w(C, filename);
+       w.write();
+}

Added: branches/soc-2009-chingachgook/source/blender/collada/DocumentImporter.h
===================================================================
--- branches/soc-2009-chingachgook/source/blender/collada/DocumentImporter.h    
                        (rev 0)
+++ branches/soc-2009-chingachgook/source/blender/collada/DocumentImporter.h    
2009-06-17 11:16:18 UTC (rev 20955)
@@ -0,0 +1,8 @@
+struct Main;
+struct bContext;
+
+class DocumentImporter
+{
+ public:
+       void import(bContext *C, const char *filename);
+};

Modified: branches/soc-2009-chingachgook/source/blender/collada/SConscript
===================================================================
--- branches/soc-2009-chingachgook/source/blender/collada/SConscript    
2009-06-17 11:01:05 UTC (rev 20954)
+++ branches/soc-2009-chingachgook/source/blender/collada/SConscript    
2009-06-17 11:16:18 UTC (rev 20955)
@@ -4,7 +4,7 @@
 sources = env.Glob('*.cpp')
 
 # relative paths to include dirs, space-separated, string
-incs = '../blenlib ../blenkernel %s/COLLADAStreamWriter/include 
%s/COLLADABaseUtils/include' % (env['BF_OPENCOLLADA'], env['BF_OPENCOLLADA']) + 
' ../makesdna'
+incs = '../blenlib ../blenkernel ../makesdna ../makesrna ../editors/include 
[OPENCOLLADA]/COLLADAStreamWriter/include 
[OPENCOLLADA]/COLLADABaseUtils/include [OPENCOLLADA]/COLLADAFramework/include 
[OPENCOLLADA]/COLLADASaxFrameworkLoader/include '.replace('[OPENCOLLADA]', 
env['BF_OPENCOLLADA'])
 
 env.BlenderLib ('bf_collada', sources, Split(incs), [], libtype='core', 
priority=200 )
 

Modified: branches/soc-2009-chingachgook/source/blender/collada/collada.cpp
===================================================================
--- branches/soc-2009-chingachgook/source/blender/collada/collada.cpp   
2009-06-17 11:01:05 UTC (rev 20954)
+++ branches/soc-2009-chingachgook/source/blender/collada/collada.cpp   
2009-06-17 11:16:18 UTC (rev 20955)
@@ -1,11 +1,17 @@
-#include <stdio.h>
+#include "BKE_main.h"
 #include "BKE_scene.h"
+#include "BKE_context.h"
+
 #include "DocumentExporter.h"
+#include "DocumentImporter.h"
 
 extern "C"
 {

@@ Diff output truncated at 10240 characters. @@

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to