forked from bartvdbraak/blender
code cleanup: collada
- when bubble sorting names - dont convert to str::string just to compare strings - use BLI_linklist_index() to check if an item is in the list - quiet some warnings
This commit is contained in:
parent
9f6a66d5f9
commit
664c95d1eb
@ -83,7 +83,7 @@ bool ArmatureExporter::is_skinned_mesh(Object *ob)
|
|||||||
|
|
||||||
void ArmatureExporter::write_bone_URLs(COLLADASW::InstanceController &ins, Object *ob_arm, Bone *bone)
|
void ArmatureExporter::write_bone_URLs(COLLADASW::InstanceController &ins, Object *ob_arm, Bone *bone)
|
||||||
{
|
{
|
||||||
if ( bc_is_root_bone(bone, this->export_settings->deform_bones_only) )
|
if (bc_is_root_bone(bone, this->export_settings->deform_bones_only))
|
||||||
ins.addSkeleton(COLLADABU::URI(COLLADABU::Utils::EMPTY_STRING, get_joint_id(bone, ob_arm)));
|
ins.addSkeleton(COLLADABU::URI(COLLADABU::Utils::EMPTY_STRING, get_joint_id(bone, ob_arm)));
|
||||||
else {
|
else {
|
||||||
for (Bone *child = (Bone *)bone->childbase.first; child; child = child->next) {
|
for (Bone *child = (Bone *)bone->childbase.first; child; child = child->next) {
|
||||||
@ -187,9 +187,12 @@ void ArmatureExporter::add_bone_node(Bone *bone, Object *ob_arm, Scene *sce,
|
|||||||
node.setNodeName(node_name);
|
node.setNodeName(node_name);
|
||||||
node.setNodeSid(node_sid);
|
node.setNodeSid(node_sid);
|
||||||
|
|
||||||
/*if ( bone->childbase.first == NULL || BLI_countlist(&(bone->childbase))>=2)
|
#if 0
|
||||||
|
if (bone->childbase.first == NULL || BLI_countlist(&(bone->childbase)) >= 2) {
|
||||||
add_blender_leaf_bone( bone, ob_arm , node );
|
add_blender_leaf_bone( bone, ob_arm , node );
|
||||||
else{*/
|
}
|
||||||
|
else {
|
||||||
|
#endif
|
||||||
node.start();
|
node.start();
|
||||||
|
|
||||||
add_bone_transform(ob_arm, bone, node);
|
add_bone_transform(ob_arm, bone, node);
|
||||||
|
@ -53,14 +53,14 @@ class SceneExporter;
|
|||||||
// XXX exporter writes wrong data for shared armatures. A separate
|
// XXX exporter writes wrong data for shared armatures. A separate
|
||||||
// controller should be written for each armature-mesh binding how do
|
// controller should be written for each armature-mesh binding how do
|
||||||
// we make controller ids then?
|
// we make controller ids then?
|
||||||
class ArmatureExporter: public COLLADASW::LibraryControllers, protected TransformWriter, protected InstanceWriter
|
class ArmatureExporter : public COLLADASW::LibraryControllers, protected TransformWriter, protected InstanceWriter
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
ArmatureExporter(COLLADASW::StreamWriter *sw, const ExportSettings *export_settings);
|
ArmatureExporter(COLLADASW::StreamWriter *sw, const ExportSettings *export_settings);
|
||||||
|
|
||||||
// write bone nodes
|
// write bone nodes
|
||||||
void add_armature_bones(Object *ob_arm, Scene* sce, SceneExporter* se,
|
void add_armature_bones(Object *ob_arm, Scene *sce, SceneExporter *se,
|
||||||
std::list<Object*>& child_objects);
|
std::list<Object *>& child_objects);
|
||||||
|
|
||||||
bool is_skinned_mesh(Object *ob);
|
bool is_skinned_mesh(Object *ob);
|
||||||
|
|
||||||
@ -76,7 +76,7 @@ private:
|
|||||||
const ExportSettings *export_settings;
|
const ExportSettings *export_settings;
|
||||||
|
|
||||||
#if 0
|
#if 0
|
||||||
std::vector<Object*> written_armatures;
|
std::vector<Object *> written_armatures;
|
||||||
|
|
||||||
bool already_written(Object *ob_arm);
|
bool already_written(Object *ob_arm);
|
||||||
|
|
||||||
@ -89,8 +89,8 @@ private:
|
|||||||
|
|
||||||
// Scene, SceneExporter and the list of child_objects
|
// Scene, SceneExporter and the list of child_objects
|
||||||
// are required for writing bone parented objects
|
// are required for writing bone parented objects
|
||||||
void add_bone_node(Bone *bone, Object *ob_arm, Scene* sce, SceneExporter* se,
|
void add_bone_node(Bone *bone, Object *ob_arm, Scene *sce, SceneExporter *se,
|
||||||
std::list<Object*>& child_objects);
|
std::list<Object *>& child_objects);
|
||||||
|
|
||||||
void add_bone_transform(Object *ob_arm, Bone *bone, COLLADASW::Node& node);
|
void add_bone_transform(Object *ob_arm, Bone *bone, COLLADASW::Node& node);
|
||||||
|
|
||||||
@ -100,10 +100,10 @@ private:
|
|||||||
|
|
||||||
// ob should be of type OB_MESH
|
// ob should be of type OB_MESH
|
||||||
// both args are required
|
// both args are required
|
||||||
void export_controller(Object* ob, Object *ob_arm);
|
void export_controller(Object *ob, Object *ob_arm);
|
||||||
|
|
||||||
void add_joints_element(ListBase *defbase,
|
void add_joints_element(ListBase *defbase,
|
||||||
const std::string& joints_source_id, const std::string& inv_bind_mat_source_id);
|
const std::string& joints_source_id, const std::string& inv_bind_mat_source_id);
|
||||||
|
|
||||||
void add_bind_shape_mat(Object *ob);
|
void add_bind_shape_mat(Object *ob);
|
||||||
|
|
||||||
@ -111,15 +111,15 @@ private:
|
|||||||
|
|
||||||
std::string add_inv_bind_mats_source(Object *ob_arm, ListBase *defbase, const std::string& controller_id);
|
std::string add_inv_bind_mats_source(Object *ob_arm, ListBase *defbase, const std::string& controller_id);
|
||||||
|
|
||||||
Bone *get_bone_from_defgroup(Object *ob_arm, bDeformGroup* def);
|
Bone *get_bone_from_defgroup(Object *ob_arm, bDeformGroup *def);
|
||||||
|
|
||||||
bool is_bone_defgroup(Object *ob_arm, bDeformGroup* def);
|
bool is_bone_defgroup(Object *ob_arm, bDeformGroup *def);
|
||||||
|
|
||||||
std::string add_weights_source(Mesh *me, const std::string& controller_id,
|
std::string add_weights_source(Mesh *me, const std::string& controller_id,
|
||||||
const std::list<float>& weights);
|
const std::list<float>& weights);
|
||||||
|
|
||||||
void add_vertex_weights_element(const std::string& weights_source_id, const std::string& joints_source_id,
|
void add_vertex_weights_element(const std::string& weights_source_id, const std::string& joints_source_id,
|
||||||
const std::list<int>& vcount, const std::list<int>& joints);
|
const std::list<int>& vcount, const std::list<int>& joints);
|
||||||
|
|
||||||
void write_bone_URLs(COLLADASW::InstanceController &ins, Object *ob_arm, Bone *bone);
|
void write_bone_URLs(COLLADASW::InstanceController &ins, Object *ob_arm, Bone *bone);
|
||||||
};
|
};
|
||||||
|
@ -386,7 +386,7 @@ Object *DocumentImporter::create_instance_node(Object *source_ob, COLLADAFW::Nod
|
|||||||
Object *new_child = NULL;
|
Object *new_child = NULL;
|
||||||
if (inodes.getCount()) { // \todo loop through instance nodes
|
if (inodes.getCount()) { // \todo loop through instance nodes
|
||||||
const COLLADAFW::UniqueId& id = inodes[0]->getInstanciatedObjectId();
|
const COLLADAFW::UniqueId& id = inodes[0]->getInstanciatedObjectId();
|
||||||
fprintf(stderr, "Doing %d child nodes\n", node_map.count(id));
|
fprintf(stderr, "Doing %d child nodes\n", (int)node_map.count(id));
|
||||||
new_child = create_instance_node(object_map.find(id)->second, node_map[id], child_node, sce, is_library_node);
|
new_child = create_instance_node(object_map.find(id)->second, node_map[id], child_node, sce, is_library_node);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
|
@ -31,19 +31,18 @@ extern "C" {
|
|||||||
#ifndef __EXPORTSETTINGS_H__
|
#ifndef __EXPORTSETTINGS_H__
|
||||||
#define __EXPORTSETTINGS_H__
|
#define __EXPORTSETTINGS_H__
|
||||||
|
|
||||||
struct ExportSettings
|
struct ExportSettings {
|
||||||
{
|
public:
|
||||||
public:
|
bool apply_modifiers;
|
||||||
bool apply_modifiers;
|
bool selected;
|
||||||
bool selected;
|
bool include_children;
|
||||||
bool include_children;
|
bool include_armatures;
|
||||||
bool include_armatures;
|
bool deform_bones_only;
|
||||||
bool deform_bones_only;
|
bool use_object_instantiation;
|
||||||
bool use_object_instantiation;
|
bool sort_by_name;
|
||||||
bool sort_by_name;
|
bool second_life;
|
||||||
bool second_life;
|
char *filepath;
|
||||||
char *filepath;
|
LinkNode *export_set;
|
||||||
LinkNode *export_set;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -49,20 +49,19 @@ int collada_import(bContext *C, const char *filepath)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int collada_export(
|
int collada_export(Scene *sce,
|
||||||
Scene *sce,
|
const char *filepath,
|
||||||
const char *filepath,
|
|
||||||
|
|
||||||
int apply_modifiers,
|
int apply_modifiers,
|
||||||
|
|
||||||
int selected,
|
int selected,
|
||||||
int include_children,
|
int include_children,
|
||||||
int include_armatures,
|
int include_armatures,
|
||||||
int deform_bones_only,
|
int deform_bones_only,
|
||||||
|
|
||||||
int use_object_instantiation,
|
int use_object_instantiation,
|
||||||
int sort_by_name,
|
int sort_by_name,
|
||||||
int second_life)
|
int second_life)
|
||||||
{
|
{
|
||||||
ExportSettings export_settings;
|
ExportSettings export_settings;
|
||||||
|
|
||||||
|
@ -33,23 +33,22 @@ struct Scene;
|
|||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
extern "C" {
|
extern "C" {
|
||||||
#endif
|
#endif
|
||||||
/*
|
/*
|
||||||
* both return 1 on success, 0 on error
|
* both return 1 on success, 0 on error
|
||||||
*/
|
*/
|
||||||
int collada_import(bContext *C, const char *filepath);
|
int collada_import(bContext *C, const char *filepath);
|
||||||
int collada_export(
|
int collada_export(Scene *sce,
|
||||||
Scene *sce,
|
const char *filepath,
|
||||||
const char *filepath,
|
int apply_modifiers,
|
||||||
int apply_modifiers,
|
|
||||||
|
|
||||||
int selected,
|
int selected,
|
||||||
int include_children,
|
int include_children,
|
||||||
int include_armatures,
|
int include_armatures,
|
||||||
int deform_bones_only,
|
int deform_bones_only,
|
||||||
|
|
||||||
int use_object_instantiation,
|
int use_object_instantiation,
|
||||||
int sort_by_name,
|
int sort_by_name,
|
||||||
int second_life);
|
int second_life);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -193,30 +193,19 @@ bool bc_is_base_node(LinkNode *export_set, Object *ob)
|
|||||||
|
|
||||||
bool bc_is_in_Export_set(LinkNode *export_set, Object *ob)
|
bool bc_is_in_Export_set(LinkNode *export_set, Object *ob)
|
||||||
{
|
{
|
||||||
LinkNode *node = export_set;
|
return (BLI_linklist_index(export_set, ob) != -1);
|
||||||
|
|
||||||
while (node) {
|
|
||||||
Object *element = (Object *)node->link;
|
|
||||||
|
|
||||||
if (element == ob)
|
|
||||||
return true;
|
|
||||||
|
|
||||||
node= node->next;
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
bool bc_has_object_type(LinkNode *export_set, short obtype)
|
bool bc_has_object_type(LinkNode *export_set, short obtype)
|
||||||
{
|
{
|
||||||
LinkNode *node = export_set;
|
LinkNode *node;
|
||||||
|
|
||||||
while (node) {
|
for (node = export_set; node; node = node->next) {
|
||||||
Object *ob = (Object *)node->link;
|
Object *ob = (Object *)node->link;
|
||||||
|
/* XXX - why is this checking for ob->data? - we could be looking for empties */
|
||||||
if (ob->type == obtype && ob->data) {
|
if (ob->type == obtype && ob->data) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
node= node->next;
|
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@ -236,19 +225,16 @@ void bc_bubble_sort_by_Object_name(LinkNode *export_set)
|
|||||||
{
|
{
|
||||||
bool sorted = false;
|
bool sorted = false;
|
||||||
LinkNode *node;
|
LinkNode *node;
|
||||||
for(node=export_set; node->next && !sorted; node=node->next) {
|
for (node = export_set; node->next && !sorted; node = node->next) {
|
||||||
|
|
||||||
sorted = true;
|
sorted = true;
|
||||||
|
|
||||||
LinkNode *current;
|
LinkNode *current;
|
||||||
for (current=export_set; current->next; current = current->next) {
|
for (current = export_set; current->next; current = current->next) {
|
||||||
Object *a = (Object *)current->link;
|
Object *a = (Object *)current->link;
|
||||||
Object *b = (Object *)current->next->link;
|
Object *b = (Object *)current->next->link;
|
||||||
|
|
||||||
std::string str_a (a->id.name);
|
if (strcmp(a->id.name, b->id.name) > 0) {
|
||||||
std::string str_b (b->id.name);
|
|
||||||
|
|
||||||
if (str_a.compare(str_b) > 0) {
|
|
||||||
current->link = b;
|
current->link = b;
|
||||||
current->next->link = a;
|
current->next->link = a;
|
||||||
sorted = false;
|
sorted = false;
|
||||||
@ -264,7 +250,7 @@ void bc_bubble_sort_by_Object_name(LinkNode *export_set)
|
|||||||
* are root bones.
|
* are root bones.
|
||||||
*/
|
*/
|
||||||
bool bc_is_root_bone(Bone *aBone, bool deform_bones_only) {
|
bool bc_is_root_bone(Bone *aBone, bool deform_bones_only) {
|
||||||
if(deform_bones_only) {
|
if (deform_bones_only) {
|
||||||
Bone *root = NULL;
|
Bone *root = NULL;
|
||||||
Bone *bone = aBone;
|
Bone *bone = aBone;
|
||||||
while (bone) {
|
while (bone) {
|
||||||
@ -272,7 +258,7 @@ bool bc_is_root_bone(Bone *aBone, bool deform_bones_only) {
|
|||||||
root = bone;
|
root = bone;
|
||||||
bone = bone->parent;
|
bone = bone->parent;
|
||||||
}
|
}
|
||||||
return aBone==root;
|
return (aBone == root);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
return !(aBone->parent);
|
return !(aBone->parent);
|
||||||
|
@ -51,11 +51,11 @@ extern "C" {
|
|||||||
|
|
||||||
#include "ExportSettings.h"
|
#include "ExportSettings.h"
|
||||||
|
|
||||||
typedef std::map<COLLADAFW::TextureMapId, std::vector<MTex*> > TexIndexTextureArrayMap;
|
typedef std::map<COLLADAFW::TextureMapId, std::vector<MTex *> > TexIndexTextureArrayMap;
|
||||||
|
|
||||||
extern float bc_get_float_value(const COLLADAFW::FloatOrDoubleArray& array, unsigned int index);
|
extern float bc_get_float_value(const COLLADAFW::FloatOrDoubleArray& array, unsigned int index);
|
||||||
extern int bc_test_parent_loop(Object *par, Object *ob);
|
extern int bc_test_parent_loop(Object *par, Object *ob);
|
||||||
extern int bc_set_parent(Object *ob, Object *par, bContext *C, bool is_parent_space=true);
|
extern int bc_set_parent(Object *ob, Object *par, bContext *C, bool is_parent_space = true);
|
||||||
extern Object *bc_add_object(Scene *scene, int type, const char *name);
|
extern Object *bc_add_object(Scene *scene, int type, const char *name);
|
||||||
extern Mesh *bc_to_mesh_apply_modifiers(Scene *scene, Object *ob);
|
extern Mesh *bc_to_mesh_apply_modifiers(Scene *scene, Object *ob);
|
||||||
|
|
||||||
|
@ -2199,9 +2199,9 @@ static int wm_collada_export_exec(bContext *C, wmOperator *op)
|
|||||||
selected,
|
selected,
|
||||||
include_children,
|
include_children,
|
||||||
include_armatures,
|
include_armatures,
|
||||||
deform_bones_only,
|
deform_bones_only,
|
||||||
use_object_instantiation,
|
use_object_instantiation,
|
||||||
sort_by_name,
|
sort_by_name,
|
||||||
second_life)) {
|
second_life)) {
|
||||||
return OPERATOR_FINISHED;
|
return OPERATOR_FINISHED;
|
||||||
}
|
}
|
||||||
@ -2213,8 +2213,6 @@ static int wm_collada_export_exec(bContext *C, wmOperator *op)
|
|||||||
|
|
||||||
void uiCollada_exportSettings(uiLayout *layout, PointerRNA *imfptr)
|
void uiCollada_exportSettings(uiLayout *layout, PointerRNA *imfptr)
|
||||||
{
|
{
|
||||||
ID *id = imfptr->id.data;
|
|
||||||
|
|
||||||
uiLayout *box, *row;
|
uiLayout *box, *row;
|
||||||
|
|
||||||
// Export Options:
|
// Export Options:
|
||||||
@ -2253,7 +2251,7 @@ void uiCollada_exportSettings(uiLayout *layout, PointerRNA *imfptr)
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void wm_collada_export_draw(bContext *C, wmOperator *op)
|
static void wm_collada_export_draw(bContext *UNUSED(C), wmOperator *op)
|
||||||
{
|
{
|
||||||
PointerRNA ptr;
|
PointerRNA ptr;
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user