diff --git a/src/mobility/model/hierarchical-mobility-model.cc b/src/mobility/model/hierarchical-mobility-model.cc index 6be31ec04..de75b2d6b 100644 --- a/src/mobility/model/hierarchical-mobility-model.cc +++ b/src/mobility/model/hierarchical-mobility-model.cc @@ -117,7 +117,7 @@ HierarchicalMobilityModel::DoGetPosition (void) const return m_child->GetPosition (); } Vector parentPosition = m_parent->GetPosition (); - Vector childPosition = m_child->GetPosition (); + Vector childPosition = m_child->GetPositionWithReference (parentPosition); return Vector (parentPosition.x + childPosition.x, parentPosition.y + childPosition.y, parentPosition.z + childPosition.z); diff --git a/src/mobility/model/mobility-model.cc b/src/mobility/model/mobility-model.cc index 022f3d77f..e683f5a17 100644 --- a/src/mobility/model/mobility-model.cc +++ b/src/mobility/model/mobility-model.cc @@ -65,6 +65,19 @@ MobilityModel::GetPosition (void) const { return DoGetPosition (); } +Vector +MobilityModel::GetPositionWithReference (const Vector& referencePosition) const +{ + return DoGetPositionWithReference (referencePosition); +} + +// Default implementation ignores referencePosition +Vector +MobilityModel::DoGetPositionWithReference (const Vector& referencePosition) const +{ + return DoGetPosition (); +} + Vector MobilityModel::GetVelocity (void) const { diff --git a/src/mobility/model/mobility-model.h b/src/mobility/model/mobility-model.h index 6333d1af8..60d288f9c 100644 --- a/src/mobility/model/mobility-model.h +++ b/src/mobility/model/mobility-model.h @@ -51,6 +51,18 @@ public: * \return the current position */ Vector GetPosition (void) const; + /** + * This method may be used if the position returned may depend on some + * reference position provided. For example, in a hierarchical mobility + * model that is buildings-aware, the child mobility model may not be able + * to determine if it is inside or outside of a building unless it knows + * the parent position. + * + * \param referencePosition reference position to consider + * \return the current position based on the provided referencePosition + * \sa ns3::MobilityModel::DoGetPositionWithReference + */ + Vector GetPositionWithReference (const Vector &referencePosition) const; /** * \param position the position to set. */ @@ -100,6 +112,14 @@ private: * implement this method. */ virtual Vector DoGetPosition (void) const = 0; + /** + * \param referencePosition the reference position to consider + * \return the current position. + * + * Unless subclasses override, this method will disregard the reference + * position and return "DoGetPosition (void)". + */ + virtual Vector DoGetPositionWithReference (const Vector& referencePosition) const; /** * \param position the position to set. *