[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [32389] trunk/blender: COLLADA
Nathan Letwory
nathan at letworyinteractive.com
Sat Oct 9 23:17:14 CEST 2010
Revision: 32389
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=32389
Author: jesterking
Date: 2010-10-09 23:17:14 +0200 (Sat, 09 Oct 2010)
Log Message:
-----------
COLLADA
Import unit_settings to scene.
Note: I use here RNA to do this, and I think I might slowly work on replacing low-level DNA usage with RNA where possible.
Modified Paths:
--------------
trunk/blender/source/blender/collada/DocumentImporter.cpp
trunk/blender/source/blender/collada/MeshImporter.cpp
trunk/blender/source/blender/collada/MeshImporter.h
trunk/blender/source/blender/collada/collada_internal.cpp
trunk/blender/source/blender/collada/collada_internal.h
trunk/blender/source/blender/makesrna/RNA_access.h
Property Changed:
----------------
trunk/blender/
Property changes on: trunk/blender
___________________________________________________________________
Name: svn:ignore
- *.pdb
.*
TAGS
build
cscope.out
install
mingw
mingw-user-config.py
mingw-user-config_debug.py
msvc
msvc-user-config.py
obj
sgc.bat
sgd.bat
smc.bat
ssenv.bat
tags
user-config.py
user-def.mk
+ *.pdb
.*
TAGS
build
cscope.out
install
mingw
mingw-user-config.py
mingw-user-config_debug.py
msvc
msvc-user-config.py
obj
sgc.bat
sgd.bat
smc.bat
ssenv.bat
tags
user-config.py
user-def.mk
graphicall_32b
graphicall_64b
graphicall_64b_debug
installer_32b
installer_64b
Modified: trunk/blender/source/blender/collada/DocumentImporter.cpp
===================================================================
--- trunk/blender/source/blender/collada/DocumentImporter.cpp 2010-10-09 14:42:59 UTC (rev 32388)
+++ trunk/blender/source/blender/collada/DocumentImporter.cpp 2010-10-09 21:17:14 UTC (rev 32389)
@@ -72,6 +72,8 @@
#include "DNA_camera_types.h"
#include "DNA_lamp_types.h"
+#include "RNA_access.h"
+
#include "MEM_guardedalloc.h"
#include "DocumentImporter.h"
@@ -130,7 +132,7 @@
/** Constructor. */
Writer(bContext *C, const char *filename) : mFilename(filename), mContext(C),
armature_importer(&unit_converter, &mesh_importer, &anim_importer, CTX_data_scene(C)),
- mesh_importer(&armature_importer, CTX_data_scene(C)),
+ mesh_importer(&unit_converter, &armature_importer, CTX_data_scene(C)),
anim_importer(&unit_converter, &armature_importer, CTX_data_scene(C)) {}
/** Destructor. */
@@ -172,8 +174,30 @@
{
std::vector<const COLLADAFW::VisualScene*>::iterator it;
for (it = vscenes.begin(); it != vscenes.end(); it++) {
+ PointerRNA sceneptr, unit_settings;
+ PropertyRNA *system, *scale;
// TODO: create a new scene except the selected <visual_scene> - use current blender scene for it
Scene *sce = CTX_data_scene(mContext);
+
+ // for scene unit settings: system, scale_length
+ RNA_id_pointer_create(&sce->id, &sceneptr);
+ unit_settings = RNA_pointer_get(&sceneptr, "unit_settings");
+ system = RNA_struct_find_property(&unit_settings, "system");
+ scale = RNA_struct_find_property(&unit_settings, "scale_length");
+
+ switch(unit_converter.isMetricSystem()) {
+ case UnitConverter::Metric:
+ RNA_property_enum_set(&unit_settings, system, USER_UNIT_METRIC);
+ break;
+ case UnitConverter::Imperial:
+ RNA_property_enum_set(&unit_settings, system, USER_UNIT_IMPERIAL);
+ break;
+ default:
+ RNA_property_enum_set(&unit_settings, system, USER_UNIT_NONE);
+ break;
+ }
+ RNA_property_float_set(&unit_settings, scale, unit_converter.getLinearMeter());
+
const COLLADAFW::NodePointerArray& roots = (*it)->getRootNodes();
for (unsigned int i = 0; i < roots.getCount(); i++) {
@@ -253,9 +277,6 @@
@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();
unit_converter.read_asset(asset);
return true;
Modified: trunk/blender/source/blender/collada/MeshImporter.cpp
===================================================================
--- trunk/blender/source/blender/collada/MeshImporter.cpp 2010-10-09 14:42:59 UTC (rev 32388)
+++ trunk/blender/source/blender/collada/MeshImporter.cpp 2010-10-09 21:17:14 UTC (rev 32389)
@@ -323,8 +323,9 @@
MVert *mvert;
int i;
- for (i = 0, mvert = me->mvert; i < me->totvert; i++, mvert++)
+ for (i = 0, mvert = me->mvert; i < me->totvert; i++, mvert++) {
get_vector(mvert->co, pos, i);
+ }
}
int MeshImporter::triangulate_poly(unsigned int *indices, int totvert, MVert *verts, std::vector<unsigned int>& tri)
@@ -631,7 +632,7 @@
}
}
- mat_prim_map[mp->getMaterialId()].push_back(prim);
+ mat_prim_map[mp->getMaterialId()].push_back(prim);
}
geom_uid_mat_mapping_map[mesh->getUniqueId()] = mat_prim_map;
@@ -689,7 +690,7 @@
return true;
}
-MeshImporter::MeshImporter(ArmatureImporter *arm, Scene *sce) : scene(sce), armature_importer(arm) {}
+MeshImporter::MeshImporter(UnitConverter *unitconv, ArmatureImporter *arm, Scene *sce) : unitconverter(unitconv), scene(sce), armature_importer(arm) {}
Object *MeshImporter::get_object_by_geom_uid(const COLLADAFW::UniqueId& geom_uid)
{
Modified: trunk/blender/source/blender/collada/MeshImporter.h
===================================================================
--- trunk/blender/source/blender/collada/MeshImporter.h 2010-10-09 14:42:59 UTC (rev 32388)
+++ trunk/blender/source/blender/collada/MeshImporter.h 2010-10-09 21:17:14 UTC (rev 32389)
@@ -119,10 +119,12 @@
void get_vector(float v[3], COLLADAFW::MeshVertexData& arr, int i);
bool flat_face(unsigned int *nind, COLLADAFW::MeshVertexData& nor, int count);
+
+ UnitConverter *unitconverter;
public:
- MeshImporter(ArmatureImporter *arm, Scene *sce);
+ MeshImporter(UnitConverter *unitconv, ArmatureImporter *arm, Scene *sce);
virtual Object *get_object_by_geom_uid(const COLLADAFW::UniqueId& geom_uid);
Modified: trunk/blender/source/blender/collada/collada_internal.cpp
===================================================================
--- trunk/blender/source/blender/collada/collada_internal.cpp 2010-10-09 14:42:59 UTC (rev 32388)
+++ trunk/blender/source/blender/collada/collada_internal.cpp 2010-10-09 21:17:14 UTC (rev 32389)
@@ -28,14 +28,40 @@
void UnitConverter::read_asset(const COLLADAFW::FileInfo* asset)
{
+ unit = asset->getUnit();
+ up_axis = asset->getUpAxisType();
}
-// TODO
-// convert vector vec from COLLADA format to Blender
-void UnitConverter::convertVec3(float *vec)
+UnitConverter::UnitSystem UnitConverter::isMetricSystem()
{
+ switch(unit.getLinearUnitUnit()) {
+ case COLLADAFW::FileInfo::Unit::MILLIMETER:
+ case COLLADAFW::FileInfo::Unit::CENTIMETER:
+ case COLLADAFW::FileInfo::Unit::DECIMETER:
+ case COLLADAFW::FileInfo::Unit::METER:
+ case COLLADAFW::FileInfo::Unit::KILOMETER:
+ return UnitConverter::Metric;
+ case COLLADAFW::FileInfo::Unit::INCH:
+ case COLLADAFW::FileInfo::Unit::FOOT:
+ case COLLADAFW::FileInfo::Unit::YARD:
+ return UnitConverter::Imperial;
+ default:
+ return UnitConverter::None;
+ }
}
+float UnitConverter::getLinearMeter()
+{
+ return (float)unit.getLinearUnitMeter();
+}
+
+void UnitConverter::convertVector3(COLLADABU::Math::Vector3 &vec, float *v)
+{
+ v[0] = vec.x;
+ v[1] = vec.y;
+ v[2] = vec.z;
+}
+
// TODO need also for angle conversion, time conversion...
void UnitConverter::dae_matrix_to_mat4_(float out[][4], const COLLADABU::Math::Matrix4& in)
Modified: trunk/blender/source/blender/collada/collada_internal.h
===================================================================
--- trunk/blender/source/blender/collada/collada_internal.h 2010-10-09 14:42:59 UTC (rev 32388)
+++ trunk/blender/source/blender/collada/collada_internal.h 2010-10-09 21:17:14 UTC (rev 32389)
@@ -43,14 +43,22 @@
public:
+ enum UnitSystem {
+ None,
+ Metric,
+ Imperial
+ };
+
// Initialize with Z_UP, since Blender uses right-handed, z-up
UnitConverter();
void read_asset(const COLLADAFW::FileInfo* asset);
- // TODO
- // convert vector vec from COLLADA format to Blender
- void convertVec3(float *vec);
+ void convertVector3(COLLADABU::Math::Vector3 &vec, float *v);
+
+ UnitConverter::UnitSystem isMetricSystem(void);
+
+ float getLinearMeter(void);
// TODO need also for angle conversion, time conversion...
Modified: trunk/blender/source/blender/makesrna/RNA_access.h
===================================================================
--- trunk/blender/source/blender/makesrna/RNA_access.h 2010-10-09 14:42:59 UTC (rev 32388)
+++ trunk/blender/source/blender/makesrna/RNA_access.h 2010-10-09 21:17:14 UTC (rev 32389)
@@ -834,7 +834,11 @@
int RNA_string_length(PointerRNA *ptr, const char *name);
void RNA_string_set(PointerRNA *ptr, const char *name, const char *value);
+/**
+ * Retrieve the named property from PointerRNA.
+ */
PointerRNA RNA_pointer_get(PointerRNA *ptr, const char *name);
+/* Set the property name of PointerRNA ptr to ptr_value */
void RNA_pointer_set(PointerRNA *ptr, const char *name, PointerRNA ptr_value);
void RNA_pointer_add(PointerRNA *ptr, const char *name);
More information about the Bf-blender-cvs
mailing list