Skip to content

Commit

Permalink
Add flags to environment info
Browse files Browse the repository at this point in the history
  • Loading branch information
LLipter committed Jan 15, 2024
1 parent e550bf7 commit 0f7a314
Show file tree
Hide file tree
Showing 7 changed files with 220 additions and 1 deletion.
14 changes: 14 additions & 0 deletions include/openrave/environment.h
Original file line number Diff line number Diff line change
Expand Up @@ -888,6 +888,20 @@ class OPENRAVE_API EnvironmentBase : public boost::enable_shared_from_this<Envir
UnitInfo _unitInfo; ///< environment unitInfo
int64_t _lastModifiedAtUS = 0; ///< us, linux epoch, last modified time of the environment when it was originally loaded from the environment.
int64_t _revisionId = 0; ///< the webstack revision for this loaded kinbody

enum EnvironmentInfoField {
EIF_UnitInfo = (1 << 0), // _unitInfo field
};
inline bool IsModifiedField(EnvironmentInfoField field) const {
return !!(_modifiedFields & field);
}
/// \brief adds modified fields
inline void AddModifiedField(EnvironmentInfoField field) {
_modifiedFields |= field;
}

uint32_t _modifiedFields = 0xffffffff; ///< a bitmap of EnvironmentInfoField, for supported fields, indicating which fields are touched.
bool _isPartial = true; ///< true if this info contains partial information.
};
typedef boost::shared_ptr<EnvironmentBaseInfo> EnvironmentBaseInfoPtr;
typedef boost::shared_ptr<EnvironmentBaseInfo const> EnvironmentBaseInfoConstPtr;
Expand Down
36 changes: 36 additions & 0 deletions include/openrave/kinbody.h
Original file line number Diff line number Diff line change
Expand Up @@ -644,6 +644,7 @@ class OPENRAVE_API KinBody : public InterfaceBase
GIF_PositiveCropContainerMargins = (1 << 7), // _vPositiveCropContainerMargins field
GIF_NegativeCropContainerEmptyMargins = (1 << 8), // _vNegativeCropContainerEmptyMargins field
GIF_PositiveCropContainerEmptyMargins = (1 << 9), // _vPositiveCropContainerEmptyMargins field
GIF_Name = (1 << 10), // _name field
};

inline const Transform& GetTransform() const {
Expand Down Expand Up @@ -1663,6 +1664,40 @@ class OPENRAVE_API KinBody : public InterfaceBase
JointControlInfo_ExternalDevicePtr _jci_externaldevice; ///< valid if controlMode==JCM_ExternalDevice
/// \brief deserializes a readable from rReadable and stores it into _mReadableInterfaces[id]
void _DeserializeReadableInterface(const std::string& id, const rapidjson::Value& rReadable, dReal fUnitScale);

enum JointInfoField : uint32_t
{
JIF_Limit = (1 << 0), // _vlowerlimit field
JIF_Maxvel = (1 << 1), // _vmaxvel field
JIF_Maxaccel = (1 << 2), // _vmaxaccel field
JIF_Maxjerk = (1 << 3), // _vmaxjerk field
JIF_Hardmaxvel = (1 << 4), // _vhardmaxvel field
JIF_Hardmaxaccel = (1 << 5), // _vhardmaxaccel field
JIF_Hardmaxjerk = (1 << 6), // _vhardmaxjerk field
JIF_Maxtorque = (1 << 7), // _vmaxtorque field
JIF_Maxinertia = (1 << 8), // _vmaxinertia field
JIF_Offsets = (1 << 9), // _voffsets field
JIF_Resolution = (1 << 10), // _vresolution field
JIF_Weights = (1 << 11), // _vweights field
JIF_MapFloatParameters = (1 << 12), // _mapFloatParameters field
JIF_MapIntParameters = (1 << 13), // _mapIntParameters field
JIF_MapStringParameters = (1 << 14), // _mapStringParameters field
};


/// \brief adds modified fields
inline void AddModifiedField(JointInfoField field) {
_modifiedFields |= field;
}

inline bool IsModifiedField(JointInfoField field) const {
return !!(_modifiedFields & field);
}
private:
uint32_t _modifiedFields = 0xffffffff; ///< a bitmap of JointInfoField, for supported fields, indicating which fields are modified.
bool _isPartial = false;

friend class Joint;
};

typedef boost::shared_ptr<JointInfo> JointInfoPtr;
Expand Down Expand Up @@ -2419,6 +2454,7 @@ class OPENRAVE_API KinBody : public InterfaceBase
KBIF_DOFValues = (1 << 1), // _dofValues field
KBIF_URI = (1 << 2), // _uri field
KBIF_ReferenceURI = (1 << 3), // _referenceUri field
KBIF_Name = (1 << 3), // _name field
};
inline bool IsModifiedField(KinBodyInfoField field) const {
return !!(_modifiedFields & field);
Expand Down
3 changes: 3 additions & 0 deletions src/libopenrave-core/environment-core.h
Original file line number Diff line number Diff line change
Expand Up @@ -2770,6 +2770,9 @@ class Environment : public EnvironmentBase
if (_callbackOnModify != nullptr) {
EnvironmentBaseInfoPtr diffInfo = boost::make_shared<EnvironmentBaseInfo>();
diffInfo->_unitInfo = _unitInfo;
diffInfo->_isPartial = true;
diffInfo->_modifiedFields = 0;
diffInfo->AddModifiedField(EnvironmentBaseInfo::EIF_UnitInfo);
_callbackOnModify(diffInfo);
}
}
Expand Down
5 changes: 4 additions & 1 deletion src/libopenrave/kinbody.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -142,7 +142,7 @@ void KinBody::KinBodyInfo::SerializeJSON(rapidjson::Value& rKinBodyInfo, rapidjs
if( !_id.empty() ) {
orjson::SetJsonValueByKey(rKinBodyInfo, "id", _id, allocator);
}
if( !_name.empty() ) {
if( !_name.empty() && (!_isPartial || IsModifiedField(KinBody::KinBodyInfo::KBIF_Name)) ) {
orjson::SetJsonValueByKey(rKinBodyInfo, "name", _name, allocator);
}
if (!_referenceUri.empty()) {
Expand Down Expand Up @@ -883,6 +883,9 @@ void KinBody::SetName(const std::string& newname)
KinBody::KinBodyInfoPtr diffInfo = boost::make_shared<KinBody::KinBodyInfo>();
diffInfo->_id = _id;
diffInfo->_name = _name;
diffInfo->_isPartial = true;
diffInfo->_modifiedFields = 0;
diffInfo->AddModifiedField(KinBody::KinBodyInfo::KBIF_Name);
_callbackOnModify(diffInfo);
}
}
Expand Down
11 changes: 11 additions & 0 deletions src/libopenrave/kinbodygeometry.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1856,6 +1856,7 @@ bool KinBody::Geometry::SetVisible(bool visible)
diffInfo->_id = _info._id;
diffInfo->_bVisible = _info._bVisible;
diffInfo->_isPartial = true;
diffInfo->_modifiedFields = 0;
diffInfo->AddModifiedField(KinBody::GeometryInfo::GIF_Visible);
_callbackOnModify(diffInfo);
}
Expand All @@ -1873,6 +1874,7 @@ void KinBody::Geometry::SetTransparency(float f)
diffInfo->_id = _info._id;
diffInfo->_fTransparency = _info._fTransparency;
diffInfo->_isPartial = true;
diffInfo->_modifiedFields = 0;
diffInfo->AddModifiedField(KinBody::GeometryInfo::GIF_Transparency);
_callbackOnModify(diffInfo);
}
Expand All @@ -1888,6 +1890,7 @@ void KinBody::Geometry::SetDiffuseColor(const RaveVector<float>& color)
diffInfo->_id = _info._id;
diffInfo->_vDiffuseColor = _info._vDiffuseColor;
diffInfo->_isPartial = true;
diffInfo->_modifiedFields = 0;
diffInfo->AddModifiedField(KinBody::GeometryInfo::GIF_DiffuseColor);
_callbackOnModify(diffInfo);
}
Expand All @@ -1903,6 +1906,7 @@ void KinBody::Geometry::SetAmbientColor(const RaveVector<float>& color)
diffInfo->_id = _info._id;
diffInfo->_vAmbientColor = _info._vAmbientColor;
diffInfo->_isPartial = true;
diffInfo->_modifiedFields = 0;
diffInfo->AddModifiedField(KinBody::GeometryInfo::GIF_AmbientColor);
_callbackOnModify(diffInfo);
}
Expand All @@ -1918,6 +1922,7 @@ void KinBody::Geometry::SetNegativeCropContainerMargins(const Vector& negativeCr
diffInfo->_id = _info._id;
diffInfo->_vNegativeCropContainerMargins = _info._vNegativeCropContainerMargins;
diffInfo->_isPartial = true;
diffInfo->_modifiedFields = 0;
diffInfo->AddModifiedField(KinBody::GeometryInfo::GIF_NegativeCropContainerMargins);
_callbackOnModify(diffInfo);
}
Expand All @@ -1933,6 +1938,7 @@ void KinBody::Geometry::SetPositiveCropContainerMargins(const Vector& positiveCr
diffInfo->_id = _info._id;
diffInfo->_vPositiveCropContainerMargins = _info._vPositiveCropContainerMargins;
diffInfo->_isPartial = true;
diffInfo->_modifiedFields = 0;
diffInfo->AddModifiedField(KinBody::GeometryInfo::GIF_PositiveCropContainerMargins);
_callbackOnModify(diffInfo);
}
Expand All @@ -1948,6 +1954,7 @@ void KinBody::Geometry::SetNegativeCropContainerEmptyMargins(const Vector& negat
diffInfo->_id = _info._id;
diffInfo->_vNegativeCropContainerEmptyMargins = _info._vNegativeCropContainerEmptyMargins;
diffInfo->_isPartial = true;
diffInfo->_modifiedFields = 0;
diffInfo->AddModifiedField(KinBody::GeometryInfo::GIF_NegativeCropContainerEmptyMargins);
_callbackOnModify(diffInfo);
}
Expand All @@ -1963,6 +1970,7 @@ void KinBody::Geometry::SetPositiveCropContainerEmptyMargins(const Vector& posit
diffInfo->_id = _info._id;
diffInfo->_vPositiveCropContainerEmptyMargins = _info._vPositiveCropContainerEmptyMargins;
diffInfo->_isPartial = true;
diffInfo->_modifiedFields = 0;
diffInfo->AddModifiedField(KinBody::GeometryInfo::GIF_PositiveCropContainerEmptyMargins);
_callbackOnModify(diffInfo);
}
Expand Down Expand Up @@ -2091,6 +2099,9 @@ void KinBody::Geometry::SetName(const std::string& name)
KinBody::GeometryInfoPtr diffInfo = boost::make_shared<KinBody::GeometryInfo>();
diffInfo->_id = _info._id;
diffInfo->_name = name;
diffInfo->_isPartial = true;
diffInfo->_modifiedFields = 0;
diffInfo->AddModifiedField(KinBody::GeometryInfo::GIF_Name);
_callbackOnModify(diffInfo);
}
}
Expand Down
Loading

0 comments on commit 0f7a314

Please sign in to comment.