Merge of the COLLADA GSoC branch into trunk.

COLLADA code is disabled by default (it has dependencies requiring manual install).

SCons and CMake builds are supported on Windows and Linux, no Mac building yet. More on building COLLADA code: http://wiki.blender.org/index.php/User:Kazanbas/Building_Collada_Branch.

The detailed command log of the merge (can be useful for educational purposes):

branch=https://svn.blender.org/svnroot/bf-blender/branches/soc-2009-chingachgook
# collada code
svn copy $branch/source/blender/collada source/blender/collada
# operator
svn merge -c 20401,20955,21077,24077,24079 $branch/source/blender/windowmanager/intern/wm_operators.c source/blender/windowmanager/intern/wm_operators.c
# menu
svn merge -c 24079 $branch/release/scripts/ui/space_info.py release/scripts/ui/space_info.py
# scons
svn merge -c 20398 $branch/source/blender/SConscript source/blender/SConscript
svn merge -c 20398,20691,20955,22726 $branch/tools/btools.py tools/btools.py
svn merge -c 20691,20955,22726 $branch/tools/Blender.py tools/Blender.py
svn merge -c 20398,20692,20955 $branch/config/linux2-config.py config/linux2-config.py
svn merge -c 22726 $branch/config/win64-vc-config.py config/win64-vc-config.py
svn merge -c 22726 $branch/config/win32-vc-config.py config/win32-vc-config.py
svn merge -c 24077 $branch/source/blender/windowmanager/SConscript source/blender/windowmanager/SConscript
# cmake
svn merge -c 23319,23905,24077,24158 $branch/CMakeLists.txt CMakeLists.txt
svn merge -c 23319 $branch/source/blender/CMakeLists.txt source/blender/CMakeLists.txt
svn merge -c 23319 $branch/source/creator/CMakeLists.txt source/creator/CMakeLists.txt
svn merge -c 23319 $branch/CMake/macros.cmake CMake/macros.cmake
svn merge -c 24077 $branch/source/blender/windowmanager/CMakeLists.txt source/blender/windowmanager/CMakeLists.txt
This commit is contained in:
Arystanbek Dyussenov 2009-10-30 15:35:50 +00:00
parent 84eb897caa
commit 31258507d0
23 changed files with 5377 additions and 3 deletions

@ -76,6 +76,11 @@ MACRO(SETUP_LIBDIRS)
IF(WITH_FFTW3)
LINK_DIRECTORIES(${FFTW3_LIBPATH})
ENDIF(WITH_FFTW3)
IF(WITH_OPENCOLLADA)
LINK_DIRECTORIES(${OPENCOLLADA_LIBPATH})
LINK_DIRECTORIES(${PCRE_LIBPATH})
LINK_DIRECTORIES(${EXPAT_LIBPATH})
ENDIF(WITH_OPENCOLLADA)
IF(WIN32)
LINK_DIRECTORIES(${PTHREADS_LIBPATH})
@ -135,6 +140,11 @@ MACRO(SETUP_LIBLINKS
IF(WITH_FFMPEG)
TARGET_LINK_LIBRARIES(${target} ${FFMPEG_LIB})
ENDIF(WITH_FFMPEG)
IF(WITH_OPENCOLLADA)
TARGET_LINK_LIBRARIES(${target} ${OPENCOLLADA_LIB})
TARGET_LINK_LIBRARIES(${target} ${PCRE_LIB})
TARGET_LINK_LIBRARIES(${target} ${EXPAT_LIB})
ENDIF(WITH_OPENCOLLADA)
IF(WIN32)
TARGET_LINK_LIBRARIES(${target} ${PTHREADS_LIB})
ENDIF(WIN32)

@ -80,6 +80,7 @@ OPTION(WITH_LZMA "Enable best LZMA compression, used for pointcache" ON
OPTION(WITH_CXX_GUARDEDALLOC "Enable GuardedAlloc for C++ memory allocation" OFF)
OPTION(WITH_BUILDINFO "Include extra build details" ON)
OPTION(WITH_INSTALL "Install accompanying scripts and language files needed to run blender" ON)
OPTION(WITH_OPENCOLLADA "Enable OpenCollada Support (http://www.opencollada.org/)" OFF)
IF (APPLE)
OPTION(WITH_COCOA "Use Cocoa framework instead of deprecated Carbon" ON)
@ -90,6 +91,19 @@ IF(NOT WITH_GAMEENGINE AND WITH_PLAYER)
MESSAGE("WARNING: WITH_PLAYER needs WITH_GAMEENGINE")
ENDIF(NOT WITH_GAMEENGINE AND WITH_PLAYER)
IF (WITH_OPENCOLLADA)
SET(OPENCOLLADA /usr/local/opencollada CACHE FILEPATH "OpenCollada Directory")
SET(OPENCOLLADA_LIBPATH ${OPENCOLLADA})
SET(OPENCOLLADA_LIB OpenCollada)
SET(PCRE /usr CACHE FILEPATH "PCRE Directory")
SET(PCRE_LIBPATH ${PCRE}/lib)
SET(PCRE_LIB pcre)
SET(EXPAT /usr CACHE FILEPATH "Expat Directory")
SET(EXPAT_LIBPATH ${EXPAT}/lib)
SET(EXPAT_LIB expat)
ENDIF (WITH_OPENCOLLADA)
# For alternate Python locations the commandline can be used to override detected/default cache settings, e.g:
# On Unix:
# cmake -D PYTHON_LIB=/usr/local/lib/python2.3/config/libpython2.3.so -D PYTHON_INC=/usr/local/include/python2.3 -D PYTHON_BINARY=/usr/local/bin/python2.3 -G "Unix Makefiles" ../blender

@ -151,6 +151,20 @@ BF_OPENGL_LIB = 'GL GLU X11 Xi'
BF_OPENGL_LIBPATH = '/usr/X11R6/lib'
BF_OPENGL_LIB_STATIC = '${BF_OPENGL_LIBPATH}/libGL.a ${BF_OPENGL_LIBPATH}/libGLU.a ${BF_OPENGL_LIBPATH}/libXxf86vm.a ${BF_OPENGL_LIBPATH}/libX11.a ${BF_OPENGL_LIBPATH}/libXi.a ${BF_OPENGL_LIBPATH}/libXext.a ${BF_OPENGL_LIBPATH}/libXxf86vm.a'
WITH_BF_COLLADA = False
BF_COLLADA = '#source/blender/collada'
BF_COLLADA_INC = '${BF_COLLADA}'
BF_COLLADA_LIB = 'bf_collada'
BF_OPENCOLLADA = ''
BF_OPENCOLLADA_LIB = 'OpenCollada'
BF_OPENCOLLADA_LIBPATH = '/usr/lib'
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'
CXX = 'g++'

@ -138,6 +138,16 @@ BF_FFTW3_LIBPATH = '${BF_FFTW3}/lib'
WITH_BF_REDCODE = False
BF_REDCODE_INC = '#extern'
WITH_BF_COLLADA = False
BF_COLLADA = '#source/blender/collada'
BF_COLLADA_INC = '${BF_COLLADA}'
BF_COLLADA_LIB = 'bf_collada'
BF_OPENCOLLADA = LIBDIR + '/opencollada'
BF_OPENCOLLADA_INC = '${BF_OPENCOLLADA}/include'
BF_OPENCOLLADA_LIB = 'opencollada'
BF_OPENCOLLADA_LIBPATH = '${BF_OPENCOLLADA}/lib'
WITH_BF_STATICOPENGL = False
BF_OPENGL_INC = '${BF_OPENGL}/include'
BF_OPENGL_LIBINC = '${BF_OPENGL}/lib'

@ -151,6 +151,16 @@ BF_FFTW3_LIBPATH = '${BF_FFTW3}/lib'
WITH_BF_REDCODE = False
BF_REDCODE_INC = '#extern'
WITH_BF_COLLADA = False
BF_COLLADA = '#source/blender/collada'
BF_COLLADA_INC = '${BF_COLLADA}'
BF_COLLADA_LIB = 'bf_collada'
BF_OPENCOLLADA = LIBDIR + '/opencollada'
BF_OPENCOLLADA_INC = '${BF_OPENCOLLADA}/include'
BF_OPENCOLLADA_LIB = 'opencollada'
BF_OPENCOLLADA_LIBPATH = '${BF_OPENCOLLADA}/lib'
WITH_BF_STATICOPENGL = False
BF_OPENGL_INC = '${BF_OPENGL}/include'
BF_OPENGL_LIBINC = '${BF_OPENGL}/lib'

@ -99,13 +99,13 @@ class INFO_MT_file_import(dynamic_menu.DynMenu):
__label__ = "Import"
def draw(self, context):
pass # dynamic menu
self.layout.itemO("WM_OT_collada_import", text="COLLADA (.dae)...")
class INFO_MT_file_export(dynamic_menu.DynMenu):
__label__ = "Export"
def draw(self, context):
pass # dynamic menu
self.layout.itemO("WM_OT_collada_export", text="COLLADA (.dae)...")
class INFO_MT_file_external_data(bpy.types.Menu):
__label__ = "External Data"

@ -58,3 +58,7 @@ IF(WITH_PYTHON)
ADD_SUBDIRECTORY(python)
ENDIF(WITH_PYTHON)
IF(WITH_OPENCOLLADA)
ADD_SUBDIRECTORY(collada)
ENDIF(WITH_OPENCOLLADA)

@ -33,3 +33,6 @@ if env['WITH_BF_OPENEXR']:
if env['WITH_BF_QUICKTIME']:
SConscript (['quicktime/SConscript'])
if env['WITH_BF_COLLADA']:
SConscript (['collada/SConscript'])

@ -0,0 +1,44 @@
# $Id: CMakeLists.txt 21789 2009-07-22 05:35:12Z kazanbas $
# ***** BEGIN GPL LICENSE BLOCK *****
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version 2
# of the License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software Foundation,
# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
#
# The Original Code is Copyright (C) 2006, Blender Foundation
# All rights reserved.
#
# The Original Code is: all of this file.
#
# Contributor(s): Jacques Beaurain.
#
# ***** END GPL LICENSE BLOCK *****
FILE(GLOB SRC *.cpp)
SET(INC
.
../blenlib
../blenkernel
../windowmanager
../makesdna
../makesrna
../editors/include
../../../intern/guardedalloc
${OPENCOLLADA}/COLLADAStreamWriter/include
${OPENCOLLADA}/COLLADABaseUtils/include
${OPENCOLLADA}/COLLADAFramework/include
${OPENCOLLADA}/COLLADASaxFrameworkLoader/include
)
BLENDERLIB(bf_collada "${SRC}" "${INC}")

File diff suppressed because it is too large Load Diff

@ -0,0 +1,8 @@
struct Scene;
class DocumentExporter
{
public:
void exportCurrentScene(Scene *sce, const char* filename);
void exportScenes(const char* filename);
};

File diff suppressed because it is too large Load Diff

@ -0,0 +1,8 @@
struct Main;
struct bContext;
class DocumentImporter
{
public:
void import(bContext *C, const char *filename);
};

@ -0,0 +1,10 @@
#!/usr/bin/python
Import ('env')
sources = env.Glob('*.cpp')
# relative paths to include dirs, space-separated, string
incs = '../blenlib ../blenkernel ../windowmanager ../makesdna ../makesrna ../editors/include ../../../intern/guardedalloc [OPENCOLLADA]/COLLADAStreamWriter/include [OPENCOLLADA]/COLLADABaseUtils/include [OPENCOLLADA]/COLLADAFramework/include [OPENCOLLADA]/COLLADASaxFrameworkLoader/include '.replace('[OPENCOLLADA]', env['BF_OPENCOLLADA_INC'])
env.BlenderLib ('bf_collada', sources, Split(incs), [], libtype='core', priority=200 )

@ -0,0 +1,26 @@
#include "BKE_main.h"
#include "BKE_scene.h"
#include "BKE_context.h"
#include "DocumentExporter.h"
#include "DocumentImporter.h"
extern "C"
{
int collada_import(bContext *C, const char *filepath)
{
DocumentImporter imp;
imp.import(C, filepath);
return 1;
}
int collada_export(Scene *sce, const char *filepath)
{
DocumentExporter exp;
exp.exportCurrentScene(sce, filepath);
return 1;
}
}

@ -0,0 +1,19 @@
#ifndef BLENDER_COLLADA_H
#define BLENDER_COLLADA_H
struct bContext;
struct Scene;
#ifdef __cplusplus
extern "C" {
#endif
/*
* both return 1 on success, 0 on error
*/
int collada_import(bContext *C, const char *filepath);
int collada_export(Scene *sce, const char *filepath);
#ifdef __cplusplus
}
#endif
#endif

@ -0,0 +1,69 @@
#ifndef BLENDER_COLLADA_H
#define BLENDER_COLLADA_H
#include "COLLADAFWFileInfo.h"
#include "Math/COLLADABUMathMatrix4.h"
class UnitConverter
{
private:
COLLADAFW::FileInfo::Unit unit;
COLLADAFW::FileInfo::UpAxisType up_axis;
public:
UnitConverter() : unit(), up_axis(COLLADAFW::FileInfo::Z_UP) {}
void read_asset(const COLLADAFW::FileInfo* asset)
{
}
// TODO
// convert vector vec from COLLADA format to Blender
void convertVec3(float *vec)
{
}
// TODO need also for angle conversion, time conversion...
void mat4_from_dae(float out[][4], const COLLADABU::Math::Matrix4& in)
{
// in DAE, matrices use columns vectors, (see comments in COLLADABUMathMatrix4.h)
// so here, to make a blender matrix, we swap columns and rows
for (int i = 0; i < 4; i++) {
for (int j = 0; j < 4; j++) {
out[i][j] = in[j][i];
}
}
}
void mat4_to_dae(float out[][4], float in[][4])
{
Mat4CpyMat4(out, in);
Mat4Transp(out);
}
void mat4_to_dae_double(double out[][4], float in[][4])
{
float mat[4][4];
mat4_to_dae(mat, in);
for (int i = 0; i < 4; i++)
for (int j = 0; j < 4; j++)
out[i][j] = mat[i][j];
}
};
class TransformBase
{
public:
void decompose(float mat[][4], float *loc, float *rot, float *size)
{
Mat4ToSize(mat, size);
Mat4ToEul(mat, rot);
VecCopyf(loc, mat[3]);
}
};
#endif

@ -50,6 +50,10 @@ IF(WITH_OPENEXR)
ADD_DEFINITIONS(-DWITH_OPENEXR)
ENDIF(WITH_OPENEXR)
IF(WITH_OPENCOLLADA)
ADD_DEFINITIONS(-DWITH_COLLADA)
ENDIF(WITH_OPENCOLLADA)
IF(WITH_QUICKTIME)
SET(INC ${INC} ../quicktime ${QUICKTIME_INC})
ADD_DEFINITIONS(-DWITH_QUICKTIME)

@ -19,6 +19,9 @@ defs = []
if not env['WITH_BF_PYTHON']:
defs.append('DISABLE_PYTHON')
if env['WITH_BF_COLLADA']:
defs.append('WITH_COLLADA')
if env['OURPLATFORM'] == 'linux2':
cflags='-pthread'
incs += ' ../../../extern/binreloc/include'

@ -1345,6 +1345,105 @@ static void WM_OT_save_mainfile(wmOperatorType *ot)
}
/* XXX: move these collada operators to a more appropriate place */
#ifdef WITH_COLLADA
#include "../../collada/collada.h"
static int wm_collada_export_invoke(bContext *C, wmOperator *op, wmEvent *event)
{
//char name[FILE_MAX];
//BLI_strncpy(name, G.sce, FILE_MAX);
//untitled(name);
/* RNA_string_set(op->ptr, "path", "/tmp/test.dae"); */
WM_event_add_fileselect(C, op);
return OPERATOR_RUNNING_MODAL;
}
/* function used for WM_OT_save_mainfile too */
static int wm_collada_export_exec(bContext *C, wmOperator *op)
{
char filename[FILE_MAX];
if(RNA_property_is_set(op->ptr, "path"))
RNA_string_get(op->ptr, "path", filename);
else {
BLI_strncpy(filename, G.sce, FILE_MAX);
untitled(filename);
}
//WM_write_file(C, filename, op->reports);
collada_export(CTX_data_scene(C), filename);
/* WM_event_add_notifier(C, NC_WM|ND_FILESAVE, NULL); */
return OPERATOR_FINISHED;
}
static void WM_OT_collada_export(wmOperatorType *ot)
{
ot->name= "Export COLLADA";
ot->idname= "WM_OT_collada_export";
ot->invoke= wm_collada_export_invoke;
ot->exec= wm_collada_export_exec;
ot->poll= WM_operator_winactive;
ot->flag= 0;
RNA_def_property(ot->srna, "path", PROP_STRING, PROP_FILEPATH);
}
static int wm_collada_import_invoke(bContext *C, wmOperator *op, wmEvent *event)
{
/* RNA_string_set(op->ptr, "path", "/tmp/test.dae"); */
WM_event_add_fileselect(C, op);
return OPERATOR_RUNNING_MODAL;
}
/* function used for WM_OT_save_mainfile too */
static int wm_collada_import_exec(bContext *C, wmOperator *op)
{
char filename[FILE_MAX];
if(RNA_property_is_set(op->ptr, "path"))
RNA_string_get(op->ptr, "path", filename);
else {
BLI_strncpy(filename, G.sce, FILE_MAX);
untitled(filename);
}
//WM_write_file(C, filename, op->reports);
collada_import(C, filename);
/* WM_event_add_notifier(C, NC_WM|ND_FILESAVE, NULL); */
return OPERATOR_FINISHED;
}
static void WM_OT_collada_import(wmOperatorType *ot)
{
ot->name= "Import COLLADA";
ot->idname= "WM_OT_collada_import";
ot->invoke= wm_collada_import_invoke;
ot->exec= wm_collada_import_exec;
ot->poll= WM_operator_winactive;
ot->flag= 0;
RNA_def_property(ot->srna, "path", PROP_STRING, PROP_FILEPATH);
}
#endif
/* *********************** */
static void WM_OT_window_fullscreen_toggle(wmOperatorType *ot)
@ -2248,6 +2347,13 @@ void wm_operatortype_init(void)
WM_operatortype_append(WM_OT_debug_menu);
WM_operatortype_append(WM_OT_search_menu);
WM_operatortype_append(WM_OT_call_menu);
#ifdef WITH_COLLADA
/* XXX: move these */
WM_operatortype_append(WM_OT_collada_export);
WM_operatortype_append(WM_OT_collada_import);
#endif
}
/* default keymap for windows and screens, only call once per WM */

@ -378,7 +378,8 @@ IF(UNIX)
bf_cineon
bf_openexr
bf_dds
bf_readblenfile
bf_readblenfile
bf_collada
blender_bop
bf_kernel
bf_decimation

@ -161,6 +161,13 @@ def setup_staticlibs(lenv):
if lenv['OURPLATFORM'] in ('win32-vc', 'win32-mingw', 'linuxcross', 'win64-vc'):
libincs += Split(lenv['BF_PTHREADS_LIBPATH'])
if lenv['WITH_BF_COLLADA']:
libincs += Split(lenv['BF_OPENCOLLADA_LIBPATH'])
if lenv['OURPLATFORM'] not in ('win32-vc', 'win32-mingw', 'linuxcross', 'win64-vc'):
libincs += Split(lenv['BF_PCRE_LIBPATH'])
libincs += Split(lenv['BF_EXPAT_LIBPATH'])
return statlibs, libincs
def setup_syslibs(lenv):
@ -211,6 +218,10 @@ def setup_syslibs(lenv):
syslibs += Split(lenv['BF_PTHREADS_LIB'])
if lenv['WITH_BF_LCMS']:
syslibs.append(lenv['BF_LCMS_LIB'])
if lenv['WITH_BF_COLLADA']:
syslibs.append(lenv['BF_PCRE_LIB'])
syslibs += Split(lenv['BF_OPENCOLLADA_LIB'])
syslibs.append(lenv['BF_EXPAT_LIB'])
syslibs += lenv['LLIBS']

@ -53,6 +53,7 @@ def validate_arguments(args, bc):
'WITH_BF_QUICKTIME', 'BF_QUICKTIME', 'BF_QUICKTIME_INC', 'BF_QUICKTIME_LIB', 'BF_QUICKTIME_LIBPATH',
'WITH_BF_FFTW3', 'BF_FFTW3', 'BF_FFTW3_INC', 'BF_FFTW3_LIB', 'BF_FFTW3_LIBPATH',
'WITH_BF_STATICOPENGL', 'BF_OPENGL', 'BF_OPENGL_INC', 'BF_OPENGL_LIB', 'BF_OPENGL_LIBPATH', 'BF_OPENGL_LIB_STATIC',
'WITH_BF_COLLADA', 'BF_COLLADA', 'BF_COLLADA_INC', 'BF_COLLADA_LIB', 'BF_OPENCOLLADA', 'BF_OPENCOLLADA_INC', 'BF_OPENCOLLADA_LIB', 'BF_OPENCOLLADA_LIBPATH', 'BF_PCRE', 'BF_PCRE_LIB', 'BF_PCRE_LIBPATH', 'BF_EXPAT', 'BF_EXPAT_LIB', 'BF_EXPAT_LIBPATH',
'WITH_BF_PLAYER',
'WITH_BF_NOBLENDER',
'WITH_BF_BINRELOC',
@ -333,6 +334,21 @@ def read_opts(cfg, args):
('BF_OPENGL_LIBPATH', 'OpenGL library path', ''),
('BF_OPENGL_LIB_STATIC', 'OpenGL static libraries', ''),
('BF_OPENGL_LINKFLAGS', 'OpenGL link flags', ''),
(BoolVariable('WITH_BF_COLLADA', 'Build COLLADA import/export module if true', True)),
('BF_COLLADA', 'COLLADA base path', ''),
('BF_COLLADA_INC', 'COLLADA include path', ''),
('BF_COLLADA_LIB', 'COLLADA library', ''),
('BF_OPENCOLLADA', 'OpenCollada base path', ''),
('BF_OPENCOLLADA_INC', 'OpenCollada base include path', ''),
('BF_OPENCOLLADA_LIB', 'OpenCollada library', ''),
('BF_OPENCOLLADA_LIBPATH', 'OpenCollada library path', ''),
('BF_PCRE', 'PCRE base path', ''),
('BF_PCRE_LIB', 'PCRE library', ''),
('BF_PCRE_LIBPATH', 'PCRE library path', ''),
('BF_EXPAT', 'Expat base path', ''),
('BF_EXPAT_LIB', 'Expat library', ''),
('BF_EXPAT_LIBPATH', 'Expat library path', ''),
(BoolVariable('WITH_BF_PLAYER', 'Build blenderplayer if true', False)),
(BoolVariable('WITH_BF_NOBLENDER', 'Do not build blender if true', False)),