纯Java实现的graphviz
2022/2/23 20:22:18
本文主要是介绍纯Java实现的graphviz,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
纯Java实现Graphviz
在Java中使用Graphviz的方式
使用纯Java使用Graphviz一直是个问题,目前为止的方案有三种:
- Java包装dot命令,调用机器上安装的Graphviz进程
- 类似graphviz-java,使用 V8 javascript执行引擎执行Vizjs
- 把Graphviz的c语言源代码翻译成java版本,类似smetana
第一种方式不够便捷,还需要进行额外的安装;第二种方式的话相对来说好一点,虽然内容比较重;使用第三种方式的项目至今都只能画一个简陋的图形。
使用纯Java从头实现Graphviz
方式
跟人上述三种方式均不同的是,本人打算使用纯Java实现Graphviz,目前MVP版本还在开发当中。也就是采用了跟Graphviz类似的布局算法和api使用,这种方式跟smetana完全不一样,因为smetana只注重翻译,对内部完全实现原理完全黑盒,而重写的方式跟原来的Graphviz完全没有任何联系,只是最终效果看起来类似,代码对于Java开发来说很容易更改和拓展功能。
进度
目前第一个版本的属性还在支持当中,当支持完MVP版本的所有属性之后,会开源到GitHub,目前项目的开发仓库在这里graph-support,有兴趣的同学可以关注进度。
示例
digraph shells { Thompson -> {Mashey[style=filled,fillcolor=green] Bourne[style=dashed,fillcolor=gold] csh}; csh -> tcsh; Bourne -> {ksh[style=dashed] esh vsh "System-V"[color=red] v9sh}; v9sh -> rc; {Bourne "ksh-i"[style=bold] KornShell} -> Bash; {esh vsh[fontsize=36] Formshell csh} -> ksh; {KornShell "System-V"} -> POSIX; ksh -> "ksh-i" -> KornShell -> "ksh-POSIX"; Bourne -> Formshell; }
Java代码
// initialize node Node n_ksh = Node.builder().label("ksh").style(NodeStyle.DASHED).build(); Node n_System_V = Node.builder().label("System_V").color(Color.RED).build(); Node n_vsh = Node.builder().label("vsh").fontSize(36).build(); Node n_Mashey = Node.builder().label("Mashey").style(NodeStyle.FILLED).fillColor(Color.GREEN).build(); Node n_ksh_POSIX = Node.builder().label("ksh_POSIX").build(); Node n_Thompson = Node.builder().label("Thompson").build(); Node n_ks_i = Node.builder().label("ks_i").style(NodeStyle.BOLD).build(); Node n_Formshell = Node.builder().label("Formshell").build(); Node n_Bash = Node.builder().label("Bash").build(); Node n_v9sh = Node.builder().label("v9sh").build(); Node n_POSIX = Node.builder().label("POSIX").build(); Node n_rc = Node.builder().label("rc").build(); Node n_tcsh = Node.builder().label("tcsh").build(); Node n_Bourne = Node.builder().label("Bourne").style(NodeStyle.DASHED).fillColor(Color.GOLD).build(); Node n_csh = Node.builder().label("csh").build(); Node n_esh = Node.builder().label("esh").build(); Node n_KornShell = Node.builder().label("KornShell").build(); Graphviz graphviz = Graphviz .digraph() .scale(0.75) .tempNode( Node.builder().color(Color.BLACK).build() ) .addLine(n_Thompson, n_Mashey) .addLine(n_Thompson, n_Bourne) .addLine(n_Thompson, n_csh) .addLine(n_Bourne, n_Formshell) .addLine(n_Bourne, n_esh) .addLine(n_Bourne, n_vsh) .addLine(n_Bourne, n_v9sh) .addLine(Line.builder(n_Bourne, n_ksh).label("Bourne --> ksh").build()) .addLine(n_Bourne, n_System_V) .addLine(n_csh, n_ksh) .addLine(n_csh, n_tcsh) .addLine(n_esh, n_ksh) .addLine(n_vsh, n_ksh) .addLine(n_Formshell, n_ksh) .addLine(n_v9sh, n_rc) .addLine(n_ksh, n_ks_i) .addLine(n_ks_i, n_KornShell) .addLine(n_ks_i, n_Bash) .addLine(n_Bourne, n_Bash) .addLine(n_KornShell, n_ksh_POSIX) .addLine(n_KornShell, n_Bash) .addLine(n_KornShell, n_POSIX) .addLine(n_System_V, n_POSIX) .build(); // Svg render RenderEngine renderEngine = SvgRenderEngine.getInstance(); GraphResource graphResource = renderEngine.render(graphviz); System.out.println(graphResource.content());
效果对比
这篇关于纯Java实现的graphviz的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-23Springboot应用的多环境打包入门
- 2024-11-23Springboot应用的生产发布入门教程
- 2024-11-23Python编程入门指南
- 2024-11-23Java创业入门:从零开始的编程之旅
- 2024-11-23Java创业入门:新手必读的Java编程与创业指南
- 2024-11-23Java对接阿里云智能语音服务入门详解
- 2024-11-23Java对接阿里云智能语音服务入门教程
- 2024-11-23JAVA对接阿里云智能语音服务入门教程
- 2024-11-23Java副业入门:初学者的简单教程
- 2024-11-23JAVA副业入门:初学者的实战指南