Racket 如何使用GraphViz和球拍
是否可以使用graphviz模块在球拍框架(GUI)中绘制图形? 如果可能的话,有人会提供一个演示如何使用的教程吗?Racket 如何使用GraphViz和球拍,racket,graphviz,Racket,Graphviz,是否可以使用graphviz模块在球拍框架(GUI)中绘制图形? 如果可能的话,有人会提供一个演示如何使用的教程吗? 谢谢以下是我要做的: 从图形生成点文件(Graphviz格式) 使用system在生成png文件的文件上运行grapviz 在拍框中显示png 有关实际代码,请参见: 请注意,Stephen Chang的图形库支持生成点文件: 更新: 为了制作图形编辑器,您可以将图形数据保存在文件中,然后让Graphviz以点格式输出布局信息: 解析输出文件,然后在屏幕上重新绘制图形。以下是
谢谢以下是我要做的:
- 从图形生成点文件(Graphviz格式)
- 使用
在生成png文件的文件上运行grapvizsystem
- 在拍框中显示png
解析输出文件,然后在屏幕上重新绘制图形。以下是一个示例。您必须安装dot程序
#lang racket
(require graph)
(require racket/gui/base)
(define dot-command "/usr/local/bin/dot -Tpng ~a >~a")
;; Given a graph, use dot to create a png and return the path to the png
(define (make-graphviz-png g)
(let ([dot-string (graphviz g #:colors (coloring/brelaz g))]
[dot-file (make-temporary-file "example~a.dot")]
[png-file (make-temporary-file "example~a.png")])
(display-to-file dot-string dot-file #:exists 'replace)
(system (format dot-command dot-file png-file))
png-file))
;; The graph
(define test-graph (unweighted-graph/directed '((hello world))))
;; Generate the png from the graph
(define bitmap (read-bitmap (make-graphviz-png test-graph)))
;; Display in a frame -- see https://stackoverflow.com/questions/5355251/bitmap-in-dr-racket
(define f (new frame% [label "Your Graph"]))
(new message% [parent f] [label bitmap])
(send f show #t)
你可以使用这个软件包。如果您想直接使用dot语言,可以使用dot->pict函数。或者,您可以使用有向图->象形图,这使得圆点通过允许使用球拍象形图作为节点形状而更加强大。谢谢您的帮助。我想做的是更简单的图形编辑器。一个渐进的结构更新了答案。考虑询问你关于球拍邮寄名单的问题。很可能有人已经编写了一个图形编辑器,或者已经开始编写了一个图形编辑器。您可以通过将系统调用包装到
(输出到string(lambda())(输入来自string dot string(lambda()…)))
,来避免处理临时文件。当我们要求dot
为图形编辑器布局节点时,我们会这样做。