Racket 如何使用GraphViz和球拍

Racket 如何使用GraphViz和球拍,racket,graphviz,Racket,Graphviz,是否可以使用graphviz模块在球拍框架(GUI)中绘制图形? 如果可能的话,有人会提供一个演示如何使用的教程吗? 谢谢以下是我要做的: 从图形生成点文件(Graphviz格式) 使用system在生成png文件的文件上运行grapviz 在拍框中显示png 有关实际代码,请参见: 请注意,Stephen Chang的图形库支持生成点文件: 更新: 为了制作图形编辑器,您可以将图形数据保存在文件中,然后让Graphviz以点格式输出布局信息: 解析输出文件,然后在屏幕上重新绘制图形。以下是

是否可以使用graphviz模块在球拍框架(GUI)中绘制图形? 如果可能的话,有人会提供一个演示如何使用的教程吗?
谢谢

以下是我要做的:

  • 从图形生成点文件(Graphviz格式)
  • 使用
    system
    在生成png文件的文件上运行grapviz
  • 在拍框中显示png
有关实际代码,请参见:

请注意,Stephen Chang的图形库支持生成点文件:

更新:

为了制作图形编辑器,您可以将图形数据保存在文件中,然后让Graphviz以点格式输出布局信息:
解析输出文件,然后在屏幕上重新绘制图形。

以下是一个示例。您必须安装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
为图形编辑器布局节点时,我们会这样做。