{"id":248,"date":"2010-05-11T11:15:23","date_gmt":"2010-05-11T09:15:23","guid":{"rendered":"http:\/\/www.calvert.ch\/maurice\/?p=248"},"modified":"2012-08-13T22:19:47","modified_gmt":"2012-08-13T20:19:47","slug":"graphvizio-a-graphviz-addin-for-visio","status":"publish","type":"post","link":"https:\/\/www.calvert.ch\/maurice\/2010\/05\/11\/graphvizio-a-graphviz-addin-for-visio\/","title":{"rendered":"GraphVizio &#8211; A Graphviz addin for Visio"},"content":{"rendered":"<p>In the process of analysing a client&#8217;s existing database, I used Visio&#8217;s reverse-engineering tool. It works well, but the resulting diagram was an incomprehensible bowl of spaghetti. Visio does have a &#8220;Layout shapes&#8221; command, which appears to work by moving shapes with repulsive forces and the result is, not surprisingly, repulsive.<\/p>\n<p>What I wanted was a tool which would unravel the spaghetti, so that I could get a grasp of the relationships, edit and revise them and layout again in an iterative process.<br \/>\nSearching for a solution, I found\u00a0three layout programs, none of which have a Visio interface:<\/p>\n<ol>\n<li><a href=\"http:\/\/research.microsoft.com\/en-us\/projects\/msagl\/\">Microsoft Automatic Graph Layout (MSAGL), formerly known as GLEE<\/a> The first version, GLEE, is free whereas MSAGL costs between 99 USD and 279 USD depending on where you buy it.<\/li>\n<li><a href=\"http:\/\/www.tomsawyer.com\/products\/index.php\">Tom Sawyer Layout<\/a> is also a graph layout library, the price isn&#8217;t disclosed on their website.<\/li>\n<li><a href=\"http:\/\/www.graphviz.org\/\">Graphviz<\/a> from AT&amp;T research labs, reputed to have the most sophisticated layout algorithms, is free.<\/li>\n<\/ol>\n<p>Given that the best quality was to be found in the free library, I made the obvious choice.<br \/>\nIt took me over a year and some 11&#8217;000 lines of VB to get Visio and Graphviz to co-exist; marrying a Unix-style command-line program with a WYSIWYG interface, both with quirks to numerous to mention, was far more challenging than I initially thought.<br \/>\nThe result, unimaginatively called GraphVizio, is available <a href=\"http:\/\/www.calvert.ch\/graphvizio\/\">here<\/a>, I hope you&#8217;ll find it useful.<\/p>\n<p><strong>25 May 2011 Version 1.1.5 released. Improvements:<\/strong><\/p>\n<p>Full support for 64-bit Windows and Visio<\/p>\n<p>No longer makes a Visio document &#8216;dirty&#8217; when opening<\/p>\n<p>Full support for UTF8. This DOT file:<\/p>\n<pre>graph\u00a0 RootGraph {\r\n\u00a0 node [width=\"7.08661417322834\", height=\"0.787401574803148\", color=\"#000000\", fillcolor=\"#FFFFFF\", fontname=Calibri, fontsize=24, style=filled, shape=box];\r\n\u00a0 edge [color=\"#000000\", fillcolor=\"#FFFFFF\"];\r\n\r\n\u00a0 \"English: Hello, my name is Maurice\\n(and blame Google if the translations are bad)\" [pos=\"283.704566929134,620.932913385827\", label=\"English: Hello, my name is Maurice\\n(and blame Google if the translations are bad)\"];\r\n\u00a0 \"Russian: \u0417\u0434\u0440\u0430\u0432\u0441\u0442\u0432\u0443\u0439\u0442\u0435, \u043c\u0435\u043d\u044f \u0437\u043e\u0432\u0443\u0442 \u041c\u043e\u0440\u0438\u0441\" [pos=\"283.704566929134,526.932913385827\", label=\"Russian: \u0417\u0434\u0440\u0430\u0432\u0441\u0442\u0432\u0443\u0439\u0442\u0435, \u043c\u0435\u043d\u044f \u0437\u043e\u0432\u0443\u0442 \u041c\u043e\u0440\u0438\u0441\"];\r\n\u00a0 \"\u0645\u0631\u062d\u0628\u0627\u060c \u0627\u0633\u0645\u064a \u0645\u0648\u0631\u064a\u0633 : Arabic\" [pos=\"283.704566929134,432.932913385827\", label=\"\u0645\u0631\u062d\u0628\u0627\u060c \u0627\u0633\u0645\u064a \u0645\u0648\u0631\u064a\u0633 : Arabic\"];\r\n\u00a0 \"Chinese: \u4f60\u597d\uff0c\u6211\u53eb\u83ab\u91cc\u65af\" [pos=\"283.704566929134,338.932913385827\", label=\"Chinese: \u4f60\u597d\uff0c\u6211\u53eb\u83ab\u91cc\u65af\"];\r\n\u00a0 \"\u05e9\u05dc\u05d5\u05dd, \u05e9\u05de\u05d9 \u05d4\u05d5\u05d0 \u05de\u05d5\u05e8\u05d9\u05e1 : Hebrew\" [pos=\"283.704566929134,244.932913385827\", label=\"\u05e9\u05dc\u05d5\u05dd, \u05e9\u05de\u05d9 \u05d4\u05d5\u05d0 \u05de\u05d5\u05e8\u05d9\u05e1 : Hebrew\"];\r\n\u00a0 \"Japanese: \u3053\u3093\u306b\u3061\u306f\u3001\u79c1\u306e\u540d\u524d\u306f\u30e2\u30fc\u30ea\u30b9\u3067\u3059\" [pos=\"283.704566929134,150.932913385826\", label=\"Japanese: \u3053\u3093\u306b\u3061\u306f\u3001\u79c1\u306e\u540d\u524d\u306f\u30e2\u30fc\u30ea\u30b9\u3067\u3059\"];\r\n\u00a0 \"Thai: \u0e2a\u0e27\u0e31\u0e2a\u0e14\u0e35\u0e0a\u0e37\u0e48\u0e2d\u0e02\u0e2d\u0e07\u0e09\u0e31\u0e19\u0e04\u0e37\u0e2d Maurice\" [pos=\"283.704566929134,56.9329133858268\", label=\"Thai: \u0e2a\u0e27\u0e31\u0e2a\u0e14\u0e35\u0e0a\u0e37\u0e48\u0e2d\u0e02\u0e2d\u0e07\u0e09\u0e31\u0e19\u0e04\u0e37\u0e2d Maurice\"];\r\n\r\n\u00a0 \"English: Hello, my name is Maurice\\n(and blame Google if the translations are bad)\"--\"Russian: \u0417\u0434\u0440\u0430\u0432\u0441\u0442\u0432\u0443\u0439\u0442\u0435, \u043c\u0435\u043d\u044f \u0437\u043e\u0432\u0443\u0442 \u041c\u043e\u0440\u0438\u0441\";\r\n\u00a0 \"Russian: \u0417\u0434\u0440\u0430\u0432\u0441\u0442\u0432\u0443\u0439\u0442\u0435, \u043c\u0435\u043d\u044f \u0437\u043e\u0432\u0443\u0442 \u041c\u043e\u0440\u0438\u0441\"--\"\u0645\u0631\u062d\u0628\u0627\u060c \u0627\u0633\u0645\u064a \u0645\u0648\u0631\u064a\u0633 : Arabic\";\r\n\u00a0 \"\u0645\u0631\u062d\u0628\u0627\u060c \u0627\u0633\u0645\u064a \u0645\u0648\u0631\u064a\u0633 : Arabic\"--\"Chinese: \u4f60\u597d\uff0c\u6211\u53eb\u83ab\u91cc\u65af\";\r\n\u00a0 \"Chinese: \u4f60\u597d\uff0c\u6211\u53eb\u83ab\u91cc\u65af\"--\"\u05e9\u05dc\u05d5\u05dd, \u05e9\u05de\u05d9 \u05d4\u05d5\u05d0 \u05de\u05d5\u05e8\u05d9\u05e1 : Hebrew\";\r\n\u00a0 \"\u05e9\u05dc\u05d5\u05dd, \u05e9\u05de\u05d9 \u05d4\u05d5\u05d0 \u05de\u05d5\u05e8\u05d9\u05e1 : Hebrew\"--\"Japanese: \u3053\u3093\u306b\u3061\u306f\u3001\u79c1\u306e\u540d\u524d\u306f\u30e2\u30fc\u30ea\u30b9\u3067\u3059\";\r\n\u00a0 \"Japanese: \u3053\u3093\u306b\u3061\u306f\u3001\u79c1\u306e\u540d\u524d\u306f\u30e2\u30fc\u30ea\u30b9\u3067\u3059\"--\"Thai: \u0e2a\u0e27\u0e31\u0e2a\u0e14\u0e35\u0e0a\u0e37\u0e48\u0e2d\u0e02\u0e2d\u0e07\u0e09\u0e31\u0e19\u0e04\u0e37\u0e2d Maurice\";\r\n}<\/pre>\n<p>produces this Visio diagram:<\/p>\n<div id=\"attachment_462\" style=\"width: 627px\" class=\"wp-caption alignnone\"><a href=\"http:\/\/www.calvert.ch\/maurice\/files\/2010\/05\/GraphvizioUTF82.jpg\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-462\" class=\"size-full wp-image-462\" title=\"Graphvizio UTF8\" src=\"http:\/\/www.calvert.ch\/maurice\/files\/2010\/05\/GraphvizioUTF82.jpg\" alt=\"\" width=\"617\" height=\"843\" srcset=\"https:\/\/www.calvert.ch\/maurice\/files\/2010\/05\/GraphvizioUTF82.jpg 617w, https:\/\/www.calvert.ch\/maurice\/files\/2010\/05\/GraphvizioUTF82-219x300.jpg 219w\" sizes=\"auto, (max-width: 617px) 100vw, 617px\" \/><\/a><\/p>\n<p id=\"caption-attachment-462\" class=\"wp-caption-text\">Graphvizio UTF8<\/p>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>In the process of analysing a client&#8217;s existing database, I used Visio&#8217;s reverse-engineering tool. It works well, but the resulting diagram was an incomprehensible bowl of spaghetti. Visio does have a &#8220;Layout shapes&#8221; command, which appears to work by moving <a href='https:\/\/www.calvert.ch\/maurice\/2010\/05\/11\/graphvizio-a-graphviz-addin-for-visio\/' class='excerpt-more'>[&#8230;]<\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[4,47,11],"tags":[15,24,29,40],"class_list":["post-248","post","type-post","status-publish","format-standard","hentry","category-graphics","category-programming","category-technology","tag-addin","tag-graphic","tag-layout","tag-visio","category-4-id","category-47-id","category-11-id","post-seq-1","post-parity-odd","meta-position-corners","fix"],"_links":{"self":[{"href":"https:\/\/www.calvert.ch\/maurice\/wp-json\/wp\/v2\/posts\/248","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.calvert.ch\/maurice\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.calvert.ch\/maurice\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.calvert.ch\/maurice\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.calvert.ch\/maurice\/wp-json\/wp\/v2\/comments?post=248"}],"version-history":[{"count":3,"href":"https:\/\/www.calvert.ch\/maurice\/wp-json\/wp\/v2\/posts\/248\/revisions"}],"predecessor-version":[{"id":606,"href":"https:\/\/www.calvert.ch\/maurice\/wp-json\/wp\/v2\/posts\/248\/revisions\/606"}],"wp:attachment":[{"href":"https:\/\/www.calvert.ch\/maurice\/wp-json\/wp\/v2\/media?parent=248"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.calvert.ch\/maurice\/wp-json\/wp\/v2\/categories?post=248"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.calvert.ch\/maurice\/wp-json\/wp\/v2\/tags?post=248"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}