graphviz.php.tmp
来自「PHP 知识管理系统(基于树结构的知识管理系统), 英文原版的PHP源码。」· TMP 代码 · 共 573 行 · 第 1/2 页
TMP
573 行
<?php/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: *//** * Image_GraphViz * * Copyright (c) 2001-2006, Dr. Volker G鯾bels <vmg@arachnion.de> and * Sebastian Bergmann <sb@sebastian-bergmann.de>. All rights reserved. * * LICENSE: This source file is subject to version 3.0 of the PHP license * that is available through the world-wide-web at the following URI: * http://www.php.net/license/3_0.txt. If you did not receive a copy of * the PHP License and are unable to obtain it through the web, please * send a note to license@php.net so we can mail you a copy immediately. * * @category Image * @package GraphViz * @author Dr. Volker G鯾bels <vmg@arachnion.de> * @author Sebastian Bergmann <sb@sebastian-bergmann.de> * @author Karsten Dambekalns <k.dambekalns@fishfarm.de> * @author Michael Lively Jr. <mlively@ft11.net> * @copyright 2001-2006 Sebastian Bergmann <sb@sebastian-bergmann.de> * @license http://www.php.net/license/3_0.txt PHP License 3.0 * @version CVS: $Id$ * @link http://pear.php.net/package/Image_GraphViz * @since File available since Release 0.1 */require_once 'System.php';/** * Interface to AT&T's GraphViz tools. * * The GraphViz class allows for the creation of and the work with directed * and undirected graphs and their visualization with AT&T's GraphViz tools. * * <code> * <?php * require_once 'Image/GraphViz.php'; * * $graph = new Image_GraphViz(); * * $graph->addNode( * 'Node1', * array( * 'URL' => 'http://link1', * 'label' => 'This is a label', * 'shape' => 'box' * ) * ); * * $graph->addNode( * 'Node2', * array( * 'URL' => 'http://link2', * 'fontsize' => '14' * ) * ); * * $graph->addNode( * 'Node3', * array( * 'URL' => 'http://link3', * 'fontsize' => '20' * ) * ); * * $graph->addEdge( * array( * 'Node1' => 'Node2' * ), * array( * 'label' => 'Edge Label' * ) * ); * * $graph->addEdge( * array( * 'Node1' => 'Node2' * ), * array( * 'color' => 'red' * ) * ); * * $graph->image(); * ?> * </code> * * @category Image * @package GraphViz * @author Sebastian Bergmann <sb@sebastian-bergmann.de> * @author Dr. Volker G鯾bels <vmg@arachnion.de> * @author Karsten Dambekalns <k.dambekalns@fishfarm.de> * @author Michael Lively Jr. <mlively@ft11.net> * @copyright Copyright © 2001-2006 Dr. Volker G鯾bels <vmg@arachnion.de> and Sebastian Bergmann <sb@sebastian-bergmann.de> * @license http://www.php.net/license/3_0.txt The PHP License, Version 3.0 * @version Release: @package_version@ * @link http://pear.php.net/package/Image_GraphViz * @since Class available since Release 0.1 */class Image_GraphViz{ /** * Path to GraphViz/dot command * * @var string */ var $dotCommand = 'dot'; /** * Path to GraphViz/neato command * * @var string */ var $neatoCommand = 'neato'; /** * Representation of the graph * * @var array */ var $graph; /** * Constructor. * * Setting the name of the Graph is useful for including multiple image maps on * one page. If not set, the graph will be named 'G'. * * @param boolean $directed Directed (TRUE) or undirected (FALSE) graph. * @param array $attributes Attributes of the graph * @param string $name Name of the Graph * @access public */ function Image_GraphViz($directed = TRUE, $attributes = array(), $name = NULL) { $this->setDirected($directed); $this->setAttributes($attributes); $this->graph['name'] = $name; } /** * Output image of the graph in a given format. * * @param string Format of the output image. * This may be one of the formats supported by GraphViz. * @access public */ function image($format = 'svg') { if ($data = $this->fetch($format)) { $sendContentLengthHeader = TRUE; switch ($format) { case 'gif': case 'png': case 'wbmp': { header('Content-Type: image/' . $format); } break; case 'jpg': { header('Content-Type: image/jpeg'); } break; case 'pdf': { header('Content-Type: application/pdf'); } break; case 'svg': { header('Content-Type: image/svg+xml'); } break; default: { $sendContentLengthHeader = FALSE; } } if ($sendContentLengthHeader) { header('Content-Length: ' . strlen($data)); } echo $data; } } /** * Return image (data) of the graph in a given format. * * @param string Format of the output image. * This may be one of the formats supported by GraphViz. * @return string The image (data) created by GraphViz. * @access public * @since Method available since Release 1.1.0 */ function fetch($format = 'svg') { if ($file = $this->saveParsedGraph()) { $outputfile = $file . '.' . $format; $command = $this->graph['directed'] ? $this->dotCommand : $this->neatoCommand; $command .= ' -T' . escapeshellarg($format) . ' -o' . escapeshellarg($outputfile) . ' ' . escapeshellarg($file); @`$command`; @unlink($file); $fp = fopen($outputfile, 'rb'); if ($fp) { $data = fread($fp, filesize($outputfile)); fclose($fp); @unlink($outputfile); } return $data; } return FALSE; } /** * Render a given dot file into another format. * * @param string The absolute path of the dot file to use. * @param string The absolute path of the file to save to. * @param string Format of the output image. * This may be one of the formats supported by GraphViz. * @return bool True if the file was saved, false otherwise. * @access public */ function renderDotFile($dotfile, $outputfile, $format = 'svg') { if (file_exists($dotfile)) { $oldmtime = file_exists($outputfile) ? filemtime($outputfile) : 0; $command = $this->graph['directed'] ? $this->dotCommand : $this->neatoCommand; $command .= ' -T' . escapeshellarg($format) . ' -o' . escapeshellarg($outputfile) . ' ' . escapeshellarg($dotfile); @`$command`; if (file_exists($outputfile) && filemtime($outputfile) > $oldmtime) { return TRUE; } } return FALSE; } /** * Add a cluster to the graph. * * @param string ID. * @param array Title. * @param array Attributes of the cluster. * @access public */ function addCluster($id, $title, $attributes = array()) { $this->graph['clusters'][$id]['title'] = $title; $this->graph['clusters'][$id]['attributes'] = $attributes; } /** * Add a note to the graph. * * @param string Name of the node. * @param array Attributes of the node. * @param string Group of the node. * @access public */ function addNode($name, $attributes = array(), $group = 'default') { $this->graph['nodes'][$group][$name] = $attributes; } /** * Remove a node from the graph. * * @param Name of the node to be removed. * @access public */ function removeNode($name, $group = 'default') { if (isset($this->graph['nodes'][$group][$name])) {
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?