[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [54970] trunk/blender: Collada: Added support for ngon export/ import and added triangulate option to export
Gaia Clary
gaia.clary at machinimatrix.org
Sat Mar 2 16:58:13 CET 2013
Revision: 54970
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=54970
Author: gaiaclary
Date: 2013-03-02 15:58:13 +0000 (Sat, 02 Mar 2013)
Log Message:
-----------
Collada: Added support for ngon export/import and added triangulate option to export
Modified Paths:
--------------
trunk/blender/release/scripts/presets/operator/wm.collada_export/second_life_rigged.py
trunk/blender/release/scripts/presets/operator/wm.collada_export/second_life_static.py
trunk/blender/source/blender/collada/CMakeLists.txt
trunk/blender/source/blender/collada/ControllerExporter.cpp
trunk/blender/source/blender/collada/DocumentImporter.cpp
trunk/blender/source/blender/collada/ExportSettings.h
trunk/blender/source/blender/collada/GeometryExporter.cpp
trunk/blender/source/blender/collada/GeometryExporter.h
trunk/blender/source/blender/collada/MeshImporter.cpp
trunk/blender/source/blender/collada/MeshImporter.h
trunk/blender/source/blender/collada/collada.cpp
trunk/blender/source/blender/collada/collada.h
trunk/blender/source/blender/collada/collada_utils.cpp
trunk/blender/source/blender/collada/collada_utils.h
trunk/blender/source/blender/editors/io/io_collada.c
Modified: trunk/blender/release/scripts/presets/operator/wm.collada_export/second_life_rigged.py
===================================================================
--- trunk/blender/release/scripts/presets/operator/wm.collada_export/second_life_rigged.py 2013-03-02 15:34:47 UTC (rev 54969)
+++ trunk/blender/release/scripts/presets/operator/wm.collada_export/second_life_rigged.py 2013-03-02 15:58:13 UTC (rev 54970)
@@ -12,7 +12,7 @@
op.active_uv_only = True
op.include_uv_textures = True
op.use_texture_copies = True
-op.use_ngons = False
+op.triangulate = True
op.use_object_instantiation = False
op.sort_by_name = True
op.second_life = True
Modified: trunk/blender/release/scripts/presets/operator/wm.collada_export/second_life_static.py
===================================================================
--- trunk/blender/release/scripts/presets/operator/wm.collada_export/second_life_static.py 2013-03-02 15:34:47 UTC (rev 54969)
+++ trunk/blender/release/scripts/presets/operator/wm.collada_export/second_life_static.py 2013-03-02 15:58:13 UTC (rev 54970)
@@ -12,7 +12,7 @@
op.active_uv_only = True
op.include_uv_textures = True
op.use_texture_copies = True
-op.use_ngons = False
+op.triangulate = True
op.use_object_instantiation = False
op.sort_by_name = True
op.second_life = False
Modified: trunk/blender/source/blender/collada/CMakeLists.txt
===================================================================
--- trunk/blender/source/blender/collada/CMakeLists.txt 2013-03-02 15:34:47 UTC (rev 54969)
+++ trunk/blender/source/blender/collada/CMakeLists.txt 2013-03-02 15:58:13 UTC (rev 54970)
@@ -38,7 +38,7 @@
../../../intern/guardedalloc
../ikplugin
../../../intern/iksolver/extern
-
+ ../bmesh
)
set(INC_SYS
Modified: trunk/blender/source/blender/collada/ControllerExporter.cpp
===================================================================
--- trunk/blender/source/blender/collada/ControllerExporter.cpp 2013-03-02 15:34:47 UTC (rev 54969)
+++ trunk/blender/source/blender/collada/ControllerExporter.cpp 2013-03-02 15:58:13 UTC (rev 54970)
@@ -201,13 +201,12 @@
bool use_instantiation = this->export_settings->use_object_instantiation;
Mesh *me;
- if (this->export_settings->apply_modifiers)
- me = bc_to_mesh_apply_modifiers(scene, ob, this->export_settings->export_mesh_type);
- else
- me = (Mesh *)ob->data;
+ me = bc_get_mesh_copy(scene,
+ ob,
+ this->export_settings->export_mesh_type,
+ this->export_settings->apply_modifiers,
+ this->export_settings->triangulate);
- BKE_mesh_tessface_ensure(me);
-
if (!me->dvert) return;
std::string controller_name = id_name(ob_arm);
@@ -292,10 +291,8 @@
add_joints_element(&ob->defbase, joints_source_id, inv_bind_mat_source_id);
add_vertex_weights_element(weights_source_id, joints_source_id, vcounts, joints);
- if (this->export_settings->apply_modifiers)
- {
- BKE_libblock_free_us(&(G.main->mesh), me);
- }
+ BKE_libblock_free_us(&(G.main->mesh), me);
+
closeSkin();
closeController();
}
@@ -305,13 +302,11 @@
bool use_instantiation = this->export_settings->use_object_instantiation;
Mesh *me;
- if (this->export_settings->apply_modifiers) {
- me = bc_to_mesh_apply_modifiers(scene, ob, this->export_settings->export_mesh_type);
- }
- else {
- me = (Mesh *)ob->data;
- }
- BKE_mesh_tessface_ensure(me);
+ me = bc_get_mesh_copy(scene,
+ ob,
+ this->export_settings->export_mesh_type,
+ this->export_settings->apply_modifiers,
+ this->export_settings->triangulate);
std::string controller_name = id_name(ob) + "-morph";
std::string controller_id = get_controller_id(key, ob);
@@ -332,11 +327,9 @@
COLLADASW::URI(COLLADABU::Utils::EMPTY_STRING, morph_weights_id)));
targets.add();
- if (this->export_settings->apply_modifiers)
- {
- BKE_libblock_free_us(&(G.main->mesh), me);
- }
+ BKE_libblock_free_us(&(G.main->mesh), me);
+
//support for animations
//can also try the base element and param alternative
add_weight_extras(key);
Modified: trunk/blender/source/blender/collada/DocumentImporter.cpp
===================================================================
--- trunk/blender/source/blender/collada/DocumentImporter.cpp 2013-03-02 15:34:47 UTC (rev 54969)
+++ trunk/blender/source/blender/collada/DocumentImporter.cpp 2013-03-02 15:58:13 UTC (rev 54970)
@@ -157,7 +157,8 @@
delete ehandler;
- mesh_importer.bmeshConversion();
+ //XXX No longer needed (geometries are now created as bmesh)
+ //mesh_importer.bmeshConversion();
return true;
}
Modified: trunk/blender/source/blender/collada/ExportSettings.h
===================================================================
--- trunk/blender/source/blender/collada/ExportSettings.h 2013-03-02 15:34:47 UTC (rev 54969)
+++ trunk/blender/source/blender/collada/ExportSettings.h 2013-03-02 15:58:13 UTC (rev 54970)
@@ -45,7 +45,7 @@
bool include_material_textures;
bool use_texture_copies;
- bool use_ngons;
+ bool triangulate;
bool use_object_instantiation;
bool sort_by_name;
bool second_life;
Modified: trunk/blender/source/blender/collada/GeometryExporter.cpp
===================================================================
--- trunk/blender/source/blender/collada/GeometryExporter.cpp 2013-03-02 15:34:47 UTC (rev 54969)
+++ trunk/blender/source/blender/collada/GeometryExporter.cpp 2013-03-02 15:58:13 UTC (rev 54970)
@@ -57,7 +57,6 @@
{
}
-
void GeometryExporter::exportGeom(Scene *sce)
{
openLibrary();
@@ -77,15 +76,12 @@
#endif
bool use_instantiation = this->export_settings->use_object_instantiation;
- bool use_ngons = this->export_settings->use_ngons;
- Mesh *me;
- if (this->export_settings->apply_modifiers) {
- me = bc_to_mesh_apply_modifiers(mScene, ob, this->export_settings->export_mesh_type);
- }
- else {
- me = (Mesh *)ob->data;
- }
- BKE_mesh_tessface_ensure(me);
+ bool triangulate = this->export_settings->triangulate;
+ Mesh *me = bc_get_mesh_copy( mScene,
+ ob,
+ this->export_settings->export_mesh_type,
+ this->export_settings->apply_modifiers,
+ this->export_settings->triangulate);
std::string geom_id = get_geometry_id(ob, use_instantiation);
std::vector<Normal> nor;
@@ -118,12 +114,13 @@
bool has_uvs = (bool)CustomData_has_layer(&me->fdata, CD_MTFACE);
// writes <source> for uv coords if mesh has uv coords
- if (has_uvs)
+ if (has_uvs) {
createTexcoordsSource(geom_id, me);
+ }
- if (has_color)
+ if (has_color) {
createVertexColorSource(geom_id, me);
-
+ }
// <vertices>
COLLADASW::Vertices verts(mSW);
@@ -140,11 +137,11 @@
// XXX slow
if (ob->totcol) {
for (int a = 0; a < ob->totcol; a++) {
- createPolylist(a, use_ngons, has_uvs, has_color, ob, me, geom_id, norind);
+ createPolylist(a, has_uvs, has_color, ob, me, geom_id, norind);
}
}
else {
- createPolylist(0, use_ngons, has_uvs, has_color, ob, me, geom_id, norind);
+ createPolylist(0, has_uvs, has_color, ob, me, geom_id, norind);
}
}
@@ -156,10 +153,6 @@
closeGeometry();
- if (this->export_settings->apply_modifiers) {
- BKE_libblock_free_us(&(G.main->mesh), me);
- }
-
if (this->export_settings->include_shapekeys) {
Key * key = BKE_key_from_object(ob);
if (key) {
@@ -168,16 +161,16 @@
kb = kb->next;
for (; kb; kb = kb->next) {
BKE_key_convert_to_mesh(kb, me);
- export_key_mesh(ob, me, kb, use_ngons);
+ export_key_mesh(ob, me, kb);
}
}
}
-#if 0
- dm->release(dm);
-#endif
+
+ BKE_libblock_free_us(&(G.main->mesh), me);
+
}
-void GeometryExporter::export_key_mesh(Object *ob, Mesh *me, KeyBlock *kb, bool use_ngons)
+void GeometryExporter::export_key_mesh(Object *ob, Mesh *me, KeyBlock *kb)
{
std::string geom_id = get_geometry_id(ob, false) + "_morph_" + translate_id(kb->name);
std::vector<Normal> nor;
@@ -208,11 +201,13 @@
bool has_uvs = (bool)CustomData_has_layer(&me->fdata, CD_MTFACE);
// writes <source> for uv coords if mesh has uv coords
- if (has_uvs)
+ if (has_uvs) {
createTexcoordsSource(geom_id, me);
+ }
- if (has_color)
+ if (has_color) {
createVertexColorSource(geom_id, me);
+ }
// <vertices>
@@ -228,11 +223,11 @@
// XXX slow
if (ob->totcol) {
for (int a = 0; a < ob->totcol; a++) {
- createPolylist(a, use_ngons, has_uvs, has_color, ob, me, geom_id, norind);
+ createPolylist(a, has_uvs, has_color, ob, me, geom_id, norind);
}
}
else {
- createPolylist(0, use_ngons, has_uvs, has_color, ob, me, geom_id, norind);
+ createPolylist(0, has_uvs, has_color, ob, me, geom_id, norind);
}
closeMesh();
@@ -297,9 +292,7 @@
}
// powerful because it handles both cases when there is material and when there's not
-// Call this function when ngons shall be exported unchanged
void GeometryExporter::createPolylist(short material_index,
- bool use_ngons,
bool has_uvs,
bool has_color,
Object *ob,
@@ -308,18 +301,6 @@
std::vector<Face>& norind)
{
- if (!use_ngons) {
- createTriangulatedPolylist(
- material_index,
- has_uvs,
- has_color,
- ob,
- me,
- geom_id,
- norind);
- return;
- }
-
MPoly *mpolys = me->mpoly;
MLoop *mloops = me->mloop;
int totpolys = me->totpoly;
@@ -426,128 +407,7 @@
polylist.finish();
}
-// powerful because it handles both cases when there is material and when there's not
-// Call this function when ngons shall be exported as Tris or Quads
-void GeometryExporter::createTriangulatedPolylist(short material_index,
- bool has_uvs,
- bool has_color,
- Object *ob,
- Mesh *me,
- std::string& geom_id,
- std::vector<Face>& norind)
-{
- MFace *mfaces = me->mface;
- int totfaces = me->totface;
- // <vcount>
- int i;
- int faces_in_polylist = 0;
- std::vector<unsigned long> vcount_list;
-
- // count faces with this material
- for (i = 0; i < totfaces; i++) {
- MFace *f = &mfaces[i];
-
- if (f->mat_nr == material_index) {
- faces_in_polylist++;
- if (f->v4 == 0) {
- vcount_list.push_back(3);
- }
- else {
- vcount_list.push_back(4);
- }
- }
- }
-
- // no faces using this material
- if (faces_in_polylist == 0) {
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-blender-cvs
mailing list