2121
2222from ros2controlcli .api import add_controller_mgr_parsers
2323
24- import pygraphviz as pgz
24+ import graphviz
2525
2626
2727def make_controller_node (
@@ -73,7 +73,7 @@ def make_controller_node(
7373 "controller_start_" + output_controller , output_controller , deliminator
7474 )
7575
76- s .add_node (controller_name , label = f"{ controller_name } |{{{{{ inputs_str } }}|{{{ outputs_str } }}}}" )
76+ s .node (controller_name , f"{ controller_name } |{{{{{ inputs_str } }}|{{{ outputs_str } }}}}" )
7777
7878
7979def make_command_node (s , command_interfaces ):
@@ -87,9 +87,7 @@ def make_command_node(s, command_interfaces):
8787 "command_end_" + command_interface , command_interface , deliminator
8888 )
8989
90- s .add_node (
91- "command_interfaces" , label = "{}|{{{{{}}}}}" .format ("command_interfaces" , outputs_str )
92- )
90+ s .node ("command_interfaces" , "{}|{{{{{}}}}}" .format ("command_interfaces" , outputs_str ))
9391
9492
9593def make_state_node (s , state_interfaces ):
@@ -103,7 +101,7 @@ def make_state_node(s, state_interfaces):
103101 "state_start_" + state_interface , state_interface , deliminator
104102 )
105103
106- s .add_node ("state_interfaces" , label = "{}|{{{{{}}}}}" .format ("state_interfaces" , inputs_str ))
104+ s .node ("state_interfaces" , "{}|{{{{{}}}}}" .format ("state_interfaces" , inputs_str ))
107105
108106
109107def show_graph (
@@ -115,9 +113,11 @@ def show_graph(
115113 state_interfaces ,
116114 visualize ,
117115):
118- s = pgz .AGraph (name = "g" , strict = False , directed = True , rankdir = "LR" )
119- s .node_attr ["shape" ] = "record"
120- s .node_attr ["style" ] = "rounded"
116+ s = graphviz .Digraph (
117+ "g" ,
118+ filename = "/tmp/controller_diagram.gv" ,
119+ node_attr = {"shape" : "record" , "style" : "rounded" },
120+ )
121121 port_map = dict ()
122122 # get all controller names
123123 controller_names = set ()
@@ -142,27 +142,28 @@ def show_graph(
142142
143143 for controller_name in controller_names :
144144 for connection in output_chain_connections [controller_name ]:
145- s .add_edge (
145+ s .edge (
146146 "{}:{}" .format (controller_name , "controller_start_" + connection ),
147147 "{}:{}" .format (
148148 port_map ["controller_end_" + connection ], "controller_end_" + connection
149149 ),
150150 )
151151 for state_connection in state_connections [controller_name ]:
152- s .add_edge (
152+ s .edge (
153153 "{}:{}" .format ("state_interfaces" , "state_start_" + state_connection ),
154154 "{}:{}" .format (controller_name , "state_end_" + state_connection ),
155155 )
156156 for command_connection in command_connections [controller_name ]:
157- s .add_edge (
157+ s .edge (
158158 "{}:{}" .format (controller_name , "command_start_" + command_connection ),
159159 "{}:{}" .format ("command_interfaces" , "command_end_" + command_connection ),
160160 )
161161
162- s .graph_attr .update (ranksep = "2" )
163- s .layout (prog = "dot" )
162+ s .attr (ranksep = "2" )
163+ s .attr (rankdir = "LR" )
164+ s .render (view = False )
164165 if visualize :
165- s .draw ( "/tmp/controller_diagram.gv.pdf" , format = "pdf" )
166+ s .view ( )
166167
167168
168169def parse_response (list_controllers_response , list_hardware_response , visualize = True ):
@@ -205,5 +206,5 @@ def main(self, *, args):
205206 with NodeStrategy (args ).direct_node as node :
206207 list_controllers_response = list_controllers (node , args .controller_manager )
207208 list_hardware_response = list_hardware_interfaces (node , args .controller_manager )
208- parse_response (list_controllers_response , list_hardware_response )
209+ parse_response (list_controllers_response , list_hardware_response , visualize = False )
209210 return 0
0 commit comments