visualizer+mobility: A specialized version of GetObject (GetMobilityModel) is now implemented in MobilityModel class. This method is now used by the visualizer to obtain mobility interface.

This trick is necessary in order to use in python mobility models that
are not explicitly exported (or impossible to export) to python bindings
generation.
This commit is contained in:
Alexander Afanasyev
2012-07-26 17:58:42 -07:00
committed by Spyridon Mastorakis
parent c958f20411
commit 77adeafeed
2 changed files with 19 additions and 7 deletions
+10
View File
@@ -75,6 +75,9 @@ public:
*/
int64_t AssignStreams (int64_t stream);
static inline Ptr<MobilityModel>
GetMobilityModel (Ptr<Object> node);
protected:
/**
* Must be invoked by subclasses when the course of the
@@ -118,6 +121,13 @@ private:
};
Ptr<MobilityModel>
MobilityModel::GetMobilityModel (Ptr<Object> node)
{
return node->GetObject<MobilityModel> ();
}
} // namespace ns3
#endif /* MOBILITY_MODEL_H */
+9 -7
View File
@@ -173,7 +173,7 @@ class Node(PyVizObject):
self.emit("query-extra-tooltip-info", lines)
mob = ns3_node.GetObject(ns.mobility.MobilityModel.GetTypeId())
mob = ns.mobility.MobilityModel.GetMobilityModel (ns3_node)
if mob is not None:
lines.append(' <b>Mobility Model</b>: %s' % mob.GetInstanceTypeId().GetName())
@@ -308,7 +308,7 @@ class Node(PyVizObject):
def has_mobility(self):
if self._has_mobility is None:
node = ns.network.NodeList.GetNode(self.node_index)
mobility = node.GetObject(ns.mobility.MobilityModel.GetTypeId())
mobility = ns.mobility.MobilityModel.GetMobilityModel (node)
self._has_mobility = (mobility is not None)
return self._has_mobility
@@ -761,7 +761,9 @@ class Visualizer(gobject.GObject):
node_name = "Node %i" % nodeI
node_view = self.get_node(nodeI)
mobility = node.GetObject(ns.mobility.MobilityModel.GetTypeId())
mobility = ns.mobility.MobilityModel.GetMobilityModel (node)
# print "Mobility type: " + mobility.GetInstanceTypeId().GetName()
if mobility is not None:
node_view.set_color("red")
pos = mobility.GetPosition()
@@ -822,7 +824,7 @@ class Visualizer(gobject.GObject):
print "scanning topology: all done."
self.emit("topology-scanned")
def get_node(self, index):
try:
return self.nodes[index]
@@ -868,7 +870,7 @@ class Visualizer(gobject.GObject):
for node in self.nodes.itervalues():
if node.has_mobility:
ns3_node = ns.network.NodeList.GetNode(node.node_index)
mobility = ns3_node.GetObject(ns.mobility.MobilityModel.GetTypeId())
mobility = ns.mobility.MobilityModel.GetMobilityModel (ns3_node)
if mobility is not None:
pos = mobility.GetPosition()
x, y = transform_point_simulation_to_canvas(pos.x, pos.y)
@@ -1221,7 +1223,7 @@ class Visualizer(gobject.GObject):
self.simulation.lock.acquire()
try:
ns3_node = ns.network.NodeList.GetNode(node.node_index)
mob = ns3_node.GetObject(ns.mobility.MobilityModel.GetTypeId())
mob = ns.mobility.MobilityModel.GetMobilityModel (ns3_node)
if mob is None:
return
if self.node_drag_state is not None:
@@ -1238,7 +1240,7 @@ class Visualizer(gobject.GObject):
self.simulation.lock.acquire()
try:
ns3_node = ns.network.NodeList.GetNode(node.node_index)
mob = ns3_node.GetObject(ns.mobility.MobilityModel.GetTypeId())
mob = ns.mobility.MobilityModel.GetMobilityModel (ns3_node)
if mob is None:
return False
if self.node_drag_state is None: