diff --git a/collada_urdf/src/urdf_to_collada.cpp b/collada_urdf/src/urdf_to_collada.cpp
index a79a5f4..1432b5d 100644
--- a/collada_urdf/src/urdf_to_collada.cpp
+++ b/collada_urdf/src/urdf_to_collada.cpp
@@ -223,10 +223,10 @@ public:
setupPhysics(scene);
addGeometries();
-
addJoints();
addKinematics(scene);
addVisuals(scene);
+ addMaterials();
collada_->writeAll();
@@ -237,9 +237,10 @@ public:
//
domPhysics_scene::domTechnique_commonRef common = daeSafeCast(scene.pscene->createAndPlace(COLLADA_ELEMENT_TECHNIQUE_COMMON));
{
- // 0 0 0
+ // 0 0 0
domTargetable_float3Ref g = daeSafeCast(common->createAndPlace(COLLADA_ELEMENT_GRAVITY));
g->getValue().set3(0.0, 0.0, 0.0);
+ //
}
//
}
@@ -733,8 +734,7 @@ public:
//
}
- void addVisuals(SCENE scene)
- {
+ void addVisuals(SCENE scene) {
//
domNodeRef root_node = daeSafeCast(scene.vscene->createAndPlace(COLLADA_ELEMENT_NODE));
root_node->setId("v1");
@@ -745,6 +745,76 @@ public:
}
}
+ void addMaterials() {
+ urdf::Color ambient, diffuse;
+ ambient.init("0 0 0 0");
+ diffuse.init("1 1 1 0");
+
+ for (map >::const_iterator i = robot_->links_.begin(); i != robot_->links_.end(); i++) {
+ boost::shared_ptr urdf_link = i->second;
+
+ map::const_iterator j = geometry_ids_.find(urdf_link->name);
+ if (j != geometry_ids_.end()) {
+ string geometry_id = j->second;
+ addEffect(geometry_id, ambient, diffuse);
+ }
+ }
+ }
+
+ domEffectRef addEffect(const string& geometry_id, const urdf::Color& color_ambient, const urdf::Color& color_diffuse)
+ {
+ //
+ domEffectRef effect = daeSafeCast(effectsLib_->createAndPlace(COLLADA_ELEMENT_EFFECT));
+ effect->setId((geometry_id + string(".eff")).c_str());
+ {
+ //
+ domProfile_commonRef profile = daeSafeCast(effect->createAndPlace(COLLADA_ELEMENT_PROFILE_COMMON));
+ {
+ //
+ domProfile_common::domTechniqueRef technique = daeSafeCast(profile->createAndPlace(COLLADA_ELEMENT_TECHNIQUE));
+ {
+ //
+ domProfile_common::domTechnique::domPhongRef phong = daeSafeCast(technique->createAndPlace(COLLADA_ELEMENT_PHONG));
+ {
+ //
+ domFx_common_color_or_textureRef ambient = daeSafeCast(phong->createAndPlace(COLLADA_ELEMENT_AMBIENT));
+ {
+ // r g b a
+ domFx_common_color_or_texture::domColorRef ambient_color = daeSafeCast(ambient->createAndPlace(COLLADA_ELEMENT_COLOR));
+ ambient_color->getValue().setCount(4);
+ ambient_color->getValue()[0] = color_ambient.r;
+ ambient_color->getValue()[1] = color_ambient.g;
+ ambient_color->getValue()[2] = color_ambient.b;
+ ambient_color->getValue()[3] = color_ambient.a;
+ //
+ }
+ //
+
+ //
+ domFx_common_color_or_textureRef diffuse = daeSafeCast(phong->createAndPlace(COLLADA_ELEMENT_DIFFUSE));
+ {
+ // r g b a
+ domFx_common_color_or_texture::domColorRef diffuse_color = daeSafeCast(diffuse->createAndPlace(COLLADA_ELEMENT_COLOR));
+ diffuse_color->getValue().setCount(4);
+ diffuse_color->getValue()[0] = color_diffuse.r;
+ diffuse_color->getValue()[1] = color_diffuse.g;
+ diffuse_color->getValue()[2] = color_diffuse.b;
+ diffuse_color->getValue()[3] = color_diffuse.a;
+ //
+ }
+ //
+ }
+ //
+ }
+ //
+ }
+ //
+ }
+ //
+
+ return effect;
+ }
+
void addVisualLink(boost::shared_ptr urdf_link, daeElementRef parent, int& link_num) {
//
domNodeRef node = daeSafeCast(parent->createAndPlace(COLLADA_ELEMENT_NODE));
@@ -773,7 +843,7 @@ public:
map::const_iterator i = geometry_ids_.find(urdf_link->name);
if (i != geometry_ids_.end()) {
domInstance_geometryRef instance_geometry = daeSafeCast(node->createAndPlace(COLLADA_ELEMENT_INSTANCE_GEOMETRY));
- string geometry_id = geometry_ids_[urdf_link->name];
+ string geometry_id = i->second;
string instance_geometry_url = string("#") + geometry_id;
instance_geometry->setUrl(instance_geometry_url.c_str());
{