[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [49744] branches/soc-2012-bratwurst/source /blender/collada: Morph controller geometries export.
Sukhitha Jayathilake
pr.jayathilake at gmail.com
Thu Aug 9 22:36:22 CEST 2012
Revision: 49744
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=49744
Author: phabtar
Date: 2012-08-09 20:36:21 +0000 (Thu, 09 Aug 2012)
Log Message:
-----------
Morph controller geometries export.
Export of mesh shape keys for Morph controller targets.
Modified Paths:
--------------
branches/soc-2012-bratwurst/source/blender/collada/ArmatureExporter.cpp
branches/soc-2012-bratwurst/source/blender/collada/GeometryExporter.cpp
branches/soc-2012-bratwurst/source/blender/collada/GeometryExporter.h
Modified: branches/soc-2012-bratwurst/source/blender/collada/ArmatureExporter.cpp
===================================================================
--- branches/soc-2012-bratwurst/source/blender/collada/ArmatureExporter.cpp 2012-08-09 19:59:36 UTC (rev 49743)
+++ branches/soc-2012-bratwurst/source/blender/collada/ArmatureExporter.cpp 2012-08-09 20:36:21 UTC (rev 49744)
@@ -110,7 +110,7 @@
for (bone = (Bone *)arm->bonebase.first; bone; bone = bone->next) {
write_bone_URLs(ins, ob_arm, bone);
}
-
+
InstanceWriter::add_material_bindings(ins.getBindMaterial(), ob, this->export_settings->active_uv_only);
ins.add();
Modified: branches/soc-2012-bratwurst/source/blender/collada/GeometryExporter.cpp
===================================================================
--- branches/soc-2012-bratwurst/source/blender/collada/GeometryExporter.cpp 2012-08-09 19:59:36 UTC (rev 49743)
+++ branches/soc-2012-bratwurst/source/blender/collada/GeometryExporter.cpp 2012-08-09 20:36:21 UTC (rev 49744)
@@ -68,9 +68,8 @@
}
void GeometryExporter::operator()(Object *ob)
-{
+{
// XXX don't use DerivedMesh, Mesh instead?
-
#if 0
DerivedMesh *dm = mesh_get_derived_final(mScene, ob, CD_MASK_BAREMESH);
#endif
@@ -155,14 +154,88 @@
{
BKE_libblock_free_us(&(G.main->mesh), me);
}
-
-
+
+ //shape keys
+ Key * key = ob_get_key(ob);
+ if(key){
+ KeyBlock * kb;
+ for (kb = (KeyBlock*)key->block.first; kb; kb = kb->next) {
+ //have to skip the basis mesh
+ key_to_mesh(kb, me);
+ export_key_mesh(ob, me, kb);
+ }
+ }
#if 0
dm->release(dm);
#endif
}
+void GeometryExporter::export_key_mesh(Object *ob, Mesh *me, KeyBlock *kb){
+ std::string geom_id = get_geometry_id(ob, 0) + "_morph_" + kb->name;
+ std::vector<Normal> nor;
+ std::vector<Face> norind;
+
+ if (exportedGeometry.find(geom_id) != exportedGeometry.end())
+ {
+ return;
+ }
+ std::string geom_name = id_name(ob) + "_morph_" + kb->name;
+
+ exportedGeometry.insert(geom_id);
+
+ bool has_color = (bool)CustomData_has_layer(&me->fdata, CD_MCOL);
+
+ create_normals(nor, norind, me);
+
+ // openMesh(geoId, geoName, meshId)
+ openMesh(geom_id, geom_name);
+
+ // writes <source> for vertex coords
+ createVertsSource(geom_id, me);
+
+ // writes <source> for normal coords
+ createNormalsSource(geom_id, me, nor);
+
+ bool has_uvs = (bool)CustomData_has_layer(&me->fdata, CD_MTFACE);
+
+ // writes <source> for uv coords if mesh has uv coords
+ if (has_uvs)
+ createTexcoordsSource(geom_id, me);
+
+ if (has_color)
+ createVertexColorSource(geom_id, me);
+
+ // <vertices>
+
+ COLLADASW::Vertices verts(mSW);
+ verts.setId(getIdBySemantics(geom_id, COLLADASW::InputSemantic::VERTEX));
+ COLLADASW::InputList &input_list = verts.getInputList();
+ COLLADASW::Input input(COLLADASW::InputSemantic::POSITION, getUrlBySemantics(geom_id, COLLADASW::InputSemantic::POSITION));
+ input_list.push_back(input);
+ verts.add();
+
+ createLooseEdgeList(ob, me, geom_id, norind);
+
+ // XXX slow
+ if (ob->totcol) {
+ for (int a = 0; a < ob->totcol; a++) {
+ createPolylist(a, has_uvs, has_color, ob, me, geom_id, norind);
+ }
+ }
+ else {
+ createPolylist(0, has_uvs, has_color, ob, me, geom_id, norind);
+ }
+
+ closeMesh();
+
+ if (me->flag & ME_TWOSIDED) {
+ mSW->appendTextBlock("<extra><technique profile=\"MAYA\"><double_sided>1</double_sided></technique></extra>");
+ }
+
+ closeGeometry();
+}
+
void GeometryExporter::createLooseEdgeList(Object *ob,
Mesh *me,
std::string& geom_id,
Modified: branches/soc-2012-bratwurst/source/blender/collada/GeometryExporter.h
===================================================================
--- branches/soc-2012-bratwurst/source/blender/collada/GeometryExporter.h 2012-08-09 19:59:36 UTC (rev 49743)
+++ branches/soc-2012-bratwurst/source/blender/collada/GeometryExporter.h 2012-08-09 20:36:21 UTC (rev 49744)
@@ -39,9 +39,12 @@
#include "DNA_mesh_types.h"
#include "DNA_object_types.h"
#include "DNA_scene_types.h"
+#include "DNA_key_types.h"
#include "ExportSettings.h"
+#include "BKE_key.h"
+
extern Object *bc_get_highest_selected_ancestor_or_self(Object *ob);
// TODO: optimize UV sets by making indexed list with duplicates removed
@@ -100,6 +103,8 @@
COLLADASW::URI getUrlBySemantics(std::string geom_id, COLLADASW::InputSemantic::Semantics type, std::string other_suffix = "");
COLLADASW::URI makeUrl(std::string id);
+
+ void export_key_mesh(Object *ob, Mesh *me, KeyBlock *kb);
/* int getTriCount(MFace *faces, int totface);*/
private:
More information about the Bf-blender-cvs
mailing list