From 77adeafeeda64f1e736cb629fddbb2126342162b Mon Sep 17 00:00:00 2001 From: Alexander Afanasyev Date: Thu, 26 Jul 2012 17:58:42 -0700 Subject: [PATCH] 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. --- src/mobility/model/mobility-model.h | 10 ++++++++++ src/visualizer/visualizer/core.py | 16 +++++++++------- 2 files changed, 19 insertions(+), 7 deletions(-) diff --git a/src/mobility/model/mobility-model.h b/src/mobility/model/mobility-model.h index deabd31a7..1c7b2433e 100644 --- a/src/mobility/model/mobility-model.h +++ b/src/mobility/model/mobility-model.h @@ -75,6 +75,9 @@ public: */ int64_t AssignStreams (int64_t stream); + static inline Ptr + GetMobilityModel (Ptr node); + protected: /** * Must be invoked by subclasses when the course of the @@ -118,6 +121,13 @@ private: }; +Ptr +MobilityModel::GetMobilityModel (Ptr node) +{ + return node->GetObject (); +} + + } // namespace ns3 #endif /* MOBILITY_MODEL_H */ diff --git a/src/visualizer/visualizer/core.py b/src/visualizer/visualizer/core.py index b9b5e32b4..e882fb4a3 100644 --- a/src/visualizer/visualizer/core.py +++ b/src/visualizer/visualizer/core.py @@ -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(' Mobility Model: %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: