[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [20949] branches/soc-2009-chingachgook/ source/blender/collada/DocumentExporter.cpp: I rewrote the code which creates <library_materials>, <library_effects> and
Chingiz Dyussenov
chingiz.ds at gmail.com
Wed Jun 17 07:45:39 CEST 2009
Revision: 20949
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=20949
Author: chingachgook
Date: 2009-06-17 07:45:39 +0200 (Wed, 17 Jun 2009)
Log Message:
-----------
I rewrote the code which creates <library_materials>, <library_effects> and
<instance_material>. I used here more suitable Blender's api. Now exporter
exports all materials in the scene. Todo: if material has textures export them.
Modified Paths:
--------------
branches/soc-2009-chingachgook/source/blender/collada/DocumentExporter.cpp
Modified: branches/soc-2009-chingachgook/source/blender/collada/DocumentExporter.cpp
===================================================================
--- branches/soc-2009-chingachgook/source/blender/collada/DocumentExporter.cpp 2009-06-17 03:41:16 UTC (rev 20948)
+++ branches/soc-2009-chingachgook/source/blender/collada/DocumentExporter.cpp 2009-06-17 05:45:39 UTC (rev 20949)
@@ -3,6 +3,7 @@
#include "DNA_meshdata_types.h"
#include "DNA_mesh_types.h"
#include "DNA_image_types.h"
+#include "DNA_material_types.h"
extern "C"
{
#include "BKE_DerivedMesh.h"
@@ -10,6 +11,7 @@
#include "BKE_scene.h"
#include "BKE_global.h"
#include "BKE_main.h"
+#include "BKE_material.h"
#include "DocumentExporter.h"
@@ -61,7 +63,7 @@
// only meshes
if (ob->type == OB_MESH && ob->data) {
-
+
DerivedMesh *dm = mesh_get_derived_final(sce, ob, CD_MASK_BAREMESH);
MVert *mverts = dm->getVertArray(dm);
MFace *mfaces = dm->getFaceArray(dm);
@@ -384,19 +386,31 @@
Object *ob = base->object;
if (ob->type == OB_MESH && ob->data) {
+
COLLADASW::Node node(mSW);
node.start();
node.addTranslate(ob->loc[0], ob->loc[1], ob->loc[2]);
// node.addRotate(); // XXX no conversion needed?
node.addScale(ob->size[0], ob->size[1], ob->size[2]);
-
+
COLLADASW::InstanceGeometry instGeom(mSW);
std::string ob_name(ob->id.name);
instGeom.setUrl(COLLADASW::URI(COLLADABU::Utils::EMPTY_STRING,
ob_name));
+
+ for(int a = 0; a < ob->totcol; a++)
+ {
+ Material *ma = give_current_material(ob, a+1);
+
+ COLLADASW::BindMaterial& bm = instGeom.getBindMaterial();
+ COLLADASW::InstanceMaterialList& iml = bm.getInstanceMaterialList();
+ std::string matid = std::string(ma->id.name);
+ COLLADASW::InstanceMaterial im("material-symbol", COLLADASW::URI(COLLADABU::Utils::EMPTY_STRING, matid));
+ iml.push_back(im);
+ }
//XXX hardcoded
- Image *image = (Image*)G.main->image.first;
+ /*Image *image = (Image*)G.main->image.first;
COLLADASW::BindMaterial& bm = instGeom.getBindMaterial();
COLLADASW::InstanceMaterialList& iml = bm.getInstanceMaterialList();
@@ -405,7 +419,7 @@
COLLADASW::InstanceMaterial im("material-symbol", COLLADASW::URI(COLLADABU::Utils::EMPTY_STRING, matid));
COLLADASW::BindVertexInput bvi("myUVs", "TEXCOORD", 1);
im.push_back(bvi);
- iml.push_back(im);
+ iml.push_back(im);*/
//
instGeom.add();
@@ -458,8 +472,19 @@
{
openLibrary();
-
- Image *image = (Image*)G.main->image.first;
+ Material *ma = (Material*)G.main->mat.first;
+ while(ma) {
+
+ openEffect(std::string(ma->id.name) + "-effect");
+ COLLADASW::EffectProfile ep(mSW);
+ ep.setProfileType(COLLADASW::EffectProfile::COMMON);
+ //open <profile_common>
+ ep.openProfile();
+
+
+ ep.closeProfile();
+ ma = (Material*) ma->id.next;
+ /* Image *image = (Image*)G.main->image.first;
while(image) {
openEffect(std::string(image->id.name) + "-effect");
@@ -491,6 +516,7 @@
ep.closeProfile();
closeEffect();
image = (Image*)image->id.next;
+ }*/
}
closeLibrary();
@@ -506,17 +532,34 @@
MaterialsExporter(COLLADASW::StreamWriter *sw): COLLADASW::LibraryMaterials(sw){}
void exportMaterials(Scene *sce)
{
+
openLibrary();
- Image *image = (Image*)G.main->image.first;
- while(image) {
+
+ Material *ma = (Material*)G.main->mat.first;
+
+ while(ma) {
- openMaterial(std::string(image->id.name) + "-material");
- std::string efid = std::string(image->id.name) + "-effect";
+ openMaterial(std::string(ma->id.name));
+ std::string efid = std::string(ma->id.name) + "-effect";
addInstanceEffect(COLLADASW::URI(COLLADABU::Utils::EMPTY_STRING, efid));
closeMaterial();
- image = (Image*)image->id.next;
+
+ ma = (Material*) ma->id.next;
}
closeLibrary();
+
+ /*
+ Image *image = (Image*)G.main->image.first;
+ while(image) {
+
+ openMaterial(std::string(image->id.name) + "-material");
+ std::string efid = std::string(image->id.name) + "-effect";
+ addInstanceEffect(COLLADASW::URI(COLLADABU::Utils::EMPTY_STRING, efid));
+ closeMaterial();
+ image = (Image*)image->id.next;
+ }
+ */
+
}
More information about the Bf-blender-cvs
mailing list