collada exporter using soft limits if they exist (thanks to Kei Okada)
This commit is contained in:
parent
48bf8cff23
commit
c463e9e6e0
|
@ -77,10 +77,12 @@ public:
|
||||||
ResourceIOStream(const resource_retriever::MemoryResource& res)
|
ResourceIOStream(const resource_retriever::MemoryResource& res)
|
||||||
: res_(res)
|
: res_(res)
|
||||||
, pos_(res.data.get())
|
, pos_(res.data.get())
|
||||||
{}
|
{
|
||||||
|
}
|
||||||
|
|
||||||
~ResourceIOStream()
|
~ResourceIOStream()
|
||||||
{}
|
{
|
||||||
|
}
|
||||||
|
|
||||||
size_t Read(void* buffer, size_t size, size_t count)
|
size_t Read(void* buffer, size_t size, size_t count)
|
||||||
{
|
{
|
||||||
|
@ -96,7 +98,9 @@ public:
|
||||||
return to_read;
|
return to_read;
|
||||||
}
|
}
|
||||||
|
|
||||||
size_t Write( const void* buffer, size_t size, size_t count) { ROS_BREAK(); return 0; }
|
size_t Write( const void* buffer, size_t size, size_t count) {
|
||||||
|
ROS_BREAK(); return 0;
|
||||||
|
}
|
||||||
|
|
||||||
aiReturn Seek( size_t offset, aiOrigin origin)
|
aiReturn Seek( size_t offset, aiOrigin origin)
|
||||||
{
|
{
|
||||||
|
@ -135,7 +139,8 @@ public:
|
||||||
return res_.size;
|
return res_.size;
|
||||||
}
|
}
|
||||||
|
|
||||||
void Flush() {}
|
void Flush() {
|
||||||
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
resource_retriever::MemoryResource res_;
|
resource_retriever::MemoryResource res_;
|
||||||
|
@ -195,7 +200,9 @@ public:
|
||||||
return new ResourceIOStream(res);
|
return new ResourceIOStream(res);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Close(Assimp::IOStream* stream) { delete stream; }
|
void Close(Assimp::IOStream* stream) {
|
||||||
|
delete stream;
|
||||||
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
mutable resource_retriever::Retriever retriever_;
|
mutable resource_retriever::Retriever retriever_;
|
||||||
|
@ -229,7 +236,8 @@ private:
|
||||||
struct axis_output
|
struct axis_output
|
||||||
{
|
{
|
||||||
//axis_output(const string& sid, KinBody::JointConstPtr pjoint, int iaxis) : sid(sid), pjoint(pjoint), iaxis(iaxis) {}
|
//axis_output(const string& sid, KinBody::JointConstPtr pjoint, int iaxis) : sid(sid), pjoint(pjoint), iaxis(iaxis) {}
|
||||||
axis_output() : iaxis(0) {}
|
axis_output() : iaxis(0) {
|
||||||
|
}
|
||||||
string sid, nodesid;
|
string sid, nodesid;
|
||||||
boost::shared_ptr<const urdf::Joint> pjoint;
|
boost::shared_ptr<const urdf::Joint> pjoint;
|
||||||
int iaxis;
|
int iaxis;
|
||||||
|
@ -242,7 +250,8 @@ private:
|
||||||
|
|
||||||
struct axis_sids
|
struct axis_sids
|
||||||
{
|
{
|
||||||
axis_sids(const string& axissid, const string& valuesid, const string& jointnodesid) : axissid(axissid), valuesid(valuesid), jointnodesid(jointnodesid) {}
|
axis_sids(const string& axissid, const string& valuesid, const string& jointnodesid) : axissid(axissid), valuesid(valuesid), jointnodesid(jointnodesid) {
|
||||||
|
}
|
||||||
string axissid, valuesid, jointnodesid;
|
string axissid, valuesid, jointnodesid;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -270,7 +279,8 @@ public:
|
||||||
_collada->setDatabase(NULL);
|
_collada->setDatabase(NULL);
|
||||||
_importer.SetIOHandler(new ResourceIOSystem());
|
_importer.SetIOHandler(new ResourceIOSystem());
|
||||||
}
|
}
|
||||||
virtual ~ColladaWriter() {}
|
virtual ~ColladaWriter() {
|
||||||
|
}
|
||||||
|
|
||||||
boost::shared_ptr<DAE> convert()
|
boost::shared_ptr<DAE> convert()
|
||||||
{
|
{
|
||||||
|
@ -350,8 +360,12 @@ public:
|
||||||
}
|
}
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
virtual void handleError(daeString msg) { throw ColladaUrdfException(msg); }
|
virtual void handleError(daeString msg) {
|
||||||
virtual void handleWarning(daeString msg) { std::cerr << "COLLADA DOM warning: " << msg << std::endl; }
|
throw ColladaUrdfException(msg);
|
||||||
|
}
|
||||||
|
virtual void handleWarning(daeString msg) {
|
||||||
|
std::cerr << "COLLADA DOM warning: " << msg << std::endl;
|
||||||
|
}
|
||||||
|
|
||||||
void _CreateScene()
|
void _CreateScene()
|
||||||
{
|
{
|
||||||
|
@ -440,6 +454,10 @@ protected:
|
||||||
flower = pjoint->limits->lower;
|
flower = pjoint->limits->lower;
|
||||||
fupper = pjoint->limits->upper;
|
fupper = pjoint->limits->upper;
|
||||||
}
|
}
|
||||||
|
if( !!pjoint->safety ) {
|
||||||
|
flower = pjoint->safety->soft_lower_limit;
|
||||||
|
fupper = pjoint->safety->soft_upper_limit;
|
||||||
|
}
|
||||||
if( flower == fupper ) {
|
if( flower == fupper ) {
|
||||||
bactive = false;
|
bactive = false;
|
||||||
}
|
}
|
||||||
|
@ -544,11 +562,14 @@ protected:
|
||||||
if( !!it->pjoint->limits ) {
|
if( !!it->pjoint->limits ) {
|
||||||
flower = it->pjoint->limits->lower;
|
flower = it->pjoint->limits->lower;
|
||||||
fupper = it->pjoint->limits->upper;
|
fupper = it->pjoint->limits->upper;
|
||||||
|
}
|
||||||
|
if( !!it->pjoint->safety ) {
|
||||||
|
flower = it->pjoint->safety->soft_lower_limit;
|
||||||
|
fupper = it->pjoint->safety->soft_upper_limit;
|
||||||
|
}
|
||||||
if( flower > 0 || fupper < 0 ) {
|
if( flower > 0 || fupper < 0 ) {
|
||||||
value = 0.5*(flower+fupper);
|
value = 0.5*(flower+fupper);
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
domKinematics_newparamRef pvalueparam = daeSafeCast<domKinematics_newparam>(_ikmout->ikm->add(COLLADA_ELEMENT_NEWPARAM));
|
domKinematics_newparamRef pvalueparam = daeSafeCast<domKinematics_newparam>(_ikmout->ikm->add(COLLADA_ELEMENT_NEWPARAM));
|
||||||
pvalueparam->setSid((sid+string("_value")).c_str());
|
pvalueparam->setSid((sid+string("_value")).c_str());
|
||||||
daeSafeCast<domKinematics_newparam::domFloat>(pvalueparam->add(COLLADA_ELEMENT_FLOAT))->setValue(value);
|
daeSafeCast<domKinematics_newparam::domFloat>(pvalueparam->add(COLLADA_ELEMENT_FLOAT))->setValue(value);
|
||||||
|
@ -605,7 +626,11 @@ protected:
|
||||||
pdomjoint->setSid(jointid.c_str() );
|
pdomjoint->setSid(jointid.c_str() );
|
||||||
pdomjoint->setName(pjoint->name.c_str());
|
pdomjoint->setName(pjoint->name.c_str());
|
||||||
domAxis_constraintRef axis;
|
domAxis_constraintRef axis;
|
||||||
if( !!pjoint->limits ) {
|
if( !!pjoint->safety ) {
|
||||||
|
lmin=pjoint->safety->soft_lower_limit;
|
||||||
|
lmax=pjoint->safety->soft_upper_limit;
|
||||||
|
}
|
||||||
|
else if( !!pjoint->limits ) {
|
||||||
lmin=pjoint->limits->lower;
|
lmin=pjoint->limits->lower;
|
||||||
lmax=pjoint->limits->upper;
|
lmax=pjoint->limits->upper;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue