diff --git a/depsgraph_debug.py b/depsgraph_debug.py index 4405eb8e3b67d08bc06db162744fcaf36edc7001..7c8784a290d26ce4e9ce54139e7a91d1bf39bdae 100644 --- a/depsgraph_debug.py +++ b/depsgraph_debug.py @@ -211,6 +211,35 @@ class SCENE_OT_depsgraph_stats_image(Operator, return True +class SCENE_OT_depsgraph_relations_svg(Operator, + SCENE_OT_depsgraph_image_common): + bl_idname = "scene.depsgraph_relations_svg" + bl_label = "Depsgraph as SVG in Browser" + bl_description = "Create an SVG image from the dependency graph and open it in the web browser" + + def performSave(self, context, depsgraph): + import os + import subprocess + import webbrowser + # Create temporary file. + dot_filepath = self._createTempFile(suffix=".dot") + # Save dependency graph to graphviz file. + depsgraph.debug_relations_graphviz(dot_filepath) + # Convert graphviz to SVG image. + svg_filepath = os.path.join(bpy.app.tempdir, "depsgraph.svg") + command = ("dot", "-Tsvg", dot_filepath, "-o", svg_filepath) + try: + subprocess.run(command) + webbrowser.open_new_tab("file://" + os.path.abspath(svg_filepath)) + except: + self.report({'ERROR'}, "Error invoking dot command") + return False + finally: + # Remove graphviz file. + os.remove(dot_filepath) + return True + + ############################################################################### # Interface. @@ -224,6 +253,7 @@ class SCENE_PT_depsgraph_common: row = col.row() row.operator("scene.depsgraph_relations_graphviz") row.operator("scene.depsgraph_relations_image") + col.operator("scene.depsgraph_relations_svg") # Everything related on evaluaiton statistics. col.label(text="Statistics:") row = col.row() @@ -264,6 +294,7 @@ class RENDERLAYER_PT_depsgraph(bpy.types.Panel, SCENE_PT_depsgraph_common): def register(): bpy.utils.register_class(SCENE_OT_depsgraph_relations_graphviz) bpy.utils.register_class(SCENE_OT_depsgraph_relations_image) + bpy.utils.register_class(SCENE_OT_depsgraph_relations_svg) bpy.utils.register_class(SCENE_OT_depsgraph_stats_gnuplot) bpy.utils.register_class(SCENE_OT_depsgraph_stats_image) bpy.utils.register_class(SCENE_PT_depsgraph) @@ -273,6 +304,7 @@ def register(): def unregister(): bpy.utils.unregister_class(SCENE_OT_depsgraph_relations_graphviz) bpy.utils.unregister_class(SCENE_OT_depsgraph_relations_image) + bpy.utils.unregister_class(SCENE_OT_depsgraph_relations_svg) bpy.utils.unregister_class(SCENE_OT_depsgraph_stats_gnuplot) bpy.utils.unregister_class(SCENE_OT_depsgraph_stats_image) bpy.utils.unregister_class(SCENE_PT_depsgraph)