<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<!--
   Licensed to the Apache Software Foundation (ASF) under one
   or more contributor license agreements.  See the NOTICE file
   distributed with this work for additional information
   regarding copyright ownership.  The ASF licenses this file
   to you under the Apache License, Version 2.0 (the
   "License"); you may not use this file except in compliance
   with the License.  You may obtain a copy of the License at

     http://www.apache.org/licenses/LICENSE-2.0

   Unless required by applicable law or agreed to in writing,
   software distributed under the License is distributed on an
   "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
   KIND, either express or implied.  See the License for the
   specific language governing permissions and limitations
   under the License.    
-->
<html>
<head>
	<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=ISO-8859-1">
	<script type="text/javascript">var xookiConfig = {level: 0};</script>	
	<script type="text/javascript" src="xooki/xooki.js"></script>
</head>
<body>
	<textarea id="xooki-source">
<a href="http://www.yworks.com/en/products_yed_about.htm">yEd</a> is a free graph editor, benefiting from
all the automatic layouts of yFiles. Ivy is able to generate graphs which are readable by yEd.

The graphs generated by ivy are not layed out (in fact it's why we use yEd), so you have to follow a simple sequence of steps to layout the generated graphs.

<h2>Preparation</h2>
First you have to generate a graphml file. Simply call the report task (see [[use ivy use documentation]]) for that.

<h2>Step 1: open the graphml file</h2>
Launch yEd editor, and open the graphml file generated by the report task. You should obtain something like this:
<center>
<img src="images/yed-step1.jpg"/><br/>
</center>

<h2>Step 2: ask yEd to adjust nodes size</h2>
<center>
<img src="images/yed-step2.jpg"/><br/>
<img src="images/yed-step3.jpg"/><br/>
<img src="images/yed-step3-2.jpg"/><br/>
</center>

<h2>Step 3: ask yEd to layout nodes</h2>
<center>
<img src="images/yed-step4.jpg"/><br/>
<img src="images/yed-step5.jpg"/><br/>
<img src="images/yed-step6.jpg"/><br/>

That's all, you should have obtained something like this:

<img src="images/yed-step7.jpg"/><br/>

Note that this is only one possibility, test the available layouts yourself, you could find one better in your case.
Once you have layed out the graph, you can either save it with in the same file (but be warned that it will be overwritten at next ivy report call), or another file, export it to jpg, gif, svg, etc. (see <a href="http://www.yworks.com/en/products_yed_about.htm">yEd</a> site for details).
</center>


	</textarea>
<script type="text/javascript">xooki.postProcess();</script>
</body>
</html>
