<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://infovis-wiki.net/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Anfe</id>
	<title>InfoVis:Wiki - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://infovis-wiki.net/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Anfe"/>
	<link rel="alternate" type="text/html" href="https://infovis-wiki.net/wiki/Special:Contributions/Anfe"/>
	<updated>2026-05-11T11:05:58Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.45.3</generator>
	<entry>
		<id>https://infovis-wiki.net/w/index.php?title=The_InfoVis_Toolkit&amp;diff=10406</id>
		<title>The InfoVis Toolkit</title>
		<link rel="alternate" type="text/html" href="https://infovis-wiki.net/w/index.php?title=The_InfoVis_Toolkit&amp;diff=10406"/>
		<updated>2006-08-20T16:51:05Z</updated>

		<summary type="html">&lt;p&gt;Anfe: /* General Approach */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Summary =&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Author&#039;&#039;&#039;: Jean-Daniel Fekete / University Paris-Sud&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Project Webpage&#039;&#039;&#039;: http://ivtk.sourceforge.net&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Current Version&#039;&#039;&#039;: 0.9 beta2, July 24, 2006&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Requirements&#039;&#039;&#039;: Java 1.4&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Overview:&#039;&#039;&#039; using Java2D graphics library; pipeline architecture; animation and rendering support&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039; Base data structure&#039;&#039;&#039;: table of columns; columns contain objects of equal type; trees and graphs are derived from tables&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039; Included visualization techniques:&#039;&#039;&#039; [http://www.itl.nist.gov/div898/handbook/eda/section3/scatterp.htm Scatter Plot]&amp;lt;nowiki&amp;gt;; &amp;lt;/nowiki&amp;gt;[http://ivtk.sourceforge.net/TableTimeSeries.png Time Series Plot]&amp;lt;nowiki&amp;gt;; &amp;lt;/nowiki&amp;gt;[http://catt.bus.okstate.edu/jones98/parallel.html Parallel Coordinates]&amp;lt;nowiki&amp;gt;; &amp;lt;/nowiki&amp;gt;[http://ivtk.sourceforge.net/GraphNodeLink.png Node-Link Diagram]&amp;lt;nowiki&amp;gt;; &amp;lt;/nowiki&amp;gt;[http://www.sims.berkeley.edu/courses/is247/s02/readings/barlow.pdf Icicle Tree]&amp;lt;nowiki&amp;gt;; &amp;lt;/nowiki&amp;gt;[http://www.cs.umd.edu/hcil/treemap/ Treemap]&amp;lt;nowiki&amp;gt;; &amp;lt;/nowiki&amp;gt;[http://en.wikipedia.org/wiki/Adjacency_matrix Adjacency Matrix ]&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039; Supported File Formats&#039;&#039;&#039;: CSV, XML, TQD, Newick, TM3, DOT, XML TreeML, XML GraphML&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;&#039;InfoVis Toolkit&#039;&#039;&#039; is an interactive graphical open source toolkit written in Java. It is thought to support the development of [[Information Visualization]]s which are based on a high amount of data. To provide a fast and efficient processing of these data, special attention was set to the underlying data structure. As the internal structure of the &#039;&#039;&#039;InfoVis Toolkit&#039;&#039;&#039; considers the [[Visualization Pipeline]], a data table was chosen to store all information. A table allows representing nearly every kind of data. Also interrelations between records can be established by using parent and children columns. The &#039;&#039;&#039;InfoVis Toolkit&#039;&#039;&#039; supports a graph structure as well as a tree structure.&lt;br /&gt;
&lt;br /&gt;
Generally, the table was optimized regarding to memory footprint and data access speed. This was obtained by using arrays of the respective type as columns and metadata which describes the column itself. In contrast to other implementations of tables (e.g., Java Swing Table) this approach provides a measurable advantage in memory usage and access performance. But, these performance enhancements are paid with less comfort in using the table and handling single tubles or records in it. &lt;br /&gt;
&lt;br /&gt;
The design of the &#039;&#039;&#039;InfoVis Toolkit&#039;&#039;&#039; can be seen as [[polylithic design|polylithic]]. Even though the [[Visualization Pipeline]] is considered internally, nevertheless, there are no clearly defined points in the logic where a user can place its own functionality (in contrast to other toolkits like [[prefuse]] for example). Applying own filters or rendering routines may enforce deep changes in the base functionality. Furthermore, the class hierarchy is very deep and complex. So, even small extensions of the predefined functionality may cause a lot of adaptation work in several classes. &lt;br /&gt;
&lt;br /&gt;
However, realization of own complex [[Information Visualization|visualizations]] which require a lot of special functionality may be hard work and enforces developer to understand the internal structure of the toolkit itself. But, there are a lot of predefined visualization techniques that help to visualize data in a common way like scatter plots or treemaps. The toolkit provides a lot of examples that illustrate the appliance of such standard visualization techniques to own data sources. &lt;br /&gt;
&lt;br /&gt;
=== Pros ===&lt;br /&gt;
&lt;br /&gt;
* low memory usage&lt;br /&gt;
* fast data access, only a few typecasts are needed&lt;br /&gt;
* metadata to describe columns and tables&lt;br /&gt;
* internal pipeline approach&lt;br /&gt;
* many visualization techniques included&lt;br /&gt;
* several data reader for common formats included&lt;br /&gt;
* algorithms for force-based physics simulation included&lt;br /&gt;
* query language to navigate within abstract data&lt;br /&gt;
* demos and examples included&lt;br /&gt;
* open source&lt;br /&gt;
&lt;br /&gt;
=== Cons ===&lt;br /&gt;
&lt;br /&gt;
* [[polylithic design]] takes up more time to conceive and see first results&lt;br /&gt;
* missing expected functionality (e.g., a row object in tables)&lt;br /&gt;
* special requirements of visualization enforce a lot of adapting work&lt;br /&gt;
* the design is hard to conceive, the logic not clear&lt;br /&gt;
* no clear points defined to place own code&lt;br /&gt;
* poor documentation&lt;br /&gt;
* no user community &lt;br /&gt;
* most examples are buggy (especially controls)&lt;br /&gt;
&lt;br /&gt;
=General Approach=&lt;br /&gt;
&lt;br /&gt;
An [[Information Visualization]] done with the &#039;&#039;&#039;InfoVis Toolkit&#039;&#039;&#039; is based on a table which stores the abstract data:&lt;br /&gt;
&lt;br /&gt;
[[Image:infovis_toolkit_structure.png|400px]]&lt;br /&gt;
&lt;br /&gt;
The proper functionality of the toolkit is maintained by an object called &#039;&#039;Visualization&#039;&#039;. This component is responsible for transforming the abstract data of the &#039;&#039;Table&#039;&#039; to visual analogues. The associations between abstract content and visual analogous are described with attributes. Each used attribute is associated with a certain &#039;&#039;Column&#039;&#039; of the &#039;&#039;Table&#039;&#039;. Further, an &#039;&#039;ItemRenderer&#039;&#039; provides the painting routines of an item. After all items are layouted, the resulted shapes are stored in the &#039;&#039;ShapeColumn&#039;&#039; within the &#039;&#039;Visualization&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
The view of a visualization is the &#039;&#039;VisualizationPanel&#039;&#039;. This graphical component can be embedded in each Java Swing application. However, there is no need to use this panel, also other targets like a &#039;&#039;BufferedImage&#039;&#039; or a standard &#039;&#039;JComponent&#039;&#039; can be taken to communicate the output to the user.&lt;br /&gt;
&lt;br /&gt;
Controlling of the visualization is done by manipulating mapped columns of the &#039;&#039;Table&#039;&#039;, by manipulating &#039;&#039;Renderers&#039;&#039;, or by setting dynamic queries to filter the visual content. The toolkit has got a large set of interaction controls predefined. Most attention was set toward providing own panels which combine several interaction possibilities (e.g., color chooser, filter for all defined columns, etc.). Such control panels are typically organized in tab groups around the proper visualization. Further, the &#039;&#039;VisualizationPanel&#039;&#039; can be extended by control listener to handle mouse or keyboard events manually. If a certain item should handle such an event, the respective renderer must provide this functionality.  &lt;br /&gt;
 &lt;br /&gt;
==Readers and Writers==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Readers&#039;&#039; and &#039;&#039;Writers&#039;&#039; are associated with a &#039;&#039;Table&#039;&#039;. The toolkit provides a lot of different readers for common file formats like XML or CSV. Predefined readers or writers already consider the internal structure of the associated file, so, XML files are stored in a tree, CSV in a table, etc. &lt;br /&gt;
&lt;br /&gt;
==Table==&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;Table&#039;&#039; is the base container for every kind of abstract data. In contrast to other implementations of tables, this table is not based on containers like vectors or hashtables. Instead, it consists of several &#039;&#039;Columns&#039;&#039; which are technically arrays of the respective data type they should map. Additionally, each column is described with metadata: &lt;br /&gt;
&lt;br /&gt;
[[Image:infovis_toolkit_table.png|700px]]&lt;br /&gt;
&lt;br /&gt;
Several &#039;&#039;Columns&#039;&#039; to map standard types like Strings or Integers are already predefined. The &#039;&#039;ObjectColumn&#039;&#039; can store each thinkable Java Object. Therefore, a tuple in the table is composed of several differnt objects that may contain own data again.&lt;br /&gt;
&lt;br /&gt;
As an array is indexed, the table itself has indexes too. The index is used to access the data records, further, relations as needed by &#039;&#039;Trees&#039;&#039; or &#039;&#039;Graphs&#039;&#039; are also established through indexes. A &#039;&#039;Column&#039;&#039; can have empty rows which is important in case of sparse data. &lt;br /&gt;
&lt;br /&gt;
A generally row object to fill or access data is missing, so, a data record can only be accessed by requesting the data of all columns with the index. Thus, especially when dealing with sparse data, special attention has to be paid toward filling the table.&lt;br /&gt;
&lt;br /&gt;
==Visualization==&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;Visualization&#039;&#039; is bound to the &#039;&#039;Table&#039;&#039;. Semantic attributes which are defined in associated columns of the &#039;&#039;Table&#039;&#039; are transformed into visual attributes (e.g., color, label, etc.). Filtering of abstract content to visual attributes is managed by dynamic queries which are used to determine which data is visualized and which not.&lt;br /&gt;
&lt;br /&gt;
Most of the assignments attributes (like size, stroke width, etc.) are defined in own columns too. Locations of the items are typically calculated by layout algorithms. This can be done by the &#039;&#039;Visualization&#039;&#039; itself or an associated &#039;&#039;Layout&#039;&#039; object. Once, all visual attributes of an item are retrieved of the table or calculated by algorithms, they are stored in the internal &#039;&#039;ShapeColumn&#039;&#039;. &lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;ShapeColumn&#039;&#039; is only updated when it is required. This happens on following events:&lt;br /&gt;
&lt;br /&gt;
* The &#039;&#039;Table&#039;&#039; has changed. The &#039;&#039;Visualization&#039;&#039; is notified whenever records of the &#039;&#039;Table&#039;&#039; have changed, new ones were inserted, or existing ones were deleted.&lt;br /&gt;
* A user-interaction forces a new layout of the items. &lt;br /&gt;
* A user-interaction changes the filtering process.  &lt;br /&gt;
&lt;br /&gt;
Painting itself is done by &#039;&#039;Renderers&#039;&#039;. Each &#039;&#039;Visualization&#039;&#039; has an associated &#039;&#039;Renderer&#039;&#039; which can consist of several other &#039;&#039;Renderers&#039;&#039; again. A &#039;&#039;Renderer&#039;&#039; provides the painting routines for an item which are based on the visual attributes of the &#039;&#039;Visualization&#039;&#039;. Further, a &#039;&#039;Renderer&#039;&#039; may also handle user interactions (e.g., clicking on an item).&lt;br /&gt;
&lt;br /&gt;
Before an item is actually painted, also other visualization techniques may influence the output. Examples for such techniques are fisheye views or dynamic labeling. &lt;br /&gt;
&lt;br /&gt;
==Components==&lt;br /&gt;
&lt;br /&gt;
In &#039;&#039;Components&#039;&#039; a large set of interaction components are concentrated. Predefined components are combined within own control panels and include sliders to change size or colors of items, components to set filter expressions, or handler to select items. Such interactions are typically applied by using dynamic queries or changing visual attributes manually.&lt;br /&gt;
&lt;br /&gt;
Note, that interactions in the &#039;&#039;&#039;InfoVis ToolKit&#039;&#039;&#039; may change columns in the underlying table. Further, the table is also used to store flags that indicate the actual state of an item.&lt;br /&gt;
&lt;br /&gt;
==Image==&lt;br /&gt;
&lt;br /&gt;
The image is the visual output of the [[Information Visualization]]. In contrast to other toolkit, the &#039;&#039;InfoVis Toolkit&#039;&#039; does not demand a certain component to render its output. Painting is done by using the Java Graphics2D environment. Therefore, also a &#039;&#039;BufferedImage&#039;&#039; can be used for example. However, the default view is the &#039;&#039;VisualizationPanel&#039;&#039; and derivates of it. A &#039;&#039;VisualizationPanel&#039;&#039; is a &#039;&#039;JComponent&#039;&#039;, therefore, the view also inherits the functionality of the Swing component. This component also supports events on the view that can be handled by the view itself or delegated to the respective &#039;&#039;Renderer&#039;&#039; or other event handler. &lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;InfoVis Toolkit&#039;&#039; partially supports the Agile2D graphics framework which allows faster paintings of 2D graphics.&lt;br /&gt;
&lt;br /&gt;
=Details=&lt;br /&gt;
&lt;br /&gt;
==Package Structure==&lt;br /&gt;
&lt;br /&gt;
; io&lt;br /&gt;
: basic readers and writers. &lt;br /&gt;
; metadata&lt;br /&gt;
: several metadata categories.&lt;br /&gt;
; panel&lt;br /&gt;
: contains several &amp;quot;view&amp;quot; implementations and components that provides interaction possibilities.&lt;br /&gt;
; visualization&lt;br /&gt;
: this package contains several implementations of &#039;&#039;Visualizations&#039;&#039; and other basic classes like interfaces for layouts. Further, &#039;&#039;Renderer&#039;&#039; and other helper classes are included here. &lt;br /&gt;
; column&lt;br /&gt;
: provides the basic implementation of a &#039;&#039;Column&#039;&#039; and special derivates of it.&lt;br /&gt;
; table&lt;br /&gt;
: provides a set of classes related to visualization of tables.&lt;br /&gt;
; tree&lt;br /&gt;
: provides a set of classes related to visualization of trees.&lt;br /&gt;
; graph&lt;br /&gt;
: provides a set of classes related to visualization of graphs.&lt;br /&gt;
; utils&lt;br /&gt;
: contains several helper classes like comparators, etc &amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Conclusion=&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;InfoVis Toolkit&#039;&#039; is a toolkit, which pays most attention toward saving resources. Even if there is a measurable advantage in comparison to other toolkits, there are other factors like usability or simplicity too that characterize a good toolkit. The toolkit is very hard to use, at least there is no underlying logic a developer can conceive quickly. But, the toolkit provides a lot of examples for standard problems, like scatter plots, etc. These predefined applications are easy to use if no special demands of the [[Information Visualization]] are needed. Nevertheless, many included examples are buggy or partially not runable anyway. When using a predefined sample, an exact testing is necessary.&lt;br /&gt;
&lt;br /&gt;
= External links =&lt;br /&gt;
*[http://ivtk.sourceforge.net The InfoVis Toolkit]&lt;br /&gt;
*[http://www.cs.umd.edu/hcil/agile2d Agile2D]&lt;br /&gt;
&lt;br /&gt;
= References =&lt;br /&gt;
*[Fekete, 2004] Jean-Daniel Fekete. [http://www.lri.fr/~fekete/ps/ivtk-04.pdf The InfoVis Toolkit]. Proceedings of the 10th IEEE Symposium on Information Visualization (InfoVis&#039;04), Austin, TX, IEEE Press. pp. 17-24, Oct 2004.&lt;br /&gt;
*[Fekete, 2003] Jean-Daniel Fekete. [http://www.inria.fr/rrrt/rr-4818.html The InfoVis Toolkit (Rapport de Recherche)] Research Report RR-4818, INRIA Futurs, May 2003.&lt;br /&gt;
*[Fekete, 2004] Jean-Daniel Fekete, user manual. Retrieved at: July 06, 2006, http://ivtk.sourceforge.net/manual.html&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Toolkits]]&lt;/div&gt;</summary>
		<author><name>Anfe</name></author>
	</entry>
	<entry>
		<id>https://infovis-wiki.net/w/index.php?title=The_InfoVis_Toolkit&amp;diff=10405</id>
		<title>The InfoVis Toolkit</title>
		<link rel="alternate" type="text/html" href="https://infovis-wiki.net/w/index.php?title=The_InfoVis_Toolkit&amp;diff=10405"/>
		<updated>2006-08-20T16:31:15Z</updated>

		<summary type="html">&lt;p&gt;Anfe: /* Summary */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Summary =&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Author&#039;&#039;&#039;: Jean-Daniel Fekete / University Paris-Sud&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Project Webpage&#039;&#039;&#039;: http://ivtk.sourceforge.net&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Current Version&#039;&#039;&#039;: 0.9 beta2, July 24, 2006&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Requirements&#039;&#039;&#039;: Java 1.4&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Overview:&#039;&#039;&#039; using Java2D graphics library; pipeline architecture; animation and rendering support&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039; Base data structure&#039;&#039;&#039;: table of columns; columns contain objects of equal type; trees and graphs are derived from tables&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039; Included visualization techniques:&#039;&#039;&#039; [http://www.itl.nist.gov/div898/handbook/eda/section3/scatterp.htm Scatter Plot]&amp;lt;nowiki&amp;gt;; &amp;lt;/nowiki&amp;gt;[http://ivtk.sourceforge.net/TableTimeSeries.png Time Series Plot]&amp;lt;nowiki&amp;gt;; &amp;lt;/nowiki&amp;gt;[http://catt.bus.okstate.edu/jones98/parallel.html Parallel Coordinates]&amp;lt;nowiki&amp;gt;; &amp;lt;/nowiki&amp;gt;[http://ivtk.sourceforge.net/GraphNodeLink.png Node-Link Diagram]&amp;lt;nowiki&amp;gt;; &amp;lt;/nowiki&amp;gt;[http://www.sims.berkeley.edu/courses/is247/s02/readings/barlow.pdf Icicle Tree]&amp;lt;nowiki&amp;gt;; &amp;lt;/nowiki&amp;gt;[http://www.cs.umd.edu/hcil/treemap/ Treemap]&amp;lt;nowiki&amp;gt;; &amp;lt;/nowiki&amp;gt;[http://en.wikipedia.org/wiki/Adjacency_matrix Adjacency Matrix ]&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039; Supported File Formats&#039;&#039;&#039;: CSV, XML, TQD, Newick, TM3, DOT, XML TreeML, XML GraphML&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;&#039;InfoVis Toolkit&#039;&#039;&#039; is an interactive graphical open source toolkit written in Java. It is thought to support the development of [[Information Visualization]]s which are based on a high amount of data. To provide a fast and efficient processing of these data, special attention was set to the underlying data structure. As the internal structure of the &#039;&#039;&#039;InfoVis Toolkit&#039;&#039;&#039; considers the [[Visualization Pipeline]], a data table was chosen to store all information. A table allows representing nearly every kind of data. Also interrelations between records can be established by using parent and children columns. The &#039;&#039;&#039;InfoVis Toolkit&#039;&#039;&#039; supports a graph structure as well as a tree structure.&lt;br /&gt;
&lt;br /&gt;
Generally, the table was optimized regarding to memory footprint and data access speed. This was obtained by using arrays of the respective type as columns and metadata which describes the column itself. In contrast to other implementations of tables (e.g., Java Swing Table) this approach provides a measurable advantage in memory usage and access performance. But, these performance enhancements are paid with less comfort in using the table and handling single tubles or records in it. &lt;br /&gt;
&lt;br /&gt;
The design of the &#039;&#039;&#039;InfoVis Toolkit&#039;&#039;&#039; can be seen as [[polylithic design|polylithic]]. Even though the [[Visualization Pipeline]] is considered internally, nevertheless, there are no clearly defined points in the logic where a user can place its own functionality (in contrast to other toolkits like [[prefuse]] for example). Applying own filters or rendering routines may enforce deep changes in the base functionality. Furthermore, the class hierarchy is very deep and complex. So, even small extensions of the predefined functionality may cause a lot of adaptation work in several classes. &lt;br /&gt;
&lt;br /&gt;
However, realization of own complex [[Information Visualization|visualizations]] which require a lot of special functionality may be hard work and enforces developer to understand the internal structure of the toolkit itself. But, there are a lot of predefined visualization techniques that help to visualize data in a common way like scatter plots or treemaps. The toolkit provides a lot of examples that illustrate the appliance of such standard visualization techniques to own data sources. &lt;br /&gt;
&lt;br /&gt;
=== Pros ===&lt;br /&gt;
&lt;br /&gt;
* low memory usage&lt;br /&gt;
* fast data access, only a few typecasts are needed&lt;br /&gt;
* metadata to describe columns and tables&lt;br /&gt;
* internal pipeline approach&lt;br /&gt;
* many visualization techniques included&lt;br /&gt;
* several data reader for common formats included&lt;br /&gt;
* algorithms for force-based physics simulation included&lt;br /&gt;
* query language to navigate within abstract data&lt;br /&gt;
* demos and examples included&lt;br /&gt;
* open source&lt;br /&gt;
&lt;br /&gt;
=== Cons ===&lt;br /&gt;
&lt;br /&gt;
* [[polylithic design]] takes up more time to conceive and see first results&lt;br /&gt;
* missing expected functionality (e.g., a row object in tables)&lt;br /&gt;
* special requirements of visualization enforce a lot of adapting work&lt;br /&gt;
* the design is hard to conceive, the logic not clear&lt;br /&gt;
* no clear points defined to place own code&lt;br /&gt;
* poor documentation&lt;br /&gt;
* no user community &lt;br /&gt;
* most examples are buggy (especially controls)&lt;br /&gt;
&lt;br /&gt;
=General Approach=&lt;br /&gt;
&lt;br /&gt;
An [[Information Visualization]] done with the &#039;&#039;&#039;InfoVis Toolkit&#039;&#039;&#039; is based on a table which stores the abstract data:&lt;br /&gt;
&lt;br /&gt;
[[Image:infovis_toolkit_structure.png|400px]]&lt;br /&gt;
&lt;br /&gt;
The proper functionality of the toolkit is maintained by an object called &#039;&#039;Visualization&#039;&#039;. This component is responsible for transforming the abstract data of the &#039;&#039;Table&#039;&#039; to visual analogues. The associations between abstract content and visual analogous are declared by visual attributes. These attributes can be associated with a certain &#039;&#039;Column&#039;&#039; of the &#039;&#039;Table&#039;&#039;. Further, an associated &#039;&#039;ItemRenderer&#039;&#039; provides the painting routines of an item. After the items are layouted, the resulting shapes are stored in the &#039;&#039;ShapeColumn&#039;&#039; within the &#039;&#039;Visualization&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
The view of a visualization done with the &#039;&#039;&#039;InfoVis Toolkit&#039;&#039;&#039; is the &#039;&#039;VisualizationPanel&#039;&#039;. This graphical component can be embedded in each Java Swing application. However, there is no force to use this panel, also other targets like an image or a standard &#039;&#039;JComponent&#039;&#039; can be taken to communicate the output to the user.&lt;br /&gt;
&lt;br /&gt;
Controlling of the visualization is done by manipulating mapped columns of the &#039;&#039;Table&#039;&#039;, by manipulating &#039;&#039;Renderers&#039;&#039;, or by setting dynamic queries to filter the content. The toolkit has got a large set of interaction controls predefined. Most attention was set toward providing own panels which combines several interaction possibilities (e.g., color chooser, filter for all defined columns, etc.). Such control panels are typically organized in tab groups around the proper visualization. Further, the &#039;&#039;VisualizationPanel&#039;&#039; can be extended by control listener to handle mouse or keyboard events manually. If a certain item should handle such an event, the respective renderer must provide this functionality.  &lt;br /&gt;
 &lt;br /&gt;
==Readers and Writers==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Readers&#039;&#039; and &#039;&#039;Writers&#039;&#039; are associated with a &#039;&#039;Table&#039;&#039;. The toolkit provides a lot of different readers for common file formats like XML or CSV. Predefined readers or writers already consider the internal structure of the associated file, so, XML files are stored in a tree, CSV in a table, etc. &lt;br /&gt;
&lt;br /&gt;
==Table==&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;Table&#039;&#039; is the base container for every kind of abstract data. In contrast to other implementations of tables, this table is not based on containers. Instead, it consists of several &#039;&#039;Columns&#039;&#039; which are technically arrays of the respective data type they should map. Additionally, each column is described with metadata: &lt;br /&gt;
&lt;br /&gt;
[[Image:infovis_toolkit_table.png|700px]]&lt;br /&gt;
&lt;br /&gt;
Several &#039;&#039;Columns&#039;&#039; to map standard types like Strings or Integers are already predefined. The &#039;&#039;ObjectColumn&#039;&#039; can store each thinkable Java Object. Therefore, a tuple in the table is composed of several differnt objects that may contain own data again.&lt;br /&gt;
&lt;br /&gt;
As an array is indexed, the table itself has indexes too. The index is used to access a data tuple, further, relations as needed by &#039;&#039;Trees&#039;&#039; or &#039;&#039;Graphs&#039;&#039; are also established through indexes. A &#039;&#039;Column&#039;&#039; can have empty rows which is important in case of sparse data. &lt;br /&gt;
&lt;br /&gt;
A generally row object to fill or access data is missing, so, a data record can only be accessed by requesting the data of all columns with an index. Thus, especially when dealing with sparse data, special attention has to be paid toward filling the table.&lt;br /&gt;
&lt;br /&gt;
==Visualization==&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;Visualization&#039;&#039; is bound to the &#039;&#039;Table&#039;&#039;. Semantic attributes which are defined in associated columns of the &#039;&#039;Table&#039;&#039; are transformed into visual attributes (e.g., color, label, etc.). Filtering of abstract content to visual attributes is managed by dynamic queries which are used to determine which data is visualized and which not.&lt;br /&gt;
&lt;br /&gt;
Most of the assignments attributes (like size, stroke width, etc.) are defined in own columns too. Locations of the items are typically calculated by layouting algorithms. This can be done by the &#039;&#039;Visualization&#039;&#039; itself or an associated &#039;&#039;Layout&#039;&#039; object. Once, all visual attributes of an item are retrieved of the table or calculated by algorithms, they are stored in the internal &#039;&#039;ShapeColumn&#039;&#039;. &lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;ShapeColumn&#039;&#039; is only updated when needed. This happens on following events:&lt;br /&gt;
&lt;br /&gt;
* The &#039;&#039;Table&#039;&#039; has changed. The &#039;&#039;Visualization&#039;&#039; is notified whenever records of the &#039;&#039;Table&#039;&#039; have changed, new ones were inserted, or existing ones were deleted.&lt;br /&gt;
* A user-interaction forces a new layout of the items. &lt;br /&gt;
* A user-interaction changes the filtering process.  &lt;br /&gt;
&lt;br /&gt;
Painting itself is done by &#039;&#039;Renderers&#039;&#039;. Each &#039;&#039;Visualization&#039;&#039; has an associated &#039;&#039;Renderer&#039;&#039; which can consist of several other &#039;&#039;Renderers&#039;&#039; again. A &#039;&#039;Renderer&#039;&#039; provides the painting routines for an item which are based on visual attributes of the &#039;&#039;Visualization&#039;&#039;. Further, a &#039;&#039;Renderer&#039;&#039; may also handle user interactions (e.g., clicking on an item).&lt;br /&gt;
&lt;br /&gt;
Before an item is actually painted, also other visualization techniques may influence the output. Examples for such techniques are fisheye views or dynamic labeling. &lt;br /&gt;
&lt;br /&gt;
==Components==&lt;br /&gt;
&lt;br /&gt;
In &#039;&#039;Components&#039;&#039; a large set of interaction components are concentrated. Predefined components are combined within own control panels and include sliders to change size or colors of items, components to set filter expressions, or handler to select items. Such interactions are typically applied by using dynamic queries or changing visual attributes manually.&lt;br /&gt;
&lt;br /&gt;
Note, that interactions in the &#039;&#039;&#039;InfoVis ToolKit&#039;&#039;&#039; may change columns in the underlying table. Further, the table is also used to store flags that indicates the actual state of an tuple.&lt;br /&gt;
&lt;br /&gt;
==Image==&lt;br /&gt;
&lt;br /&gt;
The image is the visual output of the [[Information Visualization]]. In contrast to other toolkit, the &#039;&#039;InfoVis Toolkit&#039;&#039; does not demand a certain component to render its output. Painting is done by using the Java Graphics2D environment. Therefore, also a &#039;&#039;BufferedImage&#039;&#039; can be used for example. However, the default view is the &#039;&#039;VisualizationPanel&#039;&#039; and derivates of it. A &#039;&#039;VisualizationPanel&#039;&#039; is a &#039;&#039;JComponent&#039;&#039;, therefore, the view also inherits the functionality of the Swing component. This component also supports events on the view that can be handled by the view itself or delegated to the respective &#039;&#039;Renderer&#039;&#039; or other event handler. &lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;InfoVis Toolkit&#039;&#039; partially supports the Agile2D graphics framework which allows faster paintings of 2D graphics. &lt;br /&gt;
&lt;br /&gt;
=Details=&lt;br /&gt;
&lt;br /&gt;
==Package Structure==&lt;br /&gt;
&lt;br /&gt;
; io&lt;br /&gt;
: basic readers and writers. &lt;br /&gt;
; metadata&lt;br /&gt;
: several metadata categories.&lt;br /&gt;
; panel&lt;br /&gt;
: contains several &amp;quot;view&amp;quot; implementations and components that provides interaction possibilities.&lt;br /&gt;
; visualization&lt;br /&gt;
: this package contains several implementations of &#039;&#039;Visualizations&#039;&#039; and other basic classes like interfaces for layouts. Further, &#039;&#039;Renderer&#039;&#039; and other helper classes are included here. &lt;br /&gt;
; column&lt;br /&gt;
: provides the basic implementation of a &#039;&#039;Column&#039;&#039; and special derivates of it.&lt;br /&gt;
; table&lt;br /&gt;
: provides a set of classes related to visualization of tables.&lt;br /&gt;
; tree&lt;br /&gt;
: provides a set of classes related to visualization of trees.&lt;br /&gt;
; graph&lt;br /&gt;
: provides a set of classes related to visualization of graphs.&lt;br /&gt;
; utils&lt;br /&gt;
: contains several helper classes like comparators, etc &amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Conclusion=&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;InfoVis Toolkit&#039;&#039; is a toolkit, which pays most attention toward saving resources. Even if there is a measurable advantage in comparison to other toolkits, there are other factors like usability or simplicity too that characterize a good toolkit. The toolkit is very hard to use, at least there is no underlying logic a developer can conceive quickly. But, the toolkit provides a lot of examples for standard problems, like scatter plots, etc. These predefined applications are easy to use if no special demands of the [[Information Visualization]] are needed. Nevertheless, many included examples are buggy or partially not runable anyway. When using a predefined sample, an exact testing is necessary.&lt;br /&gt;
&lt;br /&gt;
= External links =&lt;br /&gt;
*[http://ivtk.sourceforge.net The InfoVis Toolkit]&lt;br /&gt;
*[http://www.cs.umd.edu/hcil/agile2d Agile2D]&lt;br /&gt;
&lt;br /&gt;
= References =&lt;br /&gt;
*[Fekete, 2004] Jean-Daniel Fekete. [http://www.lri.fr/~fekete/ps/ivtk-04.pdf The InfoVis Toolkit]. Proceedings of the 10th IEEE Symposium on Information Visualization (InfoVis&#039;04), Austin, TX, IEEE Press. pp. 17-24, Oct 2004.&lt;br /&gt;
*[Fekete, 2003] Jean-Daniel Fekete. [http://www.inria.fr/rrrt/rr-4818.html The InfoVis Toolkit (Rapport de Recherche)] Research Report RR-4818, INRIA Futurs, May 2003.&lt;br /&gt;
*[Fekete, 2004] Jean-Daniel Fekete, user manual. Retrieved at: July 06, 2006, http://ivtk.sourceforge.net/manual.html&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Toolkits]]&lt;/div&gt;</summary>
		<author><name>Anfe</name></author>
	</entry>
	<entry>
		<id>https://infovis-wiki.net/w/index.php?title=Prefuse&amp;diff=10404</id>
		<title>Prefuse</title>
		<link rel="alternate" type="text/html" href="https://infovis-wiki.net/w/index.php?title=Prefuse&amp;diff=10404"/>
		<updated>2006-08-20T12:48:36Z</updated>

		<summary type="html">&lt;p&gt;Anfe: /* Conclusion */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Summary =&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Author&#039;&#039;&#039;: Jeffrey Heer / UC Berkeley&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Project Webpage&#039;&#039;&#039;: http://prefuse.org&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Current Version&#039;&#039;&#039;: beta, June 15, 2006&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Requirements&#039;&#039;&#039;: Java 1.4&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Overview:&#039;&#039;&#039; using Java2D graphics library; pipeline architecture; animation and rendering support&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Base data structures&#039;&#039;&#039;: Table, Graph, Tree&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Included visualization techniques:&#039;&#039;&#039; [http://prefuse.org/gallery/fisheyemenu/ Fisheye Menu], [http://prefuse.org/gallery/radialgraphview/ Radial Graph], [http://prefuse.org/gallery/treemap/ Treemap], [http://prefuse.sourceforge.net/demos-distortion.html F+C Distortion]&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Supported File Formats&#039;&#039;&#039;: XGMML (XML), TreeML (XML), tab-delimited text, HDir&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;prefuse&#039;&#039;&#039; is an interactive graphical open source toolkit written in Java. It is thought to support the development of sophisticated, highly interactive, and flexible [[Information Visualization]]s. The architecture of &#039;&#039;&#039;prefuse&#039;&#039;&#039; considers the [[Visualization Pipeline]], a recommendation on how to implement a visualization. To provide flexibility, a [[polylithic design]] was chosen which enables developers to implement only needed functionality and customize these to meet the own requirements. But, in contrast to a [[monolithic design]], this design needs more time to conceive and influences the architecture of the own application heavily (which is not a disadvantage as &#039;&#039;&#039;prefuse&#039;&#039;&#039; is very elaborate). &lt;br /&gt;
&lt;br /&gt;
Typically, &#039;&#039;&#039;prefuse&#039;&#039;&#039; is designed to visualize interrelated information so it can be stored in a graph or tree structure, but, also not related data can be used which is stored within a data table. Even if the structure is hierarchical, the resulting tree or graph structure must not be considered in the proper graphical representation as layout algorithms are not restricted in any way. The painting of visual items is done by using a renderer which has access to the respective item itself and the Graphics2D context of the view. This approach enables to use the whole range of available painting methods of Java, therefore, all painting issues are completely independent of the toolkit itself.&lt;br /&gt;
&lt;br /&gt;
Besides providing a large set of predefined elements to visualize data, most attention was set toward usability of the visualization. This is obtained by applying several interaction techniques like tooltips or dragging visual elements. But also more sophisticated techniques like [[zoom]]ing, [[pan]]ning, or [[semantic zoom]]ing are supported or partially even provided by the toolkit itself. Further, &#039;&#039;&#039;prefuse&#039;&#039;&#039; clearly distinguishes between absolute and view coordinates. This separation helps users to place all visual elements in a logical way without consideration of later applied visualization techniques that changes the entire view.  &lt;br /&gt;
&lt;br /&gt;
=== Pros ===&lt;br /&gt;
&lt;br /&gt;
* flexible&lt;br /&gt;
* versatile pipeline approach&lt;br /&gt;
* clear and well thought architecture&lt;br /&gt;
* many layout and distortion algorithms included&lt;br /&gt;
* algorithms for force-based physics simulation included&lt;br /&gt;
* custom animations (smooth transitions)&lt;br /&gt;
* color maps&lt;br /&gt;
* query language to navigate within abstract data&lt;br /&gt;
* demos and examples included&lt;br /&gt;
* bounding management&lt;br /&gt;
* open source&lt;br /&gt;
* documentation of code and general guidance available&lt;br /&gt;
* active developer community &lt;br /&gt;
&lt;br /&gt;
=== Cons ===&lt;br /&gt;
&lt;br /&gt;
* [[polylithic design]] takes up more time to conceive and see first results&lt;br /&gt;
* special requirements of a visualization enforce a lot of adapting work&lt;br /&gt;
&lt;br /&gt;
=General Approach=&lt;br /&gt;
&lt;br /&gt;
Going along with the step-wise recommendation of the [[Visualization Pipeline]], a &#039;&#039;&#039;prefuse&#039;&#039;&#039; application consists of different states of data:&lt;br /&gt;
&lt;br /&gt;
[[Image:prefuse_visualization_pipeline.gif|600px]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;prefuse&#039;&#039;&#039; uses a centralized object called &#039;&#039;Visualization&#039;&#039; (former &#039;&#039;ItemRegistry&#039;&#039;) which maintains and manages the whole visualization. This object has to fulfil several tasks. It stores the abstract data as well as visual analogous of these in two different tables. All transformation routines like filtering or rendering are managed and executed by the &#039;&#039;Visualization&#039;&#039; too. Further, it refers to at least one &#039;&#039;Display&#039;&#039;, a graphical component which can represent visual elements of the &#039;&#039;Visualization&#039;&#039;. &lt;br /&gt;
&lt;br /&gt;
Transformation routines are defined as &#039;&#039;Actions&#039;&#039; which are combined in &#039;&#039;ActionLists&#039;&#039;. An &#039;&#039;ActionList&#039;&#039; is an executable container which is started manually by a user or automatically by the &#039;&#039;Visualization&#039;&#039;. Once such a list is started, all defined &#039;&#039;Actions&#039;&#039; are executed in the given sequence. Typically, the last called &#039;&#039;Action&#039;&#039; is the &#039;&#039;RepaintAction&#039;&#039; which forces all belonging &#039;&#039;Displays&#039;&#039; of the &#039;&#039;Visualization&#039;&#039; to repaint themselves. &lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;Display&#039;&#039; is the view of &#039;&#039;&#039;prefuse&#039;&#039;&#039;. It can be embedded in each Java Swing application. The main task of a &#039;&#039;Display&#039;&#039; is the painting of visual structures which are defined in the respective &#039;&#039;Visualization&#039;&#039;. Whenever the &#039;&#039;Display&#039;&#039; performs a repaint, it requests all visual items and checks all bounds of them (bounding management). If an item is within the own area the respective rendering mechanism is called.  &lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;Display&#039;&#039; also provides navigation techniques like [[zoom]]ing or [[pan]]ning which change the view. The view itself refers to a separate coordinate system. View coordinates are described through an affine transformation matrix. Any navigation technique applied to the view only concerns the view coordinate system. The most important functionalities to work with this coordinate system are already predefined. Typically, users just have to apply whished techniques without considering technical details like the view coordinate system. &lt;br /&gt;
&lt;br /&gt;
Furthermore, a &#039;&#039;Display&#039;&#039; also maintains a set of &#039;&#039;ControlListener&#039;&#039; which are used to process user interactions (mouse or keyboard events). Whenever such an event occurs the respective listener is called. A listener already differs on where the event happened (e.g., blank area or a certain item). Further, a &#039;&#039;ControlListener&#039;&#039; may also start an &#039;&#039;ActionList&#039;&#039; again.&lt;br /&gt;
&lt;br /&gt;
==Source Data==&lt;br /&gt;
&lt;br /&gt;
Raw data is the base of the application. Typically, the source of raw data is a file, but also other sources like a database or web content are thinkable. However, &#039;&#039;&#039;prefuse&#039;&#039;&#039; provides several file readers for different formats (CSV, Tab-Delimitated, etc.) that can be transformed into a data table. Further, some readers also support the reading of SQL-Databases. If another source is needed, a reader can be written manually.&lt;br /&gt;
&lt;br /&gt;
Once the raw data is read, it is transformed into abstract data and stored within a data table of the &#039;&#039;Visualization&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
==Data Table==&lt;br /&gt;
&lt;br /&gt;
The data table which is used to store abstract data works with data types and a definition schema which maps relations between data-type and table. That means, each row contains a data record, and each column contains values for a named data field with a specific data-type. Each record of the table is referred as a &#039;&#039;Tuple&#039;&#039;. &lt;br /&gt;
&lt;br /&gt;
Furthermore, instead of the table, also a graph or tree may be used to store interrelated data. Instead of &#039;&#039;Tuples&#039;&#039;, records are referred as &#039;&#039;Nodes&#039;&#039; which are connected to others with &#039;&#039;Edges&#039;&#039;. Additionally, a tree has one defined root &#039;&#039;Node&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Abstract data does not contain any visual information like assignment attributes or color settings. Instead, own visual analogous are created. Visual attributes of them are extracted out of the abstract data following a defined logic.&lt;br /&gt;
&lt;br /&gt;
==Visual Abstraction==&lt;br /&gt;
&lt;br /&gt;
Visual structures are created when filtering the data container which contains the abstract data. In case of a visualization that displays all items from the beginning on, the filtering routine must only executed once at initializing time. If the visual content changes dynamically, the filtering is executed on certain user interactions by calling a defined filtering &#039;&#039;ActionList&#039;&#039;. &lt;br /&gt;
&lt;br /&gt;
A visual structure is referred as &#039;&#039;VisualItem&#039;&#039; which may be distinguished as &#039;&#039;VisualNode&#039;&#039;, &#039;&#039;VisualEdge&#039;&#039;, or an aggregated item which consists of several other items. However, as a &#039;&#039;VisualItem&#039;&#039; is extended of the respective abstract entity, it has full access to all abstract information too. &lt;br /&gt;
&lt;br /&gt;
The filtering routine which transforms the abstract data to visual analogues typically consists of following &#039;&#039;Actions&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Filter&#039;&#039;&#039;: This &#039;&#039;Action&#039;&#039; is responsible to transform the abstract data of the backing table to visual analogues. If no special conditions are defined, the filter creates for each &#039;&#039;Tuple&#039;&#039; a visual instance and stores them in a second table. Additionally, a filter also performs a garbage collection and may set visibility attributes of the created items. &lt;br /&gt;
* &#039;&#039;&#039;Layout&#039;&#039;&#039;: A layout takes care about placing the &#039;&#039;VisualItems&#039;&#039;. Several common algorithms for graphs or trees are already predefined (e.g., &#039;&#039;ForceDirectedLayout&#039;&#039; or &#039;&#039;RadialTreeLayout&#039;&#039;). &lt;br /&gt;
* &#039;&#039;&#039;Assignment&#039;&#039;&#039;: Besides layouting, also other assignments may be performed during the filtering process. Such assignments directly changes visual attributes of &#039;&#039;VisualItems&#039;&#039; like colors, sizes, fonts, etc.&lt;br /&gt;
&lt;br /&gt;
A visual structure may also contain a paint routine, but, as all painting jobs are initialized or performed by separated renderers, these issues may also be executed by the renderer itself or any other object.&lt;br /&gt;
&lt;br /&gt;
==View==&lt;br /&gt;
&lt;br /&gt;
Typically, the rendered visual structure is not stored, instead, they are re-rendered whenever needed. However, in case of very complex but constant visual representations it makes sense to hold items in an offscreen image. &lt;br /&gt;
&lt;br /&gt;
Each &#039;&#039;VisualItem&#039;&#039; has got one or more associated &#039;&#039;Renderers&#039;&#039; which are maintained by a factory of the &#039;&#039;Visualization&#039;&#039;. A &#039;&#039;Renderer&#039;&#039; has to perform two tasks:&lt;br /&gt;
&lt;br /&gt;
* Providing a bounding box of the item. This box is used to determine if the item must actually be painted or if it would not be visible anyway. &lt;br /&gt;
* Providing the painting routine of the item. Paintings may be executed by the &#039;&#039;Renderer&#039;&#039; itself or delegated to other objects which are accessible of the &#039;&#039;Renderer&#039;&#039;. The painting routines are not restricted in any way, but the proper representation should not exceed the bounding box of the item. &lt;br /&gt;
&lt;br /&gt;
Rendering is always performed on a repaint of the &#039;&#039;Display&#039;&#039;. A repaint can be requested by the &#039;&#039;Visualization&#039;&#039;, on user interaction, and on events like resizing the component, getting the focus, or changing the coordinate system of the view. However, as repaints may occur very often, developers have to ascertain that rendering jobs are performed fast, otherwise, the performance of the whole visualization would suffer.&lt;br /&gt;
&lt;br /&gt;
=Details=&lt;br /&gt;
&lt;br /&gt;
==Package Structure==&lt;br /&gt;
&lt;br /&gt;
Following picture shows the most important packages of &#039;&#039;&#039;prefuse&#039;&#039;&#039; regarding to the [[Visualization Pipeline]]:&lt;br /&gt;
&lt;br /&gt;
[[Image:prefuse_package_guide.gif|600px]]&lt;br /&gt;
&lt;br /&gt;
These packages also contain predefined components. Default &#039;&#039;Nodes&#039;&#039; and &#039;&#039;Edges&#039;&#039; provide standard functionality of abstract data, standard functionality is also available in visual analogous of them. A default filter transforms all defined abstract entities to visual ones. Further, also some special functionalities to fulfil common requirements are provided by own components: &lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Renderers&#039;&#039;&#039;: &#039;&#039;EdgeRenderer&#039;&#039; to render edges between graph or tree nodes, a &#039;&#039;LableRenderer&#039;&#039; to render text items, and a &#039;&#039;PolygoneRenderer&#039;&#039; to render geometrical items. &lt;br /&gt;
* &#039;&#039;&#039;Layouts&#039;&#039;&#039;: &#039;&#039;RandomLayout&#039;&#039;, &#039;&#039;GridLayout&#039;&#039;, and some more to place non related data, &#039;&#039;ForceDirectedLayout&#039;&#039;, &#039;&#039;TreeLayout&#039;&#039;, &#039;&#039;RadialTreeLayout&#039;&#039; and others to layout trees and graphs.&lt;br /&gt;
* &#039;&#039;&#039;Controls&#039;&#039;&#039;: &#039;&#039;DragControl&#039;&#039;, &#039;&#039;ZoomControl&#039;&#039;, &#039;&#039;PanControl&#039;&#039;, &#039;&#039;ToolTipControl&#039;&#039; and several others to react on user interactions. &lt;br /&gt;
&lt;br /&gt;
In simple visualizations the predefined functionality will meet most requirements. If special requirements are needed the default functionality supports a step-wise developing as results can be communicated by predefined components until the own functionality is implemented.&lt;br /&gt;
&lt;br /&gt;
==Coordinates in prefuse==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;prefuse&#039;&#039;&#039; works with two different coordinate systems. Absolute coordinates are device-independent logical coordinates. All visual attributes like positions or sizes are defined in absolute coordinates. In contrast, view coordinates are device-depended (screen). Transformations between absolute and view coordinates are done automatically by Java painting routines. View coordinates are influenced by the system and device driver (e.g., the absolute point (0,0) is the topmost left point of the actual graphical component which may be on any position at the screen). Further, view coordinates may also be manipulated manually by using an affine transformation matrix which applies linear transformations on absolute coordinates before device-dependent routines convert them to screen coordinates. &lt;br /&gt;
&lt;br /&gt;
A &#039;&#039;&#039;prefuse&#039;&#039;&#039; &#039;&#039;Display&#039;&#039; provides the most important manipulating methods of this matrix. [[Zoom]]ing, [[pan]]ning, and rotation of the whole view are only done by changing the view coordinates. So, as absolute coordinates are never concerned of such transformations and translations, a user must never consider the actual view in layout, assignment, or painting routines. &lt;br /&gt;
&lt;br /&gt;
There are several different ways on how to apply such transformations, additionally, the &#039;&#039;Display&#039;&#039; also supports animated transformations.&lt;br /&gt;
&lt;br /&gt;
==User Interactions==&lt;br /&gt;
&lt;br /&gt;
Mouse or keyboard events are treated by &#039;&#039;ControlListener&#039;&#039;. Whenever an event occurs which is handled by a &#039;&#039;ControlListener&#039;&#039;, the &#039;&#039;Display&#039;&#039; delegates the event to the respective routine. A &#039;&#039;ControlListener&#039;&#039; disdinguishes automatically which visual element is concerned of the event (the view itself or a &#039;&#039;VisualItem&#039;&#039;). &lt;br /&gt;
&lt;br /&gt;
A &#039;&#039;ControlListener&#039;&#039; may just perform simple tasks like changing the mouse cursor or editing the label of an item. But, in more sophisticated applications, also tasks like loading new data or dragging items on the view may be handled. Therefore, a &#039;&#039;ControlListener&#039;&#039; may also start &#039;&#039;ActionLists&#039;&#039; to execute such tasks. Further, a &#039;&#039;ControlListener&#039;&#039; has also access to the &#039;&#039;Display&#039;&#039;. Thus, it is able to call methods like zooming or panning. Typically, each &#039;&#039;ControlListener&#039;&#039; forces a repaint when its job is done.  &lt;br /&gt;
&lt;br /&gt;
Most of standard functionality is already predefined in &#039;&#039;prefuse&#039;&#039; and the wanted listeners just have to be assigned to the &#039;&#039;Display&#039;&#039;. However, the &#039;&#039;Display&#039;&#039; can handle a countless of different listener. Hence, typically only a few listeners must be defined manually as they can be mixed with default ones.&lt;br /&gt;
&lt;br /&gt;
=Conclusion=&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;prefuse&#039;&#039;&#039; is a very powerful toolkit, providing a large set of components and methods a developer needs to build an [[Information Visualization]]. The [[polylithic design]] is not that easy to understand in the beginning of a development, but once conceived, a visualization is easy to realize even if really special demands have to be fulfilled. Furthermore, using Prefuse forces a clear and well designed architecture of own applications.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;prefuse&#039;&#039;&#039; was created with most attention paid to developers who will finally work with the toolkit. In an evaluation study this goal was approved too. In the meanwhile, there is also a not so small community using and upgrading the toolkit, which is an argument for its usability.&lt;br /&gt;
&lt;br /&gt;
= External links =&lt;br /&gt;
*[http://prefuse.org prefuse Homepage]&lt;br /&gt;
*[http://vw.indiana.edu/ivsi2004/jherr/index.html prefuse Position Paper]&lt;br /&gt;
*[http://sourceforge.net/forum/forum.php?forum_id=343013 prefuse Help Forum]&lt;br /&gt;
&lt;br /&gt;
= References =&lt;br /&gt;
*[Heer, 2004] Jeffrey Heer. [http://jheer.org/publications/2004-Heer-prefuse-Masters.pdf prefuse: a software framework for interactive information visualization]. Masters of Science, Computer Science Division, University of California, Berkeley, 2004.&lt;br /&gt;
*[Heer, 2005] Jeffrey Heer, Stuart K. Card, and James A. Landay. [http://jheer.org/publications/2005-prefuse-CHI.pdf prefuse: a toolkit for interactive information visualization.] In CHI 2005, Human Factors in Computing Systems, 2005.&lt;br /&gt;
*[Heer, 2006a] Jeffrey Heer, prefuse API documentation. Retrieved at: July 06, 2006, http://prefuse.org&lt;br /&gt;
*[Heer, 2006b] Jeffrey Heer, prefuse manual. Retrieved at: July 06, 2006, http://prefuse.org&lt;br /&gt;
*[Sun Microsystems, 2001] Sun Microsystems, Programmer’s Guide to the Java 2DTM API - Enhanced Graphics and Imaging for Java. Retrieved at: April 20, 2006, http://java.sun.com/j2se/1.4/pdf/j2d-book.pdf&lt;br /&gt;
&lt;br /&gt;
[[Category:Toolkits]]&lt;/div&gt;</summary>
		<author><name>Anfe</name></author>
	</entry>
	<entry>
		<id>https://infovis-wiki.net/w/index.php?title=Prefuse&amp;diff=10403</id>
		<title>Prefuse</title>
		<link rel="alternate" type="text/html" href="https://infovis-wiki.net/w/index.php?title=Prefuse&amp;diff=10403"/>
		<updated>2006-08-20T12:47:23Z</updated>

		<summary type="html">&lt;p&gt;Anfe: /* User Interactions */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Summary =&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Author&#039;&#039;&#039;: Jeffrey Heer / UC Berkeley&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Project Webpage&#039;&#039;&#039;: http://prefuse.org&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Current Version&#039;&#039;&#039;: beta, June 15, 2006&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Requirements&#039;&#039;&#039;: Java 1.4&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Overview:&#039;&#039;&#039; using Java2D graphics library; pipeline architecture; animation and rendering support&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Base data structures&#039;&#039;&#039;: Table, Graph, Tree&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Included visualization techniques:&#039;&#039;&#039; [http://prefuse.org/gallery/fisheyemenu/ Fisheye Menu], [http://prefuse.org/gallery/radialgraphview/ Radial Graph], [http://prefuse.org/gallery/treemap/ Treemap], [http://prefuse.sourceforge.net/demos-distortion.html F+C Distortion]&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Supported File Formats&#039;&#039;&#039;: XGMML (XML), TreeML (XML), tab-delimited text, HDir&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;prefuse&#039;&#039;&#039; is an interactive graphical open source toolkit written in Java. It is thought to support the development of sophisticated, highly interactive, and flexible [[Information Visualization]]s. The architecture of &#039;&#039;&#039;prefuse&#039;&#039;&#039; considers the [[Visualization Pipeline]], a recommendation on how to implement a visualization. To provide flexibility, a [[polylithic design]] was chosen which enables developers to implement only needed functionality and customize these to meet the own requirements. But, in contrast to a [[monolithic design]], this design needs more time to conceive and influences the architecture of the own application heavily (which is not a disadvantage as &#039;&#039;&#039;prefuse&#039;&#039;&#039; is very elaborate). &lt;br /&gt;
&lt;br /&gt;
Typically, &#039;&#039;&#039;prefuse&#039;&#039;&#039; is designed to visualize interrelated information so it can be stored in a graph or tree structure, but, also not related data can be used which is stored within a data table. Even if the structure is hierarchical, the resulting tree or graph structure must not be considered in the proper graphical representation as layout algorithms are not restricted in any way. The painting of visual items is done by using a renderer which has access to the respective item itself and the Graphics2D context of the view. This approach enables to use the whole range of available painting methods of Java, therefore, all painting issues are completely independent of the toolkit itself.&lt;br /&gt;
&lt;br /&gt;
Besides providing a large set of predefined elements to visualize data, most attention was set toward usability of the visualization. This is obtained by applying several interaction techniques like tooltips or dragging visual elements. But also more sophisticated techniques like [[zoom]]ing, [[pan]]ning, or [[semantic zoom]]ing are supported or partially even provided by the toolkit itself. Further, &#039;&#039;&#039;prefuse&#039;&#039;&#039; clearly distinguishes between absolute and view coordinates. This separation helps users to place all visual elements in a logical way without consideration of later applied visualization techniques that changes the entire view.  &lt;br /&gt;
&lt;br /&gt;
=== Pros ===&lt;br /&gt;
&lt;br /&gt;
* flexible&lt;br /&gt;
* versatile pipeline approach&lt;br /&gt;
* clear and well thought architecture&lt;br /&gt;
* many layout and distortion algorithms included&lt;br /&gt;
* algorithms for force-based physics simulation included&lt;br /&gt;
* custom animations (smooth transitions)&lt;br /&gt;
* color maps&lt;br /&gt;
* query language to navigate within abstract data&lt;br /&gt;
* demos and examples included&lt;br /&gt;
* bounding management&lt;br /&gt;
* open source&lt;br /&gt;
* documentation of code and general guidance available&lt;br /&gt;
* active developer community &lt;br /&gt;
&lt;br /&gt;
=== Cons ===&lt;br /&gt;
&lt;br /&gt;
* [[polylithic design]] takes up more time to conceive and see first results&lt;br /&gt;
* special requirements of a visualization enforce a lot of adapting work&lt;br /&gt;
&lt;br /&gt;
=General Approach=&lt;br /&gt;
&lt;br /&gt;
Going along with the step-wise recommendation of the [[Visualization Pipeline]], a &#039;&#039;&#039;prefuse&#039;&#039;&#039; application consists of different states of data:&lt;br /&gt;
&lt;br /&gt;
[[Image:prefuse_visualization_pipeline.gif|600px]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;prefuse&#039;&#039;&#039; uses a centralized object called &#039;&#039;Visualization&#039;&#039; (former &#039;&#039;ItemRegistry&#039;&#039;) which maintains and manages the whole visualization. This object has to fulfil several tasks. It stores the abstract data as well as visual analogous of these in two different tables. All transformation routines like filtering or rendering are managed and executed by the &#039;&#039;Visualization&#039;&#039; too. Further, it refers to at least one &#039;&#039;Display&#039;&#039;, a graphical component which can represent visual elements of the &#039;&#039;Visualization&#039;&#039;. &lt;br /&gt;
&lt;br /&gt;
Transformation routines are defined as &#039;&#039;Actions&#039;&#039; which are combined in &#039;&#039;ActionLists&#039;&#039;. An &#039;&#039;ActionList&#039;&#039; is an executable container which is started manually by a user or automatically by the &#039;&#039;Visualization&#039;&#039;. Once such a list is started, all defined &#039;&#039;Actions&#039;&#039; are executed in the given sequence. Typically, the last called &#039;&#039;Action&#039;&#039; is the &#039;&#039;RepaintAction&#039;&#039; which forces all belonging &#039;&#039;Displays&#039;&#039; of the &#039;&#039;Visualization&#039;&#039; to repaint themselves. &lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;Display&#039;&#039; is the view of &#039;&#039;&#039;prefuse&#039;&#039;&#039;. It can be embedded in each Java Swing application. The main task of a &#039;&#039;Display&#039;&#039; is the painting of visual structures which are defined in the respective &#039;&#039;Visualization&#039;&#039;. Whenever the &#039;&#039;Display&#039;&#039; performs a repaint, it requests all visual items and checks all bounds of them (bounding management). If an item is within the own area the respective rendering mechanism is called.  &lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;Display&#039;&#039; also provides navigation techniques like [[zoom]]ing or [[pan]]ning which change the view. The view itself refers to a separate coordinate system. View coordinates are described through an affine transformation matrix. Any navigation technique applied to the view only concerns the view coordinate system. The most important functionalities to work with this coordinate system are already predefined. Typically, users just have to apply whished techniques without considering technical details like the view coordinate system. &lt;br /&gt;
&lt;br /&gt;
Furthermore, a &#039;&#039;Display&#039;&#039; also maintains a set of &#039;&#039;ControlListener&#039;&#039; which are used to process user interactions (mouse or keyboard events). Whenever such an event occurs the respective listener is called. A listener already differs on where the event happened (e.g., blank area or a certain item). Further, a &#039;&#039;ControlListener&#039;&#039; may also start an &#039;&#039;ActionList&#039;&#039; again.&lt;br /&gt;
&lt;br /&gt;
==Source Data==&lt;br /&gt;
&lt;br /&gt;
Raw data is the base of the application. Typically, the source of raw data is a file, but also other sources like a database or web content are thinkable. However, &#039;&#039;&#039;prefuse&#039;&#039;&#039; provides several file readers for different formats (CSV, Tab-Delimitated, etc.) that can be transformed into a data table. Further, some readers also support the reading of SQL-Databases. If another source is needed, a reader can be written manually.&lt;br /&gt;
&lt;br /&gt;
Once the raw data is read, it is transformed into abstract data and stored within a data table of the &#039;&#039;Visualization&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
==Data Table==&lt;br /&gt;
&lt;br /&gt;
The data table which is used to store abstract data works with data types and a definition schema which maps relations between data-type and table. That means, each row contains a data record, and each column contains values for a named data field with a specific data-type. Each record of the table is referred as a &#039;&#039;Tuple&#039;&#039;. &lt;br /&gt;
&lt;br /&gt;
Furthermore, instead of the table, also a graph or tree may be used to store interrelated data. Instead of &#039;&#039;Tuples&#039;&#039;, records are referred as &#039;&#039;Nodes&#039;&#039; which are connected to others with &#039;&#039;Edges&#039;&#039;. Additionally, a tree has one defined root &#039;&#039;Node&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Abstract data does not contain any visual information like assignment attributes or color settings. Instead, own visual analogous are created. Visual attributes of them are extracted out of the abstract data following a defined logic.&lt;br /&gt;
&lt;br /&gt;
==Visual Abstraction==&lt;br /&gt;
&lt;br /&gt;
Visual structures are created when filtering the data container which contains the abstract data. In case of a visualization that displays all items from the beginning on, the filtering routine must only executed once at initializing time. If the visual content changes dynamically, the filtering is executed on certain user interactions by calling a defined filtering &#039;&#039;ActionList&#039;&#039;. &lt;br /&gt;
&lt;br /&gt;
A visual structure is referred as &#039;&#039;VisualItem&#039;&#039; which may be distinguished as &#039;&#039;VisualNode&#039;&#039;, &#039;&#039;VisualEdge&#039;&#039;, or an aggregated item which consists of several other items. However, as a &#039;&#039;VisualItem&#039;&#039; is extended of the respective abstract entity, it has full access to all abstract information too. &lt;br /&gt;
&lt;br /&gt;
The filtering routine which transforms the abstract data to visual analogues typically consists of following &#039;&#039;Actions&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Filter&#039;&#039;&#039;: This &#039;&#039;Action&#039;&#039; is responsible to transform the abstract data of the backing table to visual analogues. If no special conditions are defined, the filter creates for each &#039;&#039;Tuple&#039;&#039; a visual instance and stores them in a second table. Additionally, a filter also performs a garbage collection and may set visibility attributes of the created items. &lt;br /&gt;
* &#039;&#039;&#039;Layout&#039;&#039;&#039;: A layout takes care about placing the &#039;&#039;VisualItems&#039;&#039;. Several common algorithms for graphs or trees are already predefined (e.g., &#039;&#039;ForceDirectedLayout&#039;&#039; or &#039;&#039;RadialTreeLayout&#039;&#039;). &lt;br /&gt;
* &#039;&#039;&#039;Assignment&#039;&#039;&#039;: Besides layouting, also other assignments may be performed during the filtering process. Such assignments directly changes visual attributes of &#039;&#039;VisualItems&#039;&#039; like colors, sizes, fonts, etc.&lt;br /&gt;
&lt;br /&gt;
A visual structure may also contain a paint routine, but, as all painting jobs are initialized or performed by separated renderers, these issues may also be executed by the renderer itself or any other object.&lt;br /&gt;
&lt;br /&gt;
==View==&lt;br /&gt;
&lt;br /&gt;
Typically, the rendered visual structure is not stored, instead, they are re-rendered whenever needed. However, in case of very complex but constant visual representations it makes sense to hold items in an offscreen image. &lt;br /&gt;
&lt;br /&gt;
Each &#039;&#039;VisualItem&#039;&#039; has got one or more associated &#039;&#039;Renderers&#039;&#039; which are maintained by a factory of the &#039;&#039;Visualization&#039;&#039;. A &#039;&#039;Renderer&#039;&#039; has to perform two tasks:&lt;br /&gt;
&lt;br /&gt;
* Providing a bounding box of the item. This box is used to determine if the item must actually be painted or if it would not be visible anyway. &lt;br /&gt;
* Providing the painting routine of the item. Paintings may be executed by the &#039;&#039;Renderer&#039;&#039; itself or delegated to other objects which are accessible of the &#039;&#039;Renderer&#039;&#039;. The painting routines are not restricted in any way, but the proper representation should not exceed the bounding box of the item. &lt;br /&gt;
&lt;br /&gt;
Rendering is always performed on a repaint of the &#039;&#039;Display&#039;&#039;. A repaint can be requested by the &#039;&#039;Visualization&#039;&#039;, on user interaction, and on events like resizing the component, getting the focus, or changing the coordinate system of the view. However, as repaints may occur very often, developers have to ascertain that rendering jobs are performed fast, otherwise, the performance of the whole visualization would suffer.&lt;br /&gt;
&lt;br /&gt;
=Details=&lt;br /&gt;
&lt;br /&gt;
==Package Structure==&lt;br /&gt;
&lt;br /&gt;
Following picture shows the most important packages of &#039;&#039;&#039;prefuse&#039;&#039;&#039; regarding to the [[Visualization Pipeline]]:&lt;br /&gt;
&lt;br /&gt;
[[Image:prefuse_package_guide.gif|600px]]&lt;br /&gt;
&lt;br /&gt;
These packages also contain predefined components. Default &#039;&#039;Nodes&#039;&#039; and &#039;&#039;Edges&#039;&#039; provide standard functionality of abstract data, standard functionality is also available in visual analogous of them. A default filter transforms all defined abstract entities to visual ones. Further, also some special functionalities to fulfil common requirements are provided by own components: &lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Renderers&#039;&#039;&#039;: &#039;&#039;EdgeRenderer&#039;&#039; to render edges between graph or tree nodes, a &#039;&#039;LableRenderer&#039;&#039; to render text items, and a &#039;&#039;PolygoneRenderer&#039;&#039; to render geometrical items. &lt;br /&gt;
* &#039;&#039;&#039;Layouts&#039;&#039;&#039;: &#039;&#039;RandomLayout&#039;&#039;, &#039;&#039;GridLayout&#039;&#039;, and some more to place non related data, &#039;&#039;ForceDirectedLayout&#039;&#039;, &#039;&#039;TreeLayout&#039;&#039;, &#039;&#039;RadialTreeLayout&#039;&#039; and others to layout trees and graphs.&lt;br /&gt;
* &#039;&#039;&#039;Controls&#039;&#039;&#039;: &#039;&#039;DragControl&#039;&#039;, &#039;&#039;ZoomControl&#039;&#039;, &#039;&#039;PanControl&#039;&#039;, &#039;&#039;ToolTipControl&#039;&#039; and several others to react on user interactions. &lt;br /&gt;
&lt;br /&gt;
In simple visualizations the predefined functionality will meet most requirements. If special requirements are needed the default functionality supports a step-wise developing as results can be communicated by predefined components until the own functionality is implemented.&lt;br /&gt;
&lt;br /&gt;
==Coordinates in prefuse==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;prefuse&#039;&#039;&#039; works with two different coordinate systems. Absolute coordinates are device-independent logical coordinates. All visual attributes like positions or sizes are defined in absolute coordinates. In contrast, view coordinates are device-depended (screen). Transformations between absolute and view coordinates are done automatically by Java painting routines. View coordinates are influenced by the system and device driver (e.g., the absolute point (0,0) is the topmost left point of the actual graphical component which may be on any position at the screen). Further, view coordinates may also be manipulated manually by using an affine transformation matrix which applies linear transformations on absolute coordinates before device-dependent routines convert them to screen coordinates. &lt;br /&gt;
&lt;br /&gt;
A &#039;&#039;&#039;prefuse&#039;&#039;&#039; &#039;&#039;Display&#039;&#039; provides the most important manipulating methods of this matrix. [[Zoom]]ing, [[pan]]ning, and rotation of the whole view are only done by changing the view coordinates. So, as absolute coordinates are never concerned of such transformations and translations, a user must never consider the actual view in layout, assignment, or painting routines. &lt;br /&gt;
&lt;br /&gt;
There are several different ways on how to apply such transformations, additionally, the &#039;&#039;Display&#039;&#039; also supports animated transformations.&lt;br /&gt;
&lt;br /&gt;
==User Interactions==&lt;br /&gt;
&lt;br /&gt;
Mouse or keyboard events are treated by &#039;&#039;ControlListener&#039;&#039;. Whenever an event occurs which is handled by a &#039;&#039;ControlListener&#039;&#039;, the &#039;&#039;Display&#039;&#039; delegates the event to the respective routine. A &#039;&#039;ControlListener&#039;&#039; disdinguishes automatically which visual element is concerned of the event (the view itself or a &#039;&#039;VisualItem&#039;&#039;). &lt;br /&gt;
&lt;br /&gt;
A &#039;&#039;ControlListener&#039;&#039; may just perform simple tasks like changing the mouse cursor or editing the label of an item. But, in more sophisticated applications, also tasks like loading new data or dragging items on the view may be handled. Therefore, a &#039;&#039;ControlListener&#039;&#039; may also start &#039;&#039;ActionLists&#039;&#039; to execute such tasks. Further, a &#039;&#039;ControlListener&#039;&#039; has also access to the &#039;&#039;Display&#039;&#039;. Thus, it is able to call methods like zooming or panning. Typically, each &#039;&#039;ControlListener&#039;&#039; forces a repaint when its job is done.  &lt;br /&gt;
&lt;br /&gt;
Most of standard functionality is already predefined in &#039;&#039;prefuse&#039;&#039; and the wanted listeners just have to be assigned to the &#039;&#039;Display&#039;&#039;. However, the &#039;&#039;Display&#039;&#039; can handle a countless of different listener. Hence, typically only a few listeners must be defined manually as they can be mixed with default ones.&lt;br /&gt;
&lt;br /&gt;
=Conclusion=&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;prefuse&#039;&#039;&#039; is a very powerful toolkit, providing a large set of components and methods a developer needs to build an [[Information Visualization]]. The [[polylithic design]] is not that easy to understand in the beginning of a development, but once conceived, a visualization is easy to realize even if really special demands have to be fulfilled. Furthermore, using Prefuse forces a clear and well designed architecture of own applications.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;prefuse&#039;&#039;&#039; was created with most attention paid to developers who will finally work with the toolkit. In an evaluation study this goal was approved too. In the meanwhile, there is also a not so small community using and upgrading the toolkit, which is an argue for its usability.&lt;br /&gt;
&lt;br /&gt;
= External links =&lt;br /&gt;
*[http://prefuse.org prefuse Homepage]&lt;br /&gt;
*[http://vw.indiana.edu/ivsi2004/jherr/index.html prefuse Position Paper]&lt;br /&gt;
*[http://sourceforge.net/forum/forum.php?forum_id=343013 prefuse Help Forum]&lt;br /&gt;
&lt;br /&gt;
= References =&lt;br /&gt;
*[Heer, 2004] Jeffrey Heer. [http://jheer.org/publications/2004-Heer-prefuse-Masters.pdf prefuse: a software framework for interactive information visualization]. Masters of Science, Computer Science Division, University of California, Berkeley, 2004.&lt;br /&gt;
*[Heer, 2005] Jeffrey Heer, Stuart K. Card, and James A. Landay. [http://jheer.org/publications/2005-prefuse-CHI.pdf prefuse: a toolkit for interactive information visualization.] In CHI 2005, Human Factors in Computing Systems, 2005.&lt;br /&gt;
*[Heer, 2006a] Jeffrey Heer, prefuse API documentation. Retrieved at: July 06, 2006, http://prefuse.org&lt;br /&gt;
*[Heer, 2006b] Jeffrey Heer, prefuse manual. Retrieved at: July 06, 2006, http://prefuse.org&lt;br /&gt;
*[Sun Microsystems, 2001] Sun Microsystems, Programmer’s Guide to the Java 2DTM API - Enhanced Graphics and Imaging for Java. Retrieved at: April 20, 2006, http://java.sun.com/j2se/1.4/pdf/j2d-book.pdf&lt;br /&gt;
&lt;br /&gt;
[[Category:Toolkits]]&lt;/div&gt;</summary>
		<author><name>Anfe</name></author>
	</entry>
	<entry>
		<id>https://infovis-wiki.net/w/index.php?title=Prefuse&amp;diff=10402</id>
		<title>Prefuse</title>
		<link rel="alternate" type="text/html" href="https://infovis-wiki.net/w/index.php?title=Prefuse&amp;diff=10402"/>
		<updated>2006-08-20T12:44:17Z</updated>

		<summary type="html">&lt;p&gt;Anfe: /* Package Structure */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Summary =&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Author&#039;&#039;&#039;: Jeffrey Heer / UC Berkeley&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Project Webpage&#039;&#039;&#039;: http://prefuse.org&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Current Version&#039;&#039;&#039;: beta, June 15, 2006&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Requirements&#039;&#039;&#039;: Java 1.4&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Overview:&#039;&#039;&#039; using Java2D graphics library; pipeline architecture; animation and rendering support&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Base data structures&#039;&#039;&#039;: Table, Graph, Tree&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Included visualization techniques:&#039;&#039;&#039; [http://prefuse.org/gallery/fisheyemenu/ Fisheye Menu], [http://prefuse.org/gallery/radialgraphview/ Radial Graph], [http://prefuse.org/gallery/treemap/ Treemap], [http://prefuse.sourceforge.net/demos-distortion.html F+C Distortion]&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Supported File Formats&#039;&#039;&#039;: XGMML (XML), TreeML (XML), tab-delimited text, HDir&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;prefuse&#039;&#039;&#039; is an interactive graphical open source toolkit written in Java. It is thought to support the development of sophisticated, highly interactive, and flexible [[Information Visualization]]s. The architecture of &#039;&#039;&#039;prefuse&#039;&#039;&#039; considers the [[Visualization Pipeline]], a recommendation on how to implement a visualization. To provide flexibility, a [[polylithic design]] was chosen which enables developers to implement only needed functionality and customize these to meet the own requirements. But, in contrast to a [[monolithic design]], this design needs more time to conceive and influences the architecture of the own application heavily (which is not a disadvantage as &#039;&#039;&#039;prefuse&#039;&#039;&#039; is very elaborate). &lt;br /&gt;
&lt;br /&gt;
Typically, &#039;&#039;&#039;prefuse&#039;&#039;&#039; is designed to visualize interrelated information so it can be stored in a graph or tree structure, but, also not related data can be used which is stored within a data table. Even if the structure is hierarchical, the resulting tree or graph structure must not be considered in the proper graphical representation as layout algorithms are not restricted in any way. The painting of visual items is done by using a renderer which has access to the respective item itself and the Graphics2D context of the view. This approach enables to use the whole range of available painting methods of Java, therefore, all painting issues are completely independent of the toolkit itself.&lt;br /&gt;
&lt;br /&gt;
Besides providing a large set of predefined elements to visualize data, most attention was set toward usability of the visualization. This is obtained by applying several interaction techniques like tooltips or dragging visual elements. But also more sophisticated techniques like [[zoom]]ing, [[pan]]ning, or [[semantic zoom]]ing are supported or partially even provided by the toolkit itself. Further, &#039;&#039;&#039;prefuse&#039;&#039;&#039; clearly distinguishes between absolute and view coordinates. This separation helps users to place all visual elements in a logical way without consideration of later applied visualization techniques that changes the entire view.  &lt;br /&gt;
&lt;br /&gt;
=== Pros ===&lt;br /&gt;
&lt;br /&gt;
* flexible&lt;br /&gt;
* versatile pipeline approach&lt;br /&gt;
* clear and well thought architecture&lt;br /&gt;
* many layout and distortion algorithms included&lt;br /&gt;
* algorithms for force-based physics simulation included&lt;br /&gt;
* custom animations (smooth transitions)&lt;br /&gt;
* color maps&lt;br /&gt;
* query language to navigate within abstract data&lt;br /&gt;
* demos and examples included&lt;br /&gt;
* bounding management&lt;br /&gt;
* open source&lt;br /&gt;
* documentation of code and general guidance available&lt;br /&gt;
* active developer community &lt;br /&gt;
&lt;br /&gt;
=== Cons ===&lt;br /&gt;
&lt;br /&gt;
* [[polylithic design]] takes up more time to conceive and see first results&lt;br /&gt;
* special requirements of a visualization enforce a lot of adapting work&lt;br /&gt;
&lt;br /&gt;
=General Approach=&lt;br /&gt;
&lt;br /&gt;
Going along with the step-wise recommendation of the [[Visualization Pipeline]], a &#039;&#039;&#039;prefuse&#039;&#039;&#039; application consists of different states of data:&lt;br /&gt;
&lt;br /&gt;
[[Image:prefuse_visualization_pipeline.gif|600px]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;prefuse&#039;&#039;&#039; uses a centralized object called &#039;&#039;Visualization&#039;&#039; (former &#039;&#039;ItemRegistry&#039;&#039;) which maintains and manages the whole visualization. This object has to fulfil several tasks. It stores the abstract data as well as visual analogous of these in two different tables. All transformation routines like filtering or rendering are managed and executed by the &#039;&#039;Visualization&#039;&#039; too. Further, it refers to at least one &#039;&#039;Display&#039;&#039;, a graphical component which can represent visual elements of the &#039;&#039;Visualization&#039;&#039;. &lt;br /&gt;
&lt;br /&gt;
Transformation routines are defined as &#039;&#039;Actions&#039;&#039; which are combined in &#039;&#039;ActionLists&#039;&#039;. An &#039;&#039;ActionList&#039;&#039; is an executable container which is started manually by a user or automatically by the &#039;&#039;Visualization&#039;&#039;. Once such a list is started, all defined &#039;&#039;Actions&#039;&#039; are executed in the given sequence. Typically, the last called &#039;&#039;Action&#039;&#039; is the &#039;&#039;RepaintAction&#039;&#039; which forces all belonging &#039;&#039;Displays&#039;&#039; of the &#039;&#039;Visualization&#039;&#039; to repaint themselves. &lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;Display&#039;&#039; is the view of &#039;&#039;&#039;prefuse&#039;&#039;&#039;. It can be embedded in each Java Swing application. The main task of a &#039;&#039;Display&#039;&#039; is the painting of visual structures which are defined in the respective &#039;&#039;Visualization&#039;&#039;. Whenever the &#039;&#039;Display&#039;&#039; performs a repaint, it requests all visual items and checks all bounds of them (bounding management). If an item is within the own area the respective rendering mechanism is called.  &lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;Display&#039;&#039; also provides navigation techniques like [[zoom]]ing or [[pan]]ning which change the view. The view itself refers to a separate coordinate system. View coordinates are described through an affine transformation matrix. Any navigation technique applied to the view only concerns the view coordinate system. The most important functionalities to work with this coordinate system are already predefined. Typically, users just have to apply whished techniques without considering technical details like the view coordinate system. &lt;br /&gt;
&lt;br /&gt;
Furthermore, a &#039;&#039;Display&#039;&#039; also maintains a set of &#039;&#039;ControlListener&#039;&#039; which are used to process user interactions (mouse or keyboard events). Whenever such an event occurs the respective listener is called. A listener already differs on where the event happened (e.g., blank area or a certain item). Further, a &#039;&#039;ControlListener&#039;&#039; may also start an &#039;&#039;ActionList&#039;&#039; again.&lt;br /&gt;
&lt;br /&gt;
==Source Data==&lt;br /&gt;
&lt;br /&gt;
Raw data is the base of the application. Typically, the source of raw data is a file, but also other sources like a database or web content are thinkable. However, &#039;&#039;&#039;prefuse&#039;&#039;&#039; provides several file readers for different formats (CSV, Tab-Delimitated, etc.) that can be transformed into a data table. Further, some readers also support the reading of SQL-Databases. If another source is needed, a reader can be written manually.&lt;br /&gt;
&lt;br /&gt;
Once the raw data is read, it is transformed into abstract data and stored within a data table of the &#039;&#039;Visualization&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
==Data Table==&lt;br /&gt;
&lt;br /&gt;
The data table which is used to store abstract data works with data types and a definition schema which maps relations between data-type and table. That means, each row contains a data record, and each column contains values for a named data field with a specific data-type. Each record of the table is referred as a &#039;&#039;Tuple&#039;&#039;. &lt;br /&gt;
&lt;br /&gt;
Furthermore, instead of the table, also a graph or tree may be used to store interrelated data. Instead of &#039;&#039;Tuples&#039;&#039;, records are referred as &#039;&#039;Nodes&#039;&#039; which are connected to others with &#039;&#039;Edges&#039;&#039;. Additionally, a tree has one defined root &#039;&#039;Node&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Abstract data does not contain any visual information like assignment attributes or color settings. Instead, own visual analogous are created. Visual attributes of them are extracted out of the abstract data following a defined logic.&lt;br /&gt;
&lt;br /&gt;
==Visual Abstraction==&lt;br /&gt;
&lt;br /&gt;
Visual structures are created when filtering the data container which contains the abstract data. In case of a visualization that displays all items from the beginning on, the filtering routine must only executed once at initializing time. If the visual content changes dynamically, the filtering is executed on certain user interactions by calling a defined filtering &#039;&#039;ActionList&#039;&#039;. &lt;br /&gt;
&lt;br /&gt;
A visual structure is referred as &#039;&#039;VisualItem&#039;&#039; which may be distinguished as &#039;&#039;VisualNode&#039;&#039;, &#039;&#039;VisualEdge&#039;&#039;, or an aggregated item which consists of several other items. However, as a &#039;&#039;VisualItem&#039;&#039; is extended of the respective abstract entity, it has full access to all abstract information too. &lt;br /&gt;
&lt;br /&gt;
The filtering routine which transforms the abstract data to visual analogues typically consists of following &#039;&#039;Actions&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Filter&#039;&#039;&#039;: This &#039;&#039;Action&#039;&#039; is responsible to transform the abstract data of the backing table to visual analogues. If no special conditions are defined, the filter creates for each &#039;&#039;Tuple&#039;&#039; a visual instance and stores them in a second table. Additionally, a filter also performs a garbage collection and may set visibility attributes of the created items. &lt;br /&gt;
* &#039;&#039;&#039;Layout&#039;&#039;&#039;: A layout takes care about placing the &#039;&#039;VisualItems&#039;&#039;. Several common algorithms for graphs or trees are already predefined (e.g., &#039;&#039;ForceDirectedLayout&#039;&#039; or &#039;&#039;RadialTreeLayout&#039;&#039;). &lt;br /&gt;
* &#039;&#039;&#039;Assignment&#039;&#039;&#039;: Besides layouting, also other assignments may be performed during the filtering process. Such assignments directly changes visual attributes of &#039;&#039;VisualItems&#039;&#039; like colors, sizes, fonts, etc.&lt;br /&gt;
&lt;br /&gt;
A visual structure may also contain a paint routine, but, as all painting jobs are initialized or performed by separated renderers, these issues may also be executed by the renderer itself or any other object.&lt;br /&gt;
&lt;br /&gt;
==View==&lt;br /&gt;
&lt;br /&gt;
Typically, the rendered visual structure is not stored, instead, they are re-rendered whenever needed. However, in case of very complex but constant visual representations it makes sense to hold items in an offscreen image. &lt;br /&gt;
&lt;br /&gt;
Each &#039;&#039;VisualItem&#039;&#039; has got one or more associated &#039;&#039;Renderers&#039;&#039; which are maintained by a factory of the &#039;&#039;Visualization&#039;&#039;. A &#039;&#039;Renderer&#039;&#039; has to perform two tasks:&lt;br /&gt;
&lt;br /&gt;
* Providing a bounding box of the item. This box is used to determine if the item must actually be painted or if it would not be visible anyway. &lt;br /&gt;
* Providing the painting routine of the item. Paintings may be executed by the &#039;&#039;Renderer&#039;&#039; itself or delegated to other objects which are accessible of the &#039;&#039;Renderer&#039;&#039;. The painting routines are not restricted in any way, but the proper representation should not exceed the bounding box of the item. &lt;br /&gt;
&lt;br /&gt;
Rendering is always performed on a repaint of the &#039;&#039;Display&#039;&#039;. A repaint can be requested by the &#039;&#039;Visualization&#039;&#039;, on user interaction, and on events like resizing the component, getting the focus, or changing the coordinate system of the view. However, as repaints may occur very often, developers have to ascertain that rendering jobs are performed fast, otherwise, the performance of the whole visualization would suffer.&lt;br /&gt;
&lt;br /&gt;
=Details=&lt;br /&gt;
&lt;br /&gt;
==Package Structure==&lt;br /&gt;
&lt;br /&gt;
Following picture shows the most important packages of &#039;&#039;&#039;prefuse&#039;&#039;&#039; regarding to the [[Visualization Pipeline]]:&lt;br /&gt;
&lt;br /&gt;
[[Image:prefuse_package_guide.gif|600px]]&lt;br /&gt;
&lt;br /&gt;
These packages also contain predefined components. Default &#039;&#039;Nodes&#039;&#039; and &#039;&#039;Edges&#039;&#039; provide standard functionality of abstract data, standard functionality is also available in visual analogous of them. A default filter transforms all defined abstract entities to visual ones. Further, also some special functionalities to fulfil common requirements are provided by own components: &lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Renderers&#039;&#039;&#039;: &#039;&#039;EdgeRenderer&#039;&#039; to render edges between graph or tree nodes, a &#039;&#039;LableRenderer&#039;&#039; to render text items, and a &#039;&#039;PolygoneRenderer&#039;&#039; to render geometrical items. &lt;br /&gt;
* &#039;&#039;&#039;Layouts&#039;&#039;&#039;: &#039;&#039;RandomLayout&#039;&#039;, &#039;&#039;GridLayout&#039;&#039;, and some more to place non related data, &#039;&#039;ForceDirectedLayout&#039;&#039;, &#039;&#039;TreeLayout&#039;&#039;, &#039;&#039;RadialTreeLayout&#039;&#039; and others to layout trees and graphs.&lt;br /&gt;
* &#039;&#039;&#039;Controls&#039;&#039;&#039;: &#039;&#039;DragControl&#039;&#039;, &#039;&#039;ZoomControl&#039;&#039;, &#039;&#039;PanControl&#039;&#039;, &#039;&#039;ToolTipControl&#039;&#039; and several others to react on user interactions. &lt;br /&gt;
&lt;br /&gt;
In simple visualizations the predefined functionality will meet most requirements. If special requirements are needed the default functionality supports a step-wise developing as results can be communicated by predefined components until the own functionality is implemented.&lt;br /&gt;
&lt;br /&gt;
==Coordinates in prefuse==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;prefuse&#039;&#039;&#039; works with two different coordinate systems. Absolute coordinates are device-independent logical coordinates. All visual attributes like positions or sizes are defined in absolute coordinates. In contrast, view coordinates are device-depended (screen). Transformations between absolute and view coordinates are done automatically by Java painting routines. View coordinates are influenced by the system and device driver (e.g., the absolute point (0,0) is the topmost left point of the actual graphical component which may be on any position at the screen). Further, view coordinates may also be manipulated manually by using an affine transformation matrix which applies linear transformations on absolute coordinates before device-dependent routines convert them to screen coordinates. &lt;br /&gt;
&lt;br /&gt;
A &#039;&#039;&#039;prefuse&#039;&#039;&#039; &#039;&#039;Display&#039;&#039; provides the most important manipulating methods of this matrix. [[Zoom]]ing, [[pan]]ning, and rotation of the whole view are only done by changing the view coordinates. So, as absolute coordinates are never concerned of such transformations and translations, a user must never consider the actual view in layout, assignment, or painting routines. &lt;br /&gt;
&lt;br /&gt;
There are several different ways on how to apply such transformations, additionally, the &#039;&#039;Display&#039;&#039; also supports animated transformations.&lt;br /&gt;
&lt;br /&gt;
==User Interactions==&lt;br /&gt;
&lt;br /&gt;
Mouse or keyboard events are treated by &#039;&#039;ControlListener&#039;&#039;. Whenever an event occurs which is handled by a &#039;&#039;ControlListener&#039;&#039;, the &#039;&#039;Display&#039;&#039; delegates the event to the respective routine. A &#039;&#039;ControlListener&#039;&#039; differs automatically which visual element is concerned of the event (the view itself or a &#039;&#039;VisualItem&#039;&#039;). &lt;br /&gt;
&lt;br /&gt;
A &#039;&#039;ControlListener&#039;&#039; may just perform simple tasks like changing the mouse cursor or editing the label of an item. But, in more sophisticated applications, also tasks like loading new data or dragging items on the view may be handled. Therefore, a &#039;&#039;ControlListener&#039;&#039; may also start &#039;&#039;ActionLists&#039;&#039; to execute such tasks. Further, a &#039;&#039;ControlListener&#039;&#039; has also access to the &#039;&#039;Display&#039;&#039;. Thus, it is able to call methods like zooming or panning. Typically, each &#039;&#039;ControlListener&#039;&#039; forces a repaint when its job is done.  &lt;br /&gt;
&lt;br /&gt;
Most of standard functionality is already predefined in &#039;&#039;prefuse&#039;&#039; and the wanted listeners just have to be set to the &#039;&#039;Display&#039;&#039;. However, the &#039;&#039;Display&#039;&#039; can handle a countless of different listener. Hence, typically only a few listeners must be defined manually as they can be mixed with default ones.&lt;br /&gt;
&lt;br /&gt;
=Conclusion=&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;prefuse&#039;&#039;&#039; is a very powerful toolkit, providing a large set of components and methods a developer needs to build an [[Information Visualization]]. The [[polylithic design]] is not that easy to understand in the beginning of a development, but once conceived, a visualization is easy to realize even if really special demands have to be fulfilled. Furthermore, using Prefuse forces a clear and well designed architecture of own applications.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;prefuse&#039;&#039;&#039; was created with most attention paid to developers who will finally work with the toolkit. In an evaluation study this goal was approved too. In the meanwhile, there is also a not so small community using and upgrading the toolkit, which is an argue for its usability.&lt;br /&gt;
&lt;br /&gt;
= External links =&lt;br /&gt;
*[http://prefuse.org prefuse Homepage]&lt;br /&gt;
*[http://vw.indiana.edu/ivsi2004/jherr/index.html prefuse Position Paper]&lt;br /&gt;
*[http://sourceforge.net/forum/forum.php?forum_id=343013 prefuse Help Forum]&lt;br /&gt;
&lt;br /&gt;
= References =&lt;br /&gt;
*[Heer, 2004] Jeffrey Heer. [http://jheer.org/publications/2004-Heer-prefuse-Masters.pdf prefuse: a software framework for interactive information visualization]. Masters of Science, Computer Science Division, University of California, Berkeley, 2004.&lt;br /&gt;
*[Heer, 2005] Jeffrey Heer, Stuart K. Card, and James A. Landay. [http://jheer.org/publications/2005-prefuse-CHI.pdf prefuse: a toolkit for interactive information visualization.] In CHI 2005, Human Factors in Computing Systems, 2005.&lt;br /&gt;
*[Heer, 2006a] Jeffrey Heer, prefuse API documentation. Retrieved at: July 06, 2006, http://prefuse.org&lt;br /&gt;
*[Heer, 2006b] Jeffrey Heer, prefuse manual. Retrieved at: July 06, 2006, http://prefuse.org&lt;br /&gt;
*[Sun Microsystems, 2001] Sun Microsystems, Programmer’s Guide to the Java 2DTM API - Enhanced Graphics and Imaging for Java. Retrieved at: April 20, 2006, http://java.sun.com/j2se/1.4/pdf/j2d-book.pdf&lt;br /&gt;
&lt;br /&gt;
[[Category:Toolkits]]&lt;/div&gt;</summary>
		<author><name>Anfe</name></author>
	</entry>
	<entry>
		<id>https://infovis-wiki.net/w/index.php?title=Prefuse&amp;diff=10401</id>
		<title>Prefuse</title>
		<link rel="alternate" type="text/html" href="https://infovis-wiki.net/w/index.php?title=Prefuse&amp;diff=10401"/>
		<updated>2006-08-20T12:42:37Z</updated>

		<summary type="html">&lt;p&gt;Anfe: /* General Approach */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Summary =&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Author&#039;&#039;&#039;: Jeffrey Heer / UC Berkeley&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Project Webpage&#039;&#039;&#039;: http://prefuse.org&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Current Version&#039;&#039;&#039;: beta, June 15, 2006&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Requirements&#039;&#039;&#039;: Java 1.4&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Overview:&#039;&#039;&#039; using Java2D graphics library; pipeline architecture; animation and rendering support&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Base data structures&#039;&#039;&#039;: Table, Graph, Tree&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Included visualization techniques:&#039;&#039;&#039; [http://prefuse.org/gallery/fisheyemenu/ Fisheye Menu], [http://prefuse.org/gallery/radialgraphview/ Radial Graph], [http://prefuse.org/gallery/treemap/ Treemap], [http://prefuse.sourceforge.net/demos-distortion.html F+C Distortion]&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Supported File Formats&#039;&#039;&#039;: XGMML (XML), TreeML (XML), tab-delimited text, HDir&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;prefuse&#039;&#039;&#039; is an interactive graphical open source toolkit written in Java. It is thought to support the development of sophisticated, highly interactive, and flexible [[Information Visualization]]s. The architecture of &#039;&#039;&#039;prefuse&#039;&#039;&#039; considers the [[Visualization Pipeline]], a recommendation on how to implement a visualization. To provide flexibility, a [[polylithic design]] was chosen which enables developers to implement only needed functionality and customize these to meet the own requirements. But, in contrast to a [[monolithic design]], this design needs more time to conceive and influences the architecture of the own application heavily (which is not a disadvantage as &#039;&#039;&#039;prefuse&#039;&#039;&#039; is very elaborate). &lt;br /&gt;
&lt;br /&gt;
Typically, &#039;&#039;&#039;prefuse&#039;&#039;&#039; is designed to visualize interrelated information so it can be stored in a graph or tree structure, but, also not related data can be used which is stored within a data table. Even if the structure is hierarchical, the resulting tree or graph structure must not be considered in the proper graphical representation as layout algorithms are not restricted in any way. The painting of visual items is done by using a renderer which has access to the respective item itself and the Graphics2D context of the view. This approach enables to use the whole range of available painting methods of Java, therefore, all painting issues are completely independent of the toolkit itself.&lt;br /&gt;
&lt;br /&gt;
Besides providing a large set of predefined elements to visualize data, most attention was set toward usability of the visualization. This is obtained by applying several interaction techniques like tooltips or dragging visual elements. But also more sophisticated techniques like [[zoom]]ing, [[pan]]ning, or [[semantic zoom]]ing are supported or partially even provided by the toolkit itself. Further, &#039;&#039;&#039;prefuse&#039;&#039;&#039; clearly distinguishes between absolute and view coordinates. This separation helps users to place all visual elements in a logical way without consideration of later applied visualization techniques that changes the entire view.  &lt;br /&gt;
&lt;br /&gt;
=== Pros ===&lt;br /&gt;
&lt;br /&gt;
* flexible&lt;br /&gt;
* versatile pipeline approach&lt;br /&gt;
* clear and well thought architecture&lt;br /&gt;
* many layout and distortion algorithms included&lt;br /&gt;
* algorithms for force-based physics simulation included&lt;br /&gt;
* custom animations (smooth transitions)&lt;br /&gt;
* color maps&lt;br /&gt;
* query language to navigate within abstract data&lt;br /&gt;
* demos and examples included&lt;br /&gt;
* bounding management&lt;br /&gt;
* open source&lt;br /&gt;
* documentation of code and general guidance available&lt;br /&gt;
* active developer community &lt;br /&gt;
&lt;br /&gt;
=== Cons ===&lt;br /&gt;
&lt;br /&gt;
* [[polylithic design]] takes up more time to conceive and see first results&lt;br /&gt;
* special requirements of a visualization enforce a lot of adapting work&lt;br /&gt;
&lt;br /&gt;
=General Approach=&lt;br /&gt;
&lt;br /&gt;
Going along with the step-wise recommendation of the [[Visualization Pipeline]], a &#039;&#039;&#039;prefuse&#039;&#039;&#039; application consists of different states of data:&lt;br /&gt;
&lt;br /&gt;
[[Image:prefuse_visualization_pipeline.gif|600px]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;prefuse&#039;&#039;&#039; uses a centralized object called &#039;&#039;Visualization&#039;&#039; (former &#039;&#039;ItemRegistry&#039;&#039;) which maintains and manages the whole visualization. This object has to fulfil several tasks. It stores the abstract data as well as visual analogous of these in two different tables. All transformation routines like filtering or rendering are managed and executed by the &#039;&#039;Visualization&#039;&#039; too. Further, it refers to at least one &#039;&#039;Display&#039;&#039;, a graphical component which can represent visual elements of the &#039;&#039;Visualization&#039;&#039;. &lt;br /&gt;
&lt;br /&gt;
Transformation routines are defined as &#039;&#039;Actions&#039;&#039; which are combined in &#039;&#039;ActionLists&#039;&#039;. An &#039;&#039;ActionList&#039;&#039; is an executable container which is started manually by a user or automatically by the &#039;&#039;Visualization&#039;&#039;. Once such a list is started, all defined &#039;&#039;Actions&#039;&#039; are executed in the given sequence. Typically, the last called &#039;&#039;Action&#039;&#039; is the &#039;&#039;RepaintAction&#039;&#039; which forces all belonging &#039;&#039;Displays&#039;&#039; of the &#039;&#039;Visualization&#039;&#039; to repaint themselves. &lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;Display&#039;&#039; is the view of &#039;&#039;&#039;prefuse&#039;&#039;&#039;. It can be embedded in each Java Swing application. The main task of a &#039;&#039;Display&#039;&#039; is the painting of visual structures which are defined in the respective &#039;&#039;Visualization&#039;&#039;. Whenever the &#039;&#039;Display&#039;&#039; performs a repaint, it requests all visual items and checks all bounds of them (bounding management). If an item is within the own area the respective rendering mechanism is called.  &lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;Display&#039;&#039; also provides navigation techniques like [[zoom]]ing or [[pan]]ning which change the view. The view itself refers to a separate coordinate system. View coordinates are described through an affine transformation matrix. Any navigation technique applied to the view only concerns the view coordinate system. The most important functionalities to work with this coordinate system are already predefined. Typically, users just have to apply whished techniques without considering technical details like the view coordinate system. &lt;br /&gt;
&lt;br /&gt;
Furthermore, a &#039;&#039;Display&#039;&#039; also maintains a set of &#039;&#039;ControlListener&#039;&#039; which are used to process user interactions (mouse or keyboard events). Whenever such an event occurs the respective listener is called. A listener already differs on where the event happened (e.g., blank area or a certain item). Further, a &#039;&#039;ControlListener&#039;&#039; may also start an &#039;&#039;ActionList&#039;&#039; again.&lt;br /&gt;
&lt;br /&gt;
==Source Data==&lt;br /&gt;
&lt;br /&gt;
Raw data is the base of the application. Typically, the source of raw data is a file, but also other sources like a database or web content are thinkable. However, &#039;&#039;&#039;prefuse&#039;&#039;&#039; provides several file readers for different formats (CSV, Tab-Delimitated, etc.) that can be transformed into a data table. Further, some readers also support the reading of SQL-Databases. If another source is needed, a reader can be written manually.&lt;br /&gt;
&lt;br /&gt;
Once the raw data is read, it is transformed into abstract data and stored within a data table of the &#039;&#039;Visualization&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
==Data Table==&lt;br /&gt;
&lt;br /&gt;
The data table which is used to store abstract data works with data types and a definition schema which maps relations between data-type and table. That means, each row contains a data record, and each column contains values for a named data field with a specific data-type. Each record of the table is referred as a &#039;&#039;Tuple&#039;&#039;. &lt;br /&gt;
&lt;br /&gt;
Furthermore, instead of the table, also a graph or tree may be used to store interrelated data. Instead of &#039;&#039;Tuples&#039;&#039;, records are referred as &#039;&#039;Nodes&#039;&#039; which are connected to others with &#039;&#039;Edges&#039;&#039;. Additionally, a tree has one defined root &#039;&#039;Node&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Abstract data does not contain any visual information like assignment attributes or color settings. Instead, own visual analogous are created. Visual attributes of them are extracted out of the abstract data following a defined logic.&lt;br /&gt;
&lt;br /&gt;
==Visual Abstraction==&lt;br /&gt;
&lt;br /&gt;
Visual structures are created when filtering the data container which contains the abstract data. In case of a visualization that displays all items from the beginning on, the filtering routine must only executed once at initializing time. If the visual content changes dynamically, the filtering is executed on certain user interactions by calling a defined filtering &#039;&#039;ActionList&#039;&#039;. &lt;br /&gt;
&lt;br /&gt;
A visual structure is referred as &#039;&#039;VisualItem&#039;&#039; which may be distinguished as &#039;&#039;VisualNode&#039;&#039;, &#039;&#039;VisualEdge&#039;&#039;, or an aggregated item which consists of several other items. However, as a &#039;&#039;VisualItem&#039;&#039; is extended of the respective abstract entity, it has full access to all abstract information too. &lt;br /&gt;
&lt;br /&gt;
The filtering routine which transforms the abstract data to visual analogues typically consists of following &#039;&#039;Actions&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Filter&#039;&#039;&#039;: This &#039;&#039;Action&#039;&#039; is responsible to transform the abstract data of the backing table to visual analogues. If no special conditions are defined, the filter creates for each &#039;&#039;Tuple&#039;&#039; a visual instance and stores them in a second table. Additionally, a filter also performs a garbage collection and may set visibility attributes of the created items. &lt;br /&gt;
* &#039;&#039;&#039;Layout&#039;&#039;&#039;: A layout takes care about placing the &#039;&#039;VisualItems&#039;&#039;. Several common algorithms for graphs or trees are already predefined (e.g., &#039;&#039;ForceDirectedLayout&#039;&#039; or &#039;&#039;RadialTreeLayout&#039;&#039;). &lt;br /&gt;
* &#039;&#039;&#039;Assignment&#039;&#039;&#039;: Besides layouting, also other assignments may be performed during the filtering process. Such assignments directly changes visual attributes of &#039;&#039;VisualItems&#039;&#039; like colors, sizes, fonts, etc.&lt;br /&gt;
&lt;br /&gt;
A visual structure may also contain a paint routine, but, as all painting jobs are initialized or performed by separated renderers, these issues may also be executed by the renderer itself or any other object.&lt;br /&gt;
&lt;br /&gt;
==View==&lt;br /&gt;
&lt;br /&gt;
Typically, the rendered visual structure is not stored, instead, they are re-rendered whenever needed. However, in case of very complex but constant visual representations it makes sense to hold items in an offscreen image. &lt;br /&gt;
&lt;br /&gt;
Each &#039;&#039;VisualItem&#039;&#039; has got one or more associated &#039;&#039;Renderers&#039;&#039; which are maintained by a factory of the &#039;&#039;Visualization&#039;&#039;. A &#039;&#039;Renderer&#039;&#039; has to perform two tasks:&lt;br /&gt;
&lt;br /&gt;
* Providing a bounding box of the item. This box is used to determine if the item must actually be painted or if it would not be visible anyway. &lt;br /&gt;
* Providing the painting routine of the item. Paintings may be executed by the &#039;&#039;Renderer&#039;&#039; itself or delegated to other objects which are accessible of the &#039;&#039;Renderer&#039;&#039;. The painting routines are not restricted in any way, but the proper representation should not exceed the bounding box of the item. &lt;br /&gt;
&lt;br /&gt;
Rendering is always performed on a repaint of the &#039;&#039;Display&#039;&#039;. A repaint can be requested by the &#039;&#039;Visualization&#039;&#039;, on user interaction, and on events like resizing the component, getting the focus, or changing the coordinate system of the view. However, as repaints may occur very often, developers have to ascertain that rendering jobs are performed fast, otherwise, the performance of the whole visualization would suffer.&lt;br /&gt;
&lt;br /&gt;
=Details=&lt;br /&gt;
&lt;br /&gt;
==Package Structure==&lt;br /&gt;
&lt;br /&gt;
Following picture shows the most important packages of &#039;&#039;&#039;prefuse&#039;&#039;&#039; regarding to the [[Visualization Pipeline]]:&lt;br /&gt;
&lt;br /&gt;
[[Image:prefuse_package_guide.gif|600px]]&lt;br /&gt;
&lt;br /&gt;
These packages also contain predefined components. Default &#039;&#039;Nodes&#039;&#039; and &#039;&#039;Edges&#039;&#039; provide standard functionality of abstract data, standard functionality is also available in visual analogous of them. A default filter transforms all defined abstract entities to visual ones. Further, also some special functionality to fulfil common requirements are provided by own components: &lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Renderers&#039;&#039;&#039;: &#039;&#039;EdgeRenderer&#039;&#039; to render edges between graph or tree nodes, a &#039;&#039;LableRenderer&#039;&#039; to render text items, and a &#039;&#039;PolygoneRenderer&#039;&#039; to render geometrical items. &lt;br /&gt;
* &#039;&#039;&#039;Layouts&#039;&#039;&#039;: &#039;&#039;RandomLayout&#039;&#039;, &#039;&#039;GridLayout&#039;&#039;, and some more to place non related data, &#039;&#039;ForceDirectedLayout&#039;&#039;, &#039;&#039;TreeLayout&#039;&#039;, &#039;&#039;RadialTreeLayout&#039;&#039; and others to layout trees and graphs.&lt;br /&gt;
* &#039;&#039;&#039;Controls&#039;&#039;&#039;: &#039;&#039;DragControl&#039;&#039;, &#039;&#039;ZoomControl&#039;&#039;, &#039;&#039;PanControl&#039;&#039;, &#039;&#039;ToolTipControl&#039;&#039; and several others to react on user interactions. &lt;br /&gt;
&lt;br /&gt;
In simple visualizations the predefined functionality will meet most requirements. If special requirements are needed the default functionality supports a step-wise developing as results can be communicated by predefined components until the own functionality is implemented.&lt;br /&gt;
&lt;br /&gt;
==Coordinates in prefuse==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;prefuse&#039;&#039;&#039; works with two different coordinate systems. Absolute coordinates are device-independent logical coordinates. All visual attributes like positions or sizes are defined in absolute coordinates. In contrast, view coordinates are device-depended (screen). Transformations between absolute and view coordinates are done automatically by Java painting routines. View coordinates are influenced by the system and device driver (e.g., the absolute point (0,0) is the topmost left point of the actual graphical component which may be on any position at the screen). Further, view coordinates may also be manipulated manually by using an affine transformation matrix which applies linear transformations on absolute coordinates before device-dependent routines convert them to screen coordinates. &lt;br /&gt;
&lt;br /&gt;
A &#039;&#039;&#039;prefuse&#039;&#039;&#039; &#039;&#039;Display&#039;&#039; provides the most important manipulating methods of this matrix. [[Zoom]]ing, [[pan]]ning, and rotation of the whole view are only done by changing the view coordinates. So, as absolute coordinates are never concerned of such transformations and translations, a user must never consider the actual view in layout, assignment, or painting routines. &lt;br /&gt;
&lt;br /&gt;
There are several different ways on how to apply such transformations, additionally, the &#039;&#039;Display&#039;&#039; also supports animated transformations.&lt;br /&gt;
&lt;br /&gt;
==User Interactions==&lt;br /&gt;
&lt;br /&gt;
Mouse or keyboard events are treated by &#039;&#039;ControlListener&#039;&#039;. Whenever an event occurs which is handled by a &#039;&#039;ControlListener&#039;&#039;, the &#039;&#039;Display&#039;&#039; delegates the event to the respective routine. A &#039;&#039;ControlListener&#039;&#039; differs automatically which visual element is concerned of the event (the view itself or a &#039;&#039;VisualItem&#039;&#039;). &lt;br /&gt;
&lt;br /&gt;
A &#039;&#039;ControlListener&#039;&#039; may just perform simple tasks like changing the mouse cursor or editing the label of an item. But, in more sophisticated applications, also tasks like loading new data or dragging items on the view may be handled. Therefore, a &#039;&#039;ControlListener&#039;&#039; may also start &#039;&#039;ActionLists&#039;&#039; to execute such tasks. Further, a &#039;&#039;ControlListener&#039;&#039; has also access to the &#039;&#039;Display&#039;&#039;. Thus, it is able to call methods like zooming or panning. Typically, each &#039;&#039;ControlListener&#039;&#039; forces a repaint when its job is done.  &lt;br /&gt;
&lt;br /&gt;
Most of standard functionality is already predefined in &#039;&#039;prefuse&#039;&#039; and the wanted listeners just have to be set to the &#039;&#039;Display&#039;&#039;. However, the &#039;&#039;Display&#039;&#039; can handle a countless of different listener. Hence, typically only a few listeners must be defined manually as they can be mixed with default ones.&lt;br /&gt;
&lt;br /&gt;
=Conclusion=&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;prefuse&#039;&#039;&#039; is a very powerful toolkit, providing a large set of components and methods a developer needs to build an [[Information Visualization]]. The [[polylithic design]] is not that easy to understand in the beginning of a development, but once conceived, a visualization is easy to realize even if really special demands have to be fulfilled. Furthermore, using Prefuse forces a clear and well designed architecture of own applications.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;prefuse&#039;&#039;&#039; was created with most attention paid to developers who will finally work with the toolkit. In an evaluation study this goal was approved too. In the meanwhile, there is also a not so small community using and upgrading the toolkit, which is an argue for its usability.&lt;br /&gt;
&lt;br /&gt;
= External links =&lt;br /&gt;
*[http://prefuse.org prefuse Homepage]&lt;br /&gt;
*[http://vw.indiana.edu/ivsi2004/jherr/index.html prefuse Position Paper]&lt;br /&gt;
*[http://sourceforge.net/forum/forum.php?forum_id=343013 prefuse Help Forum]&lt;br /&gt;
&lt;br /&gt;
= References =&lt;br /&gt;
*[Heer, 2004] Jeffrey Heer. [http://jheer.org/publications/2004-Heer-prefuse-Masters.pdf prefuse: a software framework for interactive information visualization]. Masters of Science, Computer Science Division, University of California, Berkeley, 2004.&lt;br /&gt;
*[Heer, 2005] Jeffrey Heer, Stuart K. Card, and James A. Landay. [http://jheer.org/publications/2005-prefuse-CHI.pdf prefuse: a toolkit for interactive information visualization.] In CHI 2005, Human Factors in Computing Systems, 2005.&lt;br /&gt;
*[Heer, 2006a] Jeffrey Heer, prefuse API documentation. Retrieved at: July 06, 2006, http://prefuse.org&lt;br /&gt;
*[Heer, 2006b] Jeffrey Heer, prefuse manual. Retrieved at: July 06, 2006, http://prefuse.org&lt;br /&gt;
*[Sun Microsystems, 2001] Sun Microsystems, Programmer’s Guide to the Java 2DTM API - Enhanced Graphics and Imaging for Java. Retrieved at: April 20, 2006, http://java.sun.com/j2se/1.4/pdf/j2d-book.pdf&lt;br /&gt;
&lt;br /&gt;
[[Category:Toolkits]]&lt;/div&gt;</summary>
		<author><name>Anfe</name></author>
	</entry>
	<entry>
		<id>https://infovis-wiki.net/w/index.php?title=Pan&amp;diff=10389</id>
		<title>Pan</title>
		<link rel="alternate" type="text/html" href="https://infovis-wiki.net/w/index.php?title=Pan&amp;diff=10389"/>
		<updated>2006-08-02T16:29:00Z</updated>

		<summary type="html">&lt;p&gt;Anfe: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Panning is an interaction technique that helps to navigate within a view. Instead of using a bounded view, an user interface that supports panning typically has no bounds. That means, it is possible to navigate in any direction without limitations given through bounds. Mostly, navigation with panning is realized by dragging the mouse above a view and the view goes along with the mouse movements.&lt;br /&gt;
&lt;br /&gt;
See also: [[Scroll]]&lt;br /&gt;
[[Category: Glossary]]&lt;/div&gt;</summary>
		<author><name>Anfe</name></author>
	</entry>
	<entry>
		<id>https://infovis-wiki.net/w/index.php?title=Monolithic_design&amp;diff=10388</id>
		<title>Monolithic design</title>
		<link rel="alternate" type="text/html" href="https://infovis-wiki.net/w/index.php?title=Monolithic_design&amp;diff=10388"/>
		<updated>2006-08-02T16:28:12Z</updated>

		<summary type="html">&lt;p&gt;Anfe: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Generally, a monolithic design is given when a software provides its functionality centralised in one or just a few classes. Such classes are very powerful and typically easy to apply.&lt;br /&gt;
&lt;br /&gt;
Such a design does not need a complex architecture with a deep class structure though inheritances. Developer typically will not have troubles to conceive the software as only a few elements must be studied in detail (exept the top-level class is very complex). Further, such an approach typically ensures fast results when applying the software. This is obtained as such implementations typically do not provide excessive functionality, instead, they are specialized on a limited count of features that may be applied easily. &lt;br /&gt;
&lt;br /&gt;
However, in case of providing a lot of functionality such an approach may lead to unclear or sleazy code as there is no clear separation to other areas of the software. Further, it is hard to manipulate or change existing code, also extensions may be hard to realize. So, developers are well advised to implement more flexible code when a certain dimension of functionality is reached.&lt;br /&gt;
&lt;br /&gt;
In visualization a software is called monolithic when abstract data, visual structures, and rendering routines are not separated explicity.&lt;br /&gt;
&lt;br /&gt;
See also: [[polylithic design]]&lt;br /&gt;
[[Category: Glossary]]&lt;/div&gt;</summary>
		<author><name>Anfe</name></author>
	</entry>
	<entry>
		<id>https://infovis-wiki.net/w/index.php?title=Polylithic_design&amp;diff=10387</id>
		<title>Polylithic design</title>
		<link rel="alternate" type="text/html" href="https://infovis-wiki.net/w/index.php?title=Polylithic_design&amp;diff=10387"/>
		<updated>2006-08-02T16:28:02Z</updated>

		<summary type="html">&lt;p&gt;Anfe: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Generally, a polylithic design is given when a software provides a high count of different classes. Each class provides only a few functionality. These separated classes which are consolidated through several programming techniques like inheritance or generic concepts. &lt;br /&gt;
&lt;br /&gt;
A lot of separations allow developers to change or manipulate existing functionality selectively. Furthermore, a high abstraction of objects forces developer to implement well thought components which may also work correct when other components have changed. Typically, this results a clear, flexible, and elaborate architecture. Further, to code of single classes is less complex.&lt;br /&gt;
&lt;br /&gt;
Nevertheless, the large count of objects may also lead to not considered mistakes and makes it harder to understand the software. Further, the separation between objects can exceed a normal dimension. In case of too many classes developers will have problems in conceiving the whole architecture. Especially generic concepts (e.g., reflection) must applied very carefully as external developers often have no insight in such concepts. &lt;br /&gt;
&lt;br /&gt;
In visualization, especially the separation between abstract data, visual structures, and rendering routines is defined as polylithic design.&lt;br /&gt;
&lt;br /&gt;
See also: [[monolithic design]]&lt;br /&gt;
[[Category: Glossary]]&lt;/div&gt;</summary>
		<author><name>Anfe</name></author>
	</entry>
	<entry>
		<id>https://infovis-wiki.net/w/index.php?title=Polylithic_design&amp;diff=10381</id>
		<title>Polylithic design</title>
		<link rel="alternate" type="text/html" href="https://infovis-wiki.net/w/index.php?title=Polylithic_design&amp;diff=10381"/>
		<updated>2006-07-31T09:49:55Z</updated>

		<summary type="html">&lt;p&gt;Anfe: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Generally, a polylithic design is given when a software provides a high count of different classes. Each class provides only a few functionality. These separated classes which are consolidated through several programming techniques like inheritance or generic concepts. &lt;br /&gt;
&lt;br /&gt;
A lot of separations allow developers to change or manipulate existing functionality selectively. Furthermore, a high abstraction of objects forces developer to implement well thought components which may also work correct when other components have changed. Typically, this results a clear, flexible, and elaborate architecture. Further, to code of single classes is less complex.&lt;br /&gt;
&lt;br /&gt;
Nevertheless, the large count of objects may also lead to not considered mistakes and makes it harder to understand the software. Further, the separation between objects can exceed a normal dimension. In case of too many classes developers will have problems in conceiving the whole architecture. Especially generic concepts (e.g., reflection) must applied very carefully as external developers often have no insight in such concepts. &lt;br /&gt;
&lt;br /&gt;
In visualization, especially the separation between abstract data, visual structures, and rendering routines is defined as polylithic design.&lt;/div&gt;</summary>
		<author><name>Anfe</name></author>
	</entry>
	<entry>
		<id>https://infovis-wiki.net/w/index.php?title=Monolithic_design&amp;diff=10380</id>
		<title>Monolithic design</title>
		<link rel="alternate" type="text/html" href="https://infovis-wiki.net/w/index.php?title=Monolithic_design&amp;diff=10380"/>
		<updated>2006-07-31T09:40:44Z</updated>

		<summary type="html">&lt;p&gt;Anfe: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Generally, a monolithic design is given when a software provides its functionality centralised in one or just a few classes. Such classes are very powerful and typically easy to apply.&lt;br /&gt;
&lt;br /&gt;
Such a design does not need a complex architecture with a deep class structure though inheritances. Developer typically will not have troubles to conceive the software as only a few elements must be studied in detail (exept the top-level class is very complex). Further, such an approach typically ensures fast results when applying the software. This is obtained as such implementations typically do not provide excessive functionality, instead, they are specialized on a limited count of features that may be applied easily. &lt;br /&gt;
&lt;br /&gt;
However, in case of providing a lot of functionality such an approach may lead to unclear or sleazy code as there is no clear separation to other areas of the software. Further, it is hard to manipulate or change existing code, also extensions may be hard to realize. So, developers are well advised to implement more flexible code when a certain dimension of functionality is reached.&lt;br /&gt;
&lt;br /&gt;
In visualization a software is called monolithic when abstract data, visual structures, and rendering routines are not separated explicity.&lt;/div&gt;</summary>
		<author><name>Anfe</name></author>
	</entry>
	<entry>
		<id>https://infovis-wiki.net/w/index.php?title=The_InfoVis_Toolkit&amp;diff=10379</id>
		<title>The InfoVis Toolkit</title>
		<link rel="alternate" type="text/html" href="https://infovis-wiki.net/w/index.php?title=The_InfoVis_Toolkit&amp;diff=10379"/>
		<updated>2006-07-31T09:28:11Z</updated>

		<summary type="html">&lt;p&gt;Anfe: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Summary =&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Author&#039;&#039;&#039;: Jean-Daniel Fekete / University Paris-Sud&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Project Webpage&#039;&#039;&#039;: http://ivtk.sourceforge.net&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Current Version&#039;&#039;&#039;: 0.9 beta2, July 24, 2006&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Requirements&#039;&#039;&#039;: Java 1.4&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Overview:&#039;&#039;&#039; using Java2D graphics library; pipeline architecture; animation and rendering support&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039; Base data structure&#039;&#039;&#039;: table of columns; columns contain objects of equal type; trees and graphs are derived from tables&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039; Included visualization techniques:&#039;&#039;&#039; [http://www.itl.nist.gov/div898/handbook/eda/section3/scatterp.htm Scatter Plot]&amp;lt;nowiki&amp;gt;; &amp;lt;/nowiki&amp;gt;[http://www.rsmas.miami.edu/environment/wx/time-series-cstars.pl Time Series Plot]&amp;lt;nowiki&amp;gt;; &amp;lt;/nowiki&amp;gt;[http://catt.bus.okstate.edu/jones98/parallel.html Parallel Coordinates]&amp;lt;nowiki&amp;gt;; &amp;lt;/nowiki&amp;gt;[http://www-2.cs.cmu.edu/%7Esage/Papers/CHI90/DC.figure6.gif Node-Link Diagram]&amp;lt;nowiki&amp;gt;; &amp;lt;/nowiki&amp;gt;[http://www.sims.berkeley.edu/courses/is247/s02/readings/barlow.pdf Icicle Tree]&amp;lt;nowiki&amp;gt;; &amp;lt;/nowiki&amp;gt;[http://www.cs.umd.edu/hcil/treemap/ Treemap]&amp;lt;nowiki&amp;gt;; &amp;lt;/nowiki&amp;gt;[http://en.wikipedia.org/wiki/Adjacency_matrix Adjacency Matrix ]&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039; Supported File Formats&#039;&#039;&#039;: CSV, XML, TQD, Newick, TM3, DOT, XML TreeML, XML GraphML&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;&#039;InfoVis Toolkit&#039;&#039;&#039; is an interactive graphical open source toolkit written in Java. It is thought to support the development of [[Information Visualization]]s which are based on a high amount of data. To provide a fast and efficient processing of these data, special attention was paid to the underlying data structure. As the internal structure of the &#039;&#039;&#039;InfoVis Toolkit&#039;&#039;&#039; considers the [[Visualization Pipeline]], a data table was chosen to store all information. A table allows representing nearly every kind of data. Also interrelations between records can be established by using parent and children columns. The &#039;&#039;&#039;InfoVis Toolkit&#039;&#039;&#039; supports a graph structure as well as a tree structure.&lt;br /&gt;
&lt;br /&gt;
Generally, the table was optimized regarding to memory footprint and data access speed. This was obtained by using arrays of the respective type a column should map and metadata which describes the column itself. In contrast to other implementations of tables (e.g., Java Swing Table) this approach provides a measurable advantage in memory usage and access performance. But, these performance enhancements are paid with less comfort in using the table and handling single records in it. &lt;br /&gt;
&lt;br /&gt;
The design of the &#039;&#039;&#039;InfoVis Toolkit&#039;&#039;&#039; can be seen as [[polylithic design|polylithic]]. Even though the [[Visualization Pipeline]] is considered internally, nevertheless, there are no clearly defined points in the logic where a user can place its own functionality (in contrast to other toolkits like [[prefuse]] for example). Applying own filters or rendering routines may enforce deep changes in the base functionality. Furthermore, the class hierarchy is very deep and complex. So, even small extensions of the predefined functionality may cause a lot of adaptation work in several classes. &lt;br /&gt;
&lt;br /&gt;
However, the toolkit seems not be suitable to realize own complex [[Information Visualization|visualizations]] which requires a lot of special functionality. But, there are a lot of predefined visualization techniques that help to visualize data in a common way like scatter plots or treemaps. The toolkit provides a lot of examples that illustrate the appliance of such standard visualization techniques to own data sources. &lt;br /&gt;
&lt;br /&gt;
=== Pros ===&lt;br /&gt;
&lt;br /&gt;
* low memory usage&lt;br /&gt;
* fast data access, only a few typecasts are needed&lt;br /&gt;
* metadata to describe columns and tables&lt;br /&gt;
* internal pipeline approach&lt;br /&gt;
* many visualization techniques included&lt;br /&gt;
* several data reader for common formats included&lt;br /&gt;
* algorithms for force-based physics simulation included&lt;br /&gt;
* query language to navigate within abstract data&lt;br /&gt;
* demos and examples included&lt;br /&gt;
* open source&lt;br /&gt;
&lt;br /&gt;
=== Cons ===&lt;br /&gt;
&lt;br /&gt;
* [[polylithic design]] takes up more time to conceive and see first results&lt;br /&gt;
* missing expected functionality (e.g., a row object in tables)&lt;br /&gt;
* special requirements of visualization enforce a lot of adapting work&lt;br /&gt;
* the design is hard to conceive, the logic not clear&lt;br /&gt;
* no clear points defined to place own code&lt;br /&gt;
* poor documentation&lt;br /&gt;
* no user community &lt;br /&gt;
* most examples are buggy (especially controls)&lt;br /&gt;
&lt;br /&gt;
=General Approach=&lt;br /&gt;
&lt;br /&gt;
An [[Information Visualization]] done with the &#039;&#039;&#039;InfoVis Toolkit&#039;&#039;&#039; is based on a table which stores the abstract data:&lt;br /&gt;
&lt;br /&gt;
[[Image:infovis_toolkit_structure.png|400px]]&lt;br /&gt;
&lt;br /&gt;
The proper functionality of the toolkit is maintained by an object called &#039;&#039;Visualization&#039;&#039;. This component is responsible for transforming the abstract data of the &#039;&#039;Table&#039;&#039; to visual analogues. The associations between abstract content and visual analogous are declared by visual attributes. These attributes can be associated with a certain &#039;&#039;Column&#039;&#039; of the &#039;&#039;Table&#039;&#039;. Further, an associated &#039;&#039;ItemRenderer&#039;&#039; provides the painting routines of an item. After the items are layouted, the resulting shapes are stored in the &#039;&#039;ShapeColumn&#039;&#039; within the &#039;&#039;Visualization&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
The view of a visualization done with the &#039;&#039;&#039;InfoVis Toolkit&#039;&#039;&#039; is the &#039;&#039;VisualizationPanel&#039;&#039;. This graphical component can be embedded in each Java Swing application. However, there is no force to use this panel, also other targets like an image or a standard &#039;&#039;JComponent&#039;&#039; can be taken to communicate the output to the user.&lt;br /&gt;
&lt;br /&gt;
Controlling of the visualization is done by manipulating mapped columns of the &#039;&#039;Table&#039;&#039;, by manipulating &#039;&#039;Renderers&#039;&#039;, or by setting dynamic queries to filter the content. The toolkit has got a large set of interaction controls predefined. Most attention was set toward providing own panels which combines several interaction possibilities (e.g., color chooser, filter for all defined columns, etc.). Such control panels are typically organized in tab groups around the proper visualization. Further, the &#039;&#039;VisualizationPanel&#039;&#039; can be extended by control listener to handle mouse or keyboard events manually. If a certain item should handle such an event, the respective renderer must provide this functionality.  &lt;br /&gt;
 &lt;br /&gt;
==Readers and Writers==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Readers&#039;&#039; and &#039;&#039;Writers&#039;&#039; are associated with a &#039;&#039;Table&#039;&#039;. The toolkit provides a lot of different readers for common file formats like XML or CSV. Predefined readers or writers already consider the internal structure of the associated file, so, XML files are stored in a tree, CSV in a table, etc. &lt;br /&gt;
&lt;br /&gt;
==Table==&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;Table&#039;&#039; is the base container for every kind of abstract data. In contrast to other implementations of tables, this table is not based on containers. Instead, it consists of several &#039;&#039;Columns&#039;&#039; which are technically arrays of the respective data type they should map. Additionally, each column is described with metadata: &lt;br /&gt;
&lt;br /&gt;
[[Image:infovis_toolkit_table.png|700px]]&lt;br /&gt;
&lt;br /&gt;
Several &#039;&#039;Columns&#039;&#039; to map standard types like Strings or Integers are already predefined. The &#039;&#039;ObjectColumn&#039;&#039; can store each thinkable Java Object. Therefore, a tuple in the table is composed of several differnt objects that may contain own data again.&lt;br /&gt;
&lt;br /&gt;
As an array is indexed, the table itself has indexes too. The index is used to access a data tuple, further, relations as needed by &#039;&#039;Trees&#039;&#039; or &#039;&#039;Graphs&#039;&#039; are also established through indexes. A &#039;&#039;Column&#039;&#039; can have empty rows which is important in case of sparse data. &lt;br /&gt;
&lt;br /&gt;
A generally row object to fill or access data is missing, so, a data record can only be accessed by requesting the data of all columns with an index. Thus, especially when dealing with sparse data, special attention has to be paid toward filling the table.&lt;br /&gt;
&lt;br /&gt;
==Visualization==&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;Visualization&#039;&#039; is bound to the &#039;&#039;Table&#039;&#039;. Semantic attributes which are defined in associated columns of the &#039;&#039;Table&#039;&#039; are transformed into visual attributes (e.g., color, label, etc.). Filtering of abstract content to visual attributes is managed by dynamic queries which are used to determine which data is visualized and which not.&lt;br /&gt;
&lt;br /&gt;
Most of the assignments attributes (like size, stroke width, etc.) are defined in own columns too. Locations of the items are typically calculated by layouting algorithms. This can be done by the &#039;&#039;Visualization&#039;&#039; itself or an associated &#039;&#039;Layout&#039;&#039; object. Once, all visual attributes of an item are retrieved of the table or calculated by algorithms, they are stored in the internal &#039;&#039;ShapeColumn&#039;&#039;. &lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;ShapeColumn&#039;&#039; is only updated when needed. This happens on following events:&lt;br /&gt;
&lt;br /&gt;
* The &#039;&#039;Table&#039;&#039; has changed. The &#039;&#039;Visualization&#039;&#039; is notified whenever records of the &#039;&#039;Table&#039;&#039; have changed, new ones were inserted, or existing ones were deleted.&lt;br /&gt;
* A user-interaction forces a new layout of the items. &lt;br /&gt;
* A user-interaction changes the filtering process.  &lt;br /&gt;
&lt;br /&gt;
Painting itself is done by &#039;&#039;Renderers&#039;&#039;. Each &#039;&#039;Visualization&#039;&#039; has an associated &#039;&#039;Renderer&#039;&#039; which can consist of several other &#039;&#039;Renderers&#039;&#039; again. A &#039;&#039;Renderer&#039;&#039; provides the painting routines for an item which are based on visual attributes of the &#039;&#039;Visualization&#039;&#039;. Further, a &#039;&#039;Renderer&#039;&#039; may also handle user interactions (e.g., clicking on an item).&lt;br /&gt;
&lt;br /&gt;
Before an item is actually painted, also other visualization techniques may influence the output. Examples for such techniques are fisheye views or dynamic labeling. &lt;br /&gt;
&lt;br /&gt;
==Components==&lt;br /&gt;
&lt;br /&gt;
In &#039;&#039;Components&#039;&#039; a large set of interaction components are concentrated. Predefined components are combined within own control panels and include sliders to change size or colors of items, components to set filter expressions, or handler to select items. Such interactions are typically applied by using dynamic queries or changing visual attributes manually.&lt;br /&gt;
&lt;br /&gt;
Note, that interactions in the &#039;&#039;&#039;InfoVis ToolKit&#039;&#039;&#039; may change columns in the underlying table. Further, the table is also used to store flags that indicates the actual state of an tuple.&lt;br /&gt;
&lt;br /&gt;
==Image==&lt;br /&gt;
&lt;br /&gt;
The image is the visual output of the [[Information Visualization]]. In contrast to other toolkit, the &#039;&#039;InfoVis Toolkit&#039;&#039; does not demand a certain component to render its output. Painting is done by using the Java Graphics2D environment. Therefore, also a &#039;&#039;BufferedImage&#039;&#039; can be used for example. However, the default view is the &#039;&#039;VisualizationPanel&#039;&#039; and derivates of it. A &#039;&#039;VisualizationPanel&#039;&#039; is a &#039;&#039;JComponent&#039;&#039;, therefore, the view also inherits the functionality of the Swing component. This component also supports events on the view that can be handled by the view itself or delegated to the respective &#039;&#039;Renderer&#039;&#039; or other event handler. &lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;InfoVis Toolkit&#039;&#039; partially supports the Agile2D graphics framework which allows faster paintings of 2D graphics. &lt;br /&gt;
&lt;br /&gt;
=Details=&lt;br /&gt;
&lt;br /&gt;
==Package Structure==&lt;br /&gt;
&lt;br /&gt;
; io&lt;br /&gt;
: basic readers and writers. &lt;br /&gt;
; metadata&lt;br /&gt;
: several metadata categories.&lt;br /&gt;
; panel&lt;br /&gt;
: contains several &amp;quot;view&amp;quot; implementations and components that provides interaction possibilities.&lt;br /&gt;
; visualization&lt;br /&gt;
: this package contains several implementations of &#039;&#039;Visualizations&#039;&#039; and other basic classes like interfaces for layouts. Further, &#039;&#039;Renderer&#039;&#039; and other helper classes are included here. &lt;br /&gt;
; column&lt;br /&gt;
: provides the basic implementation of a &#039;&#039;Column&#039;&#039; and special derivates of it.&lt;br /&gt;
; table&lt;br /&gt;
: provides a set of classes related to visualization of tables.&lt;br /&gt;
; tree&lt;br /&gt;
: provides a set of classes related to visualization of trees.&lt;br /&gt;
; graph&lt;br /&gt;
: provides a set of classes related to visualization of graphs.&lt;br /&gt;
; utils&lt;br /&gt;
: contains several helper classes like comparators, etc &amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Conclusion=&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;InfoVis Toolkit&#039;&#039; is a toolkit, which pays most attention toward saving resources. Even if there is a measurable advantage in comparison to other toolkits, there are other factors like usability or simplicity too that characterize a good toolkit. The toolkit is very hard to use, at least there is no underlying logic a developer can conceive quickly. But, the toolkit provides a lot of examples for standard problems, like scatter plots, etc. These predefined applications are easy to use if no special demands of the [[Information Visualization]] are needed. Nevertheless, many included examples are buggy or partially not runable anyway. When using a predefined sample, an exact testing is necessary.&lt;br /&gt;
&lt;br /&gt;
= External links =&lt;br /&gt;
*[http://ivtk.sourceforge.net The InfoVis Toolkit]&lt;br /&gt;
*[http://www.cs.umd.edu/hcil/agile2d Agile2D]&lt;br /&gt;
&lt;br /&gt;
= References =&lt;br /&gt;
*[Fekete, 2004] Jean-Daniel Fekete. [http://www.lri.fr/~fekete/ps/ivtk-04.pdf The InfoVis Toolkit]. Proceedings of the 10th IEEE Symposium on Information Visualization (InfoVis&#039;04), Austin, TX, IEEE Press. pp. 17-24, Oct 2004.&lt;br /&gt;
*[Fekete, 2003] Jean-Daniel Fekete. [http://www.inria.fr/rrrt/rr-4818.html The InfoVis Toolkit (Rapport de Recherche)] Research Report RR-4818, INRIA Futurs, May 2003.&lt;br /&gt;
*[Fekete, 2004] Jean-Daniel Fekete, user manual. Retrieved at: July 06, 2006, http://ivtk.sourceforge.net/manual.html&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Toolkits]]&lt;/div&gt;</summary>
		<author><name>Anfe</name></author>
	</entry>
	<entry>
		<id>https://infovis-wiki.net/w/index.php?title=File:Infovis_toolkit_structure.png&amp;diff=10319</id>
		<title>File:Infovis toolkit structure.png</title>
		<link rel="alternate" type="text/html" href="https://infovis-wiki.net/w/index.php?title=File:Infovis_toolkit_structure.png&amp;diff=10319"/>
		<updated>2006-07-28T23:05:47Z</updated>

		<summary type="html">&lt;p&gt;Anfe: /* Summary */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Summary ==&lt;br /&gt;
The picture shows the internal structure of the InfoVis Toolkit.&lt;br /&gt;
&lt;br /&gt;
== Copyright status ==&lt;br /&gt;
&lt;br /&gt;
== Source ==&lt;br /&gt;
[Fekete, 2004] Jean-Daniel Fekete. [http://www.lri.fr/~fekete/ps/ivtk-04.pdf The InfoVis Toolkit]. Proceedings of the 10th IEEE Symposium on Information Visualization (InfoVis&#039;04), Austin, TX, IEEE Press. pp. 17-24, Oct 2004.&lt;/div&gt;</summary>
		<author><name>Anfe</name></author>
	</entry>
	<entry>
		<id>https://infovis-wiki.net/w/index.php?title=File:Infovis_toolkit_table.png&amp;diff=10318</id>
		<title>File:Infovis toolkit table.png</title>
		<link rel="alternate" type="text/html" href="https://infovis-wiki.net/w/index.php?title=File:Infovis_toolkit_table.png&amp;diff=10318"/>
		<updated>2006-07-28T23:05:30Z</updated>

		<summary type="html">&lt;p&gt;Anfe: /* Summary */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Summary ==&lt;br /&gt;
The picture shows the hierarchy of tables and columns in the InfoVis Toolkit.&lt;br /&gt;
&lt;br /&gt;
== Copyright status ==&lt;br /&gt;
&lt;br /&gt;
== Source ==&lt;br /&gt;
[Fekete, 2003] Jean-Daniel Fekete. [http://www.inria.fr/rrrt/rr-4818.html The InfoVis Toolkit (Rapport de Recherche)] Research Report RR-4818, INRIA Futurs, May 2003.&lt;/div&gt;</summary>
		<author><name>Anfe</name></author>
	</entry>
	<entry>
		<id>https://infovis-wiki.net/w/index.php?title=File:Infovis_toolkit_table.png&amp;diff=10317</id>
		<title>File:Infovis toolkit table.png</title>
		<link rel="alternate" type="text/html" href="https://infovis-wiki.net/w/index.php?title=File:Infovis_toolkit_table.png&amp;diff=10317"/>
		<updated>2006-07-28T23:05:06Z</updated>

		<summary type="html">&lt;p&gt;Anfe: /* Source */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Summary ==&lt;br /&gt;
&lt;br /&gt;
== Copyright status ==&lt;br /&gt;
&lt;br /&gt;
== Source ==&lt;br /&gt;
[Fekete, 2003] Jean-Daniel Fekete. [http://www.inria.fr/rrrt/rr-4818.html The InfoVis Toolkit (Rapport de Recherche)] Research Report RR-4818, INRIA Futurs, May 2003.&lt;/div&gt;</summary>
		<author><name>Anfe</name></author>
	</entry>
	<entry>
		<id>https://infovis-wiki.net/w/index.php?title=File:Infovis_toolkit_structure.png&amp;diff=10316</id>
		<title>File:Infovis toolkit structure.png</title>
		<link rel="alternate" type="text/html" href="https://infovis-wiki.net/w/index.php?title=File:Infovis_toolkit_structure.png&amp;diff=10316"/>
		<updated>2006-07-28T23:04:17Z</updated>

		<summary type="html">&lt;p&gt;Anfe: /* Source */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Summary ==&lt;br /&gt;
&lt;br /&gt;
The picture shows the internal structure of the InfoVis Toolkit.&lt;br /&gt;
&lt;br /&gt;
== Copyright status ==&lt;br /&gt;
&lt;br /&gt;
== Source ==&lt;br /&gt;
[Fekete, 2004] Jean-Daniel Fekete. [http://www.lri.fr/~fekete/ps/ivtk-04.pdf The InfoVis Toolkit]. Proceedings of the 10th IEEE Symposium on Information Visualization (InfoVis&#039;04), Austin, TX, IEEE Press. pp. 17-24, Oct 2004.&lt;/div&gt;</summary>
		<author><name>Anfe</name></author>
	</entry>
	<entry>
		<id>https://infovis-wiki.net/w/index.php?title=File:Infovis_toolkit_structure.png&amp;diff=10315</id>
		<title>File:Infovis toolkit structure.png</title>
		<link rel="alternate" type="text/html" href="https://infovis-wiki.net/w/index.php?title=File:Infovis_toolkit_structure.png&amp;diff=10315"/>
		<updated>2006-07-28T23:03:51Z</updated>

		<summary type="html">&lt;p&gt;Anfe: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Summary ==&lt;br /&gt;
&lt;br /&gt;
The picture shows the internal structure of the InfoVis Toolkit.&lt;br /&gt;
&lt;br /&gt;
== Copyright status ==&lt;br /&gt;
&lt;br /&gt;
== Source ==&lt;/div&gt;</summary>
		<author><name>Anfe</name></author>
	</entry>
	<entry>
		<id>https://infovis-wiki.net/w/index.php?title=The_InfoVis_Toolkit&amp;diff=10314</id>
		<title>The InfoVis Toolkit</title>
		<link rel="alternate" type="text/html" href="https://infovis-wiki.net/w/index.php?title=The_InfoVis_Toolkit&amp;diff=10314"/>
		<updated>2006-07-28T23:02:43Z</updated>

		<summary type="html">&lt;p&gt;Anfe: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Summary =&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Author&#039;&#039;&#039;: Jean-Daniel Fekete / University Paris-Sud&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Project Webpage&#039;&#039;&#039;: http://ivtk.sourceforge.net&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Current Version&#039;&#039;&#039;: 0.9 beta2, July 24, 2006&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Requirements&#039;&#039;&#039;: Java 1.4&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Overview:&#039;&#039;&#039; using Java2D graphics library; pipeline architecture; animation and rendering support&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039; Base data structure&#039;&#039;&#039;: table of columns; columns contain objects of equal type; trees and graphs are derived from tables&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039; Included visualization techniques:&#039;&#039;&#039; [http://www.itl.nist.gov/div898/handbook/eda/section3/scatterp.htm Scatter Plot]&amp;lt;nowiki&amp;gt;; &amp;lt;/nowiki&amp;gt;[http://www.rsmas.miami.edu/environment/wx/time-series-cstars.pl Time Series Plot]&amp;lt;nowiki&amp;gt;; &amp;lt;/nowiki&amp;gt;[http://catt.bus.okstate.edu/jones98/parallel.html Parallel Coordinates]&amp;lt;nowiki&amp;gt;; &amp;lt;/nowiki&amp;gt;[http://www-2.cs.cmu.edu/%7Esage/Papers/CHI90/DC.figure6.gif Node-Link Diagram]&amp;lt;nowiki&amp;gt;; &amp;lt;/nowiki&amp;gt;[http://www.sims.berkeley.edu/courses/is247/s02/readings/barlow.pdf Icicle Tree]&amp;lt;nowiki&amp;gt;; &amp;lt;/nowiki&amp;gt;[http://www.cs.umd.edu/hcil/treemap/ Treemap]&amp;lt;nowiki&amp;gt;; &amp;lt;/nowiki&amp;gt;[http://en.wikipedia.org/wiki/Adjacency_matrix Adjacency Matrix ]&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039; Supported File Formats&#039;&#039;&#039;: CSV, XML, TQD, Newick, TM3, DOT, XML TreeML, XML GraphML&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;&#039;InfoVis Toolkit&#039;&#039;&#039; is an interactive graphical open source toolkit written in Java. It is thought to support the development of [[Information Visualization]]s which are based on a high amount of data. To provide a fast and efficient processing of these data, special attention was paid to the underlying data structure. As the internal structure of the &#039;&#039;&#039;InfoVis Toolkit&#039;&#039;&#039; considers the [[Visualization Pipeline]], a data table was chosen to store all information. A table allows representing nearly every kind of data. Also interrelations between records can be established by using parent and children columns. The &#039;&#039;&#039;InfoVis Toolkit&#039;&#039;&#039; supports a graph structure as well as a tree structure.&lt;br /&gt;
&lt;br /&gt;
Generally, the table was optimized regarding to memory footprint and data access speed. This was obtained by using arrays of the respective type a column should map and metadata which describes the column itself. In contrast to other implementations of tables (e.g., Java Swing Table) this approach provides a measurable advantage in memory usage and access performance. But, these performance enhancements are paid with less comfort in using the table and handling single records in it. &lt;br /&gt;
&lt;br /&gt;
The design of the &#039;&#039;&#039;InfoVis Toolkit&#039;&#039;&#039; can be seen as [[polylithic design|polylithic]]. Even though the [[Visualization Pipeline]] is considered internally, nevertheless, there are no clearly defined points in the logic where a user can place its own functionality (in contrast to other toolkits like [[prefuse]] for example). Applying own filters or rendering routines may enforce deep changes in the base functionality. Furthermore, the class hierarchy is very deep and complex. So, even small extensions of the predefined functionality may cause a lot of adaptation work in several classes. &lt;br /&gt;
&lt;br /&gt;
However, the toolkit seems not be suitable to realize own complex [[Information Visualization|visualization]] which requires a lot of special functionality. But, there are a lot of predefined visualization techniques that help to visualize data in a common way like scatter plots or treemaps. The toolkit provides a lot of examples that illustrate the appliance of such standard visualization techniques to own data records. &lt;br /&gt;
&lt;br /&gt;
=== Pros ===&lt;br /&gt;
&lt;br /&gt;
* low memory usage&lt;br /&gt;
* fast data access, only a few typecasts are needed&lt;br /&gt;
* metadata to describe columns and tables&lt;br /&gt;
* internal pipeline approach&lt;br /&gt;
* many visualization techniques included&lt;br /&gt;
* several data reader for common formats included&lt;br /&gt;
* algorithms for force-based physics simulation included&lt;br /&gt;
* query language to navigate within abstract data&lt;br /&gt;
* demos and examples included&lt;br /&gt;
* open source&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Cons ===&lt;br /&gt;
&lt;br /&gt;
* [[polylithic design]] takes up more time to conceive and see first results&lt;br /&gt;
* missing expected functionality (e.g., a row object in tables)&lt;br /&gt;
* special requirements of visualization enforce a lot of adapting work&lt;br /&gt;
* the design is hard to conceive, the logic not clear&lt;br /&gt;
* no clear points defined to place own code&lt;br /&gt;
* poor documentation&lt;br /&gt;
* no user community &lt;br /&gt;
* most examples are buggy (especially controls)&lt;br /&gt;
&lt;br /&gt;
=General Approach=&lt;br /&gt;
&lt;br /&gt;
An [[Information Visualization]] done with the &#039;&#039;&#039;InfoVis Toolkit&#039;&#039;&#039; is based on a table which stores the abstract data:&lt;br /&gt;
&lt;br /&gt;
[[Image:infovis_toolkit_structure.png|400px]]&lt;br /&gt;
&lt;br /&gt;
The proper functionality of the toolkit is combined in an object called &#039;&#039;Visualization&#039;&#039;. This component is responsible for transforming the abstract data of the &#039;&#039;Table&#039;&#039; to visual analogues. The associations between abstract content and visual analogous are declared by visual attributes. These attributes can be associated with a certain &#039;&#039;Column&#039;&#039; of the &#039;&#039;Table&#039;&#039;. Further, an associated &#039;&#039;ItemRenderer&#039;&#039; provides the painting routines of the item. After the items are layouted, the resulting shapes are stored in the &#039;&#039;ShapeColumn&#039;&#039; within the &#039;&#039;Visualization&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
The view of a visualization done with the &#039;&#039;&#039;InfoVis Toolkit&#039;&#039;&#039; is the &#039;&#039;VisualizationPanel&#039;&#039;. This graphical component can be embedded in each java Swing application. However, there is no force to use this panel, also other targets like an image or a standard &#039;&#039;JComponent&#039;&#039; can be taken to communicate the output to the user.&lt;br /&gt;
&lt;br /&gt;
Controlling of the visualization is done by manipulating visual attributes of the &#039;&#039;Visualization&#039;&#039;, by manipulating ‘’Renderers’’, or by setting dynamic queries to filter the content. The toolkit has got a large set of interaction controls predefined. Most attention was set toward providing own panels which combines several interaction possibilities (e.g., color chooser, filter for all defined columns, etc.). Such control panels are typically organized in tab groups around the proper visualization. Further, the &#039;&#039;VisualizationPanel&#039;&#039; can be extended by control listener to handle mouse or keyboard events manually. If a certain item should handle such an event, the respective renderer must provide this functionality.  &lt;br /&gt;
 &lt;br /&gt;
==Readers and Writers==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Readers&#039;&#039; and &#039;&#039;Writers&#039;&#039; are associated with a &#039;&#039;Table&#039;&#039; and used to fill it or write its content back to the file system. The toolkit provides a lot of different readers for common file formats like XML or CSV. Predefined readers or writers already consider the internal structure of the associated file, so, XML files are stored in a tree, CSV in a table, etc. &lt;br /&gt;
&lt;br /&gt;
==Table==&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;Table&#039;&#039; is the base container for every kind of abstract data. In contrast to other implementations of tables, this table is not based on containers. Instead, it consists of several &#039;&#039;Columns&#039;&#039; which are technically arrays of the respective data type they should map. Additionally, each column is described with metadata: &lt;br /&gt;
&lt;br /&gt;
[[Image:infovis_toolkit_table.png|700px]]&lt;br /&gt;
&lt;br /&gt;
Several &#039;&#039;Columns&#039;&#039; to map standard types like strings or integers are already predefined. The &#039;&#039;ObjectColumn&#039;&#039; can store each thinkable Java Object. &lt;br /&gt;
&lt;br /&gt;
Following this way, a table can contain each possible data. As an array is indexed, the table itself has indexes too. The index is used to access a data tuple, further, relations as needed by &#039;&#039;Trees&#039;&#039; or &#039;&#039;Graphs&#039;&#039; are also established through indexes. A &#039;&#039;Column&#039;&#039; can have empty rows which is important in case of sparse data. &lt;br /&gt;
&lt;br /&gt;
A generally row object to fill or access data is missing, so, a data record can only be accessed by requesting the data of all columns with an index. Thus, especially when dealing with sparse data, special attention has to be paid toward filling the table.&lt;br /&gt;
&lt;br /&gt;
==Visualization==&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;Visualization&#039;&#039; is bound to the &#039;&#039;Table&#039;&#039;. Semantic attributes which are defined in associated columns of the &#039;&#039;Table&#039;&#039; are transformed into visual attributes (e.g., color, label, etc.). Filtering of abstract content to visual attributes is managed by dynamic queries which are used to determine which data is visualized and which not.&lt;br /&gt;
&lt;br /&gt;
Most of the assignments attributes (like size, stroke width, etc.) are defined in own columns too. Locations of the items are typically calculated by lay outing algorithms. This can be done by the &#039;&#039;Visualization&#039;&#039; itself or an associated &#039;&#039;Layout&#039;&#039; object. Once, all visual attributes of an item are retrieved of the table or calculated by algorithms, they are stored in the internal &#039;&#039;ShapeColumn&#039;&#039;. &lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;ShapeColumn&#039;&#039; is only updated when needed. This happens on following events:&lt;br /&gt;
&lt;br /&gt;
* The &#039;&#039;Table&#039;&#039; has changed. The &#039;&#039;Visualization&#039;&#039; is notified whenever records of the &#039;&#039;Table&#039;&#039; are changed, new ones are inserted, or existing ones are deleted.&lt;br /&gt;
* A user-interaction forces a new layout of the items. &lt;br /&gt;
* A user-interaction changes the filtering process.  &lt;br /&gt;
&lt;br /&gt;
Painting itself is done by &#039;&#039;Renderers&#039;&#039;. Each &#039;&#039;Visualization&#039;&#039; has an associated &#039;&#039;Renderer&#039;&#039; which can consist of several other &#039;&#039;Renderers&#039;&#039; again. A &#039;&#039;Renderer&#039;&#039; provides the painting routines for an item which are based on the visual attributes. Further, a &#039;&#039;Renderer&#039;&#039; may also handle user interactions (e.g., clicking on an item).&lt;br /&gt;
&lt;br /&gt;
Before an item is actually painted, also other visualization techniques may influence the output. Examples for such techniques are fisheye views or dynamic labeling. &lt;br /&gt;
&lt;br /&gt;
==Components==&lt;br /&gt;
&lt;br /&gt;
In &#039;&#039;Components&#039;&#039; a large set of interaction components are concentrated. Predefined components are combined within own control panels and include sliders to change size or colors of items, set filter expressions to restrict the visual content, or select items. Such interactions are typically applied by using dynamic queries or changing visual attributes manually.&lt;br /&gt;
&lt;br /&gt;
==Image==&lt;br /&gt;
&lt;br /&gt;
The image is the visual output of the [[Information Visualization]]. In contrast to other toolkit, the &#039;&#039;InfoVis Toolkit&#039;&#039; does not demand a certain component to render its output. Painting is done by using the Java Graphics2D environment. Therefore, also a &#039;&#039;BufferedImage&#039;&#039; can be used for example. However, the default view is the &#039;&#039;VisualizationPanel&#039;&#039; and derivates of it. A &#039;&#039;VisualizationPanel&#039;&#039; is a &#039;&#039;JComponent&#039;&#039;, therefore, the view also inherits the functionality of the Swing component. This component also supports events on the view that can be handled by the view itself or delegated to the respective &#039;&#039;Renderer&#039;&#039; or other event handler. &lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;InfoVis Toolkit&#039;&#039; partially supports the Agile2D graphics framework which allows faster paintings of 2D graphics. &lt;br /&gt;
&lt;br /&gt;
=Details=&lt;br /&gt;
&lt;br /&gt;
==Package Structure==&lt;br /&gt;
&lt;br /&gt;
; io&lt;br /&gt;
: basic readers and writers. &lt;br /&gt;
; metadata&lt;br /&gt;
: several metadata categories.&lt;br /&gt;
; panel&lt;br /&gt;
: contains several &amp;quot;view&amp;quot; implementations and components that provides interaction possibilities.&lt;br /&gt;
; visualization&lt;br /&gt;
: this package contains several implementations of &#039;&#039;Visualizations&#039;&#039; and other basic classes like interfaces for layouts. Further, &#039;&#039;Renderer&#039;&#039; and other helper classes are included here. &lt;br /&gt;
; column&lt;br /&gt;
: provides the basic implementation of a &#039;&#039;Column&#039;&#039; and special derivates of it.&lt;br /&gt;
; table&lt;br /&gt;
: provides a set of classes related to visualization of tables.&lt;br /&gt;
; tree&lt;br /&gt;
: provides a set of classes related to visualization of trees.&lt;br /&gt;
; graph&lt;br /&gt;
: provides a set of classes related to visualization of graphs.&lt;br /&gt;
; utils&lt;br /&gt;
: contains several helper classes like comparators, etc &amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Conclusion=&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;InfoVis Toolkit&#039;&#039; is a toolkit, which pays most attention toward saving resources. Even if there is a measurable advantage in comparison to other toolkits, there are other factors like usability or simplicity too that characterize a good toolkit. The toolkit is very hard to use, at least there is no underlying logic a developer can conceive quickly. But the toolkit provides a lot of examples for standard problems, like scatter plots, etc. These predefined applications are easy to use if no special demands of the [[Information Visualization]] are needed.&lt;br /&gt;
&lt;br /&gt;
= External links =&lt;br /&gt;
*[http://ivtk.sourceforge.net The InfoVis Toolkit]&lt;br /&gt;
*[http://www.cs.umd.edu/hcil/agile2d Agile2D]&lt;br /&gt;
&lt;br /&gt;
= References =&lt;br /&gt;
*[Fekete, 2004] Jean-Daniel Fekete. [http://www.lri.fr/~fekete/ps/ivtk-04.pdf The InfoVis Toolkit]. Proceedings of the 10th IEEE Symposium on Information Visualization (InfoVis&#039;04), Austin, TX, IEEE Press. pp. 17-24, Oct 2004.&lt;br /&gt;
*[Fekete, 2003] Jean-Daniel Fekete. [http://www.inria.fr/rrrt/rr-4818.html The InfoVis Toolkit (Rapport de Recherche)] Research Report RR-4818, INRIA Futurs, May 2003.&lt;br /&gt;
*[Fekete, 2004] Jean-Daniel Fekete, user manual. Retrieved at: July 06, 2006, http://ivtk.sourceforge.net/manual.html&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Toolkits]]&lt;/div&gt;</summary>
		<author><name>Anfe</name></author>
	</entry>
	<entry>
		<id>https://infovis-wiki.net/w/index.php?title=The_InfoVis_Toolkit&amp;diff=10313</id>
		<title>The InfoVis Toolkit</title>
		<link rel="alternate" type="text/html" href="https://infovis-wiki.net/w/index.php?title=The_InfoVis_Toolkit&amp;diff=10313"/>
		<updated>2006-07-28T23:02:19Z</updated>

		<summary type="html">&lt;p&gt;Anfe: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Summary =&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Author&#039;&#039;&#039;: Jean-Daniel Fekete / University Paris-Sud&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Project Webpage&#039;&#039;&#039;: http://ivtk.sourceforge.net&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Current Version&#039;&#039;&#039;: 0.9 beta2, July 24, 2006&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Requirements&#039;&#039;&#039;: Java 1.4&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Overview:&#039;&#039;&#039; using Java2D graphics library; pipeline architecture; animation and rendering support&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039; Base data structure&#039;&#039;&#039;: table of columns; columns contain objects of equal type; trees and graphs are derived from tables&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039; Included visualization techniques:&#039;&#039;&#039; [http://www.itl.nist.gov/div898/handbook/eda/section3/scatterp.htm Scatter Plot]&amp;lt;nowiki&amp;gt;; &amp;lt;/nowiki&amp;gt;[http://www.rsmas.miami.edu/environment/wx/time-series-cstars.pl Time Series Plot]&amp;lt;nowiki&amp;gt;; &amp;lt;/nowiki&amp;gt;[http://catt.bus.okstate.edu/jones98/parallel.html Parallel Coordinates]&amp;lt;nowiki&amp;gt;; &amp;lt;/nowiki&amp;gt;[http://www-2.cs.cmu.edu/%7Esage/Papers/CHI90/DC.figure6.gif Node-Link Diagram]&amp;lt;nowiki&amp;gt;; &amp;lt;/nowiki&amp;gt;[http://www.sims.berkeley.edu/courses/is247/s02/readings/barlow.pdf Icicle Tree]&amp;lt;nowiki&amp;gt;; &amp;lt;/nowiki&amp;gt;[http://www.cs.umd.edu/hcil/treemap/ Treemap]&amp;lt;nowiki&amp;gt;; &amp;lt;/nowiki&amp;gt;[http://en.wikipedia.org/wiki/Adjacency_matrix Adjacency Matrix ]&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039; Supported File Formats&#039;&#039;&#039;: CSV, XML, TQD, Newick, TM3, DOT, XML TreeML, XML GraphML&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;&#039;InfoVis Toolkit&#039;&#039;&#039; is an interactive graphical open source toolkit written in Java. It is thought to support the development of [[Information Visualization]]s which are based on a high amount of data. To provide a fast and efficient processing of these data, special attention was paid to the underlying data structure. As the internal structure of the &#039;&#039;&#039;InfoVis Toolkit&#039;&#039;&#039; considers the [[Visualization Pipeline]], a data table was chosen to store all information. A table allows representing nearly every kind of data. Also interrelations between records can be established by using parent and children columns. The &#039;&#039;&#039;InfoVis Toolkit&#039;&#039;&#039; supports a graph structure as well as a tree structure.&lt;br /&gt;
&lt;br /&gt;
Generally, the table was optimized regarding to memory footprint and data access speed. This was obtained by using arrays of the respective type a column should map and metadata which describes the column itself. In contrast to other implementations of tables (e.g., Java Swing Table) this approach provides a measurable advantage in memory usage and access performance. But, these performance enhancements are paid with less comfort in using the table and handling single records in it. &lt;br /&gt;
&lt;br /&gt;
The design of the &#039;&#039;&#039;InfoVis Toolkit&#039;&#039;&#039; can be seen as [[polylithic design|polylithic]]. Even though the [[Visualization Pipeline]] is considered internally, nevertheless, there are no clearly defined points in the logic where a user can place its own functionality (in contrast to other toolkits like [[prefuse]] for example). Applying own filters or rendering routines may enforce deep changes in the base functionality. Furthermore, the class hierarchy is very deep and complex. So, even small extensions of the predefined functionality may cause a lot of adaptation work in several classes. &lt;br /&gt;
&lt;br /&gt;
However, the toolkit seems not be suitable to realize own complex [[Information Visualization|visualization]] which requires a lot of special functionality. But, there are a lot of predefined visualization techniques that help to visualize data in a common way like scatter plots or treemaps. The toolkit provides a lot of examples that illustrate the appliance of such standard visualization techniques to own data records. &lt;br /&gt;
&lt;br /&gt;
=== Pros ===&lt;br /&gt;
&lt;br /&gt;
* low memory usage&lt;br /&gt;
* fast data access, only a few typecasts are needed&lt;br /&gt;
* metadata to describe columns and tables&lt;br /&gt;
* internal pipeline approach&lt;br /&gt;
* many visualization techniques included&lt;br /&gt;
* several data reader for common formats included&lt;br /&gt;
* algorithms for force-based physics simulation included&lt;br /&gt;
* query language to navigate within abstract data&lt;br /&gt;
* demos and examples included&lt;br /&gt;
* open source&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Cons ===&lt;br /&gt;
&lt;br /&gt;
* [[polylithic design]] takes up more time to conceive and see first results&lt;br /&gt;
* missing expected functionality (e.g., a row object in tables)&lt;br /&gt;
* special requirements of visualization enforce a lot of adapting work&lt;br /&gt;
* the design is hard to conceive, the logic not clear&lt;br /&gt;
* no clear points defined to place own code&lt;br /&gt;
* poor documentation&lt;br /&gt;
* no user community &lt;br /&gt;
* most examples are buggy (especially controls)&lt;br /&gt;
&lt;br /&gt;
=General Approach=&lt;br /&gt;
&lt;br /&gt;
An [[Information Visualization]] done with the &#039;&#039;&#039;InfoVis Toolkit&#039;&#039;&#039; is based on a table which stores the abstract data:&lt;br /&gt;
&lt;br /&gt;
[[Image:infovis_toolkit_structure.png|600px]]&lt;br /&gt;
&lt;br /&gt;
The proper functionality of the toolkit is combined in an object called &#039;&#039;Visualization&#039;&#039;. This component is responsible for transforming the abstract data of the &#039;&#039;Table&#039;&#039; to visual analogues. The associations between abstract content and visual analogous are declared by visual attributes. These attributes can be associated with a certain &#039;&#039;Column&#039;&#039; of the &#039;&#039;Table&#039;&#039;. Further, an associated &#039;&#039;ItemRenderer&#039;&#039; provides the painting routines of the item. After the items are layouted, the resulting shapes are stored in the &#039;&#039;ShapeColumn&#039;&#039; within the &#039;&#039;Visualization&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
The view of a visualization done with the &#039;&#039;&#039;InfoVis Toolkit&#039;&#039;&#039; is the &#039;&#039;VisualizationPanel&#039;&#039;. This graphical component can be embedded in each java Swing application. However, there is no force to use this panel, also other targets like an image or a standard &#039;&#039;JComponent&#039;&#039; can be taken to communicate the output to the user.&lt;br /&gt;
&lt;br /&gt;
Controlling of the visualization is done by manipulating visual attributes of the &#039;&#039;Visualization&#039;&#039;, by manipulating ‘’Renderers’’, or by setting dynamic queries to filter the content. The toolkit has got a large set of interaction controls predefined. Most attention was set toward providing own panels which combines several interaction possibilities (e.g., color chooser, filter for all defined columns, etc.). Such control panels are typically organized in tab groups around the proper visualization. Further, the &#039;&#039;VisualizationPanel&#039;&#039; can be extended by control listener to handle mouse or keyboard events manually. If a certain item should handle such an event, the respective renderer must provide this functionality.  &lt;br /&gt;
 &lt;br /&gt;
==Readers and Writers==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Readers&#039;&#039; and &#039;&#039;Writers&#039;&#039; are associated with a &#039;&#039;Table&#039;&#039; and used to fill it or write its content back to the file system. The toolkit provides a lot of different readers for common file formats like XML or CSV. Predefined readers or writers already consider the internal structure of the associated file, so, XML files are stored in a tree, CSV in a table, etc. &lt;br /&gt;
&lt;br /&gt;
==Table==&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;Table&#039;&#039; is the base container for every kind of abstract data. In contrast to other implementations of tables, this table is not based on containers. Instead, it consists of several &#039;&#039;Columns&#039;&#039; which are technically arrays of the respective data type they should map. Additionally, each column is described with metadata: &lt;br /&gt;
&lt;br /&gt;
[[Image:infovis_toolkit_table.png|600px]]&lt;br /&gt;
&lt;br /&gt;
Several &#039;&#039;Columns&#039;&#039; to map standard types like strings or integers are already predefined. The &#039;&#039;ObjectColumn&#039;&#039; can store each thinkable Java Object. &lt;br /&gt;
&lt;br /&gt;
Following this way, a table can contain each possible data. As an array is indexed, the table itself has indexes too. The index is used to access a data tuple, further, relations as needed by &#039;&#039;Trees&#039;&#039; or &#039;&#039;Graphs&#039;&#039; are also established through indexes. A &#039;&#039;Column&#039;&#039; can have empty rows which is important in case of sparse data. &lt;br /&gt;
&lt;br /&gt;
A generally row object to fill or access data is missing, so, a data record can only be accessed by requesting the data of all columns with an index. Thus, especially when dealing with sparse data, special attention has to be paid toward filling the table.&lt;br /&gt;
&lt;br /&gt;
==Visualization==&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;Visualization&#039;&#039; is bound to the &#039;&#039;Table&#039;&#039;. Semantic attributes which are defined in associated columns of the &#039;&#039;Table&#039;&#039; are transformed into visual attributes (e.g., color, label, etc.). Filtering of abstract content to visual attributes is managed by dynamic queries which are used to determine which data is visualized and which not.&lt;br /&gt;
&lt;br /&gt;
Most of the assignments attributes (like size, stroke width, etc.) are defined in own columns too. Locations of the items are typically calculated by lay outing algorithms. This can be done by the &#039;&#039;Visualization&#039;&#039; itself or an associated &#039;&#039;Layout&#039;&#039; object. Once, all visual attributes of an item are retrieved of the table or calculated by algorithms, they are stored in the internal &#039;&#039;ShapeColumn&#039;&#039;. &lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;ShapeColumn&#039;&#039; is only updated when needed. This happens on following events:&lt;br /&gt;
&lt;br /&gt;
* The &#039;&#039;Table&#039;&#039; has changed. The &#039;&#039;Visualization&#039;&#039; is notified whenever records of the &#039;&#039;Table&#039;&#039; are changed, new ones are inserted, or existing ones are deleted.&lt;br /&gt;
* A user-interaction forces a new layout of the items. &lt;br /&gt;
* A user-interaction changes the filtering process.  &lt;br /&gt;
&lt;br /&gt;
Painting itself is done by &#039;&#039;Renderers&#039;&#039;. Each &#039;&#039;Visualization&#039;&#039; has an associated &#039;&#039;Renderer&#039;&#039; which can consist of several other &#039;&#039;Renderers&#039;&#039; again. A &#039;&#039;Renderer&#039;&#039; provides the painting routines for an item which are based on the visual attributes. Further, a &#039;&#039;Renderer&#039;&#039; may also handle user interactions (e.g., clicking on an item).&lt;br /&gt;
&lt;br /&gt;
Before an item is actually painted, also other visualization techniques may influence the output. Examples for such techniques are fisheye views or dynamic labeling. &lt;br /&gt;
&lt;br /&gt;
==Components==&lt;br /&gt;
&lt;br /&gt;
In &#039;&#039;Components&#039;&#039; a large set of interaction components are concentrated. Predefined components are combined within own control panels and include sliders to change size or colors of items, set filter expressions to restrict the visual content, or select items. Such interactions are typically applied by using dynamic queries or changing visual attributes manually.&lt;br /&gt;
&lt;br /&gt;
==Image==&lt;br /&gt;
&lt;br /&gt;
The image is the visual output of the [[Information Visualization]]. In contrast to other toolkit, the &#039;&#039;InfoVis Toolkit&#039;&#039; does not demand a certain component to render its output. Painting is done by using the Java Graphics2D environment. Therefore, also a &#039;&#039;BufferedImage&#039;&#039; can be used for example. However, the default view is the &#039;&#039;VisualizationPanel&#039;&#039; and derivates of it. A &#039;&#039;VisualizationPanel&#039;&#039; is a &#039;&#039;JComponent&#039;&#039;, therefore, the view also inherits the functionality of the Swing component. This component also supports events on the view that can be handled by the view itself or delegated to the respective &#039;&#039;Renderer&#039;&#039; or other event handler. &lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;InfoVis Toolkit&#039;&#039; partially supports the Agile2D graphics framework which allows faster paintings of 2D graphics. &lt;br /&gt;
&lt;br /&gt;
=Details=&lt;br /&gt;
&lt;br /&gt;
==Package Structure==&lt;br /&gt;
&lt;br /&gt;
; io&lt;br /&gt;
: basic readers and writers. &lt;br /&gt;
; metadata&lt;br /&gt;
: several metadata categories.&lt;br /&gt;
; panel&lt;br /&gt;
: contains several &amp;quot;view&amp;quot; implementations and components that provides interaction possibilities.&lt;br /&gt;
; visualization&lt;br /&gt;
: this package contains several implementations of &#039;&#039;Visualizations&#039;&#039; and other basic classes like interfaces for layouts. Further, &#039;&#039;Renderer&#039;&#039; and other helper classes are included here. &lt;br /&gt;
; column&lt;br /&gt;
: provides the basic implementation of a &#039;&#039;Column&#039;&#039; and special derivates of it.&lt;br /&gt;
; table&lt;br /&gt;
: provides a set of classes related to visualization of tables.&lt;br /&gt;
; tree&lt;br /&gt;
: provides a set of classes related to visualization of trees.&lt;br /&gt;
; graph&lt;br /&gt;
: provides a set of classes related to visualization of graphs.&lt;br /&gt;
; utils&lt;br /&gt;
: contains several helper classes like comparators, etc &amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Conclusion=&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;InfoVis Toolkit&#039;&#039; is a toolkit, which pays most attention toward saving resources. Even if there is a measurable advantage in comparison to other toolkits, there are other factors like usability or simplicity too that characterize a good toolkit. The toolkit is very hard to use, at least there is no underlying logic a developer can conceive quickly. But the toolkit provides a lot of examples for standard problems, like scatter plots, etc. These predefined applications are easy to use if no special demands of the [[Information Visualization]] are needed.&lt;br /&gt;
&lt;br /&gt;
= External links =&lt;br /&gt;
*[http://ivtk.sourceforge.net The InfoVis Toolkit]&lt;br /&gt;
*[http://www.cs.umd.edu/hcil/agile2d Agile2D]&lt;br /&gt;
&lt;br /&gt;
= References =&lt;br /&gt;
*[Fekete, 2004] Jean-Daniel Fekete. [http://www.lri.fr/~fekete/ps/ivtk-04.pdf The InfoVis Toolkit]. Proceedings of the 10th IEEE Symposium on Information Visualization (InfoVis&#039;04), Austin, TX, IEEE Press. pp. 17-24, Oct 2004.&lt;br /&gt;
*[Fekete, 2003] Jean-Daniel Fekete. [http://www.inria.fr/rrrt/rr-4818.html The InfoVis Toolkit (Rapport de Recherche)] Research Report RR-4818, INRIA Futurs, May 2003.&lt;br /&gt;
*[Fekete, 2004] Jean-Daniel Fekete, user manual. Retrieved at: July 06, 2006, http://ivtk.sourceforge.net/manual.html&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Toolkits]]&lt;/div&gt;</summary>
		<author><name>Anfe</name></author>
	</entry>
	<entry>
		<id>https://infovis-wiki.net/w/index.php?title=File:Infovis_toolkit_table.png&amp;diff=10312</id>
		<title>File:Infovis toolkit table.png</title>
		<link rel="alternate" type="text/html" href="https://infovis-wiki.net/w/index.php?title=File:Infovis_toolkit_table.png&amp;diff=10312"/>
		<updated>2006-07-28T23:01:29Z</updated>

		<summary type="html">&lt;p&gt;Anfe: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Summary ==&lt;br /&gt;
&lt;br /&gt;
== Copyright status ==&lt;br /&gt;
&lt;br /&gt;
== Source ==&lt;/div&gt;</summary>
		<author><name>Anfe</name></author>
	</entry>
	<entry>
		<id>https://infovis-wiki.net/w/index.php?title=File:Infovis_toolkit_structure.png&amp;diff=10311</id>
		<title>File:Infovis toolkit structure.png</title>
		<link rel="alternate" type="text/html" href="https://infovis-wiki.net/w/index.php?title=File:Infovis_toolkit_structure.png&amp;diff=10311"/>
		<updated>2006-07-28T23:00:01Z</updated>

		<summary type="html">&lt;p&gt;Anfe: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Summary ==&lt;br /&gt;
&lt;br /&gt;
== Copyright status ==&lt;br /&gt;
&lt;br /&gt;
== Source ==&lt;/div&gt;</summary>
		<author><name>Anfe</name></author>
	</entry>
	<entry>
		<id>https://infovis-wiki.net/w/index.php?title=File:Infovisstructure.png&amp;diff=10310</id>
		<title>File:Infovisstructure.png</title>
		<link rel="alternate" type="text/html" href="https://infovis-wiki.net/w/index.php?title=File:Infovisstructure.png&amp;diff=10310"/>
		<updated>2006-07-28T22:58:03Z</updated>

		<summary type="html">&lt;p&gt;Anfe: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Summary ==&lt;br /&gt;
&lt;br /&gt;
== Copyright status ==&lt;br /&gt;
&lt;br /&gt;
== Source ==&lt;/div&gt;</summary>
		<author><name>Anfe</name></author>
	</entry>
	<entry>
		<id>https://infovis-wiki.net/w/index.php?title=The_InfoVis_Toolkit&amp;diff=10309</id>
		<title>The InfoVis Toolkit</title>
		<link rel="alternate" type="text/html" href="https://infovis-wiki.net/w/index.php?title=The_InfoVis_Toolkit&amp;diff=10309"/>
		<updated>2006-07-28T22:57:10Z</updated>

		<summary type="html">&lt;p&gt;Anfe: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Summary =&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Author&#039;&#039;&#039;: Jean-Daniel Fekete / University Paris-Sud&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Project Webpage&#039;&#039;&#039;: http://ivtk.sourceforge.net&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Current Version&#039;&#039;&#039;: 0.9 beta2, July 24, 2006&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Requirements&#039;&#039;&#039;: Java 1.4&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Overview:&#039;&#039;&#039; using Java2D graphics library; pipeline architecture; animation and rendering support&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039; Base data structure&#039;&#039;&#039;: table of columns; columns contain objects of equal type; trees and graphs are derived from tables&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039; Included visualization techniques:&#039;&#039;&#039; [http://www.itl.nist.gov/div898/handbook/eda/section3/scatterp.htm Scatter Plot]&amp;lt;nowiki&amp;gt;; &amp;lt;/nowiki&amp;gt;[http://www.rsmas.miami.edu/environment/wx/time-series-cstars.pl Time Series Plot]&amp;lt;nowiki&amp;gt;; &amp;lt;/nowiki&amp;gt;[http://catt.bus.okstate.edu/jones98/parallel.html Parallel Coordinates]&amp;lt;nowiki&amp;gt;; &amp;lt;/nowiki&amp;gt;[http://www-2.cs.cmu.edu/%7Esage/Papers/CHI90/DC.figure6.gif Node-Link Diagram]&amp;lt;nowiki&amp;gt;; &amp;lt;/nowiki&amp;gt;[http://www.sims.berkeley.edu/courses/is247/s02/readings/barlow.pdf Icicle Tree]&amp;lt;nowiki&amp;gt;; &amp;lt;/nowiki&amp;gt;[http://www.cs.umd.edu/hcil/treemap/ Treemap]&amp;lt;nowiki&amp;gt;; &amp;lt;/nowiki&amp;gt;[http://en.wikipedia.org/wiki/Adjacency_matrix Adjacency Matrix ]&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039; Supported File Formats&#039;&#039;&#039;: CSV, XML, TQD, Newick, TM3, DOT, XML TreeML, XML GraphML&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;&#039;InfoVis Toolkit&#039;&#039;&#039; is an interactive graphical open source toolkit written in Java. It is thought to support the development of [[Information Visualization]]s which are based on a high amount of data. To provide a fast and efficient processing of these data, special attention was paid to the underlying data structure. As the internal structure of the &#039;&#039;&#039;InfoVis Toolkit&#039;&#039;&#039; considers the [[Visualization Pipeline]], a data table was chosen to store all information. A table allows representing nearly every kind of data. Also interrelations between records can be established by using parent and children columns. The &#039;&#039;&#039;InfoVis Toolkit&#039;&#039;&#039; supports a graph structure as well as a tree structure.&lt;br /&gt;
&lt;br /&gt;
Generally, the table was optimized regarding to memory footprint and data access speed. This was obtained by using arrays of the respective type a column should map and metadata which describes the column itself. In contrast to other implementations of tables (e.g., Java Swing Table) this approach provides a measurable advantage in memory usage and access performance. But, these performance enhancements are paid with less comfort in using the table and handling single records in it. &lt;br /&gt;
&lt;br /&gt;
The design of the &#039;&#039;&#039;InfoVis Toolkit&#039;&#039;&#039; can be seen as [[polylithic design|polylithic]]. Even though the [[Visualization Pipeline]] is considered internally, nevertheless, there are no clearly defined points in the logic where a user can place its own functionality (in contrast to other toolkits like [[prefuse]] for example). Applying own filters or rendering routines may enforce deep changes in the base functionality. Furthermore, the class hierarchy is very deep and complex. So, even small extensions of the predefined functionality may cause a lot of adaptation work in several classes. &lt;br /&gt;
&lt;br /&gt;
However, the toolkit seems not be suitable to realize own complex [[Information Visualization|visualization]] which requires a lot of special functionality. But, there are a lot of predefined visualization techniques that help to visualize data in a common way like scatter plots or treemaps. The toolkit provides a lot of examples that illustrate the appliance of such standard visualization techniques to own data records. &lt;br /&gt;
&lt;br /&gt;
=== Pros ===&lt;br /&gt;
&lt;br /&gt;
* low memory usage&lt;br /&gt;
* fast data access, only a few typecasts are needed&lt;br /&gt;
* metadata to describe columns and tables&lt;br /&gt;
* internal pipeline approach&lt;br /&gt;
* many visualization techniques included&lt;br /&gt;
* several data reader for common formats included&lt;br /&gt;
* algorithms for force-based physics simulation included&lt;br /&gt;
* query language to navigate within abstract data&lt;br /&gt;
* demos and examples included&lt;br /&gt;
* open source&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Cons ===&lt;br /&gt;
&lt;br /&gt;
* [[polylithic design]] takes up more time to conceive and see first results&lt;br /&gt;
* missing expected functionality (e.g., a row object in tables)&lt;br /&gt;
* special requirements of visualization enforce a lot of adapting work&lt;br /&gt;
* the design is hard to conceive, the logic not clear&lt;br /&gt;
* no clear points defined to place own code&lt;br /&gt;
* poor documentation&lt;br /&gt;
* no user community &lt;br /&gt;
* most examples are buggy (especially controls)&lt;br /&gt;
&lt;br /&gt;
=General Approach=&lt;br /&gt;
&lt;br /&gt;
An [[Information Visualization]] done with the &#039;&#039;&#039;InfoVis Toolkit&#039;&#039;&#039; is based on a table which stores the abstract data:&lt;br /&gt;
&lt;br /&gt;
[[Image:infovis_toolkit_structure|600px]]&lt;br /&gt;
&lt;br /&gt;
The proper functionality of the toolkit is combined in an object called &#039;&#039;Visualization&#039;&#039;. This component is responsible for transforming the abstract data of the &#039;&#039;Table&#039;&#039; to visual analogues. The associations between abstract content and visual analogous are declared by visual attributes. These attributes can be associated with a certain &#039;&#039;Column&#039;&#039; of the &#039;&#039;Table&#039;&#039;. Further, an associated &#039;&#039;ItemRenderer&#039;&#039; provides the painting routines of the item. After the items are layouted, the resulting shapes are stored in the &#039;&#039;ShapeColumn&#039;&#039; within the &#039;&#039;Visualization&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
The view of a visualization done with the &#039;&#039;&#039;InfoVis Toolkit&#039;&#039;&#039; is the &#039;&#039;VisualizationPanel&#039;&#039;. This graphical component can be embedded in each java Swing application. However, there is no force to use this panel, also other targets like an image or a standard &#039;&#039;JComponent&#039;&#039; can be taken to communicate the output to the user.&lt;br /&gt;
&lt;br /&gt;
Controlling of the visualization is done by manipulating visual attributes of the &#039;&#039;Visualization&#039;&#039;, by manipulating ‘’Renderers’’, or by setting dynamic queries to filter the content. The toolkit has got a large set of interaction controls predefined. Most attention was set toward providing own panels which combines several interaction possibilities (e.g., color chooser, filter for all defined columns, etc.). Such control panels are typically organized in tab groups around the proper visualization. Further, the &#039;&#039;VisualizationPanel&#039;&#039; can be extended by control listener to handle mouse or keyboard events manually. If a certain item should handle such an event, the respective renderer must provide this functionality.  &lt;br /&gt;
 &lt;br /&gt;
==Readers and Writers==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Readers&#039;&#039; and &#039;&#039;Writers&#039;&#039; are associated with a &#039;&#039;Table&#039;&#039; and used to fill it or write its content back to the file system. The toolkit provides a lot of different readers for common file formats like XML or CSV. Predefined readers or writers already consider the internal structure of the associated file, so, XML files are stored in a tree, CSV in a table, etc. &lt;br /&gt;
&lt;br /&gt;
==Table==&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;Table&#039;&#039; is the base container for every kind of abstract data. In contrast to other implementations of tables, this table is not based on containers. Instead, it consists of several &#039;&#039;Columns&#039;&#039; which are technically arrays of the respective data type they should map. Additionally, each column is described with metadata: &lt;br /&gt;
&lt;br /&gt;
[[Image:infovis_toolkit_table|600px]]&lt;br /&gt;
&lt;br /&gt;
Several &#039;&#039;Columns&#039;&#039; to map standard types like strings or integers are already predefined. The &#039;&#039;ObjectColumn&#039;&#039; can store each thinkable Java Object. &lt;br /&gt;
&lt;br /&gt;
Following this way, a table can contain each possible data. As an array is indexed, the table itself has indexes too. The index is used to access a data tuple, further, relations as needed by &#039;&#039;Trees&#039;&#039; or &#039;&#039;Graphs&#039;&#039; are also established through indexes. A &#039;&#039;Column&#039;&#039; can have empty rows which is important in case of sparse data. &lt;br /&gt;
&lt;br /&gt;
A generally row object to fill or access data is missing, so, a data record can only be accessed by requesting the data of all columns with an index. Thus, especially when dealing with sparse data, special attention has to be paid toward filling the table.&lt;br /&gt;
&lt;br /&gt;
==Visualization==&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;Visualization&#039;&#039; is bound to the &#039;&#039;Table&#039;&#039;. Semantic attributes which are defined in associated columns of the &#039;&#039;Table&#039;&#039; are transformed into visual attributes (e.g., color, label, etc.). Filtering of abstract content to visual attributes is managed by dynamic queries which are used to determine which data is visualized and which not.&lt;br /&gt;
&lt;br /&gt;
Most of the assignments attributes (like size, stroke width, etc.) are defined in own columns too. Locations of the items are typically calculated by lay outing algorithms. This can be done by the &#039;&#039;Visualization&#039;&#039; itself or an associated &#039;&#039;Layout&#039;&#039; object. Once, all visual attributes of an item are retrieved of the table or calculated by algorithms, they are stored in the internal &#039;&#039;ShapeColumn&#039;&#039;. &lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;ShapeColumn&#039;&#039; is only updated when needed. This happens on following events:&lt;br /&gt;
&lt;br /&gt;
* The &#039;&#039;Table&#039;&#039; has changed. The &#039;&#039;Visualization&#039;&#039; is notified whenever records of the &#039;&#039;Table&#039;&#039; are changed, new ones are inserted, or existing ones are deleted.&lt;br /&gt;
* A user-interaction forces a new layout of the items. &lt;br /&gt;
* A user-interaction changes the filtering process.  &lt;br /&gt;
&lt;br /&gt;
Painting itself is done by &#039;&#039;Renderers&#039;&#039;. Each &#039;&#039;Visualization&#039;&#039; has an associated &#039;&#039;Renderer&#039;&#039; which can consist of several other &#039;&#039;Renderers&#039;&#039; again. A &#039;&#039;Renderer&#039;&#039; provides the painting routines for an item which are based on the visual attributes. Further, a &#039;&#039;Renderer&#039;&#039; may also handle user interactions (e.g., clicking on an item).&lt;br /&gt;
&lt;br /&gt;
Before an item is actually painted, also other visualization techniques may influence the output. Examples for such techniques are fisheye views or dynamic labeling. &lt;br /&gt;
&lt;br /&gt;
==Components==&lt;br /&gt;
&lt;br /&gt;
In &#039;&#039;Components&#039;&#039; a large set of interaction components are concentrated. Predefined components are combined within own control panels and include sliders to change size or colors of items, set filter expressions to restrict the visual content, or select items. Such interactions are typically applied by using dynamic queries or changing visual attributes manually.&lt;br /&gt;
&lt;br /&gt;
==Image==&lt;br /&gt;
&lt;br /&gt;
The image is the visual output of the [[Information Visualization]]. In contrast to other toolkit, the &#039;&#039;InfoVis Toolkit&#039;&#039; does not demand a certain component to render its output. Painting is done by using the Java Graphics2D environment. Therefore, also a &#039;&#039;BufferedImage&#039;&#039; can be used for example. However, the default view is the &#039;&#039;VisualizationPanel&#039;&#039; and derivates of it. A &#039;&#039;VisualizationPanel&#039;&#039; is a &#039;&#039;JComponent&#039;&#039;, therefore, the view also inherits the functionality of the Swing component. This component also supports events on the view that can be handled by the view itself or delegated to the respective &#039;&#039;Renderer&#039;&#039; or other event handler. &lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;InfoVis Toolkit&#039;&#039; partially supports the Agile2D graphics framework which allows faster paintings of 2D graphics. &lt;br /&gt;
&lt;br /&gt;
=Details=&lt;br /&gt;
&lt;br /&gt;
==Package Structure==&lt;br /&gt;
&lt;br /&gt;
; io&lt;br /&gt;
: basic readers and writers. &lt;br /&gt;
; metadata&lt;br /&gt;
: several metadata categories.&lt;br /&gt;
; panel&lt;br /&gt;
: contains several &amp;quot;view&amp;quot; implementations and components that provides interaction possibilities.&lt;br /&gt;
; visualization&lt;br /&gt;
: this package contains several implementations of &#039;&#039;Visualizations&#039;&#039; and other basic classes like interfaces for layouts. Further, &#039;&#039;Renderer&#039;&#039; and other helper classes are included here. &lt;br /&gt;
; column&lt;br /&gt;
: provides the basic implementation of a &#039;&#039;Column&#039;&#039; and special derivates of it.&lt;br /&gt;
; table&lt;br /&gt;
: provides a set of classes related to visualization of tables.&lt;br /&gt;
; tree&lt;br /&gt;
: provides a set of classes related to visualization of trees.&lt;br /&gt;
; graph&lt;br /&gt;
: provides a set of classes related to visualization of graphs.&lt;br /&gt;
; utils&lt;br /&gt;
: contains several helper classes like comparators, etc &amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Conclusion=&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;InfoVis Toolkit&#039;&#039; is a toolkit, which pays most attention toward saving resources. Even if there is a measurable advantage in comparison to other toolkits, there are other factors like usability or simplicity too that characterize a good toolkit. The toolkit is very hard to use, at least there is no underlying logic a developer can conceive quickly. But the toolkit provides a lot of examples for standard problems, like scatter plots, etc. These predefined applications are easy to use if no special demands of the [[Information Visualization]] are needed.&lt;br /&gt;
&lt;br /&gt;
= External links =&lt;br /&gt;
*[http://ivtk.sourceforge.net The InfoVis Toolkit]&lt;br /&gt;
*[http://www.cs.umd.edu/hcil/agile2d Agile2D]&lt;br /&gt;
&lt;br /&gt;
= References =&lt;br /&gt;
*[Fekete, 2004] Jean-Daniel Fekete. [http://www.lri.fr/~fekete/ps/ivtk-04.pdf The InfoVis Toolkit]. Proceedings of the 10th IEEE Symposium on Information Visualization (InfoVis&#039;04), Austin, TX, IEEE Press. pp. 17-24, Oct 2004.&lt;br /&gt;
*[Fekete, 2003] Jean-Daniel Fekete. [http://www.inria.fr/rrrt/rr-4818.html The InfoVis Toolkit (Rapport de Recherche)] Research Report RR-4818, INRIA Futurs, May 2003.&lt;br /&gt;
*[Fekete, 2004] Jean-Daniel Fekete, user manual. Retrieved at: July 06, 2006, http://ivtk.sourceforge.net/manual.html&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Toolkits]]&lt;/div&gt;</summary>
		<author><name>Anfe</name></author>
	</entry>
	<entry>
		<id>https://infovis-wiki.net/w/index.php?title=Prefuse&amp;diff=10308</id>
		<title>Prefuse</title>
		<link rel="alternate" type="text/html" href="https://infovis-wiki.net/w/index.php?title=Prefuse&amp;diff=10308"/>
		<updated>2006-07-28T22:47:47Z</updated>

		<summary type="html">&lt;p&gt;Anfe: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Summary =&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Author&#039;&#039;&#039;: Jeffrey Heer / UC Berkeley&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Project Webpage&#039;&#039;&#039;: http://prefuse.org&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Current Version&#039;&#039;&#039;: beta, June 15, 2006&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Requirements&#039;&#039;&#039;: Java 1.4&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Overview:&#039;&#039;&#039; using Java2D graphics library; pipeline architecture; animation and rendering support&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Base data structures&#039;&#039;&#039;: Table, Graph, Tree&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Included visualization techniques:&#039;&#039;&#039; [http://www.cs.umd.edu/hcil/fisheyemenu/ Fisheye Menu], [http://prefuse.sourceforge.net/demos-radial.html Radial Graph], [http://www.cs.umd.edu/hcil/treemap/ Treemap], [http://prefuse.sourceforge.net/demos-distortion.html F+C Distortion]&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Supported File Formats&#039;&#039;&#039;: XGMML (XML), TreeML (XML), tab-delimited text, HDir&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;prefuse&#039;&#039;&#039; is an interactive graphical open source toolkit written in Java. It is thought to support the development of sophisticated, highly interactive, and flexible [[Information Visualization]]s. The architecture of &#039;&#039;&#039;prefuse&#039;&#039;&#039; considers the [[Visualization Pipeline]], a recommendation on how to implement a visualization. To provide flexibility, a [[polylithic design]] was chosen which enables developers to implement only needed functionality and customize these to meet the own requirements. But, in contrast to a [[monolithic design]], this design needs more time to conceive and influences the architecture of the own application heavily (which is not a disadvantage as &#039;&#039;&#039;prefuse&#039;&#039;&#039; is very elaborate). &lt;br /&gt;
&lt;br /&gt;
Typically, &#039;&#039;&#039;prefuse&#039;&#039;&#039; is designed to visualize interrelated information so it can be stored in a graph or tree structure, but, also not related data can be used which is stored within a data table. Even though the structure is hierarchical, the resulting tree or graph structure must not be considered in the proper graphical representation as layout algorithms are not restricted in any way. The painting of visual items is done by using a renderer which has access to the respective item itself and the Graphics2D context of the view. This approach enables to use the whole range of available painting methods of Java, therefore, all painting issues are completely independent of the toolkit itself.&lt;br /&gt;
&lt;br /&gt;
Besides providing a large set of predefined elements to visualize data, most attention was set toward usability of the visualization. This is obtained by applying several interaction techniques like tooltips or dragging visual elements. But also more sophisticated techniques like [[zoom]]ing, [[pan]]ning, or [[semantic zoom]]ing are supported or partially even provided by the toolkit itself. Further, &#039;&#039;&#039;prefuse&#039;&#039;&#039; clearly distinguishes between absolute and view coordinates. This separation helps users to place all visual elements in a logical way without consideration of later applied visualization techniques that changes the entire view.  &lt;br /&gt;
&lt;br /&gt;
=== Pros ===&lt;br /&gt;
&lt;br /&gt;
* flexible&lt;br /&gt;
* versatile pipeline approach&lt;br /&gt;
* clear and well thought architecture&lt;br /&gt;
* many layout and distortion algorithms included&lt;br /&gt;
* algorithms for force-based physics simulation included&lt;br /&gt;
* custom animations (smooth transitions)&lt;br /&gt;
* color maps&lt;br /&gt;
* query language to navigate within abstract data&lt;br /&gt;
* demos and examples included&lt;br /&gt;
* bounding management&lt;br /&gt;
* open source&lt;br /&gt;
* documentation of code and general guidance available&lt;br /&gt;
* active developer community &lt;br /&gt;
&lt;br /&gt;
=== Cons ===&lt;br /&gt;
&lt;br /&gt;
* [[polylithic design]] takes up more time to conceive and see first results&lt;br /&gt;
* special requirements of a visualization enforce a lot of adapting work&lt;br /&gt;
&lt;br /&gt;
=General Approach=&lt;br /&gt;
&lt;br /&gt;
Going along with the step-wise recommendation of the [[Visualization Pipeline]], a &#039;&#039;&#039;prefuse&#039;&#039;&#039; application consists of different states of data:&lt;br /&gt;
&lt;br /&gt;
[[Image:prefuse_visualization_pipeline.gif|600px]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;prefuse&#039;&#039;&#039; uses a centralized object called &#039;&#039;Visualization&#039;&#039; (former &#039;&#039;ItemRegistry&#039;&#039;) which maintains and manages the whole visualization. This object has to fulfil several tasks. It stores the abstract data as well as visual analogous of these in two different tables. All transformation routines like filtering or rendering are managed and executed by the &#039;&#039;Visualization&#039;&#039; too. Further, it refers to at least one &#039;&#039;Display&#039;&#039;, a graphical component which can represent visual data of &#039;&#039;&#039;prefuse&#039;&#039;&#039;. &lt;br /&gt;
&lt;br /&gt;
Transformation routines are defined as &#039;&#039;Actions&#039;&#039; which are combined in &#039;&#039;ActionLists&#039;&#039;. An &#039;&#039;ActionList&#039;&#039; is an executable container which is started manually or of the &#039;&#039;Visualization&#039;&#039; itself. Once it is started, all defined &#039;&#039;Actions&#039;&#039; are executed in the given sequence. Typically, the last called &#039;&#039;Action&#039;&#039; is the &#039;&#039;RepaintAction&#039;&#039; which forces all belonging &#039;&#039;Displays&#039;&#039; of the &#039;&#039;Visualization&#039;&#039; to perform a repaint. &lt;br /&gt;
&lt;br /&gt;
A &#039;&#039;Display&#039;&#039; is the view of &#039;&#039;&#039;prefuse&#039;&#039;&#039;. It can be embedded in each Java Swing application. The main task of a &#039;&#039;Display&#039;&#039; is the painting of visual structures which are defined in the respective &#039;&#039;Visualization&#039;&#039;. Whenever the &#039;&#039;Display&#039;&#039; performs a repaint, it requests all visual items and checks all bounds of them (bounding management). If an item is within the own area the respective rendering mechanism is called.  &lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;Display&#039;&#039; also provides navigation techniques like [[zoom]]ing or [[pan]]ning which change the view. The view itself refers to a own coordinate system. View coordinates are described through an affine transformation matrix. The most important functionality to work with this coordinate system are already predefined. Typically, users just have to apply such techniques without considering technical details. &lt;br /&gt;
&lt;br /&gt;
Furthermore, a &#039;&#039;Display&#039;&#039; also maintains a set of &#039;&#039;ControlListener&#039;&#039; which are used to process user interactions (mouse or keyboard events). Whenever such an event occurs the respective listener is called. A listener already differs on where the event happened (e.g., blank area or a certain item). Further, a &#039;&#039;ControlListener&#039;&#039; may also start an &#039;&#039;ActionList&#039;&#039; again.&lt;br /&gt;
&lt;br /&gt;
==Source Data==&lt;br /&gt;
&lt;br /&gt;
Raw data is the base of the application. Typically, the source of raw data is a file, but also other sources like a database or web content are thinkable. However, &#039;&#039;&#039;prefuse&#039;&#039;&#039; provides several file readers for different formats (CSV, Tab-Delimitated, etc.) that can be transformed into a data table. Further, some readers also support the reading of SQL-Database. If another source is needed, a reader can be written manually.&lt;br /&gt;
&lt;br /&gt;
Once the raw data is read, it is transformed into abstract data and stored within a data table of the &#039;&#039;Visualization&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
==Data Table==&lt;br /&gt;
&lt;br /&gt;
The data table which is used to store abstract data works with data types and a definition schema which maps relations between data type and table. That means, each row contains a data record, and each column contains data values for a named data field with a specific data type. Each record of the table is referred as a &#039;&#039;Tuple&#039;&#039;. &lt;br /&gt;
&lt;br /&gt;
Furthermore, instead of the table itself, a graph or tree may be used to store interrelated data. Instead of &#039;&#039;Tuples&#039;&#039;, records are referred as &#039;&#039;Nodes&#039;&#039; which are connected to others with &#039;&#039;Edges&#039;&#039;. Additionally, a tree has one defined root &#039;&#039;Node&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Abstract data does not contain any visual information like assignment attributes or color settings. Instead, own visual analogous are created. Visual attributes of them are extracted out of the abstract data following a defined logic.&lt;br /&gt;
&lt;br /&gt;
==Visual Abstraction==&lt;br /&gt;
&lt;br /&gt;
Visual structures are created when filtering the data container which contains abstract data. In case of a visualization that displays all items from the beginning on, the filtering routine must only executed once at initializing time. If the visual content changes dynamically, the filtering is executed on certain user interactions by calling a defined filtering &#039;&#039;ActionList&#039;&#039;. &lt;br /&gt;
&lt;br /&gt;
A visual structure is referred as &#039;&#039;VisualItem&#039;&#039; which may be distinguished as &#039;&#039;VisualNode&#039;&#039;, &#039;&#039;VisualEdge&#039;&#039;, or an aggregated item which consists of several other items. However, as a &#039;&#039;VisualItem&#039;&#039; is extended of the respective abstract entity, it has full access to all abstract information too. &lt;br /&gt;
&lt;br /&gt;
The filtering routine which transforms the abstract data to visual analogues typically consists of following &#039;&#039;Actions&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Filter&#039;&#039;&#039;: This &#039;&#039;Action&#039;&#039; is responsible to transform the abstract data of the backing table to visual analogues. If no special conditions are defined, the filter creates for each &#039;&#039;Tuple&#039;&#039; a visual instance and stores them in a second table. Additionally, a filter also performs a garbage collection and may set visibility attributes of the created items. &lt;br /&gt;
* &#039;&#039;&#039;Layout&#039;&#039;&#039;: A layout takes care about placing the &#039;&#039;VisualItems&#039;&#039;. Several common algorithms for graphs or trees are already predefined (e.g., &#039;&#039;ForceDirectedLayout&#039;&#039; or &#039;&#039;RadialTreeLayout&#039;&#039;). &lt;br /&gt;
* &#039;&#039;&#039;Assignment&#039;&#039;&#039;: Besides layouting, also other assignments may be performed during the filtering process. Such assignments directly changes visual attributes of &#039;&#039;VisualItems&#039;&#039; like color, sizes, fonts, etc.&lt;br /&gt;
&lt;br /&gt;
A visual structure may also contain a paint routine, but, as all painting jobs are initialized or performed by separated renderers, these issues may also be executed by the renderer itself or any other object.&lt;br /&gt;
&lt;br /&gt;
==View==&lt;br /&gt;
&lt;br /&gt;
Typically, the rendered visual structure is not stored, instead, they are re-rendered whenever needed. However, in case of very complex but constant visual representations it makes sense to hold items in an offscreen image. &lt;br /&gt;
&lt;br /&gt;
Each &#039;&#039;VisualItem&#039;&#039; has got one or more associated &#039;&#039;Renderers&#039;&#039; which are maintained by a factory of the &#039;&#039;Visualization&#039;&#039;. A  &#039;&#039;Render&#039;&#039; has to perform two tasks:&lt;br /&gt;
&lt;br /&gt;
* Providing a bounding box of the item. This box is used to determine if the item must actually be painted or if it would not be visible anyway. &lt;br /&gt;
* Providing the painting routine of the item. Paintings may be executed by the &#039;&#039;Renderer&#039;&#039; itself or delegated to other objects which are accessible of the &#039;&#039;Renderer&#039;&#039;. The painting routines are not restricted in any way, but the proper representation should not exceed the bounding box of the item. &lt;br /&gt;
&lt;br /&gt;
Rendering is always performed on a repaint of the &#039;&#039;Display&#039;&#039;. A repaint can be requested by the &#039;&#039;Visualization&#039;&#039;, on user interaction, and on events like resizing the component, getting the focus, or changing the coordinate system of the view. However, as repaints may occur very often, developers have to ascertain that rendering jobs are performed fast, otherwise, the performance of the whole visualization would suffer.&lt;br /&gt;
&lt;br /&gt;
=Details=&lt;br /&gt;
&lt;br /&gt;
==Package Structure==&lt;br /&gt;
&lt;br /&gt;
Following picture shows the most important packages of &#039;&#039;&#039;prefuse&#039;&#039;&#039; regarding to the [[Visualization Pipeline]]:&lt;br /&gt;
&lt;br /&gt;
[[Image:prefuse_package_guide.gif|600px]]&lt;br /&gt;
&lt;br /&gt;
These packages also contain predefined components. Default &#039;&#039;Nodes&#039;&#039; and &#039;&#039;Edges&#039;&#039; provide standard functionality of abstract data, standard functionality is also available in visual analogous of them. A default filter transforms all defined abstract entities to visual ones. Further, also some special functionality to fulfil common requirements are provided by own components: &lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Renderers&#039;&#039;&#039;: &#039;&#039;EdgeRenderer&#039;&#039; to render edges between graph or tree nodes, a &#039;&#039;LableRenderer&#039;&#039; to render text items, and a &#039;&#039;PolygoneRenderer&#039;&#039; to render geometrical items. &lt;br /&gt;
* &#039;&#039;&#039;Layouts&#039;&#039;&#039;: &#039;&#039;RandomLayout&#039;&#039;, &#039;&#039;GridLayout&#039;&#039;, and some more to place non related data, &#039;&#039;ForceDirectedLayout&#039;&#039;, &#039;&#039;TreeLayout&#039;&#039;, &#039;&#039;RadialTreeLayout&#039;&#039; and others to layout trees and graphs.&lt;br /&gt;
* &#039;&#039;&#039;Controls&#039;&#039;&#039;: &#039;&#039;DragControl&#039;&#039;, &#039;&#039;ZoomControl&#039;&#039;, &#039;&#039;PanControl&#039;&#039;, &#039;&#039;ToolTipControl&#039;&#039; and several others to react on user interactions. &lt;br /&gt;
&lt;br /&gt;
In simple visualizations the predefined functionality will meet most requirements. If special requirements are needed the default functionality supports a step-wise developing as results can be communicated by predefined components until the own functionality is implemented.&lt;br /&gt;
&lt;br /&gt;
==Coordinates in prefuse==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;prefuse&#039;&#039;&#039; works with two different coordinate systems. Absolute coordinates are device-independent logical coordinates. All visual attributes like positions or sizes are defined in absolute coordinates. In contrast, view coordinates are device-depended (screen). Transformations between absolute and view coordinates are done automatically by Java painting routines. View coordinates are influenced by the system and device driver (e.g., the absolute point (0,0) is the topmost left point of the actual graphical component which may be on any position at the screen). Further, view coordinates may also be manipulated manually by using an affine transformation matrix which applies linear transformations on absolute coordinates before device-dependent routines convert them to screen coordinates. &lt;br /&gt;
&lt;br /&gt;
A &#039;&#039;&#039;prefuse&#039;&#039;&#039; &#039;&#039;Display&#039;&#039; provides the most important manipulating methods of this matrix. [[Zoom]]ing, [[pan]]ning, and rotation of the whole view are only done by changing the view coordinates. So, as absolute coordinates are never concerned of such transformations and translations, a user must never consider the actual view in layout, assignment, or painting routines. &lt;br /&gt;
&lt;br /&gt;
There are several different ways on how to apply such transformations, additionally, the &#039;&#039;Display&#039;&#039; also supports animated transformations.&lt;br /&gt;
&lt;br /&gt;
==User Interactions==&lt;br /&gt;
&lt;br /&gt;
Mouse or keyboard events are treated by &#039;&#039;ControlListener&#039;&#039;. Whenever an event occurs which is handled by a &#039;&#039;ControlListener&#039;&#039;, the &#039;&#039;Display&#039;&#039; delegates the event to the respective routine. A &#039;&#039;ControlListener&#039;&#039; differs automatically which visual element is concerned of the event (the view itself or a &#039;&#039;VisualItem&#039;&#039;). &lt;br /&gt;
&lt;br /&gt;
A &#039;&#039;ControlListener&#039;&#039; may just perform simple tasks like changing the mouse cursor or editing the label of an item. But, in more sophisticated applications, also tasks like loading new data or dragging items on the view may be handled. Therefore, a &#039;&#039;ControlListener&#039;&#039; may also start &#039;&#039;ActionLists&#039;&#039; to execute such tasks. Further, a &#039;&#039;ControlListener&#039;&#039; has also access to the &#039;&#039;Display&#039;&#039;. Thus, it is able to call methods like zooming or panning. Typically, each &#039;&#039;ControlListener&#039;&#039; forces a repaint when its job is done.  &lt;br /&gt;
&lt;br /&gt;
Most of standard functionality is already predefined in &#039;&#039;prefuse&#039;&#039; and the wanted listeners just have to be set to the &#039;&#039;Display&#039;&#039;. However, the &#039;&#039;Display&#039;&#039; can handle a countless of different listener. Hence, typically only a few listeners must be defined manually as they can be mixed with default ones.&lt;br /&gt;
&lt;br /&gt;
=Conclusion=&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;prefuse&#039;&#039;&#039; is a very powerful toolkit, providing a large set of components and methods a developer needs to build an [[Information Visualization]]. The [[polylithic design]] is not that easy to understand in the beginning of a development, but once conceived, a visualization is easy to realize even if really special demands have to be fulfilled. Furthermore, using Prefuse forces a clear and well designed architecture of own applications.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;prefuse&#039;&#039;&#039; was created with most attention paid to developers who will finally work with the toolkit. In an evaluation study this goal was approved too. In the meanwhile, there is also a not so small community using and upgrading the toolkit, which is an argue for its usability.&lt;br /&gt;
&lt;br /&gt;
= External links =&lt;br /&gt;
*[http://prefuse.org prefuse Homepage]&lt;br /&gt;
*[http://vw.indiana.edu/ivsi2004/jherr/index.html prefuse Position Paper]&lt;br /&gt;
*[http://sourceforge.net/forum/forum.php?forum_id=343013 prefuse Help Forum]&lt;br /&gt;
&lt;br /&gt;
= References =&lt;br /&gt;
*[Heer, 2004] Jeffrey Heer. [http://jheer.org/publications/2004-Heer-prefuse-Masters.pdf prefuse: a software framework for interactive information visualization]. Masters of Science, Computer Science Division, University of California, Berkeley, 2004.&lt;br /&gt;
*[Heer, 2005] Jeffrey Heer, Stuart K. Card, and James A. Landay. [http://jheer.org/publications/2005-prefuse-CHI.pdf prefuse: a toolkit for interactive information visualization.] In CHI 2005, Human Factors in Computing Systems, 2005.&lt;br /&gt;
*[Heer, 2006a] Jeffrey Heer, prefuse API documentation. Retrieved at: July 06, 2006, http://prefuse.org&lt;br /&gt;
*[Heer, 2006b] Jeffrey Heer, prefuse manual. Retrieved at: July 06, 2006, http://prefuse.org&lt;br /&gt;
*[Sun Microsystems, 2001] Sun Microsystems, Programmer’s Guide to the Java 2DTM API - Enhanced Graphics and Imaging for Java. Retrieved at: April 20, 2006, http://java.sun.com/j2se/1.4/pdf/j2d-book.pdf&lt;br /&gt;
&lt;br /&gt;
[[Category:Toolkits]]&lt;/div&gt;</summary>
		<author><name>Anfe</name></author>
	</entry>
	<entry>
		<id>https://infovis-wiki.net/w/index.php?title=Prefuse&amp;diff=10132</id>
		<title>Prefuse</title>
		<link rel="alternate" type="text/html" href="https://infovis-wiki.net/w/index.php?title=Prefuse&amp;diff=10132"/>
		<updated>2006-07-06T09:35:40Z</updated>

		<summary type="html">&lt;p&gt;Anfe: /* User Interactions */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Summary =&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Author&#039;&#039;&#039;: Jeffrey Heer / UC Berkeley&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Project Webpage&#039;&#039;&#039;: http://prefuse.org&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Current Version&#039;&#039;&#039;: beta, June 15, 2006&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Requirements&#039;&#039;&#039;: Java 1.4&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Overview:&#039;&#039;&#039; using Java2D graphics library; pipeline architecture; animation and rendering support&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Base data structures&#039;&#039;&#039;: Table, Graph, Tree&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Included visualization techniques:&#039;&#039;&#039; [http://www.cs.umd.edu/hcil/fisheyemenu/ Fisheye Menu], [http://prefuse.sourceforge.net/demos-radial.html Radial Graph], [http://www.cs.umd.edu/hcil/treemap/ Treemap], [http://prefuse.sourceforge.net/demos-distortion.html F+C Distortion]&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Supported File Formats&#039;&#039;&#039;: XGMML (XML), TreeML (XML), tab-delimited text, HDir&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;prefuse&#039;&#039;&#039; is an interactive graphical open source toolkit written in Java. It is thought to support the development of sophisticated, highly interactive, and flexible [[Information Visualization]]s. The architecture of &#039;&#039;&#039;prefuse&#039;&#039;&#039; considers the [[Visualization Pipeline]], a recommendation on how to implement a visualization. To provide flexibility, a [[polylithic design]] was chosen which enables developers to implement only needed functionality and customize these to meet the own requirements. But, in contrast to a [[monolithic design]], this design needs more time to conceive and influences the architecture of the own application heavily (which is not a disadvantage as &#039;&#039;&#039;prefuse&#039;&#039;&#039; is very elaborate). &lt;br /&gt;
&lt;br /&gt;
Typically, &#039;&#039;&#039;prefuse&#039;&#039;&#039; is designed to visualize interrelated information so it can be stored in a graph or tree structure, but, also not related data can be used which is stored within a data table. Even though the structure is hierarchical, the resulting tree or graph structure must not be considered in the proper graphical representation as layout algorithms are not restricted in any way. The painting of visual items is done by using a renderer which has access to the respective item itself and the Graphics2D context of the view. This approach enables to use the whole range of available painting methods of Java, therefore, all painting issues are completely independent of the toolkit itself.&lt;br /&gt;
&lt;br /&gt;
Besides providing a large set of predefined elements to visualize data, most attention was set toward usability of the visualization. This is obtained by applying several interaction techniques like tooltips or dragging visual elements. But also more sophisticated techniques like [[zoom]]ing, [[pan]]ning, or [[semantic zoom]]ing are supported or partially even provided by the toolkit itself. Further, &#039;&#039;&#039;prefuse&#039;&#039;&#039; clearly distinguishes between absolute and view coordinates. This separation helps users to place all visual elements in a logical way without consideration of later applied visualization techniques that changes the entire view.  &lt;br /&gt;
&lt;br /&gt;
=== Pros ===&lt;br /&gt;
&lt;br /&gt;
* flexible&lt;br /&gt;
* versatile pipeline approach&lt;br /&gt;
* clear and well thought architecture&lt;br /&gt;
* many layout and distortion algorithms included&lt;br /&gt;
* algorithms for force-based physics simulation included&lt;br /&gt;
* custom animations (smooth transitions)&lt;br /&gt;
* color maps&lt;br /&gt;
* query language to navigate within abstract data&lt;br /&gt;
* demos and examples included&lt;br /&gt;
* bounding management&lt;br /&gt;
* open source&lt;br /&gt;
* documentation of code and general guidance available&lt;br /&gt;
* active developer community &lt;br /&gt;
&lt;br /&gt;
=== Cons ===&lt;br /&gt;
&lt;br /&gt;
* [[polylithic design]] takes up more time to conceive and see first results&lt;br /&gt;
* special requirements of a visualization enforce a lot of adapting work&lt;br /&gt;
&lt;br /&gt;
=General Approach=&lt;br /&gt;
&lt;br /&gt;
Going along with the step-wise recommendation of the [[Visualization Pipeline]], a &#039;&#039;&#039;prefuse&#039;&#039;&#039; application consists of different states of data:&lt;br /&gt;
&lt;br /&gt;
[[Image:prefuse_visualization_pipeline.gif|600px]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;prefuse&#039;&#039;&#039; uses a centralized object called &#039;&#039;Visualization&#039;&#039; (former &#039;&#039;ItemRegistry&#039;&#039;) which maintains and manages the whole visualization. This object has to fulfil several tasks. It stores the abstract data as well as visual analogous of these in two different tables. All transformation routines like filtering or rendering are managed and executed by the &#039;&#039;Visualization&#039;&#039; too. Further, it refers to at least one &#039;&#039;Display&#039;&#039;, a graphical component which can represent visual data of &#039;&#039;&#039;prefuse&#039;&#039;&#039;. &lt;br /&gt;
&lt;br /&gt;
Transformation routines are defined as &#039;&#039;Actions&#039;&#039; which are combined in &#039;&#039;ActionLists&#039;&#039;. An &#039;&#039;ActionList&#039;&#039; is an executable container which is started manually or of the &#039;&#039;Visualization&#039;&#039; itself. Once it is started, all defined &#039;&#039;Actions&#039;&#039; are executed in the given sequence. Typically, the last called &#039;&#039;Action&#039;&#039; is the &#039;&#039;RepaintAction&#039;&#039; which forces all belonging &#039;&#039;Displays&#039;&#039; of the &#039;&#039;Visualization&#039;&#039; to perform a repaint. &lt;br /&gt;
&lt;br /&gt;
A &#039;&#039;Display&#039;&#039; is the view of &#039;&#039;&#039;prefuse&#039;&#039;&#039;. It can be embedded in each Java Swing application. The main task of a &#039;&#039;Display&#039;&#039; is the painting of visual structures which are defined in the respective &#039;&#039;Visualization&#039;&#039;. Whenever the &#039;&#039;Display&#039;&#039; performs a repaint, it requests all visual items and checks all bounds of them (bounding management). If an item is within the own area the respective rendering mechanism is called.  &lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;Display&#039;&#039; also provides navigation techniques like [[zoom]]ing or [[pan]]ning which change the view. The view itself refers to a own coordinate system. View coordinates are described through an affine transformation matrix. The most important functionality to work with this coordinate system are already predefined. Typically, users just have to apply such techniques without considering technical details. &lt;br /&gt;
&lt;br /&gt;
Furthermore, a &#039;&#039;Display&#039;&#039; also maintains a set of &#039;&#039;ControlListener&#039;&#039; which are used to process user interactions (mouse or keyboard events). Whenever such an event occurs the respective listener is called. A listener already differs on where the event happened (e.g., blank area or a certain item). Further, a &#039;&#039;ControlListener&#039;&#039; may also start an &#039;&#039;ActionList&#039;&#039; again.&lt;br /&gt;
&lt;br /&gt;
==Source Data==&lt;br /&gt;
&lt;br /&gt;
Raw data is the base of the application. Typically, the source of raw data is a file, but also other sources like a database or web content are thinkable. However, &#039;&#039;&#039;prefuse&#039;&#039;&#039; provides several file readers for different formats (CSV, Tab-Delimitated, etc.) that can be transformed into a data table. Further, some readers also support the reading of SQL-Database. If another source is needed, a reader can be written manually.&lt;br /&gt;
&lt;br /&gt;
Once the raw data is read, it is transformed into abstract data and stored within a data table of the &#039;&#039;Visualization&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
==Data Table==&lt;br /&gt;
&lt;br /&gt;
The data table which is used to store abstract data works with data types and a definition schema which maps relations between data type and table. That means, each row contains a data record, and each column contains data values for a named data field with a specific data type. Each record of the table is referred as a &#039;&#039;Tuple&#039;&#039;. &lt;br /&gt;
&lt;br /&gt;
Furthermore, instead of the table itself, a graph or tree may be used to store interrelated data. Instead of &#039;&#039;Tuples&#039;&#039;, records are referred as &#039;&#039;Nodes&#039;&#039; which are connected to others with &#039;&#039;Edges&#039;&#039;. Additionally, a tree has one defined root &#039;&#039;Node&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Abstract data does not contain any visual information like assignment attributes or color settings. Instead, own visual analogous are created. Visual attributes of them are extracted out of the abstract data following a defined logic.&lt;br /&gt;
&lt;br /&gt;
==Visual Abstraction==&lt;br /&gt;
&lt;br /&gt;
Visual structures are created when filtering the data container which contains abstract data. In case of a visualization that displays all items from the beginning on, the filtering routine must only executed once at initializing time. If the visual content changes dynamically, the filtering is executed on certain user interactions by calling a defined filtering &#039;&#039;ActionList&#039;&#039;. &lt;br /&gt;
&lt;br /&gt;
A visual structure is referred as &#039;&#039;VisualItem&#039;&#039; which may be distinguished as &#039;&#039;VisualNode&#039;&#039;, &#039;&#039;VisualEdge&#039;&#039;, or an aggregated item which consists of several other items. However, as a &#039;&#039;VisualItem&#039;&#039; is extended of the respective abstract entity, it has full access to all abstract information too. &lt;br /&gt;
&lt;br /&gt;
The filtering routine which transforms the abstract data to visual analogues typically consists of following &#039;&#039;Actions&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Filter&#039;&#039;&#039;: This &#039;&#039;Action&#039;&#039; is responsible to transform the abstract data of the backing table to visual analogues. If no special conditions are defined, the filter creates for each &#039;&#039;Tuple&#039;&#039; a visual instance and stores them in a second table. Additionally, a filter also performs a garbage collection and may set visibility attributes of the created items. &lt;br /&gt;
* &#039;&#039;&#039;Layout&#039;&#039;&#039;: A layout takes care about placing the &#039;&#039;VisualItems&#039;&#039;. Several common algorithms for graphs or trees are already predefined (e.g., &#039;&#039;ForceDirectedLayout&#039;&#039; or &#039;&#039;RadialTreeLayout&#039;&#039;). &lt;br /&gt;
* &#039;&#039;&#039;Assignment&#039;&#039;&#039;: Besides layouting, also other assignments may be performed during the filtering process. Such assignments directly changes visual attributes of &#039;&#039;VisualItems&#039;&#039; like color, sizes, fonts, etc.&lt;br /&gt;
&lt;br /&gt;
A visual structure may also contain a paint routine, but, as all painting jobs are initialized or performed by separated renderers, these issues may also be executed by the renderer itself or any other object.&lt;br /&gt;
&lt;br /&gt;
==View==&lt;br /&gt;
&lt;br /&gt;
Typically, the rendered visual structure is not stored, instead, they are re-rendered whenever needed. However, in case of very complex but constant visual representations it makes sense to hold items in an offscreen image. &lt;br /&gt;
&lt;br /&gt;
Each &#039;&#039;VisualItem&#039;&#039; has got one or more associated &#039;&#039;Renderers&#039;&#039; which are maintained by a factory of the &#039;&#039;Visualization&#039;&#039;. A  &#039;&#039;Render&#039;&#039; has to perform two tasks:&lt;br /&gt;
&lt;br /&gt;
* Providing a bounding box of the item. This box is used to determine if the item must actually be painted or if it would not be visible anyway. &lt;br /&gt;
* Providing the painting routine of the item. Paintings may be executed by the &#039;&#039;Renderer&#039;&#039; itself or delegated to other objects which are accessible of the &#039;&#039;Renderer&#039;&#039;. The painting routines are not restricted in any way, but the proper representation should not exceed the bounding box of the item. &lt;br /&gt;
&lt;br /&gt;
Rendering is always performed on a repaint of the &#039;&#039;Display&#039;&#039;. A repaint can be requested by the &#039;&#039;Visualization&#039;&#039;, on user interaction, and on events like resizing the component, getting the focus, or changing the coordinate system of the view. However, as repaints may occur very often, developers have to ascertain that rendering jobs are performed fast, otherwise, the performance of the whole visualization would suffer.&lt;br /&gt;
&lt;br /&gt;
=Details=&lt;br /&gt;
&lt;br /&gt;
==Package Structure==&lt;br /&gt;
&lt;br /&gt;
Following picture shows the most important packages of &#039;&#039;&#039;prefuse&#039;&#039;&#039; regarding to the [[Visualization Pipeline]]:&lt;br /&gt;
&lt;br /&gt;
[[Image:prefuse_package_guide.gif|600px]]&lt;br /&gt;
&lt;br /&gt;
These packages also contain predefined components. Default &#039;&#039;Nodes&#039;&#039; and &#039;&#039;Edges&#039;&#039; provide standard functionality of abstract data, standard functionality is also available in visual analogous of them. A default filter transforms all defined abstract entities to visual ones. Further, also some special functionality to fulfil common requirements are provided by own components: &lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Renderers&#039;&#039;&#039;: &#039;&#039;EdgeRenderer&#039;&#039; to render edges between graph or tree nodes, a &#039;&#039;LableRenderer&#039;&#039; to render text items, and a &#039;&#039;PolygoneRenderer&#039;&#039; to render geometrical items. &lt;br /&gt;
* &#039;&#039;&#039;Layouts&#039;&#039;&#039;: &#039;&#039;RandomLayout&#039;&#039;, &#039;&#039;GridLayout&#039;&#039;, and some more to place non related data, &#039;&#039;ForceDirectedLayout&#039;&#039;, &#039;&#039;TreeLayout&#039;&#039;, &#039;&#039;RadialTreeLayout&#039;&#039; and others to layout trees and graphs.&lt;br /&gt;
* &#039;&#039;&#039;Controls&#039;&#039;&#039;: &#039;&#039;DragControl&#039;&#039;, &#039;&#039;ZoomControl&#039;&#039;, &#039;&#039;PanControl&#039;&#039;, &#039;&#039;ToolTipControl&#039;&#039; and several others to react on user interactions. &lt;br /&gt;
&lt;br /&gt;
In simple visualizations the predefined functionality will meet most requirements. If special requirements are needed the default functionality supports a step-wise developing as results can be communicated by predefined components until the own functionality is implemented.&lt;br /&gt;
&lt;br /&gt;
==Coordinates in prefuse==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;prefuse&#039;&#039;&#039; works with two different coordinate systems. Absolute coordinates are device-independent logical coordinates. All visual attributes like positions or sizes are defined in absolute coordinates. In contrast, view coordinates are device-depended (screen). Transformations between absolute and view coordinates are done automatically by Java painting routines. View coordinates are influenced by the system and device driver (e.g., the absolute point (0,0) is the topmost left point of the actual graphical component which may be on any position at the screen). Further, view coordinates may also be manipulated manually by using an affine transformation matrix which applies linear transformations on absolute coordinates before device-dependent routines convert them to screen coordinates. &lt;br /&gt;
&lt;br /&gt;
A &#039;&#039;&#039;prefuse&#039;&#039;&#039; &#039;&#039;Display&#039;&#039; provides the most important manipulating methods of this matrix. [[Zoom]]ing, [[pan]]ning, and rotation of the whole view are only done by changing the view coordinates. So, as absolute coordinates are never concerned of such transformations and translations, a user must never consider the actual view in layout, assignment, or painting routines. &lt;br /&gt;
&lt;br /&gt;
There are several different ways on how to apply such transformations, additionally, the &#039;&#039;Display&#039;&#039; also supports animated transformations.&lt;br /&gt;
&lt;br /&gt;
==User Interactions==&lt;br /&gt;
&lt;br /&gt;
Mouse or keyboard events are treated by &#039;&#039;ControlListener&#039;&#039;. Whenever an event occurs which is handled by a &#039;&#039;ControlListener&#039;&#039;, the &#039;&#039;Display&#039;&#039; delegates the event to the respective routine. A &#039;&#039;ControlListener&#039;&#039; differs automatically which visual element is concerned of the event (the view itself or a &#039;&#039;VisualItem&#039;&#039;). &lt;br /&gt;
&lt;br /&gt;
A &#039;&#039;ControlListener&#039;&#039; may just perform simple tasks like changing the mouse cursor or editing the label of an item. But, in more sophisticated applications, also tasks like loading new data or dragging items on the view may be handled. Therefore, a &#039;&#039;ControlListener&#039;&#039; may also start &#039;&#039;ActionLists&#039;&#039; to execute such tasks. Further, a &#039;&#039;ControlListener&#039;&#039; has also access to the &#039;&#039;Display&#039;&#039;. Thus, it is able to call methods like zooming or panning. Typically, each &#039;&#039;ControlListener&#039;&#039; forces a repaint when its job is done.  &lt;br /&gt;
&lt;br /&gt;
Most of standard functionality is already predefined in &#039;&#039;prefuse&#039;&#039; and the wanted listeners just have to be set to the &#039;&#039;Display&#039;&#039;. However, the &#039;&#039;Display&#039;&#039; can handle a countless of different listener. Hence, typically only a few listeners must be defined manually as they can be mixed with default ones.&lt;br /&gt;
&lt;br /&gt;
=Conclusion=&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;prefuse&#039;&#039;&#039; is a very powerful toolkit, providing a large set of components and methods a developer needs to build an [[Information Visualization]]. The [[polylithic design]] is not that easy to understand in the beginning of a development, but once conceived, a visualization is easy to realize even if really special demands have to be fulfilled. Furthermore, using Prefuse forces a clear and well designed architecture of own applications.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;prefuse&#039;&#039;&#039; was created with most attention paid to developers who will finally work with the toolkit. In an evaluation study this goal was approved too. In the meanwhile, there is also a not so small community using and upgrading the toolkit, which is an argue for its usability.&lt;br /&gt;
&lt;br /&gt;
= External links =&lt;br /&gt;
*[http://prefuse.org prefuse Homepage]&lt;br /&gt;
*[http://vw.indiana.edu/ivsi2004/jherr/index.html prefuse Position Paper]&lt;br /&gt;
*[http://sourceforge.net/forum/forum.php?forum_id=343013 prefuse Help Forum]&lt;br /&gt;
&lt;br /&gt;
= References =&lt;br /&gt;
*[Heer, 2004] Jeffrey Heer. [http://jheer.org/publications/2004-Heer-prefuse-Masters.pdf prefuse: a software framework for interactive information visualization]. Masters of Science, Computer Science Division, University of California, Berkeley, 2004.&lt;br /&gt;
*[Heer, 2005] Jeffrey Heer, Stuart K. Card, and James A. Landay. [http://jheer.org/publications/2005-prefuse-CHI.pdf prefuse: a toolkit for interactive information visualization. In &#039;&#039;CHI 2005, Human Factors in Computing Systems&#039;&#039;], 2005.&lt;br /&gt;
*[Heer, 2006a] Jeffrey Heer, prefuse API documentation, Retrieved at: July 06, 2006, http://prefuse.org&lt;br /&gt;
*[Heer, 2006b] Jeffrey Heer, prefuse manual, Retrieved at: July 06, 2006, http://prefuse.org&lt;br /&gt;
*[Sun Microsystems, 2001] Sun Microsystems, Programmer’s Guide to the Java 2DTM API - Enhanced Graphics and Imaging for Java, Retrieved at: April 20, 2006, http://java.sun.com/j2se/1.4/pdf/j2d-book.pdf&lt;br /&gt;
&lt;br /&gt;
[[Category:Toolkits]]&lt;/div&gt;</summary>
		<author><name>Anfe</name></author>
	</entry>
	<entry>
		<id>https://infovis-wiki.net/w/index.php?title=Prefuse&amp;diff=10131</id>
		<title>Prefuse</title>
		<link rel="alternate" type="text/html" href="https://infovis-wiki.net/w/index.php?title=Prefuse&amp;diff=10131"/>
		<updated>2006-07-06T09:32:49Z</updated>

		<summary type="html">&lt;p&gt;Anfe: /* Coordinates in prefuse */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Summary =&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Author&#039;&#039;&#039;: Jeffrey Heer / UC Berkeley&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Project Webpage&#039;&#039;&#039;: http://prefuse.org&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Current Version&#039;&#039;&#039;: beta, June 15, 2006&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Requirements&#039;&#039;&#039;: Java 1.4&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Overview:&#039;&#039;&#039; using Java2D graphics library; pipeline architecture; animation and rendering support&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Base data structures&#039;&#039;&#039;: Table, Graph, Tree&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Included visualization techniques:&#039;&#039;&#039; [http://www.cs.umd.edu/hcil/fisheyemenu/ Fisheye Menu], [http://prefuse.sourceforge.net/demos-radial.html Radial Graph], [http://www.cs.umd.edu/hcil/treemap/ Treemap], [http://prefuse.sourceforge.net/demos-distortion.html F+C Distortion]&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Supported File Formats&#039;&#039;&#039;: XGMML (XML), TreeML (XML), tab-delimited text, HDir&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;prefuse&#039;&#039;&#039; is an interactive graphical open source toolkit written in Java. It is thought to support the development of sophisticated, highly interactive, and flexible [[Information Visualization]]s. The architecture of &#039;&#039;&#039;prefuse&#039;&#039;&#039; considers the [[Visualization Pipeline]], a recommendation on how to implement a visualization. To provide flexibility, a [[polylithic design]] was chosen which enables developers to implement only needed functionality and customize these to meet the own requirements. But, in contrast to a [[monolithic design]], this design needs more time to conceive and influences the architecture of the own application heavily (which is not a disadvantage as &#039;&#039;&#039;prefuse&#039;&#039;&#039; is very elaborate). &lt;br /&gt;
&lt;br /&gt;
Typically, &#039;&#039;&#039;prefuse&#039;&#039;&#039; is designed to visualize interrelated information so it can be stored in a graph or tree structure, but, also not related data can be used which is stored within a data table. Even though the structure is hierarchical, the resulting tree or graph structure must not be considered in the proper graphical representation as layout algorithms are not restricted in any way. The painting of visual items is done by using a renderer which has access to the respective item itself and the Graphics2D context of the view. This approach enables to use the whole range of available painting methods of Java, therefore, all painting issues are completely independent of the toolkit itself.&lt;br /&gt;
&lt;br /&gt;
Besides providing a large set of predefined elements to visualize data, most attention was set toward usability of the visualization. This is obtained by applying several interaction techniques like tooltips or dragging visual elements. But also more sophisticated techniques like [[zoom]]ing, [[pan]]ning, or [[semantic zoom]]ing are supported or partially even provided by the toolkit itself. Further, &#039;&#039;&#039;prefuse&#039;&#039;&#039; clearly distinguishes between absolute and view coordinates. This separation helps users to place all visual elements in a logical way without consideration of later applied visualization techniques that changes the entire view.  &lt;br /&gt;
&lt;br /&gt;
=== Pros ===&lt;br /&gt;
&lt;br /&gt;
* flexible&lt;br /&gt;
* versatile pipeline approach&lt;br /&gt;
* clear and well thought architecture&lt;br /&gt;
* many layout and distortion algorithms included&lt;br /&gt;
* algorithms for force-based physics simulation included&lt;br /&gt;
* custom animations (smooth transitions)&lt;br /&gt;
* color maps&lt;br /&gt;
* query language to navigate within abstract data&lt;br /&gt;
* demos and examples included&lt;br /&gt;
* bounding management&lt;br /&gt;
* open source&lt;br /&gt;
* documentation of code and general guidance available&lt;br /&gt;
* active developer community &lt;br /&gt;
&lt;br /&gt;
=== Cons ===&lt;br /&gt;
&lt;br /&gt;
* [[polylithic design]] takes up more time to conceive and see first results&lt;br /&gt;
* special requirements of a visualization enforce a lot of adapting work&lt;br /&gt;
&lt;br /&gt;
=General Approach=&lt;br /&gt;
&lt;br /&gt;
Going along with the step-wise recommendation of the [[Visualization Pipeline]], a &#039;&#039;&#039;prefuse&#039;&#039;&#039; application consists of different states of data:&lt;br /&gt;
&lt;br /&gt;
[[Image:prefuse_visualization_pipeline.gif|600px]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;prefuse&#039;&#039;&#039; uses a centralized object called &#039;&#039;Visualization&#039;&#039; (former &#039;&#039;ItemRegistry&#039;&#039;) which maintains and manages the whole visualization. This object has to fulfil several tasks. It stores the abstract data as well as visual analogous of these in two different tables. All transformation routines like filtering or rendering are managed and executed by the &#039;&#039;Visualization&#039;&#039; too. Further, it refers to at least one &#039;&#039;Display&#039;&#039;, a graphical component which can represent visual data of &#039;&#039;&#039;prefuse&#039;&#039;&#039;. &lt;br /&gt;
&lt;br /&gt;
Transformation routines are defined as &#039;&#039;Actions&#039;&#039; which are combined in &#039;&#039;ActionLists&#039;&#039;. An &#039;&#039;ActionList&#039;&#039; is an executable container which is started manually or of the &#039;&#039;Visualization&#039;&#039; itself. Once it is started, all defined &#039;&#039;Actions&#039;&#039; are executed in the given sequence. Typically, the last called &#039;&#039;Action&#039;&#039; is the &#039;&#039;RepaintAction&#039;&#039; which forces all belonging &#039;&#039;Displays&#039;&#039; of the &#039;&#039;Visualization&#039;&#039; to perform a repaint. &lt;br /&gt;
&lt;br /&gt;
A &#039;&#039;Display&#039;&#039; is the view of &#039;&#039;&#039;prefuse&#039;&#039;&#039;. It can be embedded in each Java Swing application. The main task of a &#039;&#039;Display&#039;&#039; is the painting of visual structures which are defined in the respective &#039;&#039;Visualization&#039;&#039;. Whenever the &#039;&#039;Display&#039;&#039; performs a repaint, it requests all visual items and checks all bounds of them (bounding management). If an item is within the own area the respective rendering mechanism is called.  &lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;Display&#039;&#039; also provides navigation techniques like [[zoom]]ing or [[pan]]ning which change the view. The view itself refers to a own coordinate system. View coordinates are described through an affine transformation matrix. The most important functionality to work with this coordinate system are already predefined. Typically, users just have to apply such techniques without considering technical details. &lt;br /&gt;
&lt;br /&gt;
Furthermore, a &#039;&#039;Display&#039;&#039; also maintains a set of &#039;&#039;ControlListener&#039;&#039; which are used to process user interactions (mouse or keyboard events). Whenever such an event occurs the respective listener is called. A listener already differs on where the event happened (e.g., blank area or a certain item). Further, a &#039;&#039;ControlListener&#039;&#039; may also start an &#039;&#039;ActionList&#039;&#039; again.&lt;br /&gt;
&lt;br /&gt;
==Source Data==&lt;br /&gt;
&lt;br /&gt;
Raw data is the base of the application. Typically, the source of raw data is a file, but also other sources like a database or web content are thinkable. However, &#039;&#039;&#039;prefuse&#039;&#039;&#039; provides several file readers for different formats (CSV, Tab-Delimitated, etc.) that can be transformed into a data table. Further, some readers also support the reading of SQL-Database. If another source is needed, a reader can be written manually.&lt;br /&gt;
&lt;br /&gt;
Once the raw data is read, it is transformed into abstract data and stored within a data table of the &#039;&#039;Visualization&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
==Data Table==&lt;br /&gt;
&lt;br /&gt;
The data table which is used to store abstract data works with data types and a definition schema which maps relations between data type and table. That means, each row contains a data record, and each column contains data values for a named data field with a specific data type. Each record of the table is referred as a &#039;&#039;Tuple&#039;&#039;. &lt;br /&gt;
&lt;br /&gt;
Furthermore, instead of the table itself, a graph or tree may be used to store interrelated data. Instead of &#039;&#039;Tuples&#039;&#039;, records are referred as &#039;&#039;Nodes&#039;&#039; which are connected to others with &#039;&#039;Edges&#039;&#039;. Additionally, a tree has one defined root &#039;&#039;Node&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Abstract data does not contain any visual information like assignment attributes or color settings. Instead, own visual analogous are created. Visual attributes of them are extracted out of the abstract data following a defined logic.&lt;br /&gt;
&lt;br /&gt;
==Visual Abstraction==&lt;br /&gt;
&lt;br /&gt;
Visual structures are created when filtering the data container which contains abstract data. In case of a visualization that displays all items from the beginning on, the filtering routine must only executed once at initializing time. If the visual content changes dynamically, the filtering is executed on certain user interactions by calling a defined filtering &#039;&#039;ActionList&#039;&#039;. &lt;br /&gt;
&lt;br /&gt;
A visual structure is referred as &#039;&#039;VisualItem&#039;&#039; which may be distinguished as &#039;&#039;VisualNode&#039;&#039;, &#039;&#039;VisualEdge&#039;&#039;, or an aggregated item which consists of several other items. However, as a &#039;&#039;VisualItem&#039;&#039; is extended of the respective abstract entity, it has full access to all abstract information too. &lt;br /&gt;
&lt;br /&gt;
The filtering routine which transforms the abstract data to visual analogues typically consists of following &#039;&#039;Actions&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Filter&#039;&#039;&#039;: This &#039;&#039;Action&#039;&#039; is responsible to transform the abstract data of the backing table to visual analogues. If no special conditions are defined, the filter creates for each &#039;&#039;Tuple&#039;&#039; a visual instance and stores them in a second table. Additionally, a filter also performs a garbage collection and may set visibility attributes of the created items. &lt;br /&gt;
* &#039;&#039;&#039;Layout&#039;&#039;&#039;: A layout takes care about placing the &#039;&#039;VisualItems&#039;&#039;. Several common algorithms for graphs or trees are already predefined (e.g., &#039;&#039;ForceDirectedLayout&#039;&#039; or &#039;&#039;RadialTreeLayout&#039;&#039;). &lt;br /&gt;
* &#039;&#039;&#039;Assignment&#039;&#039;&#039;: Besides layouting, also other assignments may be performed during the filtering process. Such assignments directly changes visual attributes of &#039;&#039;VisualItems&#039;&#039; like color, sizes, fonts, etc.&lt;br /&gt;
&lt;br /&gt;
A visual structure may also contain a paint routine, but, as all painting jobs are initialized or performed by separated renderers, these issues may also be executed by the renderer itself or any other object.&lt;br /&gt;
&lt;br /&gt;
==View==&lt;br /&gt;
&lt;br /&gt;
Typically, the rendered visual structure is not stored, instead, they are re-rendered whenever needed. However, in case of very complex but constant visual representations it makes sense to hold items in an offscreen image. &lt;br /&gt;
&lt;br /&gt;
Each &#039;&#039;VisualItem&#039;&#039; has got one or more associated &#039;&#039;Renderers&#039;&#039; which are maintained by a factory of the &#039;&#039;Visualization&#039;&#039;. A  &#039;&#039;Render&#039;&#039; has to perform two tasks:&lt;br /&gt;
&lt;br /&gt;
* Providing a bounding box of the item. This box is used to determine if the item must actually be painted or if it would not be visible anyway. &lt;br /&gt;
* Providing the painting routine of the item. Paintings may be executed by the &#039;&#039;Renderer&#039;&#039; itself or delegated to other objects which are accessible of the &#039;&#039;Renderer&#039;&#039;. The painting routines are not restricted in any way, but the proper representation should not exceed the bounding box of the item. &lt;br /&gt;
&lt;br /&gt;
Rendering is always performed on a repaint of the &#039;&#039;Display&#039;&#039;. A repaint can be requested by the &#039;&#039;Visualization&#039;&#039;, on user interaction, and on events like resizing the component, getting the focus, or changing the coordinate system of the view. However, as repaints may occur very often, developers have to ascertain that rendering jobs are performed fast, otherwise, the performance of the whole visualization would suffer.&lt;br /&gt;
&lt;br /&gt;
=Details=&lt;br /&gt;
&lt;br /&gt;
==Package Structure==&lt;br /&gt;
&lt;br /&gt;
Following picture shows the most important packages of &#039;&#039;&#039;prefuse&#039;&#039;&#039; regarding to the [[Visualization Pipeline]]:&lt;br /&gt;
&lt;br /&gt;
[[Image:prefuse_package_guide.gif|600px]]&lt;br /&gt;
&lt;br /&gt;
These packages also contain predefined components. Default &#039;&#039;Nodes&#039;&#039; and &#039;&#039;Edges&#039;&#039; provide standard functionality of abstract data, standard functionality is also available in visual analogous of them. A default filter transforms all defined abstract entities to visual ones. Further, also some special functionality to fulfil common requirements are provided by own components: &lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Renderers&#039;&#039;&#039;: &#039;&#039;EdgeRenderer&#039;&#039; to render edges between graph or tree nodes, a &#039;&#039;LableRenderer&#039;&#039; to render text items, and a &#039;&#039;PolygoneRenderer&#039;&#039; to render geometrical items. &lt;br /&gt;
* &#039;&#039;&#039;Layouts&#039;&#039;&#039;: &#039;&#039;RandomLayout&#039;&#039;, &#039;&#039;GridLayout&#039;&#039;, and some more to place non related data, &#039;&#039;ForceDirectedLayout&#039;&#039;, &#039;&#039;TreeLayout&#039;&#039;, &#039;&#039;RadialTreeLayout&#039;&#039; and others to layout trees and graphs.&lt;br /&gt;
* &#039;&#039;&#039;Controls&#039;&#039;&#039;: &#039;&#039;DragControl&#039;&#039;, &#039;&#039;ZoomControl&#039;&#039;, &#039;&#039;PanControl&#039;&#039;, &#039;&#039;ToolTipControl&#039;&#039; and several others to react on user interactions. &lt;br /&gt;
&lt;br /&gt;
In simple visualizations the predefined functionality will meet most requirements. If special requirements are needed the default functionality supports a step-wise developing as results can be communicated by predefined components until the own functionality is implemented.&lt;br /&gt;
&lt;br /&gt;
==Coordinates in prefuse==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;prefuse&#039;&#039;&#039; works with two different coordinate systems. Absolute coordinates are device-independent logical coordinates. All visual attributes like positions or sizes are defined in absolute coordinates. In contrast, view coordinates are device-depended (screen). Transformations between absolute and view coordinates are done automatically by Java painting routines. View coordinates are influenced by the system and device driver (e.g., the absolute point (0,0) is the topmost left point of the actual graphical component which may be on any position at the screen). Further, view coordinates may also be manipulated manually by using an affine transformation matrix which applies linear transformations on absolute coordinates before device-dependent routines convert them to screen coordinates. &lt;br /&gt;
&lt;br /&gt;
A &#039;&#039;&#039;prefuse&#039;&#039;&#039; &#039;&#039;Display&#039;&#039; provides the most important manipulating methods of this matrix. [[Zoom]]ing, [[pan]]ning, and rotation of the whole view are only done by changing the view coordinates. So, as absolute coordinates are never concerned of such transformations and translations, a user must never consider the actual view in layout, assignment, or painting routines. &lt;br /&gt;
&lt;br /&gt;
There are several different ways on how to apply such transformations, additionally, the &#039;&#039;Display&#039;&#039; also supports animated transformations.&lt;br /&gt;
&lt;br /&gt;
==User Interactions==&lt;br /&gt;
&lt;br /&gt;
Mouse or keyboard events are treated by using &#039;&#039;ControlListener&#039;&#039;. Whenever an event occurs which is handled by a &#039;&#039;ControlListener&#039;&#039;, the &#039;&#039;Display&#039;&#039; delegates the event to the respective routine. A &#039;&#039;ControlListener&#039;&#039; differs automatically which visual element is concerned of the event (the view itself or a &#039;&#039;VisualItem&#039;&#039; on the view). &lt;br /&gt;
&lt;br /&gt;
A &#039;&#039;ControlListener&#039;&#039; may just perform simple task like changing the mouse cursor or editing the label of an item. But, in more sophisticated applications, also task like loading new data or dragging items on the view may also be handled. Therefore, a &#039;&#039;ControlListener&#039;&#039; may also work with &#039;&#039;ActionLists&#039;&#039; to execute such tasks. Further, a &#039;&#039;ControlListener&#039;&#039; has also access to the &#039;&#039;Display&#039;&#039; to call methods like zooming or panning. Typically, each &#039;&#039;ControlListener&#039;&#039; forces a repaint when its job is done.  &lt;br /&gt;
&lt;br /&gt;
Most of standard functionality is already predefined in &#039;&#039;prefuse&#039;&#039; and the wanted listeners just have to be set to the &#039;&#039;Display&#039;&#039;. However, the &#039;&#039;Display&#039;&#039; can handle a countless of different listener. Hence, typically only a few listeners must be defined manually as they can be mixed with default ones.  &lt;br /&gt;
&lt;br /&gt;
=Conclusion=&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;prefuse&#039;&#039;&#039; is a very powerful toolkit, providing a large set of components and methods a developer needs to build an [[Information Visualization]]. The [[polylithic design]] is not that easy to understand in the beginning of a development, but once conceived, a visualization is easy to realize even if really special demands have to be fulfilled. Furthermore, using Prefuse forces a clear and well designed architecture of own applications.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;prefuse&#039;&#039;&#039; was created with most attention paid to developers who will finally work with the toolkit. In an evaluation study this goal was approved too. In the meanwhile, there is also a not so small community using and upgrading the toolkit, which is an argue for its usability.&lt;br /&gt;
&lt;br /&gt;
= External links =&lt;br /&gt;
*[http://prefuse.org prefuse Homepage]&lt;br /&gt;
*[http://vw.indiana.edu/ivsi2004/jherr/index.html prefuse Position Paper]&lt;br /&gt;
*[http://sourceforge.net/forum/forum.php?forum_id=343013 prefuse Help Forum]&lt;br /&gt;
&lt;br /&gt;
= References =&lt;br /&gt;
*[Heer, 2004] Jeffrey Heer. [http://jheer.org/publications/2004-Heer-prefuse-Masters.pdf prefuse: a software framework for interactive information visualization]. Masters of Science, Computer Science Division, University of California, Berkeley, 2004.&lt;br /&gt;
*[Heer, 2005] Jeffrey Heer, Stuart K. Card, and James A. Landay. [http://jheer.org/publications/2005-prefuse-CHI.pdf prefuse: a toolkit for interactive information visualization. In &#039;&#039;CHI 2005, Human Factors in Computing Systems&#039;&#039;], 2005.&lt;br /&gt;
*[Heer, 2006a] Jeffrey Heer, prefuse API documentation, Retrieved at: July 06, 2006, http://prefuse.org&lt;br /&gt;
*[Heer, 2006b] Jeffrey Heer, prefuse manual, Retrieved at: July 06, 2006, http://prefuse.org&lt;br /&gt;
*[Sun Microsystems, 2001] Sun Microsystems, Programmer’s Guide to the Java 2DTM API - Enhanced Graphics and Imaging for Java, Retrieved at: April 20, 2006, http://java.sun.com/j2se/1.4/pdf/j2d-book.pdf&lt;br /&gt;
&lt;br /&gt;
[[Category:Toolkits]]&lt;/div&gt;</summary>
		<author><name>Anfe</name></author>
	</entry>
	<entry>
		<id>https://infovis-wiki.net/w/index.php?title=Prefuse&amp;diff=10130</id>
		<title>Prefuse</title>
		<link rel="alternate" type="text/html" href="https://infovis-wiki.net/w/index.php?title=Prefuse&amp;diff=10130"/>
		<updated>2006-07-06T09:31:34Z</updated>

		<summary type="html">&lt;p&gt;Anfe: /* Package Structure */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Summary =&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Author&#039;&#039;&#039;: Jeffrey Heer / UC Berkeley&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Project Webpage&#039;&#039;&#039;: http://prefuse.org&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Current Version&#039;&#039;&#039;: beta, June 15, 2006&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Requirements&#039;&#039;&#039;: Java 1.4&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Overview:&#039;&#039;&#039; using Java2D graphics library; pipeline architecture; animation and rendering support&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Base data structures&#039;&#039;&#039;: Table, Graph, Tree&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Included visualization techniques:&#039;&#039;&#039; [http://www.cs.umd.edu/hcil/fisheyemenu/ Fisheye Menu], [http://prefuse.sourceforge.net/demos-radial.html Radial Graph], [http://www.cs.umd.edu/hcil/treemap/ Treemap], [http://prefuse.sourceforge.net/demos-distortion.html F+C Distortion]&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Supported File Formats&#039;&#039;&#039;: XGMML (XML), TreeML (XML), tab-delimited text, HDir&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;prefuse&#039;&#039;&#039; is an interactive graphical open source toolkit written in Java. It is thought to support the development of sophisticated, highly interactive, and flexible [[Information Visualization]]s. The architecture of &#039;&#039;&#039;prefuse&#039;&#039;&#039; considers the [[Visualization Pipeline]], a recommendation on how to implement a visualization. To provide flexibility, a [[polylithic design]] was chosen which enables developers to implement only needed functionality and customize these to meet the own requirements. But, in contrast to a [[monolithic design]], this design needs more time to conceive and influences the architecture of the own application heavily (which is not a disadvantage as &#039;&#039;&#039;prefuse&#039;&#039;&#039; is very elaborate). &lt;br /&gt;
&lt;br /&gt;
Typically, &#039;&#039;&#039;prefuse&#039;&#039;&#039; is designed to visualize interrelated information so it can be stored in a graph or tree structure, but, also not related data can be used which is stored within a data table. Even though the structure is hierarchical, the resulting tree or graph structure must not be considered in the proper graphical representation as layout algorithms are not restricted in any way. The painting of visual items is done by using a renderer which has access to the respective item itself and the Graphics2D context of the view. This approach enables to use the whole range of available painting methods of Java, therefore, all painting issues are completely independent of the toolkit itself.&lt;br /&gt;
&lt;br /&gt;
Besides providing a large set of predefined elements to visualize data, most attention was set toward usability of the visualization. This is obtained by applying several interaction techniques like tooltips or dragging visual elements. But also more sophisticated techniques like [[zoom]]ing, [[pan]]ning, or [[semantic zoom]]ing are supported or partially even provided by the toolkit itself. Further, &#039;&#039;&#039;prefuse&#039;&#039;&#039; clearly distinguishes between absolute and view coordinates. This separation helps users to place all visual elements in a logical way without consideration of later applied visualization techniques that changes the entire view.  &lt;br /&gt;
&lt;br /&gt;
=== Pros ===&lt;br /&gt;
&lt;br /&gt;
* flexible&lt;br /&gt;
* versatile pipeline approach&lt;br /&gt;
* clear and well thought architecture&lt;br /&gt;
* many layout and distortion algorithms included&lt;br /&gt;
* algorithms for force-based physics simulation included&lt;br /&gt;
* custom animations (smooth transitions)&lt;br /&gt;
* color maps&lt;br /&gt;
* query language to navigate within abstract data&lt;br /&gt;
* demos and examples included&lt;br /&gt;
* bounding management&lt;br /&gt;
* open source&lt;br /&gt;
* documentation of code and general guidance available&lt;br /&gt;
* active developer community &lt;br /&gt;
&lt;br /&gt;
=== Cons ===&lt;br /&gt;
&lt;br /&gt;
* [[polylithic design]] takes up more time to conceive and see first results&lt;br /&gt;
* special requirements of a visualization enforce a lot of adapting work&lt;br /&gt;
&lt;br /&gt;
=General Approach=&lt;br /&gt;
&lt;br /&gt;
Going along with the step-wise recommendation of the [[Visualization Pipeline]], a &#039;&#039;&#039;prefuse&#039;&#039;&#039; application consists of different states of data:&lt;br /&gt;
&lt;br /&gt;
[[Image:prefuse_visualization_pipeline.gif|600px]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;prefuse&#039;&#039;&#039; uses a centralized object called &#039;&#039;Visualization&#039;&#039; (former &#039;&#039;ItemRegistry&#039;&#039;) which maintains and manages the whole visualization. This object has to fulfil several tasks. It stores the abstract data as well as visual analogous of these in two different tables. All transformation routines like filtering or rendering are managed and executed by the &#039;&#039;Visualization&#039;&#039; too. Further, it refers to at least one &#039;&#039;Display&#039;&#039;, a graphical component which can represent visual data of &#039;&#039;&#039;prefuse&#039;&#039;&#039;. &lt;br /&gt;
&lt;br /&gt;
Transformation routines are defined as &#039;&#039;Actions&#039;&#039; which are combined in &#039;&#039;ActionLists&#039;&#039;. An &#039;&#039;ActionList&#039;&#039; is an executable container which is started manually or of the &#039;&#039;Visualization&#039;&#039; itself. Once it is started, all defined &#039;&#039;Actions&#039;&#039; are executed in the given sequence. Typically, the last called &#039;&#039;Action&#039;&#039; is the &#039;&#039;RepaintAction&#039;&#039; which forces all belonging &#039;&#039;Displays&#039;&#039; of the &#039;&#039;Visualization&#039;&#039; to perform a repaint. &lt;br /&gt;
&lt;br /&gt;
A &#039;&#039;Display&#039;&#039; is the view of &#039;&#039;&#039;prefuse&#039;&#039;&#039;. It can be embedded in each Java Swing application. The main task of a &#039;&#039;Display&#039;&#039; is the painting of visual structures which are defined in the respective &#039;&#039;Visualization&#039;&#039;. Whenever the &#039;&#039;Display&#039;&#039; performs a repaint, it requests all visual items and checks all bounds of them (bounding management). If an item is within the own area the respective rendering mechanism is called.  &lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;Display&#039;&#039; also provides navigation techniques like [[zoom]]ing or [[pan]]ning which change the view. The view itself refers to a own coordinate system. View coordinates are described through an affine transformation matrix. The most important functionality to work with this coordinate system are already predefined. Typically, users just have to apply such techniques without considering technical details. &lt;br /&gt;
&lt;br /&gt;
Furthermore, a &#039;&#039;Display&#039;&#039; also maintains a set of &#039;&#039;ControlListener&#039;&#039; which are used to process user interactions (mouse or keyboard events). Whenever such an event occurs the respective listener is called. A listener already differs on where the event happened (e.g., blank area or a certain item). Further, a &#039;&#039;ControlListener&#039;&#039; may also start an &#039;&#039;ActionList&#039;&#039; again.&lt;br /&gt;
&lt;br /&gt;
==Source Data==&lt;br /&gt;
&lt;br /&gt;
Raw data is the base of the application. Typically, the source of raw data is a file, but also other sources like a database or web content are thinkable. However, &#039;&#039;&#039;prefuse&#039;&#039;&#039; provides several file readers for different formats (CSV, Tab-Delimitated, etc.) that can be transformed into a data table. Further, some readers also support the reading of SQL-Database. If another source is needed, a reader can be written manually.&lt;br /&gt;
&lt;br /&gt;
Once the raw data is read, it is transformed into abstract data and stored within a data table of the &#039;&#039;Visualization&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
==Data Table==&lt;br /&gt;
&lt;br /&gt;
The data table which is used to store abstract data works with data types and a definition schema which maps relations between data type and table. That means, each row contains a data record, and each column contains data values for a named data field with a specific data type. Each record of the table is referred as a &#039;&#039;Tuple&#039;&#039;. &lt;br /&gt;
&lt;br /&gt;
Furthermore, instead of the table itself, a graph or tree may be used to store interrelated data. Instead of &#039;&#039;Tuples&#039;&#039;, records are referred as &#039;&#039;Nodes&#039;&#039; which are connected to others with &#039;&#039;Edges&#039;&#039;. Additionally, a tree has one defined root &#039;&#039;Node&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Abstract data does not contain any visual information like assignment attributes or color settings. Instead, own visual analogous are created. Visual attributes of them are extracted out of the abstract data following a defined logic.&lt;br /&gt;
&lt;br /&gt;
==Visual Abstraction==&lt;br /&gt;
&lt;br /&gt;
Visual structures are created when filtering the data container which contains abstract data. In case of a visualization that displays all items from the beginning on, the filtering routine must only executed once at initializing time. If the visual content changes dynamically, the filtering is executed on certain user interactions by calling a defined filtering &#039;&#039;ActionList&#039;&#039;. &lt;br /&gt;
&lt;br /&gt;
A visual structure is referred as &#039;&#039;VisualItem&#039;&#039; which may be distinguished as &#039;&#039;VisualNode&#039;&#039;, &#039;&#039;VisualEdge&#039;&#039;, or an aggregated item which consists of several other items. However, as a &#039;&#039;VisualItem&#039;&#039; is extended of the respective abstract entity, it has full access to all abstract information too. &lt;br /&gt;
&lt;br /&gt;
The filtering routine which transforms the abstract data to visual analogues typically consists of following &#039;&#039;Actions&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Filter&#039;&#039;&#039;: This &#039;&#039;Action&#039;&#039; is responsible to transform the abstract data of the backing table to visual analogues. If no special conditions are defined, the filter creates for each &#039;&#039;Tuple&#039;&#039; a visual instance and stores them in a second table. Additionally, a filter also performs a garbage collection and may set visibility attributes of the created items. &lt;br /&gt;
* &#039;&#039;&#039;Layout&#039;&#039;&#039;: A layout takes care about placing the &#039;&#039;VisualItems&#039;&#039;. Several common algorithms for graphs or trees are already predefined (e.g., &#039;&#039;ForceDirectedLayout&#039;&#039; or &#039;&#039;RadialTreeLayout&#039;&#039;). &lt;br /&gt;
* &#039;&#039;&#039;Assignment&#039;&#039;&#039;: Besides layouting, also other assignments may be performed during the filtering process. Such assignments directly changes visual attributes of &#039;&#039;VisualItems&#039;&#039; like color, sizes, fonts, etc.&lt;br /&gt;
&lt;br /&gt;
A visual structure may also contain a paint routine, but, as all painting jobs are initialized or performed by separated renderers, these issues may also be executed by the renderer itself or any other object.&lt;br /&gt;
&lt;br /&gt;
==View==&lt;br /&gt;
&lt;br /&gt;
Typically, the rendered visual structure is not stored, instead, they are re-rendered whenever needed. However, in case of very complex but constant visual representations it makes sense to hold items in an offscreen image. &lt;br /&gt;
&lt;br /&gt;
Each &#039;&#039;VisualItem&#039;&#039; has got one or more associated &#039;&#039;Renderers&#039;&#039; which are maintained by a factory of the &#039;&#039;Visualization&#039;&#039;. A  &#039;&#039;Render&#039;&#039; has to perform two tasks:&lt;br /&gt;
&lt;br /&gt;
* Providing a bounding box of the item. This box is used to determine if the item must actually be painted or if it would not be visible anyway. &lt;br /&gt;
* Providing the painting routine of the item. Paintings may be executed by the &#039;&#039;Renderer&#039;&#039; itself or delegated to other objects which are accessible of the &#039;&#039;Renderer&#039;&#039;. The painting routines are not restricted in any way, but the proper representation should not exceed the bounding box of the item. &lt;br /&gt;
&lt;br /&gt;
Rendering is always performed on a repaint of the &#039;&#039;Display&#039;&#039;. A repaint can be requested by the &#039;&#039;Visualization&#039;&#039;, on user interaction, and on events like resizing the component, getting the focus, or changing the coordinate system of the view. However, as repaints may occur very often, developers have to ascertain that rendering jobs are performed fast, otherwise, the performance of the whole visualization would suffer.&lt;br /&gt;
&lt;br /&gt;
=Details=&lt;br /&gt;
&lt;br /&gt;
==Package Structure==&lt;br /&gt;
&lt;br /&gt;
Following picture shows the most important packages of &#039;&#039;&#039;prefuse&#039;&#039;&#039; regarding to the [[Visualization Pipeline]]:&lt;br /&gt;
&lt;br /&gt;
[[Image:prefuse_package_guide.gif|600px]]&lt;br /&gt;
&lt;br /&gt;
These packages also contain predefined components. Default &#039;&#039;Nodes&#039;&#039; and &#039;&#039;Edges&#039;&#039; provide standard functionality of abstract data, standard functionality is also available in visual analogous of them. A default filter transforms all defined abstract entities to visual ones. Further, also some special functionality to fulfil common requirements are provided by own components: &lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Renderers&#039;&#039;&#039;: &#039;&#039;EdgeRenderer&#039;&#039; to render edges between graph or tree nodes, a &#039;&#039;LableRenderer&#039;&#039; to render text items, and a &#039;&#039;PolygoneRenderer&#039;&#039; to render geometrical items. &lt;br /&gt;
* &#039;&#039;&#039;Layouts&#039;&#039;&#039;: &#039;&#039;RandomLayout&#039;&#039;, &#039;&#039;GridLayout&#039;&#039;, and some more to place non related data, &#039;&#039;ForceDirectedLayout&#039;&#039;, &#039;&#039;TreeLayout&#039;&#039;, &#039;&#039;RadialTreeLayout&#039;&#039; and others to layout trees and graphs.&lt;br /&gt;
* &#039;&#039;&#039;Controls&#039;&#039;&#039;: &#039;&#039;DragControl&#039;&#039;, &#039;&#039;ZoomControl&#039;&#039;, &#039;&#039;PanControl&#039;&#039;, &#039;&#039;ToolTipControl&#039;&#039; and several others to react on user interactions. &lt;br /&gt;
&lt;br /&gt;
In simple visualizations the predefined functionality will meet most requirements. If special requirements are needed the default functionality supports a step-wise developing as results can be communicated by predefined components until the own functionality is implemented.&lt;br /&gt;
&lt;br /&gt;
==Coordinates in prefuse==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;prefuse&#039;&#039;&#039; works with two different coordinate systems. Absolute coordinates are device-independent logical coordinates. All visual attributes like positions or sizes are defined in absolute coordinates. In contrast, view coordinates are device-depended (screen). Transformations between absolute and view coordinates are done automatically by Java painting routines. View coordinates are influenced by the system and device driver (e.g., the absolute point (0,0) is the topmost left point of the actual graphical component which may be on any position at the screen). Further, view coordinates may also be manipulated manually by using an affine transformation matrix which applies linear transformations on absolute coordinates before device-dependent routines convert them to screen coordinates. &lt;br /&gt;
&lt;br /&gt;
A &#039;&#039;&#039;prefuse&#039;&#039;&#039; &#039;&#039;Display&#039;&#039; provides the most important manipulating methods of this matrix. [[Zoom]]ing, [[pan]]ning, and rotation of the whole view are only done by changing the view coordinates. So, as absolute coordinates are never concerned of such transformations and translations, a user must never consider the actual view in layout, assignment, or painting routines. &lt;br /&gt;
&lt;br /&gt;
There are several different ways on how to apply such transformations, additionally, the &#039;&#039;Display&#039;&#039; also supports animated transformations. &lt;br /&gt;
&lt;br /&gt;
==User Interactions==&lt;br /&gt;
&lt;br /&gt;
Mouse or keyboard events are treated by using &#039;&#039;ControlListener&#039;&#039;. Whenever an event occurs which is handled by a &#039;&#039;ControlListener&#039;&#039;, the &#039;&#039;Display&#039;&#039; delegates the event to the respective routine. A &#039;&#039;ControlListener&#039;&#039; differs automatically which visual element is concerned of the event (the view itself or a &#039;&#039;VisualItem&#039;&#039; on the view). &lt;br /&gt;
&lt;br /&gt;
A &#039;&#039;ControlListener&#039;&#039; may just perform simple task like changing the mouse cursor or editing the label of an item. But, in more sophisticated applications, also task like loading new data or dragging items on the view may also be handled. Therefore, a &#039;&#039;ControlListener&#039;&#039; may also work with &#039;&#039;ActionLists&#039;&#039; to execute such tasks. Further, a &#039;&#039;ControlListener&#039;&#039; has also access to the &#039;&#039;Display&#039;&#039; to call methods like zooming or panning. Typically, each &#039;&#039;ControlListener&#039;&#039; forces a repaint when its job is done.  &lt;br /&gt;
&lt;br /&gt;
Most of standard functionality is already predefined in &#039;&#039;prefuse&#039;&#039; and the wanted listeners just have to be set to the &#039;&#039;Display&#039;&#039;. However, the &#039;&#039;Display&#039;&#039; can handle a countless of different listener. Hence, typically only a few listeners must be defined manually as they can be mixed with default ones.  &lt;br /&gt;
&lt;br /&gt;
=Conclusion=&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;prefuse&#039;&#039;&#039; is a very powerful toolkit, providing a large set of components and methods a developer needs to build an [[Information Visualization]]. The [[polylithic design]] is not that easy to understand in the beginning of a development, but once conceived, a visualization is easy to realize even if really special demands have to be fulfilled. Furthermore, using Prefuse forces a clear and well designed architecture of own applications.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;prefuse&#039;&#039;&#039; was created with most attention paid to developers who will finally work with the toolkit. In an evaluation study this goal was approved too. In the meanwhile, there is also a not so small community using and upgrading the toolkit, which is an argue for its usability.&lt;br /&gt;
&lt;br /&gt;
= External links =&lt;br /&gt;
*[http://prefuse.org prefuse Homepage]&lt;br /&gt;
*[http://vw.indiana.edu/ivsi2004/jherr/index.html prefuse Position Paper]&lt;br /&gt;
*[http://sourceforge.net/forum/forum.php?forum_id=343013 prefuse Help Forum]&lt;br /&gt;
&lt;br /&gt;
= References =&lt;br /&gt;
*[Heer, 2004] Jeffrey Heer. [http://jheer.org/publications/2004-Heer-prefuse-Masters.pdf prefuse: a software framework for interactive information visualization]. Masters of Science, Computer Science Division, University of California, Berkeley, 2004.&lt;br /&gt;
*[Heer, 2005] Jeffrey Heer, Stuart K. Card, and James A. Landay. [http://jheer.org/publications/2005-prefuse-CHI.pdf prefuse: a toolkit for interactive information visualization. In &#039;&#039;CHI 2005, Human Factors in Computing Systems&#039;&#039;], 2005.&lt;br /&gt;
*[Heer, 2006a] Jeffrey Heer, prefuse API documentation, Retrieved at: July 06, 2006, http://prefuse.org&lt;br /&gt;
*[Heer, 2006b] Jeffrey Heer, prefuse manual, Retrieved at: July 06, 2006, http://prefuse.org&lt;br /&gt;
*[Sun Microsystems, 2001] Sun Microsystems, Programmer’s Guide to the Java 2DTM API - Enhanced Graphics and Imaging for Java, Retrieved at: April 20, 2006, http://java.sun.com/j2se/1.4/pdf/j2d-book.pdf&lt;br /&gt;
&lt;br /&gt;
[[Category:Toolkits]]&lt;/div&gt;</summary>
		<author><name>Anfe</name></author>
	</entry>
	<entry>
		<id>https://infovis-wiki.net/w/index.php?title=Prefuse&amp;diff=10129</id>
		<title>Prefuse</title>
		<link rel="alternate" type="text/html" href="https://infovis-wiki.net/w/index.php?title=Prefuse&amp;diff=10129"/>
		<updated>2006-07-06T09:29:08Z</updated>

		<summary type="html">&lt;p&gt;Anfe: /* View */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Summary =&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Author&#039;&#039;&#039;: Jeffrey Heer / UC Berkeley&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Project Webpage&#039;&#039;&#039;: http://prefuse.org&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Current Version&#039;&#039;&#039;: beta, June 15, 2006&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Requirements&#039;&#039;&#039;: Java 1.4&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Overview:&#039;&#039;&#039; using Java2D graphics library; pipeline architecture; animation and rendering support&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Base data structures&#039;&#039;&#039;: Table, Graph, Tree&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Included visualization techniques:&#039;&#039;&#039; [http://www.cs.umd.edu/hcil/fisheyemenu/ Fisheye Menu], [http://prefuse.sourceforge.net/demos-radial.html Radial Graph], [http://www.cs.umd.edu/hcil/treemap/ Treemap], [http://prefuse.sourceforge.net/demos-distortion.html F+C Distortion]&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Supported File Formats&#039;&#039;&#039;: XGMML (XML), TreeML (XML), tab-delimited text, HDir&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;prefuse&#039;&#039;&#039; is an interactive graphical open source toolkit written in Java. It is thought to support the development of sophisticated, highly interactive, and flexible [[Information Visualization]]s. The architecture of &#039;&#039;&#039;prefuse&#039;&#039;&#039; considers the [[Visualization Pipeline]], a recommendation on how to implement a visualization. To provide flexibility, a [[polylithic design]] was chosen which enables developers to implement only needed functionality and customize these to meet the own requirements. But, in contrast to a [[monolithic design]], this design needs more time to conceive and influences the architecture of the own application heavily (which is not a disadvantage as &#039;&#039;&#039;prefuse&#039;&#039;&#039; is very elaborate). &lt;br /&gt;
&lt;br /&gt;
Typically, &#039;&#039;&#039;prefuse&#039;&#039;&#039; is designed to visualize interrelated information so it can be stored in a graph or tree structure, but, also not related data can be used which is stored within a data table. Even though the structure is hierarchical, the resulting tree or graph structure must not be considered in the proper graphical representation as layout algorithms are not restricted in any way. The painting of visual items is done by using a renderer which has access to the respective item itself and the Graphics2D context of the view. This approach enables to use the whole range of available painting methods of Java, therefore, all painting issues are completely independent of the toolkit itself.&lt;br /&gt;
&lt;br /&gt;
Besides providing a large set of predefined elements to visualize data, most attention was set toward usability of the visualization. This is obtained by applying several interaction techniques like tooltips or dragging visual elements. But also more sophisticated techniques like [[zoom]]ing, [[pan]]ning, or [[semantic zoom]]ing are supported or partially even provided by the toolkit itself. Further, &#039;&#039;&#039;prefuse&#039;&#039;&#039; clearly distinguishes between absolute and view coordinates. This separation helps users to place all visual elements in a logical way without consideration of later applied visualization techniques that changes the entire view.  &lt;br /&gt;
&lt;br /&gt;
=== Pros ===&lt;br /&gt;
&lt;br /&gt;
* flexible&lt;br /&gt;
* versatile pipeline approach&lt;br /&gt;
* clear and well thought architecture&lt;br /&gt;
* many layout and distortion algorithms included&lt;br /&gt;
* algorithms for force-based physics simulation included&lt;br /&gt;
* custom animations (smooth transitions)&lt;br /&gt;
* color maps&lt;br /&gt;
* query language to navigate within abstract data&lt;br /&gt;
* demos and examples included&lt;br /&gt;
* bounding management&lt;br /&gt;
* open source&lt;br /&gt;
* documentation of code and general guidance available&lt;br /&gt;
* active developer community &lt;br /&gt;
&lt;br /&gt;
=== Cons ===&lt;br /&gt;
&lt;br /&gt;
* [[polylithic design]] takes up more time to conceive and see first results&lt;br /&gt;
* special requirements of a visualization enforce a lot of adapting work&lt;br /&gt;
&lt;br /&gt;
=General Approach=&lt;br /&gt;
&lt;br /&gt;
Going along with the step-wise recommendation of the [[Visualization Pipeline]], a &#039;&#039;&#039;prefuse&#039;&#039;&#039; application consists of different states of data:&lt;br /&gt;
&lt;br /&gt;
[[Image:prefuse_visualization_pipeline.gif|600px]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;prefuse&#039;&#039;&#039; uses a centralized object called &#039;&#039;Visualization&#039;&#039; (former &#039;&#039;ItemRegistry&#039;&#039;) which maintains and manages the whole visualization. This object has to fulfil several tasks. It stores the abstract data as well as visual analogous of these in two different tables. All transformation routines like filtering or rendering are managed and executed by the &#039;&#039;Visualization&#039;&#039; too. Further, it refers to at least one &#039;&#039;Display&#039;&#039;, a graphical component which can represent visual data of &#039;&#039;&#039;prefuse&#039;&#039;&#039;. &lt;br /&gt;
&lt;br /&gt;
Transformation routines are defined as &#039;&#039;Actions&#039;&#039; which are combined in &#039;&#039;ActionLists&#039;&#039;. An &#039;&#039;ActionList&#039;&#039; is an executable container which is started manually or of the &#039;&#039;Visualization&#039;&#039; itself. Once it is started, all defined &#039;&#039;Actions&#039;&#039; are executed in the given sequence. Typically, the last called &#039;&#039;Action&#039;&#039; is the &#039;&#039;RepaintAction&#039;&#039; which forces all belonging &#039;&#039;Displays&#039;&#039; of the &#039;&#039;Visualization&#039;&#039; to perform a repaint. &lt;br /&gt;
&lt;br /&gt;
A &#039;&#039;Display&#039;&#039; is the view of &#039;&#039;&#039;prefuse&#039;&#039;&#039;. It can be embedded in each Java Swing application. The main task of a &#039;&#039;Display&#039;&#039; is the painting of visual structures which are defined in the respective &#039;&#039;Visualization&#039;&#039;. Whenever the &#039;&#039;Display&#039;&#039; performs a repaint, it requests all visual items and checks all bounds of them (bounding management). If an item is within the own area the respective rendering mechanism is called.  &lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;Display&#039;&#039; also provides navigation techniques like [[zoom]]ing or [[pan]]ning which change the view. The view itself refers to a own coordinate system. View coordinates are described through an affine transformation matrix. The most important functionality to work with this coordinate system are already predefined. Typically, users just have to apply such techniques without considering technical details. &lt;br /&gt;
&lt;br /&gt;
Furthermore, a &#039;&#039;Display&#039;&#039; also maintains a set of &#039;&#039;ControlListener&#039;&#039; which are used to process user interactions (mouse or keyboard events). Whenever such an event occurs the respective listener is called. A listener already differs on where the event happened (e.g., blank area or a certain item). Further, a &#039;&#039;ControlListener&#039;&#039; may also start an &#039;&#039;ActionList&#039;&#039; again.&lt;br /&gt;
&lt;br /&gt;
==Source Data==&lt;br /&gt;
&lt;br /&gt;
Raw data is the base of the application. Typically, the source of raw data is a file, but also other sources like a database or web content are thinkable. However, &#039;&#039;&#039;prefuse&#039;&#039;&#039; provides several file readers for different formats (CSV, Tab-Delimitated, etc.) that can be transformed into a data table. Further, some readers also support the reading of SQL-Database. If another source is needed, a reader can be written manually.&lt;br /&gt;
&lt;br /&gt;
Once the raw data is read, it is transformed into abstract data and stored within a data table of the &#039;&#039;Visualization&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
==Data Table==&lt;br /&gt;
&lt;br /&gt;
The data table which is used to store abstract data works with data types and a definition schema which maps relations between data type and table. That means, each row contains a data record, and each column contains data values for a named data field with a specific data type. Each record of the table is referred as a &#039;&#039;Tuple&#039;&#039;. &lt;br /&gt;
&lt;br /&gt;
Furthermore, instead of the table itself, a graph or tree may be used to store interrelated data. Instead of &#039;&#039;Tuples&#039;&#039;, records are referred as &#039;&#039;Nodes&#039;&#039; which are connected to others with &#039;&#039;Edges&#039;&#039;. Additionally, a tree has one defined root &#039;&#039;Node&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Abstract data does not contain any visual information like assignment attributes or color settings. Instead, own visual analogous are created. Visual attributes of them are extracted out of the abstract data following a defined logic.&lt;br /&gt;
&lt;br /&gt;
==Visual Abstraction==&lt;br /&gt;
&lt;br /&gt;
Visual structures are created when filtering the data container which contains abstract data. In case of a visualization that displays all items from the beginning on, the filtering routine must only executed once at initializing time. If the visual content changes dynamically, the filtering is executed on certain user interactions by calling a defined filtering &#039;&#039;ActionList&#039;&#039;. &lt;br /&gt;
&lt;br /&gt;
A visual structure is referred as &#039;&#039;VisualItem&#039;&#039; which may be distinguished as &#039;&#039;VisualNode&#039;&#039;, &#039;&#039;VisualEdge&#039;&#039;, or an aggregated item which consists of several other items. However, as a &#039;&#039;VisualItem&#039;&#039; is extended of the respective abstract entity, it has full access to all abstract information too. &lt;br /&gt;
&lt;br /&gt;
The filtering routine which transforms the abstract data to visual analogues typically consists of following &#039;&#039;Actions&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Filter&#039;&#039;&#039;: This &#039;&#039;Action&#039;&#039; is responsible to transform the abstract data of the backing table to visual analogues. If no special conditions are defined, the filter creates for each &#039;&#039;Tuple&#039;&#039; a visual instance and stores them in a second table. Additionally, a filter also performs a garbage collection and may set visibility attributes of the created items. &lt;br /&gt;
* &#039;&#039;&#039;Layout&#039;&#039;&#039;: A layout takes care about placing the &#039;&#039;VisualItems&#039;&#039;. Several common algorithms for graphs or trees are already predefined (e.g., &#039;&#039;ForceDirectedLayout&#039;&#039; or &#039;&#039;RadialTreeLayout&#039;&#039;). &lt;br /&gt;
* &#039;&#039;&#039;Assignment&#039;&#039;&#039;: Besides layouting, also other assignments may be performed during the filtering process. Such assignments directly changes visual attributes of &#039;&#039;VisualItems&#039;&#039; like color, sizes, fonts, etc.&lt;br /&gt;
&lt;br /&gt;
A visual structure may also contain a paint routine, but, as all painting jobs are initialized or performed by separated renderers, these issues may also be executed by the renderer itself or any other object.&lt;br /&gt;
&lt;br /&gt;
==View==&lt;br /&gt;
&lt;br /&gt;
Typically, the rendered visual structure is not stored, instead, they are re-rendered whenever needed. However, in case of very complex but constant visual representations it makes sense to hold items in an offscreen image. &lt;br /&gt;
&lt;br /&gt;
Each &#039;&#039;VisualItem&#039;&#039; has got one or more associated &#039;&#039;Renderers&#039;&#039; which are maintained by a factory of the &#039;&#039;Visualization&#039;&#039;. A  &#039;&#039;Render&#039;&#039; has to perform two tasks:&lt;br /&gt;
&lt;br /&gt;
* Providing a bounding box of the item. This box is used to determine if the item must actually be painted or if it would not be visible anyway. &lt;br /&gt;
* Providing the painting routine of the item. Paintings may be executed by the &#039;&#039;Renderer&#039;&#039; itself or delegated to other objects which are accessible of the &#039;&#039;Renderer&#039;&#039;. The painting routines are not restricted in any way, but the proper representation should not exceed the bounding box of the item. &lt;br /&gt;
&lt;br /&gt;
Rendering is always performed on a repaint of the &#039;&#039;Display&#039;&#039;. A repaint can be requested by the &#039;&#039;Visualization&#039;&#039;, on user interaction, and on events like resizing the component, getting the focus, or changing the coordinate system of the view. However, as repaints may occur very often, developers have to ascertain that rendering jobs are performed fast, otherwise, the performance of the whole visualization would suffer.&lt;br /&gt;
&lt;br /&gt;
=Details=&lt;br /&gt;
&lt;br /&gt;
==Package Structure==&lt;br /&gt;
&lt;br /&gt;
Following picture shows the most important packages of &#039;&#039;&#039;prefuse&#039;&#039;&#039; regarding to the [[Visualization Pipeline]]:&lt;br /&gt;
&lt;br /&gt;
[[Image:prefuse_package_guide.gif|600px]]&lt;br /&gt;
&lt;br /&gt;
These packages also contain predefined components. A default nodes and edges provide standard functionality of abstract data, standard functionality is also available in visual analogous of them. A default filter transforms all defined abstract entities to visual ones. Further, also some special functionality for common requirements are provided by own components. &lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Renderers&#039;&#039;&#039;: &#039;&#039;EdgeRenderer&#039;&#039; to render edges between graph or tree nodes, a &#039;&#039;LableRenderer&#039;&#039; to render test items, and a &#039;&#039;PolygoneRenderer&#039;&#039; to render geometrical items. &lt;br /&gt;
* &#039;&#039;&#039;Layouts&#039;&#039;&#039;: &#039;&#039;RandomLayout&#039;&#039;, &#039;&#039;GridLayout&#039;&#039;, and some more to place non related data, &#039;&#039;ForceDirectedLayout&#039;&#039;, &#039;&#039;TreeLayout&#039;&#039;, &#039;&#039;RadialTreeLayout&#039;&#039; and others to render trees and graphs.&lt;br /&gt;
* &#039;&#039;&#039;Controls&#039;&#039;&#039;: &#039;&#039;DragControl&#039;&#039;, &#039;&#039;ZoomControl&#039;&#039;, &#039;&#039;PanControl&#039;&#039;, &#039;&#039;ToolTipControl&#039;&#039; and several others to react on user interactions. &lt;br /&gt;
&lt;br /&gt;
In simple visualizations the predefined functionality will meet most requirements. If special requirements are needed the default functionality supports a step-wise developing as results can be communicated by these components until the own functionality is implemented.&lt;br /&gt;
&lt;br /&gt;
==Coordinates in prefuse==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;prefuse&#039;&#039;&#039; works with two different coordinate systems. Absolute coordinates are device-independent logical coordinates. All visual attributes like positions or sizes are defined in absolute coordinates. In contrast, view coordinates are device-depended (screen). Transformations between absolute and view coordinates are done automatically by Java painting routines. View coordinates are influenced by the system and device driver (e.g., the absolute point (0,0) is the topmost left point of the actual graphical component which may be on any position at the screen). Further, view coordinates may also be manipulated manually by using an affine transformation matrix which applies linear transformations on absolute coordinates before device-dependent routines convert them to screen coordinates. &lt;br /&gt;
&lt;br /&gt;
A &#039;&#039;&#039;prefuse&#039;&#039;&#039; &#039;&#039;Display&#039;&#039; provides the most important manipulating methods of this matrix. [[Zoom]]ing, [[pan]]ning, and rotation of the whole view are only done by changing the view coordinates. So, as absolute coordinates are never concerned of such transformations and translations, a user must never consider the actual view in layout, assignment, or painting routines. &lt;br /&gt;
&lt;br /&gt;
There are several different ways on how to apply such transformations, additionally, the &#039;&#039;Display&#039;&#039; also supports animated transformations. &lt;br /&gt;
&lt;br /&gt;
==User Interactions==&lt;br /&gt;
&lt;br /&gt;
Mouse or keyboard events are treated by using &#039;&#039;ControlListener&#039;&#039;. Whenever an event occurs which is handled by a &#039;&#039;ControlListener&#039;&#039;, the &#039;&#039;Display&#039;&#039; delegates the event to the respective routine. A &#039;&#039;ControlListener&#039;&#039; differs automatically which visual element is concerned of the event (the view itself or a &#039;&#039;VisualItem&#039;&#039; on the view). &lt;br /&gt;
&lt;br /&gt;
A &#039;&#039;ControlListener&#039;&#039; may just perform simple task like changing the mouse cursor or editing the label of an item. But, in more sophisticated applications, also task like loading new data or dragging items on the view may also be handled. Therefore, a &#039;&#039;ControlListener&#039;&#039; may also work with &#039;&#039;ActionLists&#039;&#039; to execute such tasks. Further, a &#039;&#039;ControlListener&#039;&#039; has also access to the &#039;&#039;Display&#039;&#039; to call methods like zooming or panning. Typically, each &#039;&#039;ControlListener&#039;&#039; forces a repaint when its job is done.  &lt;br /&gt;
&lt;br /&gt;
Most of standard functionality is already predefined in &#039;&#039;prefuse&#039;&#039; and the wanted listeners just have to be set to the &#039;&#039;Display&#039;&#039;. However, the &#039;&#039;Display&#039;&#039; can handle a countless of different listener. Hence, typically only a few listeners must be defined manually as they can be mixed with default ones.  &lt;br /&gt;
&lt;br /&gt;
=Conclusion=&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;prefuse&#039;&#039;&#039; is a very powerful toolkit, providing a large set of components and methods a developer needs to build an [[Information Visualization]]. The [[polylithic design]] is not that easy to understand in the beginning of a development, but once conceived, a visualization is easy to realize even if really special demands have to be fulfilled. Furthermore, using Prefuse forces a clear and well designed architecture of own applications.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;prefuse&#039;&#039;&#039; was created with most attention paid to developers who will finally work with the toolkit. In an evaluation study this goal was approved too. In the meanwhile, there is also a not so small community using and upgrading the toolkit, which is an argue for its usability.&lt;br /&gt;
&lt;br /&gt;
= External links =&lt;br /&gt;
*[http://prefuse.org prefuse Homepage]&lt;br /&gt;
*[http://vw.indiana.edu/ivsi2004/jherr/index.html prefuse Position Paper]&lt;br /&gt;
*[http://sourceforge.net/forum/forum.php?forum_id=343013 prefuse Help Forum]&lt;br /&gt;
&lt;br /&gt;
= References =&lt;br /&gt;
*[Heer, 2004] Jeffrey Heer. [http://jheer.org/publications/2004-Heer-prefuse-Masters.pdf prefuse: a software framework for interactive information visualization]. Masters of Science, Computer Science Division, University of California, Berkeley, 2004.&lt;br /&gt;
*[Heer, 2005] Jeffrey Heer, Stuart K. Card, and James A. Landay. [http://jheer.org/publications/2005-prefuse-CHI.pdf prefuse: a toolkit for interactive information visualization. In &#039;&#039;CHI 2005, Human Factors in Computing Systems&#039;&#039;], 2005.&lt;br /&gt;
*[Heer, 2006a] Jeffrey Heer, prefuse API documentation, Retrieved at: July 06, 2006, http://prefuse.org&lt;br /&gt;
*[Heer, 2006b] Jeffrey Heer, prefuse manual, Retrieved at: July 06, 2006, http://prefuse.org&lt;br /&gt;
*[Sun Microsystems, 2001] Sun Microsystems, Programmer’s Guide to the Java 2DTM API - Enhanced Graphics and Imaging for Java, Retrieved at: April 20, 2006, http://java.sun.com/j2se/1.4/pdf/j2d-book.pdf&lt;br /&gt;
&lt;br /&gt;
[[Category:Toolkits]]&lt;/div&gt;</summary>
		<author><name>Anfe</name></author>
	</entry>
	<entry>
		<id>https://infovis-wiki.net/w/index.php?title=Prefuse&amp;diff=10128</id>
		<title>Prefuse</title>
		<link rel="alternate" type="text/html" href="https://infovis-wiki.net/w/index.php?title=Prefuse&amp;diff=10128"/>
		<updated>2006-07-06T09:27:47Z</updated>

		<summary type="html">&lt;p&gt;Anfe: /* Visual Abstraction */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Summary =&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Author&#039;&#039;&#039;: Jeffrey Heer / UC Berkeley&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Project Webpage&#039;&#039;&#039;: http://prefuse.org&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Current Version&#039;&#039;&#039;: beta, June 15, 2006&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Requirements&#039;&#039;&#039;: Java 1.4&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Overview:&#039;&#039;&#039; using Java2D graphics library; pipeline architecture; animation and rendering support&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Base data structures&#039;&#039;&#039;: Table, Graph, Tree&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Included visualization techniques:&#039;&#039;&#039; [http://www.cs.umd.edu/hcil/fisheyemenu/ Fisheye Menu], [http://prefuse.sourceforge.net/demos-radial.html Radial Graph], [http://www.cs.umd.edu/hcil/treemap/ Treemap], [http://prefuse.sourceforge.net/demos-distortion.html F+C Distortion]&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Supported File Formats&#039;&#039;&#039;: XGMML (XML), TreeML (XML), tab-delimited text, HDir&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;prefuse&#039;&#039;&#039; is an interactive graphical open source toolkit written in Java. It is thought to support the development of sophisticated, highly interactive, and flexible [[Information Visualization]]s. The architecture of &#039;&#039;&#039;prefuse&#039;&#039;&#039; considers the [[Visualization Pipeline]], a recommendation on how to implement a visualization. To provide flexibility, a [[polylithic design]] was chosen which enables developers to implement only needed functionality and customize these to meet the own requirements. But, in contrast to a [[monolithic design]], this design needs more time to conceive and influences the architecture of the own application heavily (which is not a disadvantage as &#039;&#039;&#039;prefuse&#039;&#039;&#039; is very elaborate). &lt;br /&gt;
&lt;br /&gt;
Typically, &#039;&#039;&#039;prefuse&#039;&#039;&#039; is designed to visualize interrelated information so it can be stored in a graph or tree structure, but, also not related data can be used which is stored within a data table. Even though the structure is hierarchical, the resulting tree or graph structure must not be considered in the proper graphical representation as layout algorithms are not restricted in any way. The painting of visual items is done by using a renderer which has access to the respective item itself and the Graphics2D context of the view. This approach enables to use the whole range of available painting methods of Java, therefore, all painting issues are completely independent of the toolkit itself.&lt;br /&gt;
&lt;br /&gt;
Besides providing a large set of predefined elements to visualize data, most attention was set toward usability of the visualization. This is obtained by applying several interaction techniques like tooltips or dragging visual elements. But also more sophisticated techniques like [[zoom]]ing, [[pan]]ning, or [[semantic zoom]]ing are supported or partially even provided by the toolkit itself. Further, &#039;&#039;&#039;prefuse&#039;&#039;&#039; clearly distinguishes between absolute and view coordinates. This separation helps users to place all visual elements in a logical way without consideration of later applied visualization techniques that changes the entire view.  &lt;br /&gt;
&lt;br /&gt;
=== Pros ===&lt;br /&gt;
&lt;br /&gt;
* flexible&lt;br /&gt;
* versatile pipeline approach&lt;br /&gt;
* clear and well thought architecture&lt;br /&gt;
* many layout and distortion algorithms included&lt;br /&gt;
* algorithms for force-based physics simulation included&lt;br /&gt;
* custom animations (smooth transitions)&lt;br /&gt;
* color maps&lt;br /&gt;
* query language to navigate within abstract data&lt;br /&gt;
* demos and examples included&lt;br /&gt;
* bounding management&lt;br /&gt;
* open source&lt;br /&gt;
* documentation of code and general guidance available&lt;br /&gt;
* active developer community &lt;br /&gt;
&lt;br /&gt;
=== Cons ===&lt;br /&gt;
&lt;br /&gt;
* [[polylithic design]] takes up more time to conceive and see first results&lt;br /&gt;
* special requirements of a visualization enforce a lot of adapting work&lt;br /&gt;
&lt;br /&gt;
=General Approach=&lt;br /&gt;
&lt;br /&gt;
Going along with the step-wise recommendation of the [[Visualization Pipeline]], a &#039;&#039;&#039;prefuse&#039;&#039;&#039; application consists of different states of data:&lt;br /&gt;
&lt;br /&gt;
[[Image:prefuse_visualization_pipeline.gif|600px]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;prefuse&#039;&#039;&#039; uses a centralized object called &#039;&#039;Visualization&#039;&#039; (former &#039;&#039;ItemRegistry&#039;&#039;) which maintains and manages the whole visualization. This object has to fulfil several tasks. It stores the abstract data as well as visual analogous of these in two different tables. All transformation routines like filtering or rendering are managed and executed by the &#039;&#039;Visualization&#039;&#039; too. Further, it refers to at least one &#039;&#039;Display&#039;&#039;, a graphical component which can represent visual data of &#039;&#039;&#039;prefuse&#039;&#039;&#039;. &lt;br /&gt;
&lt;br /&gt;
Transformation routines are defined as &#039;&#039;Actions&#039;&#039; which are combined in &#039;&#039;ActionLists&#039;&#039;. An &#039;&#039;ActionList&#039;&#039; is an executable container which is started manually or of the &#039;&#039;Visualization&#039;&#039; itself. Once it is started, all defined &#039;&#039;Actions&#039;&#039; are executed in the given sequence. Typically, the last called &#039;&#039;Action&#039;&#039; is the &#039;&#039;RepaintAction&#039;&#039; which forces all belonging &#039;&#039;Displays&#039;&#039; of the &#039;&#039;Visualization&#039;&#039; to perform a repaint. &lt;br /&gt;
&lt;br /&gt;
A &#039;&#039;Display&#039;&#039; is the view of &#039;&#039;&#039;prefuse&#039;&#039;&#039;. It can be embedded in each Java Swing application. The main task of a &#039;&#039;Display&#039;&#039; is the painting of visual structures which are defined in the respective &#039;&#039;Visualization&#039;&#039;. Whenever the &#039;&#039;Display&#039;&#039; performs a repaint, it requests all visual items and checks all bounds of them (bounding management). If an item is within the own area the respective rendering mechanism is called.  &lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;Display&#039;&#039; also provides navigation techniques like [[zoom]]ing or [[pan]]ning which change the view. The view itself refers to a own coordinate system. View coordinates are described through an affine transformation matrix. The most important functionality to work with this coordinate system are already predefined. Typically, users just have to apply such techniques without considering technical details. &lt;br /&gt;
&lt;br /&gt;
Furthermore, a &#039;&#039;Display&#039;&#039; also maintains a set of &#039;&#039;ControlListener&#039;&#039; which are used to process user interactions (mouse or keyboard events). Whenever such an event occurs the respective listener is called. A listener already differs on where the event happened (e.g., blank area or a certain item). Further, a &#039;&#039;ControlListener&#039;&#039; may also start an &#039;&#039;ActionList&#039;&#039; again.&lt;br /&gt;
&lt;br /&gt;
==Source Data==&lt;br /&gt;
&lt;br /&gt;
Raw data is the base of the application. Typically, the source of raw data is a file, but also other sources like a database or web content are thinkable. However, &#039;&#039;&#039;prefuse&#039;&#039;&#039; provides several file readers for different formats (CSV, Tab-Delimitated, etc.) that can be transformed into a data table. Further, some readers also support the reading of SQL-Database. If another source is needed, a reader can be written manually.&lt;br /&gt;
&lt;br /&gt;
Once the raw data is read, it is transformed into abstract data and stored within a data table of the &#039;&#039;Visualization&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
==Data Table==&lt;br /&gt;
&lt;br /&gt;
The data table which is used to store abstract data works with data types and a definition schema which maps relations between data type and table. That means, each row contains a data record, and each column contains data values for a named data field with a specific data type. Each record of the table is referred as a &#039;&#039;Tuple&#039;&#039;. &lt;br /&gt;
&lt;br /&gt;
Furthermore, instead of the table itself, a graph or tree may be used to store interrelated data. Instead of &#039;&#039;Tuples&#039;&#039;, records are referred as &#039;&#039;Nodes&#039;&#039; which are connected to others with &#039;&#039;Edges&#039;&#039;. Additionally, a tree has one defined root &#039;&#039;Node&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Abstract data does not contain any visual information like assignment attributes or color settings. Instead, own visual analogous are created. Visual attributes of them are extracted out of the abstract data following a defined logic.&lt;br /&gt;
&lt;br /&gt;
==Visual Abstraction==&lt;br /&gt;
&lt;br /&gt;
Visual structures are created when filtering the data container which contains abstract data. In case of a visualization that displays all items from the beginning on, the filtering routine must only executed once at initializing time. If the visual content changes dynamically, the filtering is executed on certain user interactions by calling a defined filtering &#039;&#039;ActionList&#039;&#039;. &lt;br /&gt;
&lt;br /&gt;
A visual structure is referred as &#039;&#039;VisualItem&#039;&#039; which may be distinguished as &#039;&#039;VisualNode&#039;&#039;, &#039;&#039;VisualEdge&#039;&#039;, or an aggregated item which consists of several other items. However, as a &#039;&#039;VisualItem&#039;&#039; is extended of the respective abstract entity, it has full access to all abstract information too. &lt;br /&gt;
&lt;br /&gt;
The filtering routine which transforms the abstract data to visual analogues typically consists of following &#039;&#039;Actions&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Filter&#039;&#039;&#039;: This &#039;&#039;Action&#039;&#039; is responsible to transform the abstract data of the backing table to visual analogues. If no special conditions are defined, the filter creates for each &#039;&#039;Tuple&#039;&#039; a visual instance and stores them in a second table. Additionally, a filter also performs a garbage collection and may set visibility attributes of the created items. &lt;br /&gt;
* &#039;&#039;&#039;Layout&#039;&#039;&#039;: A layout takes care about placing the &#039;&#039;VisualItems&#039;&#039;. Several common algorithms for graphs or trees are already predefined (e.g., &#039;&#039;ForceDirectedLayout&#039;&#039; or &#039;&#039;RadialTreeLayout&#039;&#039;). &lt;br /&gt;
* &#039;&#039;&#039;Assignment&#039;&#039;&#039;: Besides layouting, also other assignments may be performed during the filtering process. Such assignments directly changes visual attributes of &#039;&#039;VisualItems&#039;&#039; like color, sizes, fonts, etc.&lt;br /&gt;
&lt;br /&gt;
A visual structure may also contain a paint routine, but, as all painting jobs are initialized or performed by separated renderers, these issues may also be executed by the renderer itself or any other object.&lt;br /&gt;
&lt;br /&gt;
==View==&lt;br /&gt;
&lt;br /&gt;
Typically, the rendered visual structure is not stored, instead, they are re-rendered whenever needed. However, in case of very complex but constant visual representations it makes sense to hold items in an offscreen image. &lt;br /&gt;
&lt;br /&gt;
Each &#039;&#039;VisualItem&#039;&#039; has got one or more associated &#039;&#039;Renderers&#039;&#039; which are maintained by a factory of the &#039;&#039;Visualization&#039;&#039;. A  &#039;&#039;Render&#039;&#039; has to perform two tasks:&lt;br /&gt;
&lt;br /&gt;
* Providing a bounding box of the item. This box is used to determine if the item must actually be painted or if it would not be visible anyway. &lt;br /&gt;
* Providing the painting routine of the item. Paintings may be executed by the &#039;&#039;Renderer&#039;&#039; itself or delegated to other objects which are accessible of the &#039;&#039;Renderer&#039;&#039;. The painting routines are not restricted in any way, but they representation should not exceed the bounding box of the item. &lt;br /&gt;
&lt;br /&gt;
Rendering is always performed on a repaint of the &#039;&#039;Display&#039;&#039;. A repaint can be requested by the &#039;&#039;Visualization&#039;&#039;, on user interaction, and on events like resizing the component, getting the focus, or changing the coordinate system of the view. However, as repaints may occur very often, developers have to ascertain that rendering jobs can are performed fast, otherwise, the performance of the whole visualization would suffer.&lt;br /&gt;
&lt;br /&gt;
=Details=&lt;br /&gt;
&lt;br /&gt;
==Package Structure==&lt;br /&gt;
&lt;br /&gt;
Following picture shows the most important packages of &#039;&#039;&#039;prefuse&#039;&#039;&#039; regarding to the [[Visualization Pipeline]]:&lt;br /&gt;
&lt;br /&gt;
[[Image:prefuse_package_guide.gif|600px]]&lt;br /&gt;
&lt;br /&gt;
These packages also contain predefined components. A default nodes and edges provide standard functionality of abstract data, standard functionality is also available in visual analogous of them. A default filter transforms all defined abstract entities to visual ones. Further, also some special functionality for common requirements are provided by own components. &lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Renderers&#039;&#039;&#039;: &#039;&#039;EdgeRenderer&#039;&#039; to render edges between graph or tree nodes, a &#039;&#039;LableRenderer&#039;&#039; to render test items, and a &#039;&#039;PolygoneRenderer&#039;&#039; to render geometrical items. &lt;br /&gt;
* &#039;&#039;&#039;Layouts&#039;&#039;&#039;: &#039;&#039;RandomLayout&#039;&#039;, &#039;&#039;GridLayout&#039;&#039;, and some more to place non related data, &#039;&#039;ForceDirectedLayout&#039;&#039;, &#039;&#039;TreeLayout&#039;&#039;, &#039;&#039;RadialTreeLayout&#039;&#039; and others to render trees and graphs.&lt;br /&gt;
* &#039;&#039;&#039;Controls&#039;&#039;&#039;: &#039;&#039;DragControl&#039;&#039;, &#039;&#039;ZoomControl&#039;&#039;, &#039;&#039;PanControl&#039;&#039;, &#039;&#039;ToolTipControl&#039;&#039; and several others to react on user interactions. &lt;br /&gt;
&lt;br /&gt;
In simple visualizations the predefined functionality will meet most requirements. If special requirements are needed the default functionality supports a step-wise developing as results can be communicated by these components until the own functionality is implemented.&lt;br /&gt;
&lt;br /&gt;
==Coordinates in prefuse==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;prefuse&#039;&#039;&#039; works with two different coordinate systems. Absolute coordinates are device-independent logical coordinates. All visual attributes like positions or sizes are defined in absolute coordinates. In contrast, view coordinates are device-depended (screen). Transformations between absolute and view coordinates are done automatically by Java painting routines. View coordinates are influenced by the system and device driver (e.g., the absolute point (0,0) is the topmost left point of the actual graphical component which may be on any position at the screen). Further, view coordinates may also be manipulated manually by using an affine transformation matrix which applies linear transformations on absolute coordinates before device-dependent routines convert them to screen coordinates. &lt;br /&gt;
&lt;br /&gt;
A &#039;&#039;&#039;prefuse&#039;&#039;&#039; &#039;&#039;Display&#039;&#039; provides the most important manipulating methods of this matrix. [[Zoom]]ing, [[pan]]ning, and rotation of the whole view are only done by changing the view coordinates. So, as absolute coordinates are never concerned of such transformations and translations, a user must never consider the actual view in layout, assignment, or painting routines. &lt;br /&gt;
&lt;br /&gt;
There are several different ways on how to apply such transformations, additionally, the &#039;&#039;Display&#039;&#039; also supports animated transformations. &lt;br /&gt;
&lt;br /&gt;
==User Interactions==&lt;br /&gt;
&lt;br /&gt;
Mouse or keyboard events are treated by using &#039;&#039;ControlListener&#039;&#039;. Whenever an event occurs which is handled by a &#039;&#039;ControlListener&#039;&#039;, the &#039;&#039;Display&#039;&#039; delegates the event to the respective routine. A &#039;&#039;ControlListener&#039;&#039; differs automatically which visual element is concerned of the event (the view itself or a &#039;&#039;VisualItem&#039;&#039; on the view). &lt;br /&gt;
&lt;br /&gt;
A &#039;&#039;ControlListener&#039;&#039; may just perform simple task like changing the mouse cursor or editing the label of an item. But, in more sophisticated applications, also task like loading new data or dragging items on the view may also be handled. Therefore, a &#039;&#039;ControlListener&#039;&#039; may also work with &#039;&#039;ActionLists&#039;&#039; to execute such tasks. Further, a &#039;&#039;ControlListener&#039;&#039; has also access to the &#039;&#039;Display&#039;&#039; to call methods like zooming or panning. Typically, each &#039;&#039;ControlListener&#039;&#039; forces a repaint when its job is done.  &lt;br /&gt;
&lt;br /&gt;
Most of standard functionality is already predefined in &#039;&#039;prefuse&#039;&#039; and the wanted listeners just have to be set to the &#039;&#039;Display&#039;&#039;. However, the &#039;&#039;Display&#039;&#039; can handle a countless of different listener. Hence, typically only a few listeners must be defined manually as they can be mixed with default ones.  &lt;br /&gt;
&lt;br /&gt;
=Conclusion=&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;prefuse&#039;&#039;&#039; is a very powerful toolkit, providing a large set of components and methods a developer needs to build an [[Information Visualization]]. The [[polylithic design]] is not that easy to understand in the beginning of a development, but once conceived, a visualization is easy to realize even if really special demands have to be fulfilled. Furthermore, using Prefuse forces a clear and well designed architecture of own applications.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;prefuse&#039;&#039;&#039; was created with most attention paid to developers who will finally work with the toolkit. In an evaluation study this goal was approved too. In the meanwhile, there is also a not so small community using and upgrading the toolkit, which is an argue for its usability.&lt;br /&gt;
&lt;br /&gt;
= External links =&lt;br /&gt;
*[http://prefuse.org prefuse Homepage]&lt;br /&gt;
*[http://vw.indiana.edu/ivsi2004/jherr/index.html prefuse Position Paper]&lt;br /&gt;
*[http://sourceforge.net/forum/forum.php?forum_id=343013 prefuse Help Forum]&lt;br /&gt;
&lt;br /&gt;
= References =&lt;br /&gt;
*[Heer, 2004] Jeffrey Heer. [http://jheer.org/publications/2004-Heer-prefuse-Masters.pdf prefuse: a software framework for interactive information visualization]. Masters of Science, Computer Science Division, University of California, Berkeley, 2004.&lt;br /&gt;
*[Heer, 2005] Jeffrey Heer, Stuart K. Card, and James A. Landay. [http://jheer.org/publications/2005-prefuse-CHI.pdf prefuse: a toolkit for interactive information visualization. In &#039;&#039;CHI 2005, Human Factors in Computing Systems&#039;&#039;], 2005.&lt;br /&gt;
*[Heer, 2006a] Jeffrey Heer, prefuse API documentation, Retrieved at: July 06, 2006, http://prefuse.org&lt;br /&gt;
*[Heer, 2006b] Jeffrey Heer, prefuse manual, Retrieved at: July 06, 2006, http://prefuse.org&lt;br /&gt;
*[Sun Microsystems, 2001] Sun Microsystems, Programmer’s Guide to the Java 2DTM API - Enhanced Graphics and Imaging for Java, Retrieved at: April 20, 2006, http://java.sun.com/j2se/1.4/pdf/j2d-book.pdf&lt;br /&gt;
&lt;br /&gt;
[[Category:Toolkits]]&lt;/div&gt;</summary>
		<author><name>Anfe</name></author>
	</entry>
	<entry>
		<id>https://infovis-wiki.net/w/index.php?title=Prefuse&amp;diff=10127</id>
		<title>Prefuse</title>
		<link rel="alternate" type="text/html" href="https://infovis-wiki.net/w/index.php?title=Prefuse&amp;diff=10127"/>
		<updated>2006-07-06T09:05:58Z</updated>

		<summary type="html">&lt;p&gt;Anfe: /* Data Table */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Summary =&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Author&#039;&#039;&#039;: Jeffrey Heer / UC Berkeley&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Project Webpage&#039;&#039;&#039;: http://prefuse.org&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Current Version&#039;&#039;&#039;: beta, June 15, 2006&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Requirements&#039;&#039;&#039;: Java 1.4&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Overview:&#039;&#039;&#039; using Java2D graphics library; pipeline architecture; animation and rendering support&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Base data structures&#039;&#039;&#039;: Table, Graph, Tree&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Included visualization techniques:&#039;&#039;&#039; [http://www.cs.umd.edu/hcil/fisheyemenu/ Fisheye Menu], [http://prefuse.sourceforge.net/demos-radial.html Radial Graph], [http://www.cs.umd.edu/hcil/treemap/ Treemap], [http://prefuse.sourceforge.net/demos-distortion.html F+C Distortion]&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Supported File Formats&#039;&#039;&#039;: XGMML (XML), TreeML (XML), tab-delimited text, HDir&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;prefuse&#039;&#039;&#039; is an interactive graphical open source toolkit written in Java. It is thought to support the development of sophisticated, highly interactive, and flexible [[Information Visualization]]s. The architecture of &#039;&#039;&#039;prefuse&#039;&#039;&#039; considers the [[Visualization Pipeline]], a recommendation on how to implement a visualization. To provide flexibility, a [[polylithic design]] was chosen which enables developers to implement only needed functionality and customize these to meet the own requirements. But, in contrast to a [[monolithic design]], this design needs more time to conceive and influences the architecture of the own application heavily (which is not a disadvantage as &#039;&#039;&#039;prefuse&#039;&#039;&#039; is very elaborate). &lt;br /&gt;
&lt;br /&gt;
Typically, &#039;&#039;&#039;prefuse&#039;&#039;&#039; is designed to visualize interrelated information so it can be stored in a graph or tree structure, but, also not related data can be used which is stored within a data table. Even though the structure is hierarchical, the resulting tree or graph structure must not be considered in the proper graphical representation as layout algorithms are not restricted in any way. The painting of visual items is done by using a renderer which has access to the respective item itself and the Graphics2D context of the view. This approach enables to use the whole range of available painting methods of Java, therefore, all painting issues are completely independent of the toolkit itself.&lt;br /&gt;
&lt;br /&gt;
Besides providing a large set of predefined elements to visualize data, most attention was set toward usability of the visualization. This is obtained by applying several interaction techniques like tooltips or dragging visual elements. But also more sophisticated techniques like [[zoom]]ing, [[pan]]ning, or [[semantic zoom]]ing are supported or partially even provided by the toolkit itself. Further, &#039;&#039;&#039;prefuse&#039;&#039;&#039; clearly distinguishes between absolute and view coordinates. This separation helps users to place all visual elements in a logical way without consideration of later applied visualization techniques that changes the entire view.  &lt;br /&gt;
&lt;br /&gt;
=== Pros ===&lt;br /&gt;
&lt;br /&gt;
* flexible&lt;br /&gt;
* versatile pipeline approach&lt;br /&gt;
* clear and well thought architecture&lt;br /&gt;
* many layout and distortion algorithms included&lt;br /&gt;
* algorithms for force-based physics simulation included&lt;br /&gt;
* custom animations (smooth transitions)&lt;br /&gt;
* color maps&lt;br /&gt;
* query language to navigate within abstract data&lt;br /&gt;
* demos and examples included&lt;br /&gt;
* bounding management&lt;br /&gt;
* open source&lt;br /&gt;
* documentation of code and general guidance available&lt;br /&gt;
* active developer community &lt;br /&gt;
&lt;br /&gt;
=== Cons ===&lt;br /&gt;
&lt;br /&gt;
* [[polylithic design]] takes up more time to conceive and see first results&lt;br /&gt;
* special requirements of a visualization enforce a lot of adapting work&lt;br /&gt;
&lt;br /&gt;
=General Approach=&lt;br /&gt;
&lt;br /&gt;
Going along with the step-wise recommendation of the [[Visualization Pipeline]], a &#039;&#039;&#039;prefuse&#039;&#039;&#039; application consists of different states of data:&lt;br /&gt;
&lt;br /&gt;
[[Image:prefuse_visualization_pipeline.gif|600px]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;prefuse&#039;&#039;&#039; uses a centralized object called &#039;&#039;Visualization&#039;&#039; (former &#039;&#039;ItemRegistry&#039;&#039;) which maintains and manages the whole visualization. This object has to fulfil several tasks. It stores the abstract data as well as visual analogous of these in two different tables. All transformation routines like filtering or rendering are managed and executed by the &#039;&#039;Visualization&#039;&#039; too. Further, it refers to at least one &#039;&#039;Display&#039;&#039;, a graphical component which can represent visual data of &#039;&#039;&#039;prefuse&#039;&#039;&#039;. &lt;br /&gt;
&lt;br /&gt;
Transformation routines are defined as &#039;&#039;Actions&#039;&#039; which are combined in &#039;&#039;ActionLists&#039;&#039;. An &#039;&#039;ActionList&#039;&#039; is an executable container which is started manually or of the &#039;&#039;Visualization&#039;&#039; itself. Once it is started, all defined &#039;&#039;Actions&#039;&#039; are executed in the given sequence. Typically, the last called &#039;&#039;Action&#039;&#039; is the &#039;&#039;RepaintAction&#039;&#039; which forces all belonging &#039;&#039;Displays&#039;&#039; of the &#039;&#039;Visualization&#039;&#039; to perform a repaint. &lt;br /&gt;
&lt;br /&gt;
A &#039;&#039;Display&#039;&#039; is the view of &#039;&#039;&#039;prefuse&#039;&#039;&#039;. It can be embedded in each Java Swing application. The main task of a &#039;&#039;Display&#039;&#039; is the painting of visual structures which are defined in the respective &#039;&#039;Visualization&#039;&#039;. Whenever the &#039;&#039;Display&#039;&#039; performs a repaint, it requests all visual items and checks all bounds of them (bounding management). If an item is within the own area the respective rendering mechanism is called.  &lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;Display&#039;&#039; also provides navigation techniques like [[zoom]]ing or [[pan]]ning which change the view. The view itself refers to a own coordinate system. View coordinates are described through an affine transformation matrix. The most important functionality to work with this coordinate system are already predefined. Typically, users just have to apply such techniques without considering technical details. &lt;br /&gt;
&lt;br /&gt;
Furthermore, a &#039;&#039;Display&#039;&#039; also maintains a set of &#039;&#039;ControlListener&#039;&#039; which are used to process user interactions (mouse or keyboard events). Whenever such an event occurs the respective listener is called. A listener already differs on where the event happened (e.g., blank area or a certain item). Further, a &#039;&#039;ControlListener&#039;&#039; may also start an &#039;&#039;ActionList&#039;&#039; again.&lt;br /&gt;
&lt;br /&gt;
==Source Data==&lt;br /&gt;
&lt;br /&gt;
Raw data is the base of the application. Typically, the source of raw data is a file, but also other sources like a database or web content are thinkable. However, &#039;&#039;&#039;prefuse&#039;&#039;&#039; provides several file readers for different formats (CSV, Tab-Delimitated, etc.) that can be transformed into a data table. Further, some readers also support the reading of SQL-Database. If another source is needed, a reader can be written manually.&lt;br /&gt;
&lt;br /&gt;
Once the raw data is read, it is transformed into abstract data and stored within a data table of the &#039;&#039;Visualization&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
==Data Table==&lt;br /&gt;
&lt;br /&gt;
The data table which is used to store abstract data works with data types and a definition schema which maps relations between data type and table. That means, each row contains a data record, and each column contains data values for a named data field with a specific data type. Each record of the table is referred as a &#039;&#039;Tuple&#039;&#039;. &lt;br /&gt;
&lt;br /&gt;
Furthermore, instead of the table itself, a graph or tree may be used to store interrelated data. Instead of &#039;&#039;Tuples&#039;&#039;, records are referred as &#039;&#039;Nodes&#039;&#039; which are connected to others with &#039;&#039;Edges&#039;&#039;. Additionally, a tree has one defined root &#039;&#039;Node&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Abstract data does not contain any visual information like assignment attributes or color settings. Instead, own visual analogous are created. Visual attributes of them are extracted out of the abstract data following a defined logic.&lt;br /&gt;
&lt;br /&gt;
==Visual Abstraction==&lt;br /&gt;
&lt;br /&gt;
Visual structures are created when filtering the data container which contains abstract data. In case of a visualization that displays all items from the beginning on, the filtering routine must only executed once at initializing time. If the visual content changes dynamically, the filtering is executed on certain user interactions by calling a defined filtering &#039;&#039;ActionList&#039;&#039;. &lt;br /&gt;
&lt;br /&gt;
A visual structure is referred as &#039;&#039;VisualItem&#039;&#039; which may distinguished as &#039;&#039;VisualNode&#039;&#039;, &#039;&#039;VisualEdge&#039;&#039;, or an aggregated item which consists of several other items. However, as a &#039;&#039;VisualItem&#039;&#039; is extended of the respective abstract entity it has full access to all abstract information too. &lt;br /&gt;
&lt;br /&gt;
The filtering routine which transforms the abstract data to visual analogues typically consists of following &#039;&#039;Actions&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Filter&#039;&#039;&#039;: This &#039;&#039;Action&#039;&#039; is responsible to transform the abstract data of the backing table to visual analogues. If no special conditions are defined, the filter creates for each &#039;&#039;Tuple&#039;&#039; a visual instance and stores them in a second table. Additionally, a filter also performs a garbage collection and may set visibility attributes of the created items. &lt;br /&gt;
* &#039;&#039;&#039;Layout&#039;&#039;&#039;: A layout takes care about placing the &#039;&#039;VisualItems&#039;&#039;. Several common algorithms for graphs or trees are already predefined (e.g., &#039;&#039;ForceDirectedLayout&#039;&#039; or &#039;&#039;RadialTreeLayout&#039;&#039;). &lt;br /&gt;
* &#039;&#039;&#039;Assignment&#039;&#039;&#039;: Besides layouting, also other assignments may be performed during the filtering process. Such assignments directly changes visual attributes of &#039;&#039;VisualItems&#039;&#039; like color, sizes, fonts, etc.&lt;br /&gt;
&lt;br /&gt;
A visual structure may also contain a paint routine, but, as all painting jobs are initialized or performed by separated renderers, these issues may also be executed by the renderer itself or any other object.&lt;br /&gt;
&lt;br /&gt;
==View==&lt;br /&gt;
&lt;br /&gt;
Typically, the rendered visual structure is not stored, instead, they are re-rendered whenever needed. However, in case of very complex but constant visual representations it makes sense to hold items in an offscreen image. &lt;br /&gt;
&lt;br /&gt;
Each &#039;&#039;VisualItem&#039;&#039; has got one or more associated &#039;&#039;Renderers&#039;&#039; which are maintained by a factory of the &#039;&#039;Visualization&#039;&#039;. A  &#039;&#039;Render&#039;&#039; has to perform two tasks:&lt;br /&gt;
&lt;br /&gt;
* Providing a bounding box of the item. This box is used to determine if the item must actually be painted or if it would not be visible anyway. &lt;br /&gt;
* Providing the painting routine of the item. Paintings may be executed by the &#039;&#039;Renderer&#039;&#039; itself or delegated to other objects which are accessible of the &#039;&#039;Renderer&#039;&#039;. The painting routines are not restricted in any way, but they representation should not exceed the bounding box of the item. &lt;br /&gt;
&lt;br /&gt;
Rendering is always performed on a repaint of the &#039;&#039;Display&#039;&#039;. A repaint can be requested by the &#039;&#039;Visualization&#039;&#039;, on user interaction, and on events like resizing the component, getting the focus, or changing the coordinate system of the view. However, as repaints may occur very often, developers have to ascertain that rendering jobs can are performed fast, otherwise, the performance of the whole visualization would suffer.&lt;br /&gt;
&lt;br /&gt;
=Details=&lt;br /&gt;
&lt;br /&gt;
==Package Structure==&lt;br /&gt;
&lt;br /&gt;
Following picture shows the most important packages of &#039;&#039;&#039;prefuse&#039;&#039;&#039; regarding to the [[Visualization Pipeline]]:&lt;br /&gt;
&lt;br /&gt;
[[Image:prefuse_package_guide.gif|600px]]&lt;br /&gt;
&lt;br /&gt;
These packages also contain predefined components. A default nodes and edges provide standard functionality of abstract data, standard functionality is also available in visual analogous of them. A default filter transforms all defined abstract entities to visual ones. Further, also some special functionality for common requirements are provided by own components. &lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Renderers&#039;&#039;&#039;: &#039;&#039;EdgeRenderer&#039;&#039; to render edges between graph or tree nodes, a &#039;&#039;LableRenderer&#039;&#039; to render test items, and a &#039;&#039;PolygoneRenderer&#039;&#039; to render geometrical items. &lt;br /&gt;
* &#039;&#039;&#039;Layouts&#039;&#039;&#039;: &#039;&#039;RandomLayout&#039;&#039;, &#039;&#039;GridLayout&#039;&#039;, and some more to place non related data, &#039;&#039;ForceDirectedLayout&#039;&#039;, &#039;&#039;TreeLayout&#039;&#039;, &#039;&#039;RadialTreeLayout&#039;&#039; and others to render trees and graphs.&lt;br /&gt;
* &#039;&#039;&#039;Controls&#039;&#039;&#039;: &#039;&#039;DragControl&#039;&#039;, &#039;&#039;ZoomControl&#039;&#039;, &#039;&#039;PanControl&#039;&#039;, &#039;&#039;ToolTipControl&#039;&#039; and several others to react on user interactions. &lt;br /&gt;
&lt;br /&gt;
In simple visualizations the predefined functionality will meet most requirements. If special requirements are needed the default functionality supports a step-wise developing as results can be communicated by these components until the own functionality is implemented.&lt;br /&gt;
&lt;br /&gt;
==Coordinates in prefuse==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;prefuse&#039;&#039;&#039; works with two different coordinate systems. Absolute coordinates are device-independent logical coordinates. All visual attributes like positions or sizes are defined in absolute coordinates. In contrast, view coordinates are device-depended (screen). Transformations between absolute and view coordinates are done automatically by Java painting routines. View coordinates are influenced by the system and device driver (e.g., the absolute point (0,0) is the topmost left point of the actual graphical component which may be on any position at the screen). Further, view coordinates may also be manipulated manually by using an affine transformation matrix which applies linear transformations on absolute coordinates before device-dependent routines convert them to screen coordinates. &lt;br /&gt;
&lt;br /&gt;
A &#039;&#039;&#039;prefuse&#039;&#039;&#039; &#039;&#039;Display&#039;&#039; provides the most important manipulating methods of this matrix. [[Zoom]]ing, [[pan]]ning, and rotation of the whole view are only done by changing the view coordinates. So, as absolute coordinates are never concerned of such transformations and translations, a user must never consider the actual view in layout, assignment, or painting routines. &lt;br /&gt;
&lt;br /&gt;
There are several different ways on how to apply such transformations, additionally, the &#039;&#039;Display&#039;&#039; also supports animated transformations. &lt;br /&gt;
&lt;br /&gt;
==User Interactions==&lt;br /&gt;
&lt;br /&gt;
Mouse or keyboard events are treated by using &#039;&#039;ControlListener&#039;&#039;. Whenever an event occurs which is handled by a &#039;&#039;ControlListener&#039;&#039;, the &#039;&#039;Display&#039;&#039; delegates the event to the respective routine. A &#039;&#039;ControlListener&#039;&#039; differs automatically which visual element is concerned of the event (the view itself or a &#039;&#039;VisualItem&#039;&#039; on the view). &lt;br /&gt;
&lt;br /&gt;
A &#039;&#039;ControlListener&#039;&#039; may just perform simple task like changing the mouse cursor or editing the label of an item. But, in more sophisticated applications, also task like loading new data or dragging items on the view may also be handled. Therefore, a &#039;&#039;ControlListener&#039;&#039; may also work with &#039;&#039;ActionLists&#039;&#039; to execute such tasks. Further, a &#039;&#039;ControlListener&#039;&#039; has also access to the &#039;&#039;Display&#039;&#039; to call methods like zooming or panning. Typically, each &#039;&#039;ControlListener&#039;&#039; forces a repaint when its job is done.  &lt;br /&gt;
&lt;br /&gt;
Most of standard functionality is already predefined in &#039;&#039;prefuse&#039;&#039; and the wanted listeners just have to be set to the &#039;&#039;Display&#039;&#039;. However, the &#039;&#039;Display&#039;&#039; can handle a countless of different listener. Hence, typically only a few listeners must be defined manually as they can be mixed with default ones.  &lt;br /&gt;
&lt;br /&gt;
=Conclusion=&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;prefuse&#039;&#039;&#039; is a very powerful toolkit, providing a large set of components and methods a developer needs to build an [[Information Visualization]]. The [[polylithic design]] is not that easy to understand in the beginning of a development, but once conceived, a visualization is easy to realize even if really special demands have to be fulfilled. Furthermore, using Prefuse forces a clear and well designed architecture of own applications.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;prefuse&#039;&#039;&#039; was created with most attention paid to developers who will finally work with the toolkit. In an evaluation study this goal was approved too. In the meanwhile, there is also a not so small community using and upgrading the toolkit, which is an argue for its usability.&lt;br /&gt;
&lt;br /&gt;
= External links =&lt;br /&gt;
*[http://prefuse.org prefuse Homepage]&lt;br /&gt;
*[http://vw.indiana.edu/ivsi2004/jherr/index.html prefuse Position Paper]&lt;br /&gt;
*[http://sourceforge.net/forum/forum.php?forum_id=343013 prefuse Help Forum]&lt;br /&gt;
&lt;br /&gt;
= References =&lt;br /&gt;
*[Heer, 2004] Jeffrey Heer. [http://jheer.org/publications/2004-Heer-prefuse-Masters.pdf prefuse: a software framework for interactive information visualization]. Masters of Science, Computer Science Division, University of California, Berkeley, 2004.&lt;br /&gt;
*[Heer, 2005] Jeffrey Heer, Stuart K. Card, and James A. Landay. [http://jheer.org/publications/2005-prefuse-CHI.pdf prefuse: a toolkit for interactive information visualization. In &#039;&#039;CHI 2005, Human Factors in Computing Systems&#039;&#039;], 2005.&lt;br /&gt;
*[Heer, 2006a] Jeffrey Heer, prefuse API documentation, Retrieved at: July 06, 2006, http://prefuse.org&lt;br /&gt;
*[Heer, 2006b] Jeffrey Heer, prefuse manual, Retrieved at: July 06, 2006, http://prefuse.org&lt;br /&gt;
*[Sun Microsystems, 2001] Sun Microsystems, Programmer’s Guide to the Java 2DTM API - Enhanced Graphics and Imaging for Java, Retrieved at: April 20, 2006, http://java.sun.com/j2se/1.4/pdf/j2d-book.pdf&lt;br /&gt;
&lt;br /&gt;
[[Category:Toolkits]]&lt;/div&gt;</summary>
		<author><name>Anfe</name></author>
	</entry>
	<entry>
		<id>https://infovis-wiki.net/w/index.php?title=Prefuse&amp;diff=10126</id>
		<title>Prefuse</title>
		<link rel="alternate" type="text/html" href="https://infovis-wiki.net/w/index.php?title=Prefuse&amp;diff=10126"/>
		<updated>2006-07-06T09:04:01Z</updated>

		<summary type="html">&lt;p&gt;Anfe: /* Summary */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Summary =&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Author&#039;&#039;&#039;: Jeffrey Heer / UC Berkeley&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Project Webpage&#039;&#039;&#039;: http://prefuse.org&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Current Version&#039;&#039;&#039;: beta, June 15, 2006&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Requirements&#039;&#039;&#039;: Java 1.4&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Overview:&#039;&#039;&#039; using Java2D graphics library; pipeline architecture; animation and rendering support&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Base data structures&#039;&#039;&#039;: Table, Graph, Tree&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Included visualization techniques:&#039;&#039;&#039; [http://www.cs.umd.edu/hcil/fisheyemenu/ Fisheye Menu], [http://prefuse.sourceforge.net/demos-radial.html Radial Graph], [http://www.cs.umd.edu/hcil/treemap/ Treemap], [http://prefuse.sourceforge.net/demos-distortion.html F+C Distortion]&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Supported File Formats&#039;&#039;&#039;: XGMML (XML), TreeML (XML), tab-delimited text, HDir&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;prefuse&#039;&#039;&#039; is an interactive graphical open source toolkit written in Java. It is thought to support the development of sophisticated, highly interactive, and flexible [[Information Visualization]]s. The architecture of &#039;&#039;&#039;prefuse&#039;&#039;&#039; considers the [[Visualization Pipeline]], a recommendation on how to implement a visualization. To provide flexibility, a [[polylithic design]] was chosen which enables developers to implement only needed functionality and customize these to meet the own requirements. But, in contrast to a [[monolithic design]], this design needs more time to conceive and influences the architecture of the own application heavily (which is not a disadvantage as &#039;&#039;&#039;prefuse&#039;&#039;&#039; is very elaborate). &lt;br /&gt;
&lt;br /&gt;
Typically, &#039;&#039;&#039;prefuse&#039;&#039;&#039; is designed to visualize interrelated information so it can be stored in a graph or tree structure, but, also not related data can be used which is stored within a data table. Even though the structure is hierarchical, the resulting tree or graph structure must not be considered in the proper graphical representation as layout algorithms are not restricted in any way. The painting of visual items is done by using a renderer which has access to the respective item itself and the Graphics2D context of the view. This approach enables to use the whole range of available painting methods of Java, therefore, all painting issues are completely independent of the toolkit itself.&lt;br /&gt;
&lt;br /&gt;
Besides providing a large set of predefined elements to visualize data, most attention was set toward usability of the visualization. This is obtained by applying several interaction techniques like tooltips or dragging visual elements. But also more sophisticated techniques like [[zoom]]ing, [[pan]]ning, or [[semantic zoom]]ing are supported or partially even provided by the toolkit itself. Further, &#039;&#039;&#039;prefuse&#039;&#039;&#039; clearly distinguishes between absolute and view coordinates. This separation helps users to place all visual elements in a logical way without consideration of later applied visualization techniques that changes the entire view.  &lt;br /&gt;
&lt;br /&gt;
=== Pros ===&lt;br /&gt;
&lt;br /&gt;
* flexible&lt;br /&gt;
* versatile pipeline approach&lt;br /&gt;
* clear and well thought architecture&lt;br /&gt;
* many layout and distortion algorithms included&lt;br /&gt;
* algorithms for force-based physics simulation included&lt;br /&gt;
* custom animations (smooth transitions)&lt;br /&gt;
* color maps&lt;br /&gt;
* query language to navigate within abstract data&lt;br /&gt;
* demos and examples included&lt;br /&gt;
* bounding management&lt;br /&gt;
* open source&lt;br /&gt;
* documentation of code and general guidance available&lt;br /&gt;
* active developer community &lt;br /&gt;
&lt;br /&gt;
=== Cons ===&lt;br /&gt;
&lt;br /&gt;
* [[polylithic design]] takes up more time to conceive and see first results&lt;br /&gt;
* special requirements of a visualization enforce a lot of adapting work&lt;br /&gt;
&lt;br /&gt;
=General Approach=&lt;br /&gt;
&lt;br /&gt;
Going along with the step-wise recommendation of the [[Visualization Pipeline]], a &#039;&#039;&#039;prefuse&#039;&#039;&#039; application consists of different states of data:&lt;br /&gt;
&lt;br /&gt;
[[Image:prefuse_visualization_pipeline.gif|600px]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;prefuse&#039;&#039;&#039; uses a centralized object called &#039;&#039;Visualization&#039;&#039; (former &#039;&#039;ItemRegistry&#039;&#039;) which maintains and manages the whole visualization. This object has to fulfil several tasks. It stores the abstract data as well as visual analogous of these in two different tables. All transformation routines like filtering or rendering are managed and executed by the &#039;&#039;Visualization&#039;&#039; too. Further, it refers to at least one &#039;&#039;Display&#039;&#039;, a graphical component which can represent visual data of &#039;&#039;&#039;prefuse&#039;&#039;&#039;. &lt;br /&gt;
&lt;br /&gt;
Transformation routines are defined as &#039;&#039;Actions&#039;&#039; which are combined in &#039;&#039;ActionLists&#039;&#039;. An &#039;&#039;ActionList&#039;&#039; is an executable container which is started manually or of the &#039;&#039;Visualization&#039;&#039; itself. Once it is started, all defined &#039;&#039;Actions&#039;&#039; are executed in the given sequence. Typically, the last called &#039;&#039;Action&#039;&#039; is the &#039;&#039;RepaintAction&#039;&#039; which forces all belonging &#039;&#039;Displays&#039;&#039; of the &#039;&#039;Visualization&#039;&#039; to perform a repaint. &lt;br /&gt;
&lt;br /&gt;
A &#039;&#039;Display&#039;&#039; is the view of &#039;&#039;&#039;prefuse&#039;&#039;&#039;. It can be embedded in each Java Swing application. The main task of a &#039;&#039;Display&#039;&#039; is the painting of visual structures which are defined in the respective &#039;&#039;Visualization&#039;&#039;. Whenever the &#039;&#039;Display&#039;&#039; performs a repaint, it requests all visual items and checks all bounds of them (bounding management). If an item is within the own area the respective rendering mechanism is called.  &lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;Display&#039;&#039; also provides navigation techniques like [[zoom]]ing or [[pan]]ning which change the view. The view itself refers to a own coordinate system. View coordinates are described through an affine transformation matrix. The most important functionality to work with this coordinate system are already predefined. Typically, users just have to apply such techniques without considering technical details. &lt;br /&gt;
&lt;br /&gt;
Furthermore, a &#039;&#039;Display&#039;&#039; also maintains a set of &#039;&#039;ControlListener&#039;&#039; which are used to process user interactions (mouse or keyboard events). Whenever such an event occurs the respective listener is called. A listener already differs on where the event happened (e.g., blank area or a certain item). Further, a &#039;&#039;ControlListener&#039;&#039; may also start an &#039;&#039;ActionList&#039;&#039; again.&lt;br /&gt;
&lt;br /&gt;
==Source Data==&lt;br /&gt;
&lt;br /&gt;
Raw data is the base of the application. Typically, the source of raw data is a file, but also other sources like a database or web content are thinkable. However, &#039;&#039;&#039;prefuse&#039;&#039;&#039; provides several file readers for different formats (CSV, Tab-Delimitated, etc.) that can be transformed into a data table. Further, some readers also support the reading of SQL-Database. If another source is needed, a reader can be written manually.&lt;br /&gt;
&lt;br /&gt;
Once the raw data is read, it is transformed into abstract data and stored within a data table of the &#039;&#039;Visualization&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
==Data Table==&lt;br /&gt;
&lt;br /&gt;
The data table which is used to store abstract data works with data types and a definition schema which maps relations between data type and table. That means, each row contains a data record, and each column contains data values for a named data field with a specific data type. Each record of the table is referred as a &#039;&#039;Tuple&#039;&#039;. &lt;br /&gt;
&lt;br /&gt;
Furthermore, instead of the table itself, a graph or tree may be used to store interrelated data. Instead of &#039;&#039;Tuples&#039;&#039;, records are referred as &#039;&#039;Nodes&#039;&#039; which are connected to others with &#039;&#039;Edges&#039;&#039;. Additionally, a tree has one defined root &#039;&#039;Node&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Abstract data does not contain any visual information like assignment attributes or color settings. Instead, visual attributes are extracted out of the abstract data following a defined logic.&lt;br /&gt;
&lt;br /&gt;
==Visual Abstraction==&lt;br /&gt;
&lt;br /&gt;
Visual structures are created when filtering the data container which contains abstract data. In case of a visualization that displays all items from the beginning on, the filtering routine must only executed once at initializing time. If the visual content changes dynamically, the filtering is executed on certain user interactions by calling a defined filtering &#039;&#039;ActionList&#039;&#039;. &lt;br /&gt;
&lt;br /&gt;
A visual structure is referred as &#039;&#039;VisualItem&#039;&#039; which may distinguished as &#039;&#039;VisualNode&#039;&#039;, &#039;&#039;VisualEdge&#039;&#039;, or an aggregated item which consists of several other items. However, as a &#039;&#039;VisualItem&#039;&#039; is extended of the respective abstract entity it has full access to all abstract information too. &lt;br /&gt;
&lt;br /&gt;
The filtering routine which transforms the abstract data to visual analogues typically consists of following &#039;&#039;Actions&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Filter&#039;&#039;&#039;: This &#039;&#039;Action&#039;&#039; is responsible to transform the abstract data of the backing table to visual analogues. If no special conditions are defined, the filter creates for each &#039;&#039;Tuple&#039;&#039; a visual instance and stores them in a second table. Additionally, a filter also performs a garbage collection and may set visibility attributes of the created items. &lt;br /&gt;
* &#039;&#039;&#039;Layout&#039;&#039;&#039;: A layout takes care about placing the &#039;&#039;VisualItems&#039;&#039;. Several common algorithms for graphs or trees are already predefined (e.g., &#039;&#039;ForceDirectedLayout&#039;&#039; or &#039;&#039;RadialTreeLayout&#039;&#039;). &lt;br /&gt;
* &#039;&#039;&#039;Assignment&#039;&#039;&#039;: Besides layouting, also other assignments may be performed during the filtering process. Such assignments directly changes visual attributes of &#039;&#039;VisualItems&#039;&#039; like color, sizes, fonts, etc.&lt;br /&gt;
&lt;br /&gt;
A visual structure may also contain a paint routine, but, as all painting jobs are initialized or performed by separated renderers, these issues may also be executed by the renderer itself or any other object.&lt;br /&gt;
&lt;br /&gt;
==View==&lt;br /&gt;
&lt;br /&gt;
Typically, the rendered visual structure is not stored, instead, they are re-rendered whenever needed. However, in case of very complex but constant visual representations it makes sense to hold items in an offscreen image. &lt;br /&gt;
&lt;br /&gt;
Each &#039;&#039;VisualItem&#039;&#039; has got one or more associated &#039;&#039;Renderers&#039;&#039; which are maintained by a factory of the &#039;&#039;Visualization&#039;&#039;. A  &#039;&#039;Render&#039;&#039; has to perform two tasks:&lt;br /&gt;
&lt;br /&gt;
* Providing a bounding box of the item. This box is used to determine if the item must actually be painted or if it would not be visible anyway. &lt;br /&gt;
* Providing the painting routine of the item. Paintings may be executed by the &#039;&#039;Renderer&#039;&#039; itself or delegated to other objects which are accessible of the &#039;&#039;Renderer&#039;&#039;. The painting routines are not restricted in any way, but they representation should not exceed the bounding box of the item. &lt;br /&gt;
&lt;br /&gt;
Rendering is always performed on a repaint of the &#039;&#039;Display&#039;&#039;. A repaint can be requested by the &#039;&#039;Visualization&#039;&#039;, on user interaction, and on events like resizing the component, getting the focus, or changing the coordinate system of the view. However, as repaints may occur very often, developers have to ascertain that rendering jobs can are performed fast, otherwise, the performance of the whole visualization would suffer.&lt;br /&gt;
&lt;br /&gt;
=Details=&lt;br /&gt;
&lt;br /&gt;
==Package Structure==&lt;br /&gt;
&lt;br /&gt;
Following picture shows the most important packages of &#039;&#039;&#039;prefuse&#039;&#039;&#039; regarding to the [[Visualization Pipeline]]:&lt;br /&gt;
&lt;br /&gt;
[[Image:prefuse_package_guide.gif|600px]]&lt;br /&gt;
&lt;br /&gt;
These packages also contain predefined components. A default nodes and edges provide standard functionality of abstract data, standard functionality is also available in visual analogous of them. A default filter transforms all defined abstract entities to visual ones. Further, also some special functionality for common requirements are provided by own components. &lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Renderers&#039;&#039;&#039;: &#039;&#039;EdgeRenderer&#039;&#039; to render edges between graph or tree nodes, a &#039;&#039;LableRenderer&#039;&#039; to render test items, and a &#039;&#039;PolygoneRenderer&#039;&#039; to render geometrical items. &lt;br /&gt;
* &#039;&#039;&#039;Layouts&#039;&#039;&#039;: &#039;&#039;RandomLayout&#039;&#039;, &#039;&#039;GridLayout&#039;&#039;, and some more to place non related data, &#039;&#039;ForceDirectedLayout&#039;&#039;, &#039;&#039;TreeLayout&#039;&#039;, &#039;&#039;RadialTreeLayout&#039;&#039; and others to render trees and graphs.&lt;br /&gt;
* &#039;&#039;&#039;Controls&#039;&#039;&#039;: &#039;&#039;DragControl&#039;&#039;, &#039;&#039;ZoomControl&#039;&#039;, &#039;&#039;PanControl&#039;&#039;, &#039;&#039;ToolTipControl&#039;&#039; and several others to react on user interactions. &lt;br /&gt;
&lt;br /&gt;
In simple visualizations the predefined functionality will meet most requirements. If special requirements are needed the default functionality supports a step-wise developing as results can be communicated by these components until the own functionality is implemented.&lt;br /&gt;
&lt;br /&gt;
==Coordinates in prefuse==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;prefuse&#039;&#039;&#039; works with two different coordinate systems. Absolute coordinates are device-independent logical coordinates. All visual attributes like positions or sizes are defined in absolute coordinates. In contrast, view coordinates are device-depended (screen). Transformations between absolute and view coordinates are done automatically by Java painting routines. View coordinates are influenced by the system and device driver (e.g., the absolute point (0,0) is the topmost left point of the actual graphical component which may be on any position at the screen). Further, view coordinates may also be manipulated manually by using an affine transformation matrix which applies linear transformations on absolute coordinates before device-dependent routines convert them to screen coordinates. &lt;br /&gt;
&lt;br /&gt;
A &#039;&#039;&#039;prefuse&#039;&#039;&#039; &#039;&#039;Display&#039;&#039; provides the most important manipulating methods of this matrix. [[Zoom]]ing, [[pan]]ning, and rotation of the whole view are only done by changing the view coordinates. So, as absolute coordinates are never concerned of such transformations and translations, a user must never consider the actual view in layout, assignment, or painting routines. &lt;br /&gt;
&lt;br /&gt;
There are several different ways on how to apply such transformations, additionally, the &#039;&#039;Display&#039;&#039; also supports animated transformations. &lt;br /&gt;
&lt;br /&gt;
==User Interactions==&lt;br /&gt;
&lt;br /&gt;
Mouse or keyboard events are treated by using &#039;&#039;ControlListener&#039;&#039;. Whenever an event occurs which is handled by a &#039;&#039;ControlListener&#039;&#039;, the &#039;&#039;Display&#039;&#039; delegates the event to the respective routine. A &#039;&#039;ControlListener&#039;&#039; differs automatically which visual element is concerned of the event (the view itself or a &#039;&#039;VisualItem&#039;&#039; on the view). &lt;br /&gt;
&lt;br /&gt;
A &#039;&#039;ControlListener&#039;&#039; may just perform simple task like changing the mouse cursor or editing the label of an item. But, in more sophisticated applications, also task like loading new data or dragging items on the view may also be handled. Therefore, a &#039;&#039;ControlListener&#039;&#039; may also work with &#039;&#039;ActionLists&#039;&#039; to execute such tasks. Further, a &#039;&#039;ControlListener&#039;&#039; has also access to the &#039;&#039;Display&#039;&#039; to call methods like zooming or panning. Typically, each &#039;&#039;ControlListener&#039;&#039; forces a repaint when its job is done.  &lt;br /&gt;
&lt;br /&gt;
Most of standard functionality is already predefined in &#039;&#039;prefuse&#039;&#039; and the wanted listeners just have to be set to the &#039;&#039;Display&#039;&#039;. However, the &#039;&#039;Display&#039;&#039; can handle a countless of different listener. Hence, typically only a few listeners must be defined manually as they can be mixed with default ones.  &lt;br /&gt;
&lt;br /&gt;
=Conclusion=&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;prefuse&#039;&#039;&#039; is a very powerful toolkit, providing a large set of components and methods a developer needs to build an [[Information Visualization]]. The [[polylithic design]] is not that easy to understand in the beginning of a development, but once conceived, a visualization is easy to realize even if really special demands have to be fulfilled. Furthermore, using Prefuse forces a clear and well designed architecture of own applications.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;prefuse&#039;&#039;&#039; was created with most attention paid to developers who will finally work with the toolkit. In an evaluation study this goal was approved too. In the meanwhile, there is also a not so small community using and upgrading the toolkit, which is an argue for its usability.&lt;br /&gt;
&lt;br /&gt;
= External links =&lt;br /&gt;
*[http://prefuse.org prefuse Homepage]&lt;br /&gt;
*[http://vw.indiana.edu/ivsi2004/jherr/index.html prefuse Position Paper]&lt;br /&gt;
*[http://sourceforge.net/forum/forum.php?forum_id=343013 prefuse Help Forum]&lt;br /&gt;
&lt;br /&gt;
= References =&lt;br /&gt;
*[Heer, 2004] Jeffrey Heer. [http://jheer.org/publications/2004-Heer-prefuse-Masters.pdf prefuse: a software framework for interactive information visualization]. Masters of Science, Computer Science Division, University of California, Berkeley, 2004.&lt;br /&gt;
*[Heer, 2005] Jeffrey Heer, Stuart K. Card, and James A. Landay. [http://jheer.org/publications/2005-prefuse-CHI.pdf prefuse: a toolkit for interactive information visualization. In &#039;&#039;CHI 2005, Human Factors in Computing Systems&#039;&#039;], 2005.&lt;br /&gt;
*[Heer, 2006a] Jeffrey Heer, prefuse API documentation, Retrieved at: July 06, 2006, http://prefuse.org&lt;br /&gt;
*[Heer, 2006b] Jeffrey Heer, prefuse manual, Retrieved at: July 06, 2006, http://prefuse.org&lt;br /&gt;
*[Sun Microsystems, 2001] Sun Microsystems, Programmer’s Guide to the Java 2DTM API - Enhanced Graphics and Imaging for Java, Retrieved at: April 20, 2006, http://java.sun.com/j2se/1.4/pdf/j2d-book.pdf&lt;br /&gt;
&lt;br /&gt;
[[Category:Toolkits]]&lt;/div&gt;</summary>
		<author><name>Anfe</name></author>
	</entry>
	<entry>
		<id>https://infovis-wiki.net/w/index.php?title=Prefuse&amp;diff=10125</id>
		<title>Prefuse</title>
		<link rel="alternate" type="text/html" href="https://infovis-wiki.net/w/index.php?title=Prefuse&amp;diff=10125"/>
		<updated>2006-07-06T09:03:37Z</updated>

		<summary type="html">&lt;p&gt;Anfe: /* General Approach */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Summary =&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Author&#039;&#039;&#039;: Jeffrey Heer / UC Berkeley&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Project Webpage&#039;&#039;&#039;: http://prefuse.org&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Current Version&#039;&#039;&#039;: beta, June 15, 2006&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Requirements&#039;&#039;&#039;: Java 1.4&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Overview:&#039;&#039;&#039; using Java2D graphics library; pipeline architecture; animation and rendering support&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Base data structures&#039;&#039;&#039;: Table, Graph, Tree&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Included visualization techniques:&#039;&#039;&#039; [http://www.cs.umd.edu/hcil/fisheyemenu/ Fisheye Menu], [http://prefuse.sourceforge.net/demos-radial.html Radial Graph], [http://www.cs.umd.edu/hcil/treemap/ Treemap], [http://prefuse.sourceforge.net/demos-distortion.html F+C Distortion]&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Supported File Formats&#039;&#039;&#039;: XGMML (XML), TreeML (XML), tab-delimited text, HDir&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;prefuse&#039;&#039;&#039; is an interactive graphical open source toolkit written in Java. It is thought to support the development of sophisticated, highly interactive, and flexible [[Information Visualization]]s. The architecture of &#039;&#039;&#039;prefuse&#039;&#039;&#039; considers the [[Visualization Pipeline]], a recommendation on how to implement a visualization. To provide flexibility, a [[polylithic design]] was chosen which enables developers to implement only needed functionality and customize these to meet the own requirements. But, in contrast to a [[monolithic design]], this design needs more time to conceive and influences the architecture of the own application heavily (which is not a disadvantage as &#039;&#039;&#039;prefuse&#039;&#039;&#039; is very elaborate). &lt;br /&gt;
&lt;br /&gt;
Typically, &#039;&#039;&#039;prefuse&#039;&#039;&#039; is designed to visualize interrelated information so it can be stored in a graph or tree structure, but, also not related data can be used which is stored within a data-table. Even though the structure is hierarchical, the resulting tree or graph structure must not be considered in the proper graphical representation as layout algorithms are not restricted in any way. The painting of visual items is done by using a renderer which has access to the respective item itself and the Graphics2D context of the view. This approach enables to use the whole range of available painting methods of Java, therefore, all painting issues are completely independent of the toolkit itself.&lt;br /&gt;
&lt;br /&gt;
Besides providing a large set of predefined elements to visualize data, most attention was set toward usability of the visualization. This is obtained by applying several interaction techniques like tooltips or dragging visual elements. But also more sophisticated techniques like [[zoom]]ing, [[pan]]ning, or [[semantic zoom]]ing are supported or partially even provided by the toolkit itself. Further, &#039;&#039;&#039;prefuse&#039;&#039;&#039; clearly distinguishes between absolute and view coordinates. This separation helps users to place all visual elements in a logical way without consideration of later applied visualization techniques that changes the entire view.  &lt;br /&gt;
&lt;br /&gt;
=== Pros ===&lt;br /&gt;
&lt;br /&gt;
* flexible&lt;br /&gt;
* versatile pipeline approach&lt;br /&gt;
* clear and well thought architecture&lt;br /&gt;
* many layout and distortion algorithms included&lt;br /&gt;
* algorithms for force-based physics simulation included&lt;br /&gt;
* custom animations (smooth transitions)&lt;br /&gt;
* color maps&lt;br /&gt;
* query language to navigate within abstract data&lt;br /&gt;
* demos and examples included&lt;br /&gt;
* bounding management&lt;br /&gt;
* open source&lt;br /&gt;
* documentation of code and general guidance available&lt;br /&gt;
* active developer community &lt;br /&gt;
&lt;br /&gt;
=== Cons ===&lt;br /&gt;
&lt;br /&gt;
* [[polylithic design]] takes up more time to conceive and see first results&lt;br /&gt;
* special requirements of a visualization enforce a lot of adapting work&lt;br /&gt;
&lt;br /&gt;
=General Approach=&lt;br /&gt;
&lt;br /&gt;
Going along with the step-wise recommendation of the [[Visualization Pipeline]], a &#039;&#039;&#039;prefuse&#039;&#039;&#039; application consists of different states of data:&lt;br /&gt;
&lt;br /&gt;
[[Image:prefuse_visualization_pipeline.gif|600px]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;prefuse&#039;&#039;&#039; uses a centralized object called &#039;&#039;Visualization&#039;&#039; (former &#039;&#039;ItemRegistry&#039;&#039;) which maintains and manages the whole visualization. This object has to fulfil several tasks. It stores the abstract data as well as visual analogous of these in two different tables. All transformation routines like filtering or rendering are managed and executed by the &#039;&#039;Visualization&#039;&#039; too. Further, it refers to at least one &#039;&#039;Display&#039;&#039;, a graphical component which can represent visual data of &#039;&#039;&#039;prefuse&#039;&#039;&#039;. &lt;br /&gt;
&lt;br /&gt;
Transformation routines are defined as &#039;&#039;Actions&#039;&#039; which are combined in &#039;&#039;ActionLists&#039;&#039;. An &#039;&#039;ActionList&#039;&#039; is an executable container which is started manually or of the &#039;&#039;Visualization&#039;&#039; itself. Once it is started, all defined &#039;&#039;Actions&#039;&#039; are executed in the given sequence. Typically, the last called &#039;&#039;Action&#039;&#039; is the &#039;&#039;RepaintAction&#039;&#039; which forces all belonging &#039;&#039;Displays&#039;&#039; of the &#039;&#039;Visualization&#039;&#039; to perform a repaint. &lt;br /&gt;
&lt;br /&gt;
A &#039;&#039;Display&#039;&#039; is the view of &#039;&#039;&#039;prefuse&#039;&#039;&#039;. It can be embedded in each Java Swing application. The main task of a &#039;&#039;Display&#039;&#039; is the painting of visual structures which are defined in the respective &#039;&#039;Visualization&#039;&#039;. Whenever the &#039;&#039;Display&#039;&#039; performs a repaint, it requests all visual items and checks all bounds of them (bounding management). If an item is within the own area the respective rendering mechanism is called.  &lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;Display&#039;&#039; also provides navigation techniques like [[zoom]]ing or [[pan]]ning which change the view. The view itself refers to a own coordinate system. View coordinates are described through an affine transformation matrix. The most important functionality to work with this coordinate system are already predefined. Typically, users just have to apply such techniques without considering technical details. &lt;br /&gt;
&lt;br /&gt;
Furthermore, a &#039;&#039;Display&#039;&#039; also maintains a set of &#039;&#039;ControlListener&#039;&#039; which are used to process user interactions (mouse or keyboard events). Whenever such an event occurs the respective listener is called. A listener already differs on where the event happened (e.g., blank area or a certain item). Further, a &#039;&#039;ControlListener&#039;&#039; may also start an &#039;&#039;ActionList&#039;&#039; again.&lt;br /&gt;
&lt;br /&gt;
==Source Data==&lt;br /&gt;
&lt;br /&gt;
Raw data is the base of the application. Typically, the source of raw data is a file, but also other sources like a database or web content are thinkable. However, &#039;&#039;&#039;prefuse&#039;&#039;&#039; provides several file readers for different formats (CSV, Tab-Delimitated, etc.) that can be transformed into a data table. Further, some readers also support the reading of SQL-Database. If another source is needed, a reader can be written manually.&lt;br /&gt;
&lt;br /&gt;
Once the raw data is read, it is transformed into abstract data and stored within a data table of the &#039;&#039;Visualization&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
==Data Table==&lt;br /&gt;
&lt;br /&gt;
The data table which is used to store abstract data works with data types and a definition schema which maps relations between data type and table. That means, each row contains a data record, and each column contains data values for a named data field with a specific data type. Each record of the table is referred as a &#039;&#039;Tuple&#039;&#039;. &lt;br /&gt;
&lt;br /&gt;
Furthermore, instead of the table itself, a graph or tree may be used to store interrelated data. Instead of &#039;&#039;Tuples&#039;&#039;, records are referred as &#039;&#039;Nodes&#039;&#039; which are connected to others with &#039;&#039;Edges&#039;&#039;. Additionally, a tree has one defined root &#039;&#039;Node&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Abstract data does not contain any visual information like assignment attributes or color settings. Instead, visual attributes are extracted out of the abstract data following a defined logic.&lt;br /&gt;
&lt;br /&gt;
==Visual Abstraction==&lt;br /&gt;
&lt;br /&gt;
Visual structures are created when filtering the data container which contains abstract data. In case of a visualization that displays all items from the beginning on, the filtering routine must only executed once at initializing time. If the visual content changes dynamically, the filtering is executed on certain user interactions by calling a defined filtering &#039;&#039;ActionList&#039;&#039;. &lt;br /&gt;
&lt;br /&gt;
A visual structure is referred as &#039;&#039;VisualItem&#039;&#039; which may distinguished as &#039;&#039;VisualNode&#039;&#039;, &#039;&#039;VisualEdge&#039;&#039;, or an aggregated item which consists of several other items. However, as a &#039;&#039;VisualItem&#039;&#039; is extended of the respective abstract entity it has full access to all abstract information too. &lt;br /&gt;
&lt;br /&gt;
The filtering routine which transforms the abstract data to visual analogues typically consists of following &#039;&#039;Actions&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Filter&#039;&#039;&#039;: This &#039;&#039;Action&#039;&#039; is responsible to transform the abstract data of the backing table to visual analogues. If no special conditions are defined, the filter creates for each &#039;&#039;Tuple&#039;&#039; a visual instance and stores them in a second table. Additionally, a filter also performs a garbage collection and may set visibility attributes of the created items. &lt;br /&gt;
* &#039;&#039;&#039;Layout&#039;&#039;&#039;: A layout takes care about placing the &#039;&#039;VisualItems&#039;&#039;. Several common algorithms for graphs or trees are already predefined (e.g., &#039;&#039;ForceDirectedLayout&#039;&#039; or &#039;&#039;RadialTreeLayout&#039;&#039;). &lt;br /&gt;
* &#039;&#039;&#039;Assignment&#039;&#039;&#039;: Besides layouting, also other assignments may be performed during the filtering process. Such assignments directly changes visual attributes of &#039;&#039;VisualItems&#039;&#039; like color, sizes, fonts, etc.&lt;br /&gt;
&lt;br /&gt;
A visual structure may also contain a paint routine, but, as all painting jobs are initialized or performed by separated renderers, these issues may also be executed by the renderer itself or any other object.&lt;br /&gt;
&lt;br /&gt;
==View==&lt;br /&gt;
&lt;br /&gt;
Typically, the rendered visual structure is not stored, instead, they are re-rendered whenever needed. However, in case of very complex but constant visual representations it makes sense to hold items in an offscreen image. &lt;br /&gt;
&lt;br /&gt;
Each &#039;&#039;VisualItem&#039;&#039; has got one or more associated &#039;&#039;Renderers&#039;&#039; which are maintained by a factory of the &#039;&#039;Visualization&#039;&#039;. A  &#039;&#039;Render&#039;&#039; has to perform two tasks:&lt;br /&gt;
&lt;br /&gt;
* Providing a bounding box of the item. This box is used to determine if the item must actually be painted or if it would not be visible anyway. &lt;br /&gt;
* Providing the painting routine of the item. Paintings may be executed by the &#039;&#039;Renderer&#039;&#039; itself or delegated to other objects which are accessible of the &#039;&#039;Renderer&#039;&#039;. The painting routines are not restricted in any way, but they representation should not exceed the bounding box of the item. &lt;br /&gt;
&lt;br /&gt;
Rendering is always performed on a repaint of the &#039;&#039;Display&#039;&#039;. A repaint can be requested by the &#039;&#039;Visualization&#039;&#039;, on user interaction, and on events like resizing the component, getting the focus, or changing the coordinate system of the view. However, as repaints may occur very often, developers have to ascertain that rendering jobs can are performed fast, otherwise, the performance of the whole visualization would suffer.&lt;br /&gt;
&lt;br /&gt;
=Details=&lt;br /&gt;
&lt;br /&gt;
==Package Structure==&lt;br /&gt;
&lt;br /&gt;
Following picture shows the most important packages of &#039;&#039;&#039;prefuse&#039;&#039;&#039; regarding to the [[Visualization Pipeline]]:&lt;br /&gt;
&lt;br /&gt;
[[Image:prefuse_package_guide.gif|600px]]&lt;br /&gt;
&lt;br /&gt;
These packages also contain predefined components. A default nodes and edges provide standard functionality of abstract data, standard functionality is also available in visual analogous of them. A default filter transforms all defined abstract entities to visual ones. Further, also some special functionality for common requirements are provided by own components. &lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Renderers&#039;&#039;&#039;: &#039;&#039;EdgeRenderer&#039;&#039; to render edges between graph or tree nodes, a &#039;&#039;LableRenderer&#039;&#039; to render test items, and a &#039;&#039;PolygoneRenderer&#039;&#039; to render geometrical items. &lt;br /&gt;
* &#039;&#039;&#039;Layouts&#039;&#039;&#039;: &#039;&#039;RandomLayout&#039;&#039;, &#039;&#039;GridLayout&#039;&#039;, and some more to place non related data, &#039;&#039;ForceDirectedLayout&#039;&#039;, &#039;&#039;TreeLayout&#039;&#039;, &#039;&#039;RadialTreeLayout&#039;&#039; and others to render trees and graphs.&lt;br /&gt;
* &#039;&#039;&#039;Controls&#039;&#039;&#039;: &#039;&#039;DragControl&#039;&#039;, &#039;&#039;ZoomControl&#039;&#039;, &#039;&#039;PanControl&#039;&#039;, &#039;&#039;ToolTipControl&#039;&#039; and several others to react on user interactions. &lt;br /&gt;
&lt;br /&gt;
In simple visualizations the predefined functionality will meet most requirements. If special requirements are needed the default functionality supports a step-wise developing as results can be communicated by these components until the own functionality is implemented.&lt;br /&gt;
&lt;br /&gt;
==Coordinates in prefuse==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;prefuse&#039;&#039;&#039; works with two different coordinate systems. Absolute coordinates are device-independent logical coordinates. All visual attributes like positions or sizes are defined in absolute coordinates. In contrast, view coordinates are device-depended (screen). Transformations between absolute and view coordinates are done automatically by Java painting routines. View coordinates are influenced by the system and device driver (e.g., the absolute point (0,0) is the topmost left point of the actual graphical component which may be on any position at the screen). Further, view coordinates may also be manipulated manually by using an affine transformation matrix which applies linear transformations on absolute coordinates before device-dependent routines convert them to screen coordinates. &lt;br /&gt;
&lt;br /&gt;
A &#039;&#039;&#039;prefuse&#039;&#039;&#039; &#039;&#039;Display&#039;&#039; provides the most important manipulating methods of this matrix. [[Zoom]]ing, [[pan]]ning, and rotation of the whole view are only done by changing the view coordinates. So, as absolute coordinates are never concerned of such transformations and translations, a user must never consider the actual view in layout, assignment, or painting routines. &lt;br /&gt;
&lt;br /&gt;
There are several different ways on how to apply such transformations, additionally, the &#039;&#039;Display&#039;&#039; also supports animated transformations. &lt;br /&gt;
&lt;br /&gt;
==User Interactions==&lt;br /&gt;
&lt;br /&gt;
Mouse or keyboard events are treated by using &#039;&#039;ControlListener&#039;&#039;. Whenever an event occurs which is handled by a &#039;&#039;ControlListener&#039;&#039;, the &#039;&#039;Display&#039;&#039; delegates the event to the respective routine. A &#039;&#039;ControlListener&#039;&#039; differs automatically which visual element is concerned of the event (the view itself or a &#039;&#039;VisualItem&#039;&#039; on the view). &lt;br /&gt;
&lt;br /&gt;
A &#039;&#039;ControlListener&#039;&#039; may just perform simple task like changing the mouse cursor or editing the label of an item. But, in more sophisticated applications, also task like loading new data or dragging items on the view may also be handled. Therefore, a &#039;&#039;ControlListener&#039;&#039; may also work with &#039;&#039;ActionLists&#039;&#039; to execute such tasks. Further, a &#039;&#039;ControlListener&#039;&#039; has also access to the &#039;&#039;Display&#039;&#039; to call methods like zooming or panning. Typically, each &#039;&#039;ControlListener&#039;&#039; forces a repaint when its job is done.  &lt;br /&gt;
&lt;br /&gt;
Most of standard functionality is already predefined in &#039;&#039;prefuse&#039;&#039; and the wanted listeners just have to be set to the &#039;&#039;Display&#039;&#039;. However, the &#039;&#039;Display&#039;&#039; can handle a countless of different listener. Hence, typically only a few listeners must be defined manually as they can be mixed with default ones.  &lt;br /&gt;
&lt;br /&gt;
=Conclusion=&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;prefuse&#039;&#039;&#039; is a very powerful toolkit, providing a large set of components and methods a developer needs to build an [[Information Visualization]]. The [[polylithic design]] is not that easy to understand in the beginning of a development, but once conceived, a visualization is easy to realize even if really special demands have to be fulfilled. Furthermore, using Prefuse forces a clear and well designed architecture of own applications.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;prefuse&#039;&#039;&#039; was created with most attention paid to developers who will finally work with the toolkit. In an evaluation study this goal was approved too. In the meanwhile, there is also a not so small community using and upgrading the toolkit, which is an argue for its usability.&lt;br /&gt;
&lt;br /&gt;
= External links =&lt;br /&gt;
*[http://prefuse.org prefuse Homepage]&lt;br /&gt;
*[http://vw.indiana.edu/ivsi2004/jherr/index.html prefuse Position Paper]&lt;br /&gt;
*[http://sourceforge.net/forum/forum.php?forum_id=343013 prefuse Help Forum]&lt;br /&gt;
&lt;br /&gt;
= References =&lt;br /&gt;
*[Heer, 2004] Jeffrey Heer. [http://jheer.org/publications/2004-Heer-prefuse-Masters.pdf prefuse: a software framework for interactive information visualization]. Masters of Science, Computer Science Division, University of California, Berkeley, 2004.&lt;br /&gt;
*[Heer, 2005] Jeffrey Heer, Stuart K. Card, and James A. Landay. [http://jheer.org/publications/2005-prefuse-CHI.pdf prefuse: a toolkit for interactive information visualization. In &#039;&#039;CHI 2005, Human Factors in Computing Systems&#039;&#039;], 2005.&lt;br /&gt;
*[Heer, 2006a] Jeffrey Heer, prefuse API documentation, Retrieved at: July 06, 2006, http://prefuse.org&lt;br /&gt;
*[Heer, 2006b] Jeffrey Heer, prefuse manual, Retrieved at: July 06, 2006, http://prefuse.org&lt;br /&gt;
*[Sun Microsystems, 2001] Sun Microsystems, Programmer’s Guide to the Java 2DTM API - Enhanced Graphics and Imaging for Java, Retrieved at: April 20, 2006, http://java.sun.com/j2se/1.4/pdf/j2d-book.pdf&lt;br /&gt;
&lt;br /&gt;
[[Category:Toolkits]]&lt;/div&gt;</summary>
		<author><name>Anfe</name></author>
	</entry>
	<entry>
		<id>https://infovis-wiki.net/w/index.php?title=Prefuse&amp;diff=10124</id>
		<title>Prefuse</title>
		<link rel="alternate" type="text/html" href="https://infovis-wiki.net/w/index.php?title=Prefuse&amp;diff=10124"/>
		<updated>2006-07-06T08:56:05Z</updated>

		<summary type="html">&lt;p&gt;Anfe: /* General Approach */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Summary =&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Author&#039;&#039;&#039;: Jeffrey Heer / UC Berkeley&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Project Webpage&#039;&#039;&#039;: http://prefuse.org&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Current Version&#039;&#039;&#039;: beta, June 15, 2006&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Requirements&#039;&#039;&#039;: Java 1.4&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Overview:&#039;&#039;&#039; using Java2D graphics library; pipeline architecture; animation and rendering support&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Base data structures&#039;&#039;&#039;: Table, Graph, Tree&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Included visualization techniques:&#039;&#039;&#039; [http://www.cs.umd.edu/hcil/fisheyemenu/ Fisheye Menu], [http://prefuse.sourceforge.net/demos-radial.html Radial Graph], [http://www.cs.umd.edu/hcil/treemap/ Treemap], [http://prefuse.sourceforge.net/demos-distortion.html F+C Distortion]&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Supported File Formats&#039;&#039;&#039;: XGMML (XML), TreeML (XML), tab-delimited text, HDir&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;prefuse&#039;&#039;&#039; is an interactive graphical open source toolkit written in Java. It is thought to support the development of sophisticated, highly interactive, and flexible [[Information Visualization]]s. The architecture of &#039;&#039;&#039;prefuse&#039;&#039;&#039; considers the [[Visualization Pipeline]], a recommendation on how to implement a visualization. To provide flexibility, a [[polylithic design]] was chosen which enables developers to implement only needed functionality and customize these to meet the own requirements. But, in contrast to a [[monolithic design]], this design needs more time to conceive and influences the architecture of the own application heavily (which is not a disadvantage as &#039;&#039;&#039;prefuse&#039;&#039;&#039; is very elaborate). &lt;br /&gt;
&lt;br /&gt;
Typically, &#039;&#039;&#039;prefuse&#039;&#039;&#039; is designed to visualize interrelated information so it can be stored in a graph or tree structure, but, also not related data can be used which is stored within a data-table. Even though the structure is hierarchical, the resulting tree or graph structure must not be considered in the proper graphical representation as layout algorithms are not restricted in any way. The painting of visual items is done by using a renderer which has access to the respective item itself and the Graphics2D context of the view. This approach enables to use the whole range of available painting methods of Java, therefore, all painting issues are completely independent of the toolkit itself.&lt;br /&gt;
&lt;br /&gt;
Besides providing a large set of predefined elements to visualize data, most attention was set toward usability of the visualization. This is obtained by applying several interaction techniques like tooltips or dragging visual elements. But also more sophisticated techniques like [[zoom]]ing, [[pan]]ning, or [[semantic zoom]]ing are supported or partially even provided by the toolkit itself. Further, &#039;&#039;&#039;prefuse&#039;&#039;&#039; clearly distinguishes between absolute and view coordinates. This separation helps users to place all visual elements in a logical way without consideration of later applied visualization techniques that changes the entire view.  &lt;br /&gt;
&lt;br /&gt;
=== Pros ===&lt;br /&gt;
&lt;br /&gt;
* flexible&lt;br /&gt;
* versatile pipeline approach&lt;br /&gt;
* clear and well thought architecture&lt;br /&gt;
* many layout and distortion algorithms included&lt;br /&gt;
* algorithms for force-based physics simulation included&lt;br /&gt;
* custom animations (smooth transitions)&lt;br /&gt;
* color maps&lt;br /&gt;
* query language to navigate within abstract data&lt;br /&gt;
* demos and examples included&lt;br /&gt;
* bounding management&lt;br /&gt;
* open source&lt;br /&gt;
* documentation of code and general guidance available&lt;br /&gt;
* active developer community &lt;br /&gt;
&lt;br /&gt;
=== Cons ===&lt;br /&gt;
&lt;br /&gt;
* [[polylithic design]] takes up more time to conceive and see first results&lt;br /&gt;
* special requirements of a visualization enforce a lot of adapting work&lt;br /&gt;
&lt;br /&gt;
=General Approach=&lt;br /&gt;
&lt;br /&gt;
Going along with the step-wise recommendation of the [[Visualization Pipeline]], a &#039;&#039;&#039;prefuse&#039;&#039;&#039; application consists of different states of data:&lt;br /&gt;
&lt;br /&gt;
[[Image:prefuse_visualization_pipeline.gif|600px]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;prefuse&#039;&#039;&#039; uses a centralized object called &#039;&#039;Visualization&#039;&#039; (former &#039;&#039;ItemRegistry&#039;&#039;) which maintains and manages the whole visualization. This object has to fulfil several tasks. It stores the abstract data as well as visual analogous of these in two different tables. All transformation routines like filtering or rendering are managed and executed by the &#039;&#039;Visualization&#039;&#039; too. Further, it refers to at least one &#039;&#039;Display&#039;&#039;, a graphical component which can represent visual data of &#039;&#039;&#039;prefuse&#039;&#039;&#039;. &lt;br /&gt;
&lt;br /&gt;
Transformation routines are defined as &#039;&#039;Actions&#039;&#039; which are combined in &#039;&#039;ActionLists&#039;&#039;. An &#039;&#039;ActionList&#039;&#039; is an executable container which is started of the &#039;&#039;Visualization&#039;&#039; whenever necessary. Once it is started, all defined &#039;&#039;Actions&#039;&#039; are executed in the given sequence. Typically, the last called &#039;&#039;Action&#039;&#039; is the &#039;&#039;RepaintAction&#039;&#039; which forces all defined &#039;&#039;Displays&#039;&#039; to perform a repaint. &lt;br /&gt;
&lt;br /&gt;
A &#039;&#039;Display&#039;&#039; is the view of &#039;&#039;&#039;prefuse&#039;&#039;&#039;. It can be embedded in each Java Swing application. The main task of a &#039;&#039;Display&#039;&#039; is the painting of visual structures which are defined in the respective &#039;&#039;Visualization&#039;&#039;. Whenever the &#039;&#039;Display&#039;&#039; performs a repaint it requests all visual items and checks all bounds of them (bounding management). If an item is within the own area the respective rendering mechanism is called.  &lt;br /&gt;
&lt;br /&gt;
Another important task of the &#039;&#039;Display&#039;&#039; is the providing of navigation techniques like [[zoom]]ing or [[pan]]ning. The entire view is managed by an own view coordinate system which is described with an affine transformation matrix. The most important functionality to work with this coordinate system is already predefined. &lt;br /&gt;
&lt;br /&gt;
Furthermore, a &#039;&#039;Display&#039;&#039; also maintains a set of &#039;&#039;ControlListener&#039;&#039; which are used to process user interactions (mouse or keyboard events). Whenever such an event occurs the respective listener is called. This listener already differs on where the event happened (e.g., blank area or a certain item). Further, a &#039;&#039;ControlListener&#039;&#039; may also start an &#039;&#039;ActionList&#039;&#039; again.&lt;br /&gt;
&lt;br /&gt;
==Source Data==&lt;br /&gt;
&lt;br /&gt;
Raw data is the base of the application. Typically, the source of raw data is a file, but also other sources like a database are thinkable. However, &#039;&#039;&#039;prefuse&#039;&#039;&#039; provides several file readers for different formats (CSV, Tab-Delimitated, etc.) that can be transformed into a data table. Further, some readers also support the reading of SQL-Database. If another source is needed, a reader can be written manually.&lt;br /&gt;
&lt;br /&gt;
Once the raw data is read, it is transformed into abstract data and stored within a data table.&lt;br /&gt;
&lt;br /&gt;
==Data Table==&lt;br /&gt;
&lt;br /&gt;
The data table which is used to store abstract data works with data types and a definition schema which maps relations between data type and table. That means, each row contains a data record, and each column contains data values for a named data field with a specific data type. Each record of the table is referred as a &#039;&#039;Tuple&#039;&#039;. &lt;br /&gt;
&lt;br /&gt;
Furthermore, instead of the table itself, a graph or tree may be used to store interrelated data. Instead of &#039;&#039;Tuples&#039;&#039;, records are referred as &#039;&#039;Nodes&#039;&#039; which are connected to others with &#039;&#039;Edges&#039;&#039;. Additionally, a tree has one defined root &#039;&#039;Node&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Abstract data does not contain any visual information like assignment attributes or color settings. Instead, visual attributes are extracted out of the abstract data following a defined logic.&lt;br /&gt;
&lt;br /&gt;
==Visual Abstraction==&lt;br /&gt;
&lt;br /&gt;
Visual structures are created when filtering the data container which contains abstract data. In case of a visualization that displays all items from the beginning on, the filtering routine must only executed once at initializing time. If the visual content changes dynamically, the filtering is executed on certain user interactions by calling a defined filtering &#039;&#039;ActionList&#039;&#039;. &lt;br /&gt;
&lt;br /&gt;
A visual structure is referred as &#039;&#039;VisualItem&#039;&#039; which may distinguished as &#039;&#039;VisualNode&#039;&#039;, &#039;&#039;VisualEdge&#039;&#039;, or an aggregated item which consists of several other items. However, as a &#039;&#039;VisualItem&#039;&#039; is extended of the respective abstract entity it has full access to all abstract information too. &lt;br /&gt;
&lt;br /&gt;
The filtering routine which transforms the abstract data to visual analogues typically consists of following &#039;&#039;Actions&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Filter&#039;&#039;&#039;: This &#039;&#039;Action&#039;&#039; is responsible to transform the abstract data of the backing table to visual analogues. If no special conditions are defined, the filter creates for each &#039;&#039;Tuple&#039;&#039; a visual instance and stores them in a second table. Additionally, a filter also performs a garbage collection and may set visibility attributes of the created items. &lt;br /&gt;
* &#039;&#039;&#039;Layout&#039;&#039;&#039;: A layout takes care about placing the &#039;&#039;VisualItems&#039;&#039;. Several common algorithms for graphs or trees are already predefined (e.g., &#039;&#039;ForceDirectedLayout&#039;&#039; or &#039;&#039;RadialTreeLayout&#039;&#039;). &lt;br /&gt;
* &#039;&#039;&#039;Assignment&#039;&#039;&#039;: Besides layouting, also other assignments may be performed during the filtering process. Such assignments directly changes visual attributes of &#039;&#039;VisualItems&#039;&#039; like color, sizes, fonts, etc.&lt;br /&gt;
&lt;br /&gt;
A visual structure may also contain a paint routine, but, as all painting jobs are initialized or performed by separated renderers, these issues may also be executed by the renderer itself or any other object.&lt;br /&gt;
&lt;br /&gt;
==View==&lt;br /&gt;
&lt;br /&gt;
Typically, the rendered visual structure is not stored, instead, they are re-rendered whenever needed. However, in case of very complex but constant visual representations it makes sense to hold items in an offscreen image. &lt;br /&gt;
&lt;br /&gt;
Each &#039;&#039;VisualItem&#039;&#039; has got one or more associated &#039;&#039;Renderers&#039;&#039; which are maintained by a factory of the &#039;&#039;Visualization&#039;&#039;. A  &#039;&#039;Render&#039;&#039; has to perform two tasks:&lt;br /&gt;
&lt;br /&gt;
* Providing a bounding box of the item. This box is used to determine if the item must actually be painted or if it would not be visible anyway. &lt;br /&gt;
* Providing the painting routine of the item. Paintings may be executed by the &#039;&#039;Renderer&#039;&#039; itself or delegated to other objects which are accessible of the &#039;&#039;Renderer&#039;&#039;. The painting routines are not restricted in any way, but they representation should not exceed the bounding box of the item. &lt;br /&gt;
&lt;br /&gt;
Rendering is always performed on a repaint of the &#039;&#039;Display&#039;&#039;. A repaint can be requested by the &#039;&#039;Visualization&#039;&#039;, on user interaction, and on events like resizing the component, getting the focus, or changing the coordinate system of the view. However, as repaints may occur very often, developers have to ascertain that rendering jobs can are performed fast, otherwise, the performance of the whole visualization would suffer.&lt;br /&gt;
&lt;br /&gt;
=Details=&lt;br /&gt;
&lt;br /&gt;
==Package Structure==&lt;br /&gt;
&lt;br /&gt;
Following picture shows the most important packages of &#039;&#039;&#039;prefuse&#039;&#039;&#039; regarding to the [[Visualization Pipeline]]:&lt;br /&gt;
&lt;br /&gt;
[[Image:prefuse_package_guide.gif|600px]]&lt;br /&gt;
&lt;br /&gt;
These packages also contain predefined components. A default nodes and edges provide standard functionality of abstract data, standard functionality is also available in visual analogous of them. A default filter transforms all defined abstract entities to visual ones. Further, also some special functionality for common requirements are provided by own components. &lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Renderers&#039;&#039;&#039;: &#039;&#039;EdgeRenderer&#039;&#039; to render edges between graph or tree nodes, a &#039;&#039;LableRenderer&#039;&#039; to render test items, and a &#039;&#039;PolygoneRenderer&#039;&#039; to render geometrical items. &lt;br /&gt;
* &#039;&#039;&#039;Layouts&#039;&#039;&#039;: &#039;&#039;RandomLayout&#039;&#039;, &#039;&#039;GridLayout&#039;&#039;, and some more to place non related data, &#039;&#039;ForceDirectedLayout&#039;&#039;, &#039;&#039;TreeLayout&#039;&#039;, &#039;&#039;RadialTreeLayout&#039;&#039; and others to render trees and graphs.&lt;br /&gt;
* &#039;&#039;&#039;Controls&#039;&#039;&#039;: &#039;&#039;DragControl&#039;&#039;, &#039;&#039;ZoomControl&#039;&#039;, &#039;&#039;PanControl&#039;&#039;, &#039;&#039;ToolTipControl&#039;&#039; and several others to react on user interactions. &lt;br /&gt;
&lt;br /&gt;
In simple visualizations the predefined functionality will meet most requirements. If special requirements are needed the default functionality supports a step-wise developing as results can be communicated by these components until the own functionality is implemented.&lt;br /&gt;
&lt;br /&gt;
==Coordinates in prefuse==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;prefuse&#039;&#039;&#039; works with two different coordinate systems. Absolute coordinates are device-independent logical coordinates. All visual attributes like positions or sizes are defined in absolute coordinates. In contrast, view coordinates are device-depended (screen). Transformations between absolute and view coordinates are done automatically by Java painting routines. View coordinates are influenced by the system and device driver (e.g., the absolute point (0,0) is the topmost left point of the actual graphical component which may be on any position at the screen). Further, view coordinates may also be manipulated manually by using an affine transformation matrix which applies linear transformations on absolute coordinates before device-dependent routines convert them to screen coordinates. &lt;br /&gt;
&lt;br /&gt;
A &#039;&#039;&#039;prefuse&#039;&#039;&#039; &#039;&#039;Display&#039;&#039; provides the most important manipulating methods of this matrix. [[Zoom]]ing, [[pan]]ning, and rotation of the whole view are only done by changing the view coordinates. So, as absolute coordinates are never concerned of such transformations and translations, a user must never consider the actual view in layout, assignment, or painting routines. &lt;br /&gt;
&lt;br /&gt;
There are several different ways on how to apply such transformations, additionally, the &#039;&#039;Display&#039;&#039; also supports animated transformations. &lt;br /&gt;
&lt;br /&gt;
==User Interactions==&lt;br /&gt;
&lt;br /&gt;
Mouse or keyboard events are treated by using &#039;&#039;ControlListener&#039;&#039;. Whenever an event occurs which is handled by a &#039;&#039;ControlListener&#039;&#039;, the &#039;&#039;Display&#039;&#039; delegates the event to the respective routine. A &#039;&#039;ControlListener&#039;&#039; differs automatically which visual element is concerned of the event (the view itself or a &#039;&#039;VisualItem&#039;&#039; on the view). &lt;br /&gt;
&lt;br /&gt;
A &#039;&#039;ControlListener&#039;&#039; may just perform simple task like changing the mouse cursor or editing the label of an item. But, in more sophisticated applications, also task like loading new data or dragging items on the view may also be handled. Therefore, a &#039;&#039;ControlListener&#039;&#039; may also work with &#039;&#039;ActionLists&#039;&#039; to execute such tasks. Further, a &#039;&#039;ControlListener&#039;&#039; has also access to the &#039;&#039;Display&#039;&#039; to call methods like zooming or panning. Typically, each &#039;&#039;ControlListener&#039;&#039; forces a repaint when its job is done.  &lt;br /&gt;
&lt;br /&gt;
Most of standard functionality is already predefined in &#039;&#039;prefuse&#039;&#039; and the wanted listeners just have to be set to the &#039;&#039;Display&#039;&#039;. However, the &#039;&#039;Display&#039;&#039; can handle a countless of different listener. Hence, typically only a few listeners must be defined manually as they can be mixed with default ones.  &lt;br /&gt;
&lt;br /&gt;
=Conclusion=&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;prefuse&#039;&#039;&#039; is a very powerful toolkit, providing a large set of components and methods a developer needs to build an [[Information Visualization]]. The [[polylithic design]] is not that easy to understand in the beginning of a development, but once conceived, a visualization is easy to realize even if really special demands have to be fulfilled. Furthermore, using Prefuse forces a clear and well designed architecture of own applications.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;prefuse&#039;&#039;&#039; was created with most attention paid to developers who will finally work with the toolkit. In an evaluation study this goal was approved too. In the meanwhile, there is also a not so small community using and upgrading the toolkit, which is an argue for its usability.&lt;br /&gt;
&lt;br /&gt;
= External links =&lt;br /&gt;
*[http://prefuse.org prefuse Homepage]&lt;br /&gt;
*[http://vw.indiana.edu/ivsi2004/jherr/index.html prefuse Position Paper]&lt;br /&gt;
*[http://sourceforge.net/forum/forum.php?forum_id=343013 prefuse Help Forum]&lt;br /&gt;
&lt;br /&gt;
= References =&lt;br /&gt;
*[Heer, 2004] Jeffrey Heer. [http://jheer.org/publications/2004-Heer-prefuse-Masters.pdf prefuse: a software framework for interactive information visualization]. Masters of Science, Computer Science Division, University of California, Berkeley, 2004.&lt;br /&gt;
*[Heer, 2005] Jeffrey Heer, Stuart K. Card, and James A. Landay. [http://jheer.org/publications/2005-prefuse-CHI.pdf prefuse: a toolkit for interactive information visualization. In &#039;&#039;CHI 2005, Human Factors in Computing Systems&#039;&#039;], 2005.&lt;br /&gt;
*[Heer, 2006a] Jeffrey Heer, prefuse API documentation, Retrieved at: July 06, 2006, http://prefuse.org&lt;br /&gt;
*[Heer, 2006b] Jeffrey Heer, prefuse manual, Retrieved at: July 06, 2006, http://prefuse.org&lt;br /&gt;
*[Sun Microsystems, 2001] Sun Microsystems, Programmer’s Guide to the Java 2DTM API - Enhanced Graphics and Imaging for Java, Retrieved at: April 20, 2006, http://java.sun.com/j2se/1.4/pdf/j2d-book.pdf&lt;br /&gt;
&lt;br /&gt;
[[Category:Toolkits]]&lt;/div&gt;</summary>
		<author><name>Anfe</name></author>
	</entry>
	<entry>
		<id>https://infovis-wiki.net/w/index.php?title=Prefuse&amp;diff=10123</id>
		<title>Prefuse</title>
		<link rel="alternate" type="text/html" href="https://infovis-wiki.net/w/index.php?title=Prefuse&amp;diff=10123"/>
		<updated>2006-07-06T08:55:12Z</updated>

		<summary type="html">&lt;p&gt;Anfe: /* Summary */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Summary =&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Author&#039;&#039;&#039;: Jeffrey Heer / UC Berkeley&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Project Webpage&#039;&#039;&#039;: http://prefuse.org&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Current Version&#039;&#039;&#039;: beta, June 15, 2006&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Requirements&#039;&#039;&#039;: Java 1.4&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Overview:&#039;&#039;&#039; using Java2D graphics library; pipeline architecture; animation and rendering support&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Base data structures&#039;&#039;&#039;: Table, Graph, Tree&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Included visualization techniques:&#039;&#039;&#039; [http://www.cs.umd.edu/hcil/fisheyemenu/ Fisheye Menu], [http://prefuse.sourceforge.net/demos-radial.html Radial Graph], [http://www.cs.umd.edu/hcil/treemap/ Treemap], [http://prefuse.sourceforge.net/demos-distortion.html F+C Distortion]&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Supported File Formats&#039;&#039;&#039;: XGMML (XML), TreeML (XML), tab-delimited text, HDir&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;prefuse&#039;&#039;&#039; is an interactive graphical open source toolkit written in Java. It is thought to support the development of sophisticated, highly interactive, and flexible [[Information Visualization]]s. The architecture of &#039;&#039;&#039;prefuse&#039;&#039;&#039; considers the [[Visualization Pipeline]], a recommendation on how to implement a visualization. To provide flexibility, a [[polylithic design]] was chosen which enables developers to implement only needed functionality and customize these to meet the own requirements. But, in contrast to a [[monolithic design]], this design needs more time to conceive and influences the architecture of the own application heavily (which is not a disadvantage as &#039;&#039;&#039;prefuse&#039;&#039;&#039; is very elaborate). &lt;br /&gt;
&lt;br /&gt;
Typically, &#039;&#039;&#039;prefuse&#039;&#039;&#039; is designed to visualize interrelated information so it can be stored in a graph or tree structure, but, also not related data can be used which is stored within a data-table. Even though the structure is hierarchical, the resulting tree or graph structure must not be considered in the proper graphical representation as layout algorithms are not restricted in any way. The painting of visual items is done by using a renderer which has access to the respective item itself and the Graphics2D context of the view. This approach enables to use the whole range of available painting methods of Java, therefore, all painting issues are completely independent of the toolkit itself.&lt;br /&gt;
&lt;br /&gt;
Besides providing a large set of predefined elements to visualize data, most attention was set toward usability of the visualization. This is obtained by applying several interaction techniques like tooltips or dragging visual elements. But also more sophisticated techniques like [[zoom]]ing, [[pan]]ning, or [[semantic zoom]]ing are supported or partially even provided by the toolkit itself. Further, &#039;&#039;&#039;prefuse&#039;&#039;&#039; clearly distinguishes between absolute and view coordinates. This separation helps users to place all visual elements in a logical way without consideration of later applied visualization techniques that changes the entire view.  &lt;br /&gt;
&lt;br /&gt;
=== Pros ===&lt;br /&gt;
&lt;br /&gt;
* flexible&lt;br /&gt;
* versatile pipeline approach&lt;br /&gt;
* clear and well thought architecture&lt;br /&gt;
* many layout and distortion algorithms included&lt;br /&gt;
* algorithms for force-based physics simulation included&lt;br /&gt;
* custom animations (smooth transitions)&lt;br /&gt;
* color maps&lt;br /&gt;
* query language to navigate within abstract data&lt;br /&gt;
* demos and examples included&lt;br /&gt;
* bounding management&lt;br /&gt;
* open source&lt;br /&gt;
* documentation of code and general guidance available&lt;br /&gt;
* active developer community &lt;br /&gt;
&lt;br /&gt;
=== Cons ===&lt;br /&gt;
&lt;br /&gt;
* [[polylithic design]] takes up more time to conceive and see first results&lt;br /&gt;
* special requirements of a visualization enforce a lot of adapting work&lt;br /&gt;
&lt;br /&gt;
=General Approach=&lt;br /&gt;
&lt;br /&gt;
Going along with the step-wise recommendation of the [[Visualization Pipeline]], a &#039;&#039;&#039;prefuse&#039;&#039;&#039; application consists of different states of data:&lt;br /&gt;
&lt;br /&gt;
[[Image:prefuse_visualization_pipeline.gif|600px]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;prefuse&#039;&#039;&#039; uses a centralized object called &#039;&#039;Visualization&#039;&#039; (former &#039;&#039;ItemRegistry&#039;&#039;) which maintains and manages the whole visualization. This object has to fulfil several tasks. It stores the abstract data as well as visual analogous of these in two different tables. All transformation routines like filtering or rendering are maintained and executed by the &#039;&#039;Visualization&#039;&#039; too. Further, it maintains at least one &#039;&#039;Display&#039;&#039;, a graphical component which can represent visual data of &#039;&#039;&#039;prefuse&#039;&#039;&#039;. &lt;br /&gt;
&lt;br /&gt;
Transformation routines are defined as &#039;&#039;Actions&#039;&#039; which are combined in &#039;&#039;ActionLists&#039;&#039;. An &#039;&#039;ActionList&#039;&#039; is an executable container which is started of the &#039;&#039;Visualization&#039;&#039; whenever necessary. Once it is started, all defined &#039;&#039;Actions&#039;&#039; are executed in the given sequence. Typically, the last called &#039;&#039;Action&#039;&#039; is the &#039;&#039;RepaintAction&#039;&#039; which forces all defined &#039;&#039;Displays&#039;&#039; to perform a repaint. &lt;br /&gt;
&lt;br /&gt;
A &#039;&#039;Display&#039;&#039; is the view of &#039;&#039;&#039;prefuse&#039;&#039;&#039;. It can be embedded in each Java Swing application. The main task of a &#039;&#039;Display&#039;&#039; is the painting of visual structures which are defined in the respective &#039;&#039;Visualization&#039;&#039;. Whenever the &#039;&#039;Display&#039;&#039; performs a repaint it requests all visual items and checks all bounds of them (bounding management). If an item is within the own area the respective rendering mechanism is called.  &lt;br /&gt;
&lt;br /&gt;
Another important task of the &#039;&#039;Display&#039;&#039; is the providing of navigation techniques like [[zoom]]ing or [[pan]]ning. The entire view is managed by an own view coordinate system which is described with an affine transformation matrix. The most important functionality to work with this coordinate system is already predefined. &lt;br /&gt;
&lt;br /&gt;
Furthermore, a &#039;&#039;Display&#039;&#039; also maintains a set of &#039;&#039;ControlListener&#039;&#039; which are used to process user interactions (mouse or keyboard events). Whenever such an event occurs the respective listener is called. This listener already differs on where the event happened (e.g., blank area or a certain item). Further, a &#039;&#039;ControlListener&#039;&#039; may also start an &#039;&#039;ActionList&#039;&#039; again.&lt;br /&gt;
&lt;br /&gt;
==Source Data==&lt;br /&gt;
&lt;br /&gt;
Raw data is the base of the application. Typically, the source of raw data is a file, but also other sources like a database are thinkable. However, &#039;&#039;&#039;prefuse&#039;&#039;&#039; provides several file readers for different formats (CSV, Tab-Delimitated, etc.) that can be transformed into a data table. Further, some readers also support the reading of SQL-Database. If another source is needed, a reader can be written manually.&lt;br /&gt;
&lt;br /&gt;
Once the raw data is read, it is transformed into abstract data and stored within a data table.&lt;br /&gt;
&lt;br /&gt;
==Data Table==&lt;br /&gt;
&lt;br /&gt;
The data table which is used to store abstract data works with data types and a definition schema which maps relations between data type and table. That means, each row contains a data record, and each column contains data values for a named data field with a specific data type. Each record of the table is referred as a &#039;&#039;Tuple&#039;&#039;. &lt;br /&gt;
&lt;br /&gt;
Furthermore, instead of the table itself, a graph or tree may be used to store interrelated data. Instead of &#039;&#039;Tuples&#039;&#039;, records are referred as &#039;&#039;Nodes&#039;&#039; which are connected to others with &#039;&#039;Edges&#039;&#039;. Additionally, a tree has one defined root &#039;&#039;Node&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Abstract data does not contain any visual information like assignment attributes or color settings. Instead, visual attributes are extracted out of the abstract data following a defined logic.&lt;br /&gt;
&lt;br /&gt;
==Visual Abstraction==&lt;br /&gt;
&lt;br /&gt;
Visual structures are created when filtering the data container which contains abstract data. In case of a visualization that displays all items from the beginning on, the filtering routine must only executed once at initializing time. If the visual content changes dynamically, the filtering is executed on certain user interactions by calling a defined filtering &#039;&#039;ActionList&#039;&#039;. &lt;br /&gt;
&lt;br /&gt;
A visual structure is referred as &#039;&#039;VisualItem&#039;&#039; which may distinguished as &#039;&#039;VisualNode&#039;&#039;, &#039;&#039;VisualEdge&#039;&#039;, or an aggregated item which consists of several other items. However, as a &#039;&#039;VisualItem&#039;&#039; is extended of the respective abstract entity it has full access to all abstract information too. &lt;br /&gt;
&lt;br /&gt;
The filtering routine which transforms the abstract data to visual analogues typically consists of following &#039;&#039;Actions&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Filter&#039;&#039;&#039;: This &#039;&#039;Action&#039;&#039; is responsible to transform the abstract data of the backing table to visual analogues. If no special conditions are defined, the filter creates for each &#039;&#039;Tuple&#039;&#039; a visual instance and stores them in a second table. Additionally, a filter also performs a garbage collection and may set visibility attributes of the created items. &lt;br /&gt;
* &#039;&#039;&#039;Layout&#039;&#039;&#039;: A layout takes care about placing the &#039;&#039;VisualItems&#039;&#039;. Several common algorithms for graphs or trees are already predefined (e.g., &#039;&#039;ForceDirectedLayout&#039;&#039; or &#039;&#039;RadialTreeLayout&#039;&#039;). &lt;br /&gt;
* &#039;&#039;&#039;Assignment&#039;&#039;&#039;: Besides layouting, also other assignments may be performed during the filtering process. Such assignments directly changes visual attributes of &#039;&#039;VisualItems&#039;&#039; like color, sizes, fonts, etc.&lt;br /&gt;
&lt;br /&gt;
A visual structure may also contain a paint routine, but, as all painting jobs are initialized or performed by separated renderers, these issues may also be executed by the renderer itself or any other object.&lt;br /&gt;
&lt;br /&gt;
==View==&lt;br /&gt;
&lt;br /&gt;
Typically, the rendered visual structure is not stored, instead, they are re-rendered whenever needed. However, in case of very complex but constant visual representations it makes sense to hold items in an offscreen image. &lt;br /&gt;
&lt;br /&gt;
Each &#039;&#039;VisualItem&#039;&#039; has got one or more associated &#039;&#039;Renderers&#039;&#039; which are maintained by a factory of the &#039;&#039;Visualization&#039;&#039;. A  &#039;&#039;Render&#039;&#039; has to perform two tasks:&lt;br /&gt;
&lt;br /&gt;
* Providing a bounding box of the item. This box is used to determine if the item must actually be painted or if it would not be visible anyway. &lt;br /&gt;
* Providing the painting routine of the item. Paintings may be executed by the &#039;&#039;Renderer&#039;&#039; itself or delegated to other objects which are accessible of the &#039;&#039;Renderer&#039;&#039;. The painting routines are not restricted in any way, but they representation should not exceed the bounding box of the item. &lt;br /&gt;
&lt;br /&gt;
Rendering is always performed on a repaint of the &#039;&#039;Display&#039;&#039;. A repaint can be requested by the &#039;&#039;Visualization&#039;&#039;, on user interaction, and on events like resizing the component, getting the focus, or changing the coordinate system of the view. However, as repaints may occur very often, developers have to ascertain that rendering jobs can are performed fast, otherwise, the performance of the whole visualization would suffer.&lt;br /&gt;
&lt;br /&gt;
=Details=&lt;br /&gt;
&lt;br /&gt;
==Package Structure==&lt;br /&gt;
&lt;br /&gt;
Following picture shows the most important packages of &#039;&#039;&#039;prefuse&#039;&#039;&#039; regarding to the [[Visualization Pipeline]]:&lt;br /&gt;
&lt;br /&gt;
[[Image:prefuse_package_guide.gif|600px]]&lt;br /&gt;
&lt;br /&gt;
These packages also contain predefined components. A default nodes and edges provide standard functionality of abstract data, standard functionality is also available in visual analogous of them. A default filter transforms all defined abstract entities to visual ones. Further, also some special functionality for common requirements are provided by own components. &lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Renderers&#039;&#039;&#039;: &#039;&#039;EdgeRenderer&#039;&#039; to render edges between graph or tree nodes, a &#039;&#039;LableRenderer&#039;&#039; to render test items, and a &#039;&#039;PolygoneRenderer&#039;&#039; to render geometrical items. &lt;br /&gt;
* &#039;&#039;&#039;Layouts&#039;&#039;&#039;: &#039;&#039;RandomLayout&#039;&#039;, &#039;&#039;GridLayout&#039;&#039;, and some more to place non related data, &#039;&#039;ForceDirectedLayout&#039;&#039;, &#039;&#039;TreeLayout&#039;&#039;, &#039;&#039;RadialTreeLayout&#039;&#039; and others to render trees and graphs.&lt;br /&gt;
* &#039;&#039;&#039;Controls&#039;&#039;&#039;: &#039;&#039;DragControl&#039;&#039;, &#039;&#039;ZoomControl&#039;&#039;, &#039;&#039;PanControl&#039;&#039;, &#039;&#039;ToolTipControl&#039;&#039; and several others to react on user interactions. &lt;br /&gt;
&lt;br /&gt;
In simple visualizations the predefined functionality will meet most requirements. If special requirements are needed the default functionality supports a step-wise developing as results can be communicated by these components until the own functionality is implemented.&lt;br /&gt;
&lt;br /&gt;
==Coordinates in prefuse==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;prefuse&#039;&#039;&#039; works with two different coordinate systems. Absolute coordinates are device-independent logical coordinates. All visual attributes like positions or sizes are defined in absolute coordinates. In contrast, view coordinates are device-depended (screen). Transformations between absolute and view coordinates are done automatically by Java painting routines. View coordinates are influenced by the system and device driver (e.g., the absolute point (0,0) is the topmost left point of the actual graphical component which may be on any position at the screen). Further, view coordinates may also be manipulated manually by using an affine transformation matrix which applies linear transformations on absolute coordinates before device-dependent routines convert them to screen coordinates. &lt;br /&gt;
&lt;br /&gt;
A &#039;&#039;&#039;prefuse&#039;&#039;&#039; &#039;&#039;Display&#039;&#039; provides the most important manipulating methods of this matrix. [[Zoom]]ing, [[pan]]ning, and rotation of the whole view are only done by changing the view coordinates. So, as absolute coordinates are never concerned of such transformations and translations, a user must never consider the actual view in layout, assignment, or painting routines. &lt;br /&gt;
&lt;br /&gt;
There are several different ways on how to apply such transformations, additionally, the &#039;&#039;Display&#039;&#039; also supports animated transformations. &lt;br /&gt;
&lt;br /&gt;
==User Interactions==&lt;br /&gt;
&lt;br /&gt;
Mouse or keyboard events are treated by using &#039;&#039;ControlListener&#039;&#039;. Whenever an event occurs which is handled by a &#039;&#039;ControlListener&#039;&#039;, the &#039;&#039;Display&#039;&#039; delegates the event to the respective routine. A &#039;&#039;ControlListener&#039;&#039; differs automatically which visual element is concerned of the event (the view itself or a &#039;&#039;VisualItem&#039;&#039; on the view). &lt;br /&gt;
&lt;br /&gt;
A &#039;&#039;ControlListener&#039;&#039; may just perform simple task like changing the mouse cursor or editing the label of an item. But, in more sophisticated applications, also task like loading new data or dragging items on the view may also be handled. Therefore, a &#039;&#039;ControlListener&#039;&#039; may also work with &#039;&#039;ActionLists&#039;&#039; to execute such tasks. Further, a &#039;&#039;ControlListener&#039;&#039; has also access to the &#039;&#039;Display&#039;&#039; to call methods like zooming or panning. Typically, each &#039;&#039;ControlListener&#039;&#039; forces a repaint when its job is done.  &lt;br /&gt;
&lt;br /&gt;
Most of standard functionality is already predefined in &#039;&#039;prefuse&#039;&#039; and the wanted listeners just have to be set to the &#039;&#039;Display&#039;&#039;. However, the &#039;&#039;Display&#039;&#039; can handle a countless of different listener. Hence, typically only a few listeners must be defined manually as they can be mixed with default ones.  &lt;br /&gt;
&lt;br /&gt;
=Conclusion=&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;prefuse&#039;&#039;&#039; is a very powerful toolkit, providing a large set of components and methods a developer needs to build an [[Information Visualization]]. The [[polylithic design]] is not that easy to understand in the beginning of a development, but once conceived, a visualization is easy to realize even if really special demands have to be fulfilled. Furthermore, using Prefuse forces a clear and well designed architecture of own applications.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;prefuse&#039;&#039;&#039; was created with most attention paid to developers who will finally work with the toolkit. In an evaluation study this goal was approved too. In the meanwhile, there is also a not so small community using and upgrading the toolkit, which is an argue for its usability.&lt;br /&gt;
&lt;br /&gt;
= External links =&lt;br /&gt;
*[http://prefuse.org prefuse Homepage]&lt;br /&gt;
*[http://vw.indiana.edu/ivsi2004/jherr/index.html prefuse Position Paper]&lt;br /&gt;
*[http://sourceforge.net/forum/forum.php?forum_id=343013 prefuse Help Forum]&lt;br /&gt;
&lt;br /&gt;
= References =&lt;br /&gt;
*[Heer, 2004] Jeffrey Heer. [http://jheer.org/publications/2004-Heer-prefuse-Masters.pdf prefuse: a software framework for interactive information visualization]. Masters of Science, Computer Science Division, University of California, Berkeley, 2004.&lt;br /&gt;
*[Heer, 2005] Jeffrey Heer, Stuart K. Card, and James A. Landay. [http://jheer.org/publications/2005-prefuse-CHI.pdf prefuse: a toolkit for interactive information visualization. In &#039;&#039;CHI 2005, Human Factors in Computing Systems&#039;&#039;], 2005.&lt;br /&gt;
*[Heer, 2006a] Jeffrey Heer, prefuse API documentation, Retrieved at: July 06, 2006, http://prefuse.org&lt;br /&gt;
*[Heer, 2006b] Jeffrey Heer, prefuse manual, Retrieved at: July 06, 2006, http://prefuse.org&lt;br /&gt;
*[Sun Microsystems, 2001] Sun Microsystems, Programmer’s Guide to the Java 2DTM API - Enhanced Graphics and Imaging for Java, Retrieved at: April 20, 2006, http://java.sun.com/j2se/1.4/pdf/j2d-book.pdf&lt;br /&gt;
&lt;br /&gt;
[[Category:Toolkits]]&lt;/div&gt;</summary>
		<author><name>Anfe</name></author>
	</entry>
	<entry>
		<id>https://infovis-wiki.net/w/index.php?title=Prefuse&amp;diff=10122</id>
		<title>Prefuse</title>
		<link rel="alternate" type="text/html" href="https://infovis-wiki.net/w/index.php?title=Prefuse&amp;diff=10122"/>
		<updated>2006-07-06T08:53:32Z</updated>

		<summary type="html">&lt;p&gt;Anfe: /* Summary */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Summary =&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Author&#039;&#039;&#039;: Jeffrey Heer / UC Berkeley&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Project Webpage&#039;&#039;&#039;: http://prefuse.org&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Current Version&#039;&#039;&#039;: beta, June 15, 2006&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Requirements&#039;&#039;&#039;: Java 1.4&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Overview:&#039;&#039;&#039; using Java2D graphics library; pipeline architecture; animation and rendering support&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Base data structures&#039;&#039;&#039;: Table, Graph, Tree&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Included visualization techniques:&#039;&#039;&#039; [http://www.cs.umd.edu/hcil/fisheyemenu/ Fisheye Menu], [http://prefuse.sourceforge.net/demos-radial.html Radial Graph], [http://www.cs.umd.edu/hcil/treemap/ Treemap], [http://prefuse.sourceforge.net/demos-distortion.html F+C Distortion]&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Supported File Formats&#039;&#039;&#039;: XGMML (XML), TreeML (XML), tab-delimited text, HDir&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;prefuse&#039;&#039;&#039; is an interactive graphical open source toolkit written in Java. It is thought to support the development of sophisticated, highly interactive, and flexible [[Information Visualization]]s. The architecture of &#039;&#039;&#039;prefuse&#039;&#039;&#039; considers the [[Visualization Pipeline]], a recommendation on how to implement a visualization. To provide flexibility, a [[polylithic design]] was chosen which enables developers to implement only needed functionality and customize these to meet the own requirements. But, in contrast to a [[monolithic design]], this design needs more time to conceive and influences the architecture of the own application heavily (which is not a disadvantage as &#039;&#039;&#039;prefuse&#039;&#039;&#039; is very elaborate). &lt;br /&gt;
&lt;br /&gt;
Typically, &#039;&#039;&#039;prefuse&#039;&#039;&#039; is designed to visualize interrelated information so it can be stored in a graph or tree structure, but, also not related data can be used which is stored within a data-table. Even though the structure is hierarchical, the resulting relations must not be considered in the proper graphical representation as layout algorithms are not restricted in any way. The painting of visual items is done by using a renderer which has access to the respective item itself and the Graphics2D context of the view. This approach enables to use the whole range of available painting methods of Java, therefore, all painting issues are completely independent of the toolkit itself.&lt;br /&gt;
&lt;br /&gt;
Besides providing a large set of predefined elements to visualize data, most attention was set toward usability of the visualization. This is obtained by applying several interaction techniques like tooltips or dragging visual elements. But also more sophisticated techniques like [[zoom]]ing, [[pan]]ning, or [[semantic zoom]]ing are supported or partially even provided by the toolkit itself. Further, &#039;&#039;&#039;prefuse&#039;&#039;&#039; clearly distinguishes between absolute and view coordinates. This separation helps users to place all visual elements in a logical way without consideration of later applied visualization techniques that changes the entire view.  &lt;br /&gt;
&lt;br /&gt;
=== Pros ===&lt;br /&gt;
&lt;br /&gt;
* flexible&lt;br /&gt;
* versatile pipeline approach&lt;br /&gt;
* clear and well thought architecture&lt;br /&gt;
* many layout and distortion algorithms included&lt;br /&gt;
* algorithms for force-based physics simulation included&lt;br /&gt;
* custom animations (smooth transitions)&lt;br /&gt;
* color maps&lt;br /&gt;
* query language to navigate within abstract data&lt;br /&gt;
* demos and examples included&lt;br /&gt;
* bounding management&lt;br /&gt;
* open source&lt;br /&gt;
* documentation of code and general guidance available&lt;br /&gt;
* active developer community &lt;br /&gt;
&lt;br /&gt;
=== Cons ===&lt;br /&gt;
&lt;br /&gt;
* [[polylithic design]] takes up more time to conceive and see first results&lt;br /&gt;
* special requirements of a visualization enforce a lot of adapting work&lt;br /&gt;
&lt;br /&gt;
=General Approach=&lt;br /&gt;
&lt;br /&gt;
Going along with the step-wise recommendation of the [[Visualization Pipeline]], a &#039;&#039;&#039;prefuse&#039;&#039;&#039; application consists of different states of data:&lt;br /&gt;
&lt;br /&gt;
[[Image:prefuse_visualization_pipeline.gif|600px]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;prefuse&#039;&#039;&#039; uses a centralized object called &#039;&#039;Visualization&#039;&#039; (former &#039;&#039;ItemRegistry&#039;&#039;) which maintains and manages the whole visualization. This object has to fulfil several tasks. It stores the abstract data as well as visual analogous of these in two different tables. All transformation routines like filtering or rendering are maintained and executed by the &#039;&#039;Visualization&#039;&#039; too. Further, it maintains at least one &#039;&#039;Display&#039;&#039;, a graphical component which can represent visual data of &#039;&#039;&#039;prefuse&#039;&#039;&#039;. &lt;br /&gt;
&lt;br /&gt;
Transformation routines are defined as &#039;&#039;Actions&#039;&#039; which are combined in &#039;&#039;ActionLists&#039;&#039;. An &#039;&#039;ActionList&#039;&#039; is an executable container which is started of the &#039;&#039;Visualization&#039;&#039; whenever necessary. Once it is started, all defined &#039;&#039;Actions&#039;&#039; are executed in the given sequence. Typically, the last called &#039;&#039;Action&#039;&#039; is the &#039;&#039;RepaintAction&#039;&#039; which forces all defined &#039;&#039;Displays&#039;&#039; to perform a repaint. &lt;br /&gt;
&lt;br /&gt;
A &#039;&#039;Display&#039;&#039; is the view of &#039;&#039;&#039;prefuse&#039;&#039;&#039;. It can be embedded in each Java Swing application. The main task of a &#039;&#039;Display&#039;&#039; is the painting of visual structures which are defined in the respective &#039;&#039;Visualization&#039;&#039;. Whenever the &#039;&#039;Display&#039;&#039; performs a repaint it requests all visual items and checks all bounds of them (bounding management). If an item is within the own area the respective rendering mechanism is called.  &lt;br /&gt;
&lt;br /&gt;
Another important task of the &#039;&#039;Display&#039;&#039; is the providing of navigation techniques like [[zoom]]ing or [[pan]]ning. The entire view is managed by an own view coordinate system which is described with an affine transformation matrix. The most important functionality to work with this coordinate system is already predefined. &lt;br /&gt;
&lt;br /&gt;
Furthermore, a &#039;&#039;Display&#039;&#039; also maintains a set of &#039;&#039;ControlListener&#039;&#039; which are used to process user interactions (mouse or keyboard events). Whenever such an event occurs the respective listener is called. This listener already differs on where the event happened (e.g., blank area or a certain item). Further, a &#039;&#039;ControlListener&#039;&#039; may also start an &#039;&#039;ActionList&#039;&#039; again.&lt;br /&gt;
&lt;br /&gt;
==Source Data==&lt;br /&gt;
&lt;br /&gt;
Raw data is the base of the application. Typically, the source of raw data is a file, but also other sources like a database are thinkable. However, &#039;&#039;&#039;prefuse&#039;&#039;&#039; provides several file readers for different formats (CSV, Tab-Delimitated, etc.) that can be transformed into a data table. Further, some readers also support the reading of SQL-Database. If another source is needed, a reader can be written manually.&lt;br /&gt;
&lt;br /&gt;
Once the raw data is read, it is transformed into abstract data and stored within a data table.&lt;br /&gt;
&lt;br /&gt;
==Data Table==&lt;br /&gt;
&lt;br /&gt;
The data table which is used to store abstract data works with data types and a definition schema which maps relations between data type and table. That means, each row contains a data record, and each column contains data values for a named data field with a specific data type. Each record of the table is referred as a &#039;&#039;Tuple&#039;&#039;. &lt;br /&gt;
&lt;br /&gt;
Furthermore, instead of the table itself, a graph or tree may be used to store interrelated data. Instead of &#039;&#039;Tuples&#039;&#039;, records are referred as &#039;&#039;Nodes&#039;&#039; which are connected to others with &#039;&#039;Edges&#039;&#039;. Additionally, a tree has one defined root &#039;&#039;Node&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Abstract data does not contain any visual information like assignment attributes or color settings. Instead, visual attributes are extracted out of the abstract data following a defined logic.&lt;br /&gt;
&lt;br /&gt;
==Visual Abstraction==&lt;br /&gt;
&lt;br /&gt;
Visual structures are created when filtering the data container which contains abstract data. In case of a visualization that displays all items from the beginning on, the filtering routine must only executed once at initializing time. If the visual content changes dynamically, the filtering is executed on certain user interactions by calling a defined filtering &#039;&#039;ActionList&#039;&#039;. &lt;br /&gt;
&lt;br /&gt;
A visual structure is referred as &#039;&#039;VisualItem&#039;&#039; which may distinguished as &#039;&#039;VisualNode&#039;&#039;, &#039;&#039;VisualEdge&#039;&#039;, or an aggregated item which consists of several other items. However, as a &#039;&#039;VisualItem&#039;&#039; is extended of the respective abstract entity it has full access to all abstract information too. &lt;br /&gt;
&lt;br /&gt;
The filtering routine which transforms the abstract data to visual analogues typically consists of following &#039;&#039;Actions&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Filter&#039;&#039;&#039;: This &#039;&#039;Action&#039;&#039; is responsible to transform the abstract data of the backing table to visual analogues. If no special conditions are defined, the filter creates for each &#039;&#039;Tuple&#039;&#039; a visual instance and stores them in a second table. Additionally, a filter also performs a garbage collection and may set visibility attributes of the created items. &lt;br /&gt;
* &#039;&#039;&#039;Layout&#039;&#039;&#039;: A layout takes care about placing the &#039;&#039;VisualItems&#039;&#039;. Several common algorithms for graphs or trees are already predefined (e.g., &#039;&#039;ForceDirectedLayout&#039;&#039; or &#039;&#039;RadialTreeLayout&#039;&#039;). &lt;br /&gt;
* &#039;&#039;&#039;Assignment&#039;&#039;&#039;: Besides layouting, also other assignments may be performed during the filtering process. Such assignments directly changes visual attributes of &#039;&#039;VisualItems&#039;&#039; like color, sizes, fonts, etc.&lt;br /&gt;
&lt;br /&gt;
A visual structure may also contain a paint routine, but, as all painting jobs are initialized or performed by separated renderers, these issues may also be executed by the renderer itself or any other object.&lt;br /&gt;
&lt;br /&gt;
==View==&lt;br /&gt;
&lt;br /&gt;
Typically, the rendered visual structure is not stored, instead, they are re-rendered whenever needed. However, in case of very complex but constant visual representations it makes sense to hold items in an offscreen image. &lt;br /&gt;
&lt;br /&gt;
Each &#039;&#039;VisualItem&#039;&#039; has got one or more associated &#039;&#039;Renderers&#039;&#039; which are maintained by a factory of the &#039;&#039;Visualization&#039;&#039;. A  &#039;&#039;Render&#039;&#039; has to perform two tasks:&lt;br /&gt;
&lt;br /&gt;
* Providing a bounding box of the item. This box is used to determine if the item must actually be painted or if it would not be visible anyway. &lt;br /&gt;
* Providing the painting routine of the item. Paintings may be executed by the &#039;&#039;Renderer&#039;&#039; itself or delegated to other objects which are accessible of the &#039;&#039;Renderer&#039;&#039;. The painting routines are not restricted in any way, but they representation should not exceed the bounding box of the item. &lt;br /&gt;
&lt;br /&gt;
Rendering is always performed on a repaint of the &#039;&#039;Display&#039;&#039;. A repaint can be requested by the &#039;&#039;Visualization&#039;&#039;, on user interaction, and on events like resizing the component, getting the focus, or changing the coordinate system of the view. However, as repaints may occur very often, developers have to ascertain that rendering jobs can are performed fast, otherwise, the performance of the whole visualization would suffer.&lt;br /&gt;
&lt;br /&gt;
=Details=&lt;br /&gt;
&lt;br /&gt;
==Package Structure==&lt;br /&gt;
&lt;br /&gt;
Following picture shows the most important packages of &#039;&#039;&#039;prefuse&#039;&#039;&#039; regarding to the [[Visualization Pipeline]]:&lt;br /&gt;
&lt;br /&gt;
[[Image:prefuse_package_guide.gif|600px]]&lt;br /&gt;
&lt;br /&gt;
These packages also contain predefined components. A default nodes and edges provide standard functionality of abstract data, standard functionality is also available in visual analogous of them. A default filter transforms all defined abstract entities to visual ones. Further, also some special functionality for common requirements are provided by own components. &lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Renderers&#039;&#039;&#039;: &#039;&#039;EdgeRenderer&#039;&#039; to render edges between graph or tree nodes, a &#039;&#039;LableRenderer&#039;&#039; to render test items, and a &#039;&#039;PolygoneRenderer&#039;&#039; to render geometrical items. &lt;br /&gt;
* &#039;&#039;&#039;Layouts&#039;&#039;&#039;: &#039;&#039;RandomLayout&#039;&#039;, &#039;&#039;GridLayout&#039;&#039;, and some more to place non related data, &#039;&#039;ForceDirectedLayout&#039;&#039;, &#039;&#039;TreeLayout&#039;&#039;, &#039;&#039;RadialTreeLayout&#039;&#039; and others to render trees and graphs.&lt;br /&gt;
* &#039;&#039;&#039;Controls&#039;&#039;&#039;: &#039;&#039;DragControl&#039;&#039;, &#039;&#039;ZoomControl&#039;&#039;, &#039;&#039;PanControl&#039;&#039;, &#039;&#039;ToolTipControl&#039;&#039; and several others to react on user interactions. &lt;br /&gt;
&lt;br /&gt;
In simple visualizations the predefined functionality will meet most requirements. If special requirements are needed the default functionality supports a step-wise developing as results can be communicated by these components until the own functionality is implemented.&lt;br /&gt;
&lt;br /&gt;
==Coordinates in prefuse==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;prefuse&#039;&#039;&#039; works with two different coordinate systems. Absolute coordinates are device-independent logical coordinates. All visual attributes like positions or sizes are defined in absolute coordinates. In contrast, view coordinates are device-depended (screen). Transformations between absolute and view coordinates are done automatically by Java painting routines. View coordinates are influenced by the system and device driver (e.g., the absolute point (0,0) is the topmost left point of the actual graphical component which may be on any position at the screen). Further, view coordinates may also be manipulated manually by using an affine transformation matrix which applies linear transformations on absolute coordinates before device-dependent routines convert them to screen coordinates. &lt;br /&gt;
&lt;br /&gt;
A &#039;&#039;&#039;prefuse&#039;&#039;&#039; &#039;&#039;Display&#039;&#039; provides the most important manipulating methods of this matrix. [[Zoom]]ing, [[pan]]ning, and rotation of the whole view are only done by changing the view coordinates. So, as absolute coordinates are never concerned of such transformations and translations, a user must never consider the actual view in layout, assignment, or painting routines. &lt;br /&gt;
&lt;br /&gt;
There are several different ways on how to apply such transformations, additionally, the &#039;&#039;Display&#039;&#039; also supports animated transformations. &lt;br /&gt;
&lt;br /&gt;
==User Interactions==&lt;br /&gt;
&lt;br /&gt;
Mouse or keyboard events are treated by using &#039;&#039;ControlListener&#039;&#039;. Whenever an event occurs which is handled by a &#039;&#039;ControlListener&#039;&#039;, the &#039;&#039;Display&#039;&#039; delegates the event to the respective routine. A &#039;&#039;ControlListener&#039;&#039; differs automatically which visual element is concerned of the event (the view itself or a &#039;&#039;VisualItem&#039;&#039; on the view). &lt;br /&gt;
&lt;br /&gt;
A &#039;&#039;ControlListener&#039;&#039; may just perform simple task like changing the mouse cursor or editing the label of an item. But, in more sophisticated applications, also task like loading new data or dragging items on the view may also be handled. Therefore, a &#039;&#039;ControlListener&#039;&#039; may also work with &#039;&#039;ActionLists&#039;&#039; to execute such tasks. Further, a &#039;&#039;ControlListener&#039;&#039; has also access to the &#039;&#039;Display&#039;&#039; to call methods like zooming or panning. Typically, each &#039;&#039;ControlListener&#039;&#039; forces a repaint when its job is done.  &lt;br /&gt;
&lt;br /&gt;
Most of standard functionality is already predefined in &#039;&#039;prefuse&#039;&#039; and the wanted listeners just have to be set to the &#039;&#039;Display&#039;&#039;. However, the &#039;&#039;Display&#039;&#039; can handle a countless of different listener. Hence, typically only a few listeners must be defined manually as they can be mixed with default ones.  &lt;br /&gt;
&lt;br /&gt;
=Conclusion=&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;prefuse&#039;&#039;&#039; is a very powerful toolkit, providing a large set of components and methods a developer needs to build an [[Information Visualization]]. The [[polylithic design]] is not that easy to understand in the beginning of a development, but once conceived, a visualization is easy to realize even if really special demands have to be fulfilled. Furthermore, using Prefuse forces a clear and well designed architecture of own applications.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;prefuse&#039;&#039;&#039; was created with most attention paid to developers who will finally work with the toolkit. In an evaluation study this goal was approved too. In the meanwhile, there is also a not so small community using and upgrading the toolkit, which is an argue for its usability.&lt;br /&gt;
&lt;br /&gt;
= External links =&lt;br /&gt;
*[http://prefuse.org prefuse Homepage]&lt;br /&gt;
*[http://vw.indiana.edu/ivsi2004/jherr/index.html prefuse Position Paper]&lt;br /&gt;
*[http://sourceforge.net/forum/forum.php?forum_id=343013 prefuse Help Forum]&lt;br /&gt;
&lt;br /&gt;
= References =&lt;br /&gt;
*[Heer, 2004] Jeffrey Heer. [http://jheer.org/publications/2004-Heer-prefuse-Masters.pdf prefuse: a software framework for interactive information visualization]. Masters of Science, Computer Science Division, University of California, Berkeley, 2004.&lt;br /&gt;
*[Heer, 2005] Jeffrey Heer, Stuart K. Card, and James A. Landay. [http://jheer.org/publications/2005-prefuse-CHI.pdf prefuse: a toolkit for interactive information visualization. In &#039;&#039;CHI 2005, Human Factors in Computing Systems&#039;&#039;], 2005.&lt;br /&gt;
*[Heer, 2006a] Jeffrey Heer, prefuse API documentation, Retrieved at: July 06, 2006, http://prefuse.org&lt;br /&gt;
*[Heer, 2006b] Jeffrey Heer, prefuse manual, Retrieved at: July 06, 2006, http://prefuse.org&lt;br /&gt;
*[Sun Microsystems, 2001] Sun Microsystems, Programmer’s Guide to the Java 2DTM API - Enhanced Graphics and Imaging for Java, Retrieved at: April 20, 2006, http://java.sun.com/j2se/1.4/pdf/j2d-book.pdf&lt;br /&gt;
&lt;br /&gt;
[[Category:Toolkits]]&lt;/div&gt;</summary>
		<author><name>Anfe</name></author>
	</entry>
	<entry>
		<id>https://infovis-wiki.net/w/index.php?title=Prefuse&amp;diff=10121</id>
		<title>Prefuse</title>
		<link rel="alternate" type="text/html" href="https://infovis-wiki.net/w/index.php?title=Prefuse&amp;diff=10121"/>
		<updated>2006-07-06T08:52:14Z</updated>

		<summary type="html">&lt;p&gt;Anfe: /* Summary */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Summary =&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Author&#039;&#039;&#039;: Jeffrey Heer / UC Berkeley&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Project Webpage&#039;&#039;&#039;: http://prefuse.org&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Current Version&#039;&#039;&#039;: beta, June 15, 2006&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Requirements&#039;&#039;&#039;: Java 1.4&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Overview:&#039;&#039;&#039; using Java2D graphics library; pipeline architecture; animation and rendering support&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Base data structures&#039;&#039;&#039;: Table, Graph, Tree&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Included visualization techniques:&#039;&#039;&#039; [http://www.cs.umd.edu/hcil/fisheyemenu/ Fisheye Menu], [http://prefuse.sourceforge.net/demos-radial.html Radial Graph], [http://www.cs.umd.edu/hcil/treemap/ Treemap], [http://prefuse.sourceforge.net/demos-distortion.html F+C Distortion]&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Supported File Formats&#039;&#039;&#039;: XGMML (XML), TreeML (XML), tab-delimited text, HDir&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;prefuse&#039;&#039;&#039; is an interactive graphical open source toolkit written in Java. It is thought to support the development of sophisticated, highly interactive, and flexible [[Information Visualization]]s. The architecture of &#039;&#039;&#039;prefuse&#039;&#039;&#039; considers the [[Visualization Pipeline]], a recommendation on how to implement a visualization. To provide flexibility, a [[polylithic design]] was chosen which enables developers to implement only needed functionality and customize these to meet the own requirements. But, in contrast to a [[monolithic design]], this design needs more time to conceive and influences the architecture of the own application heavily (which is not a disadvantage as &#039;&#039;&#039;prefuse&#039;&#039;&#039; is very elaborate). &lt;br /&gt;
&lt;br /&gt;
Typically, &#039;&#039;&#039;prefuse&#039;&#039;&#039; is designed to visualize interrelated information so it can be stored in a graph or tree structure, but, also not related data can be used which is stored within a data-table. Even though the structure is hierarchical, the resulting relations must not be considered in the proper graphical representation as layout algorithms are not restricted in any way. The painting of visual items is done by using a renderer which has access to the respective item itself and the Graphics2D context of the view. This approach enables to use the whole range of available painting methods of Java, therefore, the visual representation is completely independent of the toolkit itself.&lt;br /&gt;
&lt;br /&gt;
Besides providing a large set of predefined elements to visualize data, most attention was set toward usability of the visualization. This is obtained by applying several interaction techniques like tooltips or dragging visual elements. But also more sophisticated techniques like [[zoom]]ing, [[pan]]ning, or [[semantic zoom]]ing are supported or partially even provided by the toolkit itself. Further, &#039;&#039;&#039;prefuse&#039;&#039;&#039; clearly distinguishes between absolute and view coordinates. This separation helps users to place all visual elements in a logical way without consideration of later applied visualization techniques that changes the entire view.  &lt;br /&gt;
&lt;br /&gt;
=== Pros ===&lt;br /&gt;
&lt;br /&gt;
* flexible&lt;br /&gt;
* versatile pipeline approach&lt;br /&gt;
* clear and well thought architecture&lt;br /&gt;
* many layout and distortion algorithms included&lt;br /&gt;
* algorithms for force-based physics simulation included&lt;br /&gt;
* custom animations (smooth transitions)&lt;br /&gt;
* color maps&lt;br /&gt;
* query language to navigate within abstract data&lt;br /&gt;
* demos and examples included&lt;br /&gt;
* bounding management&lt;br /&gt;
* open source&lt;br /&gt;
* documentation of code and general guidance available&lt;br /&gt;
* active developer community &lt;br /&gt;
&lt;br /&gt;
=== Cons ===&lt;br /&gt;
&lt;br /&gt;
* [[polylithic design]] takes up more time to conceive and see first results&lt;br /&gt;
* special requirements of a visualization enforce a lot of adapting work&lt;br /&gt;
&lt;br /&gt;
=General Approach=&lt;br /&gt;
&lt;br /&gt;
Going along with the step-wise recommendation of the [[Visualization Pipeline]], a &#039;&#039;&#039;prefuse&#039;&#039;&#039; application consists of different states of data:&lt;br /&gt;
&lt;br /&gt;
[[Image:prefuse_visualization_pipeline.gif|600px]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;prefuse&#039;&#039;&#039; uses a centralized object called &#039;&#039;Visualization&#039;&#039; (former &#039;&#039;ItemRegistry&#039;&#039;) which maintains and manages the whole visualization. This object has to fulfil several tasks. It stores the abstract data as well as visual analogous of these in two different tables. All transformation routines like filtering or rendering are maintained and executed by the &#039;&#039;Visualization&#039;&#039; too. Further, it maintains at least one &#039;&#039;Display&#039;&#039;, a graphical component which can represent visual data of &#039;&#039;&#039;prefuse&#039;&#039;&#039;. &lt;br /&gt;
&lt;br /&gt;
Transformation routines are defined as &#039;&#039;Actions&#039;&#039; which are combined in &#039;&#039;ActionLists&#039;&#039;. An &#039;&#039;ActionList&#039;&#039; is an executable container which is started of the &#039;&#039;Visualization&#039;&#039; whenever necessary. Once it is started, all defined &#039;&#039;Actions&#039;&#039; are executed in the given sequence. Typically, the last called &#039;&#039;Action&#039;&#039; is the &#039;&#039;RepaintAction&#039;&#039; which forces all defined &#039;&#039;Displays&#039;&#039; to perform a repaint. &lt;br /&gt;
&lt;br /&gt;
A &#039;&#039;Display&#039;&#039; is the view of &#039;&#039;&#039;prefuse&#039;&#039;&#039;. It can be embedded in each Java Swing application. The main task of a &#039;&#039;Display&#039;&#039; is the painting of visual structures which are defined in the respective &#039;&#039;Visualization&#039;&#039;. Whenever the &#039;&#039;Display&#039;&#039; performs a repaint it requests all visual items and checks all bounds of them (bounding management). If an item is within the own area the respective rendering mechanism is called.  &lt;br /&gt;
&lt;br /&gt;
Another important task of the &#039;&#039;Display&#039;&#039; is the providing of navigation techniques like [[zoom]]ing or [[pan]]ning. The entire view is managed by an own view coordinate system which is described with an affine transformation matrix. The most important functionality to work with this coordinate system is already predefined. &lt;br /&gt;
&lt;br /&gt;
Furthermore, a &#039;&#039;Display&#039;&#039; also maintains a set of &#039;&#039;ControlListener&#039;&#039; which are used to process user interactions (mouse or keyboard events). Whenever such an event occurs the respective listener is called. This listener already differs on where the event happened (e.g., blank area or a certain item). Further, a &#039;&#039;ControlListener&#039;&#039; may also start an &#039;&#039;ActionList&#039;&#039; again.&lt;br /&gt;
&lt;br /&gt;
==Source Data==&lt;br /&gt;
&lt;br /&gt;
Raw data is the base of the application. Typically, the source of raw data is a file, but also other sources like a database are thinkable. However, &#039;&#039;&#039;prefuse&#039;&#039;&#039; provides several file readers for different formats (CSV, Tab-Delimitated, etc.) that can be transformed into a data table. Further, some readers also support the reading of SQL-Database. If another source is needed, a reader can be written manually.&lt;br /&gt;
&lt;br /&gt;
Once the raw data is read, it is transformed into abstract data and stored within a data table.&lt;br /&gt;
&lt;br /&gt;
==Data Table==&lt;br /&gt;
&lt;br /&gt;
The data table which is used to store abstract data works with data types and a definition schema which maps relations between data type and table. That means, each row contains a data record, and each column contains data values for a named data field with a specific data type. Each record of the table is referred as a &#039;&#039;Tuple&#039;&#039;. &lt;br /&gt;
&lt;br /&gt;
Furthermore, instead of the table itself, a graph or tree may be used to store interrelated data. Instead of &#039;&#039;Tuples&#039;&#039;, records are referred as &#039;&#039;Nodes&#039;&#039; which are connected to others with &#039;&#039;Edges&#039;&#039;. Additionally, a tree has one defined root &#039;&#039;Node&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Abstract data does not contain any visual information like assignment attributes or color settings. Instead, visual attributes are extracted out of the abstract data following a defined logic.&lt;br /&gt;
&lt;br /&gt;
==Visual Abstraction==&lt;br /&gt;
&lt;br /&gt;
Visual structures are created when filtering the data container which contains abstract data. In case of a visualization that displays all items from the beginning on, the filtering routine must only executed once at initializing time. If the visual content changes dynamically, the filtering is executed on certain user interactions by calling a defined filtering &#039;&#039;ActionList&#039;&#039;. &lt;br /&gt;
&lt;br /&gt;
A visual structure is referred as &#039;&#039;VisualItem&#039;&#039; which may distinguished as &#039;&#039;VisualNode&#039;&#039;, &#039;&#039;VisualEdge&#039;&#039;, or an aggregated item which consists of several other items. However, as a &#039;&#039;VisualItem&#039;&#039; is extended of the respective abstract entity it has full access to all abstract information too. &lt;br /&gt;
&lt;br /&gt;
The filtering routine which transforms the abstract data to visual analogues typically consists of following &#039;&#039;Actions&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Filter&#039;&#039;&#039;: This &#039;&#039;Action&#039;&#039; is responsible to transform the abstract data of the backing table to visual analogues. If no special conditions are defined, the filter creates for each &#039;&#039;Tuple&#039;&#039; a visual instance and stores them in a second table. Additionally, a filter also performs a garbage collection and may set visibility attributes of the created items. &lt;br /&gt;
* &#039;&#039;&#039;Layout&#039;&#039;&#039;: A layout takes care about placing the &#039;&#039;VisualItems&#039;&#039;. Several common algorithms for graphs or trees are already predefined (e.g., &#039;&#039;ForceDirectedLayout&#039;&#039; or &#039;&#039;RadialTreeLayout&#039;&#039;). &lt;br /&gt;
* &#039;&#039;&#039;Assignment&#039;&#039;&#039;: Besides layouting, also other assignments may be performed during the filtering process. Such assignments directly changes visual attributes of &#039;&#039;VisualItems&#039;&#039; like color, sizes, fonts, etc.&lt;br /&gt;
&lt;br /&gt;
A visual structure may also contain a paint routine, but, as all painting jobs are initialized or performed by separated renderers, these issues may also be executed by the renderer itself or any other object.&lt;br /&gt;
&lt;br /&gt;
==View==&lt;br /&gt;
&lt;br /&gt;
Typically, the rendered visual structure is not stored, instead, they are re-rendered whenever needed. However, in case of very complex but constant visual representations it makes sense to hold items in an offscreen image. &lt;br /&gt;
&lt;br /&gt;
Each &#039;&#039;VisualItem&#039;&#039; has got one or more associated &#039;&#039;Renderers&#039;&#039; which are maintained by a factory of the &#039;&#039;Visualization&#039;&#039;. A  &#039;&#039;Render&#039;&#039; has to perform two tasks:&lt;br /&gt;
&lt;br /&gt;
* Providing a bounding box of the item. This box is used to determine if the item must actually be painted or if it would not be visible anyway. &lt;br /&gt;
* Providing the painting routine of the item. Paintings may be executed by the &#039;&#039;Renderer&#039;&#039; itself or delegated to other objects which are accessible of the &#039;&#039;Renderer&#039;&#039;. The painting routines are not restricted in any way, but they representation should not exceed the bounding box of the item. &lt;br /&gt;
&lt;br /&gt;
Rendering is always performed on a repaint of the &#039;&#039;Display&#039;&#039;. A repaint can be requested by the &#039;&#039;Visualization&#039;&#039;, on user interaction, and on events like resizing the component, getting the focus, or changing the coordinate system of the view. However, as repaints may occur very often, developers have to ascertain that rendering jobs can are performed fast, otherwise, the performance of the whole visualization would suffer.&lt;br /&gt;
&lt;br /&gt;
=Details=&lt;br /&gt;
&lt;br /&gt;
==Package Structure==&lt;br /&gt;
&lt;br /&gt;
Following picture shows the most important packages of &#039;&#039;&#039;prefuse&#039;&#039;&#039; regarding to the [[Visualization Pipeline]]:&lt;br /&gt;
&lt;br /&gt;
[[Image:prefuse_package_guide.gif|600px]]&lt;br /&gt;
&lt;br /&gt;
These packages also contain predefined components. A default nodes and edges provide standard functionality of abstract data, standard functionality is also available in visual analogous of them. A default filter transforms all defined abstract entities to visual ones. Further, also some special functionality for common requirements are provided by own components. &lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Renderers&#039;&#039;&#039;: &#039;&#039;EdgeRenderer&#039;&#039; to render edges between graph or tree nodes, a &#039;&#039;LableRenderer&#039;&#039; to render test items, and a &#039;&#039;PolygoneRenderer&#039;&#039; to render geometrical items. &lt;br /&gt;
* &#039;&#039;&#039;Layouts&#039;&#039;&#039;: &#039;&#039;RandomLayout&#039;&#039;, &#039;&#039;GridLayout&#039;&#039;, and some more to place non related data, &#039;&#039;ForceDirectedLayout&#039;&#039;, &#039;&#039;TreeLayout&#039;&#039;, &#039;&#039;RadialTreeLayout&#039;&#039; and others to render trees and graphs.&lt;br /&gt;
* &#039;&#039;&#039;Controls&#039;&#039;&#039;: &#039;&#039;DragControl&#039;&#039;, &#039;&#039;ZoomControl&#039;&#039;, &#039;&#039;PanControl&#039;&#039;, &#039;&#039;ToolTipControl&#039;&#039; and several others to react on user interactions. &lt;br /&gt;
&lt;br /&gt;
In simple visualizations the predefined functionality will meet most requirements. If special requirements are needed the default functionality supports a step-wise developing as results can be communicated by these components until the own functionality is implemented.&lt;br /&gt;
&lt;br /&gt;
==Coordinates in prefuse==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;prefuse&#039;&#039;&#039; works with two different coordinate systems. Absolute coordinates are device-independent logical coordinates. All visual attributes like positions or sizes are defined in absolute coordinates. In contrast, view coordinates are device-depended (screen). Transformations between absolute and view coordinates are done automatically by Java painting routines. View coordinates are influenced by the system and device driver (e.g., the absolute point (0,0) is the topmost left point of the actual graphical component which may be on any position at the screen). Further, view coordinates may also be manipulated manually by using an affine transformation matrix which applies linear transformations on absolute coordinates before device-dependent routines convert them to screen coordinates. &lt;br /&gt;
&lt;br /&gt;
A &#039;&#039;&#039;prefuse&#039;&#039;&#039; &#039;&#039;Display&#039;&#039; provides the most important manipulating methods of this matrix. [[Zoom]]ing, [[pan]]ning, and rotation of the whole view are only done by changing the view coordinates. So, as absolute coordinates are never concerned of such transformations and translations, a user must never consider the actual view in layout, assignment, or painting routines. &lt;br /&gt;
&lt;br /&gt;
There are several different ways on how to apply such transformations, additionally, the &#039;&#039;Display&#039;&#039; also supports animated transformations. &lt;br /&gt;
&lt;br /&gt;
==User Interactions==&lt;br /&gt;
&lt;br /&gt;
Mouse or keyboard events are treated by using &#039;&#039;ControlListener&#039;&#039;. Whenever an event occurs which is handled by a &#039;&#039;ControlListener&#039;&#039;, the &#039;&#039;Display&#039;&#039; delegates the event to the respective routine. A &#039;&#039;ControlListener&#039;&#039; differs automatically which visual element is concerned of the event (the view itself or a &#039;&#039;VisualItem&#039;&#039; on the view). &lt;br /&gt;
&lt;br /&gt;
A &#039;&#039;ControlListener&#039;&#039; may just perform simple task like changing the mouse cursor or editing the label of an item. But, in more sophisticated applications, also task like loading new data or dragging items on the view may also be handled. Therefore, a &#039;&#039;ControlListener&#039;&#039; may also work with &#039;&#039;ActionLists&#039;&#039; to execute such tasks. Further, a &#039;&#039;ControlListener&#039;&#039; has also access to the &#039;&#039;Display&#039;&#039; to call methods like zooming or panning. Typically, each &#039;&#039;ControlListener&#039;&#039; forces a repaint when its job is done.  &lt;br /&gt;
&lt;br /&gt;
Most of standard functionality is already predefined in &#039;&#039;prefuse&#039;&#039; and the wanted listeners just have to be set to the &#039;&#039;Display&#039;&#039;. However, the &#039;&#039;Display&#039;&#039; can handle a countless of different listener. Hence, typically only a few listeners must be defined manually as they can be mixed with default ones.  &lt;br /&gt;
&lt;br /&gt;
=Conclusion=&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;prefuse&#039;&#039;&#039; is a very powerful toolkit, providing a large set of components and methods a developer needs to build an [[Information Visualization]]. The [[polylithic design]] is not that easy to understand in the beginning of a development, but once conceived, a visualization is easy to realize even if really special demands have to be fulfilled. Furthermore, using Prefuse forces a clear and well designed architecture of own applications.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;prefuse&#039;&#039;&#039; was created with most attention paid to developers who will finally work with the toolkit. In an evaluation study this goal was approved too. In the meanwhile, there is also a not so small community using and upgrading the toolkit, which is an argue for its usability.&lt;br /&gt;
&lt;br /&gt;
= External links =&lt;br /&gt;
*[http://prefuse.org prefuse Homepage]&lt;br /&gt;
*[http://vw.indiana.edu/ivsi2004/jherr/index.html prefuse Position Paper]&lt;br /&gt;
*[http://sourceforge.net/forum/forum.php?forum_id=343013 prefuse Help Forum]&lt;br /&gt;
&lt;br /&gt;
= References =&lt;br /&gt;
*[Heer, 2004] Jeffrey Heer. [http://jheer.org/publications/2004-Heer-prefuse-Masters.pdf prefuse: a software framework for interactive information visualization]. Masters of Science, Computer Science Division, University of California, Berkeley, 2004.&lt;br /&gt;
*[Heer, 2005] Jeffrey Heer, Stuart K. Card, and James A. Landay. [http://jheer.org/publications/2005-prefuse-CHI.pdf prefuse: a toolkit for interactive information visualization. In &#039;&#039;CHI 2005, Human Factors in Computing Systems&#039;&#039;], 2005.&lt;br /&gt;
*[Heer, 2006a] Jeffrey Heer, prefuse API documentation, Retrieved at: July 06, 2006, http://prefuse.org&lt;br /&gt;
*[Heer, 2006b] Jeffrey Heer, prefuse manual, Retrieved at: July 06, 2006, http://prefuse.org&lt;br /&gt;
*[Sun Microsystems, 2001] Sun Microsystems, Programmer’s Guide to the Java 2DTM API - Enhanced Graphics and Imaging for Java, Retrieved at: April 20, 2006, http://java.sun.com/j2se/1.4/pdf/j2d-book.pdf&lt;br /&gt;
&lt;br /&gt;
[[Category:Toolkits]]&lt;/div&gt;</summary>
		<author><name>Anfe</name></author>
	</entry>
	<entry>
		<id>https://infovis-wiki.net/w/index.php?title=Prefuse&amp;diff=10113</id>
		<title>Prefuse</title>
		<link rel="alternate" type="text/html" href="https://infovis-wiki.net/w/index.php?title=Prefuse&amp;diff=10113"/>
		<updated>2006-07-06T01:39:36Z</updated>

		<summary type="html">&lt;p&gt;Anfe: /* Summary */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Summary =&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Author&#039;&#039;&#039;: Jeffrey Heer / UC Berkeley&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Project Webpage&#039;&#039;&#039;: http://prefuse.org&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Current Version&#039;&#039;&#039;: beta, June 15, 2006&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Requirements&#039;&#039;&#039;: Java 1.4&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Overview:&#039;&#039;&#039; using Java2D graphics library; pipeline architecture; animation and rendering support&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Base data structures&#039;&#039;&#039;: Table, Graph, Tree&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Included visualization techniques:&#039;&#039;&#039; [http://www.cs.umd.edu/hcil/fisheyemenu/ Fisheye Menu], [http://prefuse.sourceforge.net/demos-radial.html Radial Graph], [http://www.cs.umd.edu/hcil/treemap/ Treemap], [http://prefuse.sourceforge.net/demos-distortion.html F+C Distortion]&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Supported File Formats&#039;&#039;&#039;: XGMML (XML), TreeML (XML), tab-delimited text, HDir&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;prefuse&#039;&#039;&#039; is an interactive graphical open source toolkit written in Java. It is thought to support the development of sophisticated, highly interactive, and flexible [[Information Visualization]]s. The architecture of &#039;&#039;&#039;prefuse&#039;&#039;&#039; considers the [[Visualization Pipeline]], a recommendation on how to implement a visualization. To provide flexibility, a [[polylithic design]] was chosen which enables developers to implement only needed functionality and customize these to meet the own requirements. But, in contrast to a [[monolithic design]], this design needs more time to conceive and influences the architecture of the own application heavily (which is not a disadvantage as &#039;&#039;&#039;prefuse&#039;&#039;&#039; is very elaborate). &lt;br /&gt;
&lt;br /&gt;
Typically, &#039;&#039;&#039;prefuse&#039;&#039;&#039; is designed to visualize information which is interrelated so it can be stored in a graph or tree structure, but, also not related data can be used which is stored within a data-table. Even though the structure is hierarchical, the resulting relations must not be considered in the proper graphical representation as layout algorithms are not restricted in any way. The painting of visual items is done by using a renderer which has access to the respective item itself and the Graphics2D context of the view. This approach enables to use the whole range of available painting methods of Java, therefore, the visual representation is completely independent of the toolkit itself.&lt;br /&gt;
&lt;br /&gt;
Besides providing a large set of predefined elements to visualize data, most attention was set toward usability of the visualization. This is obtained by applying several interaction techniques like tooltips or dragging visual elements. But also more sophisticated techniques like [[zoom]]ing, [[pan]]ning, or [[semantic zoom]]ing are supported or partially even provided by the toolkit itself. Further, &#039;&#039;&#039;prefuse&#039;&#039;&#039; clearly distinguishes between absolute and view coordinates. This separation helps users to place all visual elements in a logical way without consideration of later applied visualization techniques that changes the entire view.  &lt;br /&gt;
&lt;br /&gt;
=== Pros ===&lt;br /&gt;
&lt;br /&gt;
* flexible&lt;br /&gt;
* versatile pipeline approach&lt;br /&gt;
* clear and well thought architecture&lt;br /&gt;
* many layout and distortion algorithms included&lt;br /&gt;
* algorithms for force-based physics simulation included&lt;br /&gt;
* custom animations (smooth transitions)&lt;br /&gt;
* color maps&lt;br /&gt;
* query language to navigate within abstract data&lt;br /&gt;
* demos and examples included&lt;br /&gt;
* bounding management&lt;br /&gt;
* open source&lt;br /&gt;
* documentation of code and general guidance available&lt;br /&gt;
* active developer community &lt;br /&gt;
&lt;br /&gt;
=== Cons ===&lt;br /&gt;
&lt;br /&gt;
* [[polylithic design]] takes up more time to conceive and see first results&lt;br /&gt;
* special requirements of a visualization enforce a lot of adapting work&lt;br /&gt;
&lt;br /&gt;
=General Approach=&lt;br /&gt;
&lt;br /&gt;
Going along with the step-wise recommendation of the [[Visualization Pipeline]], a &#039;&#039;&#039;prefuse&#039;&#039;&#039; application consists of different states of data:&lt;br /&gt;
&lt;br /&gt;
[[Image:prefuse_visualization_pipeline.gif|600px]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;prefuse&#039;&#039;&#039; uses a centralized object called &#039;&#039;Visualization&#039;&#039; (former &#039;&#039;ItemRegistry&#039;&#039;) which maintains and manages the whole visualization. This object has to fulfil several tasks. It stores the abstract data as well as visual analogous of these in two different tables. All transformation routines like filtering or rendering are maintained and executed by the &#039;&#039;Visualization&#039;&#039; too. Further, it maintains at least one &#039;&#039;Display&#039;&#039;, a graphical component which can represent visual data of &#039;&#039;&#039;prefuse&#039;&#039;&#039;. &lt;br /&gt;
&lt;br /&gt;
Transformation routines are defined as &#039;&#039;Actions&#039;&#039; which are combined in &#039;&#039;ActionLists&#039;&#039;. An &#039;&#039;ActionList&#039;&#039; is an executable container which is started of the &#039;&#039;Visualization&#039;&#039; whenever necessary. Once it is started, all defined &#039;&#039;Actions&#039;&#039; are executed in the given sequence. Typically, the last called &#039;&#039;Action&#039;&#039; is the &#039;&#039;RepaintAction&#039;&#039; which forces all defined &#039;&#039;Displays&#039;&#039; to perform a repaint. &lt;br /&gt;
&lt;br /&gt;
A &#039;&#039;Display&#039;&#039; is the view of &#039;&#039;&#039;prefuse&#039;&#039;&#039;. It can be embedded in each Java Swing application. The main task of a &#039;&#039;Display&#039;&#039; is the painting of visual structures which are defined in the respective &#039;&#039;Visualization&#039;&#039;. Whenever the &#039;&#039;Display&#039;&#039; performs a repaint it requests all visual items and checks all bounds of them (bounding management). If an item is within the own area the respective rendering mechanism is called.  &lt;br /&gt;
&lt;br /&gt;
Another important task of the &#039;&#039;Display&#039;&#039; is the providing of navigation techniques like [[zoom]]ing or [[pan]]ning. The entire view is managed by an own view coordinate system which is described with an affine transformation matrix. The most important functionality to work with this coordinate system is already predefined. &lt;br /&gt;
&lt;br /&gt;
Furthermore, a &#039;&#039;Display&#039;&#039; also maintains a set of &#039;&#039;ControlListener&#039;&#039; which are used to process user interactions (mouse or keyboard events). Whenever such an event occurs the respective listener is called. This listener already differs on where the event happened (e.g., blank area or a certain item). Further, a &#039;&#039;ControlListener&#039;&#039; may also start an &#039;&#039;ActionList&#039;&#039; again.&lt;br /&gt;
&lt;br /&gt;
==Source Data==&lt;br /&gt;
&lt;br /&gt;
Raw data is the base of the application. Typically, the source of raw data is a file, but also other sources like a database are thinkable. However, &#039;&#039;&#039;prefuse&#039;&#039;&#039; provides several file readers for different formats (CSV, Tab-Delimitated, etc.) that can be transformed into a data table. Further, some readers also support the reading of SQL-Database. If another source is needed, a reader can be written manually.&lt;br /&gt;
&lt;br /&gt;
Once the raw data is read, it is transformed into abstract data and stored within a data table.&lt;br /&gt;
&lt;br /&gt;
==Data Table==&lt;br /&gt;
&lt;br /&gt;
The data table which is used to store abstract data works with data types and a definition schema which maps relations between data type and table. That means, each row contains a data record, and each column contains data values for a named data field with a specific data type. Each record of the table is referred as a &#039;&#039;Tuple&#039;&#039;. &lt;br /&gt;
&lt;br /&gt;
Furthermore, instead of the table itself, a graph or tree may be used to store interrelated data. Instead of &#039;&#039;Tuples&#039;&#039;, records are referred as &#039;&#039;Nodes&#039;&#039; which are connected to others with &#039;&#039;Edges&#039;&#039;. Additionally, a tree has one defined root &#039;&#039;Node&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Abstract data does not contain any visual information like assignment attributes or color settings. Instead, visual attributes are extracted out of the abstract data following a defined logic.&lt;br /&gt;
&lt;br /&gt;
==Visual Abstraction==&lt;br /&gt;
&lt;br /&gt;
Visual structures are created when filtering the data container which contains abstract data. In case of a visualization that displays all items from the beginning on, the filtering routine must only executed once at initializing time. If the visual content changes dynamically, the filtering is executed on certain user interactions by calling a defined filtering &#039;&#039;ActionList&#039;&#039;. &lt;br /&gt;
&lt;br /&gt;
A visual structure is referred as &#039;&#039;VisualItem&#039;&#039; which may distinguished as &#039;&#039;VisualNode&#039;&#039;, &#039;&#039;VisualEdge&#039;&#039;, or an aggregated item which consists of several other items. However, as a &#039;&#039;VisualItem&#039;&#039; is extended of the respective abstract entity it has full access to all abstract information too. &lt;br /&gt;
&lt;br /&gt;
The filtering routine which transforms the abstract data to visual analogues typically consists of following &#039;&#039;Actions&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Filter&#039;&#039;&#039;: This &#039;&#039;Action&#039;&#039; is responsible to transform the abstract data of the backing table to visual analogues. If no special conditions are defined, the filter creates for each &#039;&#039;Tuple&#039;&#039; a visual instance and stores them in a second table. Additionally, a filter also performs a garbage collection and may set visibility attributes of the created items. &lt;br /&gt;
* &#039;&#039;&#039;Layout&#039;&#039;&#039;: A layout takes care about placing the &#039;&#039;VisualItems&#039;&#039;. Several common algorithms for graphs or trees are already predefined (e.g., &#039;&#039;ForceDirectedLayout&#039;&#039; or &#039;&#039;RadialTreeLayout&#039;&#039;). &lt;br /&gt;
* &#039;&#039;&#039;Assignment&#039;&#039;&#039;: Besides layouting, also other assignments may be performed during the filtering process. Such assignments directly changes visual attributes of &#039;&#039;VisualItems&#039;&#039; like color, sizes, fonts, etc.&lt;br /&gt;
&lt;br /&gt;
A visual structure may also contain a paint routine, but, as all painting jobs are initialized or performed by separated renderers, these issues may also be executed by the renderer itself or any other object.&lt;br /&gt;
&lt;br /&gt;
==View==&lt;br /&gt;
&lt;br /&gt;
Typically, the rendered visual structure is not stored, instead, they are re-rendered whenever needed. However, in case of very complex but constant visual representations it makes sense to hold items in an offscreen image. &lt;br /&gt;
&lt;br /&gt;
Each &#039;&#039;VisualItem&#039;&#039; has got one or more associated &#039;&#039;Renderers&#039;&#039; which are maintained by a factory of the &#039;&#039;Visualization&#039;&#039;. A  &#039;&#039;Render&#039;&#039; has to perform two tasks:&lt;br /&gt;
&lt;br /&gt;
* Providing a bounding box of the item. This box is used to determine if the item must actually be painted or if it would not be visible anyway. &lt;br /&gt;
* Providing the painting routine of the item. Paintings may be executed by the &#039;&#039;Renderer&#039;&#039; itself or delegated to other objects which are accessible of the &#039;&#039;Renderer&#039;&#039;. The painting routines are not restricted in any way, but they representation should not exceed the bounding box of the item. &lt;br /&gt;
&lt;br /&gt;
Rendering is always performed on a repaint of the &#039;&#039;Display&#039;&#039;. A repaint can be requested by the &#039;&#039;Visualization&#039;&#039;, on user interaction, and on events like resizing the component, getting the focus, or changing the coordinate system of the view. However, as repaints may occur very often, developers have to ascertain that rendering jobs can are performed fast, otherwise, the performance of the whole visualization would suffer.&lt;br /&gt;
&lt;br /&gt;
=Details=&lt;br /&gt;
&lt;br /&gt;
==Package Structure==&lt;br /&gt;
&lt;br /&gt;
Following picture shows the most important packages of &#039;&#039;&#039;prefuse&#039;&#039;&#039; regarding to the [[Visualization Pipeline]]:&lt;br /&gt;
&lt;br /&gt;
[[Image:prefuse_package_guide.gif|600px]]&lt;br /&gt;
&lt;br /&gt;
These packages also contain predefined components. A default nodes and edges provide standard functionality of abstract data, standard functionality is also available in visual analogous of them. A default filter transforms all defined abstract entities to visual ones. Further, also some special functionality for common requirements are provided by own components. &lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Renderers&#039;&#039;&#039;: &#039;&#039;EdgeRenderer&#039;&#039; to render edges between graph or tree nodes, a &#039;&#039;LableRenderer&#039;&#039; to render test items, and a &#039;&#039;PolygoneRenderer&#039;&#039; to render geometrical items. &lt;br /&gt;
* &#039;&#039;&#039;Layouts&#039;&#039;&#039;: &#039;&#039;RandomLayout&#039;&#039;, &#039;&#039;GridLayout&#039;&#039;, and some more to place non related data, &#039;&#039;ForceDirectedLayout&#039;&#039;, &#039;&#039;TreeLayout&#039;&#039;, &#039;&#039;RadialTreeLayout&#039;&#039; and others to render trees and graphs.&lt;br /&gt;
* &#039;&#039;&#039;Controls&#039;&#039;&#039;: &#039;&#039;DragControl&#039;&#039;, &#039;&#039;ZoomControl&#039;&#039;, &#039;&#039;PanControl&#039;&#039;, &#039;&#039;ToolTipControl&#039;&#039; and several others to react on user interactions. &lt;br /&gt;
&lt;br /&gt;
In simple visualizations the predefined functionality will meet most requirements. If special requirements are needed the default functionality supports a step-wise developing as results can be communicated by these components until the own functionality is implemented.&lt;br /&gt;
&lt;br /&gt;
==Coordinates in prefuse==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;prefuse&#039;&#039;&#039; works with two different coordinate systems. Absolute coordinates are device-independent logical coordinates. All visual attributes like positions or sizes are defined in absolute coordinates. In contrast, view coordinates are device-depended (screen). Transformations between absolute and view coordinates are done automatically by Java painting routines. View coordinates are influenced by the system and device driver (e.g., the absolute point (0,0) is the topmost left point of the actual graphical component which may be on any position at the screen). Further, view coordinates may also be manipulated manually by using an affine transformation matrix which applies linear transformations on absolute coordinates before device-dependent routines convert them to screen coordinates. &lt;br /&gt;
&lt;br /&gt;
A &#039;&#039;&#039;prefuse&#039;&#039;&#039; &#039;&#039;Display&#039;&#039; provides the most important manipulating methods of this matrix. [[Zoom]]ing, [[pan]]ning, and rotation of the whole view are only done by changing the view coordinates. So, as absolute coordinates are never concerned of such transformations and translations, a user must never consider the actual view in layout, assignment, or painting routines. &lt;br /&gt;
&lt;br /&gt;
There are several different ways on how to apply such transformations, additionally, the &#039;&#039;Display&#039;&#039; also supports animated transformations. &lt;br /&gt;
&lt;br /&gt;
==User Interactions==&lt;br /&gt;
&lt;br /&gt;
Mouse or keyboard events are treated by using &#039;&#039;ControlListener&#039;&#039;. Whenever an event occurs which is handled by a &#039;&#039;ControlListener&#039;&#039;, the &#039;&#039;Display&#039;&#039; delegates the event to the respective routine. A &#039;&#039;ControlListener&#039;&#039; differs automatically which visual element is concerned of the event (the view itself or a &#039;&#039;VisualItem&#039;&#039; on the view). &lt;br /&gt;
&lt;br /&gt;
A &#039;&#039;ControlListener&#039;&#039; may just perform simple task like changing the mouse cursor or editing the label of an item. But, in more sophisticated applications, also task like loading new data or dragging items on the view may also be handled. Therefore, a &#039;&#039;ControlListener&#039;&#039; may also work with &#039;&#039;ActionLists&#039;&#039; to execute such tasks. Further, a &#039;&#039;ControlListener&#039;&#039; has also access to the &#039;&#039;Display&#039;&#039; to call methods like zooming or panning. Typically, each &#039;&#039;ControlListener&#039;&#039; forces a repaint when its job is done.  &lt;br /&gt;
&lt;br /&gt;
Most of standard functionality is already predefined in &#039;&#039;prefuse&#039;&#039; and the wanted listeners just have to be set to the &#039;&#039;Display&#039;&#039;. However, the &#039;&#039;Display&#039;&#039; can handle a countless of different listener. Hence, typically only a few listeners must be defined manually as they can be mixed with default ones.  &lt;br /&gt;
&lt;br /&gt;
=Conclusion=&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;prefuse&#039;&#039;&#039; is a very powerful toolkit, providing a large set of components and methods a developer needs to build an [[Information Visualization]]. The [[polylithic design]] is not that easy to understand in the beginning of a development, but once conceived, a visualization is easy to realize even if really special demands have to be fulfilled. Furthermore, using Prefuse forces a clear and well designed architecture of own applications.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;prefuse&#039;&#039;&#039; was created with most attention paid to developers who will finally work with the toolkit. In an evaluation study this goal was approved too. In the meanwhile, there is also a not so small community using and upgrading the toolkit, which is an argue for its usability.&lt;br /&gt;
&lt;br /&gt;
= External links =&lt;br /&gt;
*[http://prefuse.org prefuse Homepage]&lt;br /&gt;
*[http://vw.indiana.edu/ivsi2004/jherr/index.html prefuse Position Paper]&lt;br /&gt;
*[http://sourceforge.net/forum/forum.php?forum_id=343013 prefuse Help Forum]&lt;br /&gt;
&lt;br /&gt;
= References =&lt;br /&gt;
*[Heer, 2004] Jeffrey Heer. [http://jheer.org/publications/2004-Heer-prefuse-Masters.pdf prefuse: a software framework for interactive information visualization]. Masters of Science, Computer Science Division, University of California, Berkeley, 2004.&lt;br /&gt;
*[Heer, 2005] Jeffrey Heer, Stuart K. Card, and James A. Landay. [http://jheer.org/publications/2005-prefuse-CHI.pdf prefuse: a toolkit for interactive information visualization. In &#039;&#039;CHI 2005, Human Factors in Computing Systems&#039;&#039;], 2005.&lt;br /&gt;
*[Heer, 2006a] Jeffrey Heer, prefuse API documentation, Retrieved at: July 06, 2006, http://prefuse.org&lt;br /&gt;
*[Heer, 2006b] Jeffrey Heer, prefuse manual, Retrieved at: July 06, 2006, http://prefuse.org&lt;br /&gt;
*[Sun Microsystems, 2001] Sun Microsystems, Programmer’s Guide to the Java 2DTM API - Enhanced Graphics and Imaging for Java, Retrieved at: April 20, 2006, http://java.sun.com/j2se/1.4/pdf/j2d-book.pdf&lt;br /&gt;
&lt;br /&gt;
[[Category:Toolkits]]&lt;/div&gt;</summary>
		<author><name>Anfe</name></author>
	</entry>
	<entry>
		<id>https://infovis-wiki.net/w/index.php?title=Prefuse&amp;diff=10112</id>
		<title>Prefuse</title>
		<link rel="alternate" type="text/html" href="https://infovis-wiki.net/w/index.php?title=Prefuse&amp;diff=10112"/>
		<updated>2006-07-06T01:38:13Z</updated>

		<summary type="html">&lt;p&gt;Anfe: /* Visual Abstaction */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Summary =&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Author&#039;&#039;&#039;: Jeffrey Heer / UC Berkeley&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Project Webpage&#039;&#039;&#039;: http://prefuse.sourceforge.net&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Current Version&#039;&#039;&#039;: beta, June 15, 2006&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Requirements&#039;&#039;&#039;: Java 1.4&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Overview:&#039;&#039;&#039; using Java2D graphics library; pipeline architecture; animation and rendering support&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Base data structures&#039;&#039;&#039;: Table, Graph, Tree&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Included visualization techniques:&#039;&#039;&#039; [http://www.cs.umd.edu/hcil/fisheyemenu/ Fisheye Menu], [http://prefuse.sourceforge.net/demos-radial.html Radial Graph], [http://www.cs.umd.edu/hcil/treemap/ Treemap], [http://prefuse.sourceforge.net/demos-distortion.html F+C Distortion]&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Supported File Formats&#039;&#039;&#039;: XGMML (XML), TreeML (XML), tab-delimited text, HDir&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;prefuse&#039;&#039;&#039; is an interactive graphical open source toolkit written in Java. It is thought to support the development of sophisticated, highly interactive, and flexible [[Information Visualization]]s. The architecture of &#039;&#039;&#039;prefuse&#039;&#039;&#039; considers the [[Visualization Pipeline]], a recommendation on how to implement a visualization. To provide flexibility, a [[polylithic design]] was chosen which enables developers to implement only needed functionality and customize these to meet the own requirements. But, in contrast to a [[monolithic design]], this design needs more time to conceive and influences the architecture of the own application heavily (which is not a disadvantage as &#039;&#039;&#039;prefuse&#039;&#039;&#039; is very elaborate). &lt;br /&gt;
&lt;br /&gt;
Typically, &#039;&#039;&#039;prefuse&#039;&#039;&#039; is designed to visualize information which is interrelated so it can be stored in a graph or tree structure, but, also not related data can be used which is stored within a data-table. Even though the structure is hierarchical, the resulting relations must not be considered in the proper graphical representation as layout algorithms are not restricted in any way. The painting of visual items is done by using a renderer which has access to the respective item itself and the Graphics2D context of the view. This approach enables to use the whole range of available painting methods of Java, therefore, the visual representation is completely independent of the toolkit itself.&lt;br /&gt;
&lt;br /&gt;
Besides providing a large set of predefined elements to visualize data, most attention was set toward usability of the visualization. This is obtained by applying several interaction techniques like tooltips or dragging visual elements. But also more sophisticated techniques like [[zoom]]ing, [[pan]]ning, or [[semantic zoom]]ing are supported or partially even provided by the toolkit itself. Further, &#039;&#039;&#039;prefuse&#039;&#039;&#039; clearly distinguishes between absolute and view coordinates. This separation helps users to place all visual elements in a logical way without consideration of later applied visualization techniques that changes the entire view.  &lt;br /&gt;
&lt;br /&gt;
=== Pros ===&lt;br /&gt;
&lt;br /&gt;
* flexible&lt;br /&gt;
* versatile pipeline approach&lt;br /&gt;
* clear and well thought architecture&lt;br /&gt;
* many layout and distortion algorithms included&lt;br /&gt;
* algorithms for force-based physics simulation included&lt;br /&gt;
* custom animations (smooth transitions)&lt;br /&gt;
* color maps&lt;br /&gt;
* query language to navigate within abstract data&lt;br /&gt;
* demos and examples included&lt;br /&gt;
* bounding management&lt;br /&gt;
* open source&lt;br /&gt;
* documentation of code and general guidance available&lt;br /&gt;
* active developer community &lt;br /&gt;
&lt;br /&gt;
=== Cons ===&lt;br /&gt;
&lt;br /&gt;
* [[polylithic design]] takes up more time to conceive and see first results&lt;br /&gt;
* special requirements of a visualization enforce a lot of adapting work&lt;br /&gt;
&lt;br /&gt;
=General Approach=&lt;br /&gt;
&lt;br /&gt;
Going along with the step-wise recommendation of the [[Visualization Pipeline]], a &#039;&#039;&#039;prefuse&#039;&#039;&#039; application consists of different states of data:&lt;br /&gt;
&lt;br /&gt;
[[Image:prefuse_visualization_pipeline.gif|600px]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;prefuse&#039;&#039;&#039; uses a centralized object called &#039;&#039;Visualization&#039;&#039; (former &#039;&#039;ItemRegistry&#039;&#039;) which maintains and manages the whole visualization. This object has to fulfil several tasks. It stores the abstract data as well as visual analogous of these in two different tables. All transformation routines like filtering or rendering are maintained and executed by the &#039;&#039;Visualization&#039;&#039; too. Further, it maintains at least one &#039;&#039;Display&#039;&#039;, a graphical component which can represent visual data of &#039;&#039;&#039;prefuse&#039;&#039;&#039;. &lt;br /&gt;
&lt;br /&gt;
Transformation routines are defined as &#039;&#039;Actions&#039;&#039; which are combined in &#039;&#039;ActionLists&#039;&#039;. An &#039;&#039;ActionList&#039;&#039; is an executable container which is started of the &#039;&#039;Visualization&#039;&#039; whenever necessary. Once it is started, all defined &#039;&#039;Actions&#039;&#039; are executed in the given sequence. Typically, the last called &#039;&#039;Action&#039;&#039; is the &#039;&#039;RepaintAction&#039;&#039; which forces all defined &#039;&#039;Displays&#039;&#039; to perform a repaint. &lt;br /&gt;
&lt;br /&gt;
A &#039;&#039;Display&#039;&#039; is the view of &#039;&#039;&#039;prefuse&#039;&#039;&#039;. It can be embedded in each Java Swing application. The main task of a &#039;&#039;Display&#039;&#039; is the painting of visual structures which are defined in the respective &#039;&#039;Visualization&#039;&#039;. Whenever the &#039;&#039;Display&#039;&#039; performs a repaint it requests all visual items and checks all bounds of them (bounding management). If an item is within the own area the respective rendering mechanism is called.  &lt;br /&gt;
&lt;br /&gt;
Another important task of the &#039;&#039;Display&#039;&#039; is the providing of navigation techniques like [[zoom]]ing or [[pan]]ning. The entire view is managed by an own view coordinate system which is described with an affine transformation matrix. The most important functionality to work with this coordinate system is already predefined. &lt;br /&gt;
&lt;br /&gt;
Furthermore, a &#039;&#039;Display&#039;&#039; also maintains a set of &#039;&#039;ControlListener&#039;&#039; which are used to process user interactions (mouse or keyboard events). Whenever such an event occurs the respective listener is called. This listener already differs on where the event happened (e.g., blank area or a certain item). Further, a &#039;&#039;ControlListener&#039;&#039; may also start an &#039;&#039;ActionList&#039;&#039; again.&lt;br /&gt;
&lt;br /&gt;
==Source Data==&lt;br /&gt;
&lt;br /&gt;
Raw data is the base of the application. Typically, the source of raw data is a file, but also other sources like a database are thinkable. However, &#039;&#039;&#039;prefuse&#039;&#039;&#039; provides several file readers for different formats (CSV, Tab-Delimitated, etc.) that can be transformed into a data table. Further, some readers also support the reading of SQL-Database. If another source is needed, a reader can be written manually.&lt;br /&gt;
&lt;br /&gt;
Once the raw data is read, it is transformed into abstract data and stored within a data table.&lt;br /&gt;
&lt;br /&gt;
==Data Table==&lt;br /&gt;
&lt;br /&gt;
The data table which is used to store abstract data works with data types and a definition schema which maps relations between data type and table. That means, each row contains a data record, and each column contains data values for a named data field with a specific data type. Each record of the table is referred as a &#039;&#039;Tuple&#039;&#039;. &lt;br /&gt;
&lt;br /&gt;
Furthermore, instead of the table itself, a graph or tree may be used to store interrelated data. Instead of &#039;&#039;Tuples&#039;&#039;, records are referred as &#039;&#039;Nodes&#039;&#039; which are connected to others with &#039;&#039;Edges&#039;&#039;. Additionally, a tree has one defined root &#039;&#039;Node&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Abstract data does not contain any visual information like assignment attributes or color settings. Instead, visual attributes are extracted out of the abstract data following a defined logic.&lt;br /&gt;
&lt;br /&gt;
==Visual Abstraction==&lt;br /&gt;
&lt;br /&gt;
Visual structures are created when filtering the data container which contains abstract data. In case of a visualization that displays all items from the beginning on, the filtering routine must only executed once at initializing time. If the visual content changes dynamically, the filtering is executed on certain user interactions by calling a defined filtering &#039;&#039;ActionList&#039;&#039;. &lt;br /&gt;
&lt;br /&gt;
A visual structure is referred as &#039;&#039;VisualItem&#039;&#039; which may distinguished as &#039;&#039;VisualNode&#039;&#039;, &#039;&#039;VisualEdge&#039;&#039;, or an aggregated item which consists of several other items. However, as a &#039;&#039;VisualItem&#039;&#039; is extended of the respective abstract entity it has full access to all abstract information too. &lt;br /&gt;
&lt;br /&gt;
The filtering routine which transforms the abstract data to visual analogues typically consists of following &#039;&#039;Actions&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Filter&#039;&#039;&#039;: This &#039;&#039;Action&#039;&#039; is responsible to transform the abstract data of the backing table to visual analogues. If no special conditions are defined, the filter creates for each &#039;&#039;Tuple&#039;&#039; a visual instance and stores them in a second table. Additionally, a filter also performs a garbage collection and may set visibility attributes of the created items. &lt;br /&gt;
* &#039;&#039;&#039;Layout&#039;&#039;&#039;: A layout takes care about placing the &#039;&#039;VisualItems&#039;&#039;. Several common algorithms for graphs or trees are already predefined (e.g., &#039;&#039;ForceDirectedLayout&#039;&#039; or &#039;&#039;RadialTreeLayout&#039;&#039;). &lt;br /&gt;
* &#039;&#039;&#039;Assignment&#039;&#039;&#039;: Besides layouting, also other assignments may be performed during the filtering process. Such assignments directly changes visual attributes of &#039;&#039;VisualItems&#039;&#039; like color, sizes, fonts, etc.&lt;br /&gt;
&lt;br /&gt;
A visual structure may also contain a paint routine, but, as all painting jobs are initialized or performed by separated renderers, these issues may also be executed by the renderer itself or any other object.&lt;br /&gt;
&lt;br /&gt;
==View==&lt;br /&gt;
&lt;br /&gt;
Typically, the rendered visual structure is not stored, instead, they are re-rendered whenever needed. However, in case of very complex but constant visual representations it makes sense to hold items in an offscreen image. &lt;br /&gt;
&lt;br /&gt;
Each &#039;&#039;VisualItem&#039;&#039; has got one or more associated &#039;&#039;Renderers&#039;&#039; which are maintained by a factory of the &#039;&#039;Visualization&#039;&#039;. A  &#039;&#039;Render&#039;&#039; has to perform two tasks:&lt;br /&gt;
&lt;br /&gt;
* Providing a bounding box of the item. This box is used to determine if the item must actually be painted or if it would not be visible anyway. &lt;br /&gt;
* Providing the painting routine of the item. Paintings may be executed by the &#039;&#039;Renderer&#039;&#039; itself or delegated to other objects which are accessible of the &#039;&#039;Renderer&#039;&#039;. The painting routines are not restricted in any way, but they representation should not exceed the bounding box of the item. &lt;br /&gt;
&lt;br /&gt;
Rendering is always performed on a repaint of the &#039;&#039;Display&#039;&#039;. A repaint can be requested by the &#039;&#039;Visualization&#039;&#039;, on user interaction, and on events like resizing the component, getting the focus, or changing the coordinate system of the view. However, as repaints may occur very often, developers have to ascertain that rendering jobs can are performed fast, otherwise, the performance of the whole visualization would suffer.&lt;br /&gt;
&lt;br /&gt;
=Details=&lt;br /&gt;
&lt;br /&gt;
==Package Structure==&lt;br /&gt;
&lt;br /&gt;
Following picture shows the most important packages of &#039;&#039;&#039;prefuse&#039;&#039;&#039; regarding to the [[Visualization Pipeline]]:&lt;br /&gt;
&lt;br /&gt;
[[Image:prefuse_package_guide.gif|600px]]&lt;br /&gt;
&lt;br /&gt;
These packages also contain predefined components. A default nodes and edges provide standard functionality of abstract data, standard functionality is also available in visual analogous of them. A default filter transforms all defined abstract entities to visual ones. Further, also some special functionality for common requirements are provided by own components. &lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Renderers&#039;&#039;&#039;: &#039;&#039;EdgeRenderer&#039;&#039; to render edges between graph or tree nodes, a &#039;&#039;LableRenderer&#039;&#039; to render test items, and a &#039;&#039;PolygoneRenderer&#039;&#039; to render geometrical items. &lt;br /&gt;
* &#039;&#039;&#039;Layouts&#039;&#039;&#039;: &#039;&#039;RandomLayout&#039;&#039;, &#039;&#039;GridLayout&#039;&#039;, and some more to place non related data, &#039;&#039;ForceDirectedLayout&#039;&#039;, &#039;&#039;TreeLayout&#039;&#039;, &#039;&#039;RadialTreeLayout&#039;&#039; and others to render trees and graphs.&lt;br /&gt;
* &#039;&#039;&#039;Controls&#039;&#039;&#039;: &#039;&#039;DragControl&#039;&#039;, &#039;&#039;ZoomControl&#039;&#039;, &#039;&#039;PanControl&#039;&#039;, &#039;&#039;ToolTipControl&#039;&#039; and several others to react on user interactions. &lt;br /&gt;
&lt;br /&gt;
In simple visualizations the predefined functionality will meet most requirements. If special requirements are needed the default functionality supports a step-wise developing as results can be communicated by these components until the own functionality is implemented.&lt;br /&gt;
&lt;br /&gt;
==Coordinates in prefuse==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;prefuse&#039;&#039;&#039; works with two different coordinate systems. Absolute coordinates are device-independent logical coordinates. All visual attributes like positions or sizes are defined in absolute coordinates. In contrast, view coordinates are device-depended (screen). Transformations between absolute and view coordinates are done automatically by Java painting routines. View coordinates are influenced by the system and device driver (e.g., the absolute point (0,0) is the topmost left point of the actual graphical component which may be on any position at the screen). Further, view coordinates may also be manipulated manually by using an affine transformation matrix which applies linear transformations on absolute coordinates before device-dependent routines convert them to screen coordinates. &lt;br /&gt;
&lt;br /&gt;
A &#039;&#039;&#039;prefuse&#039;&#039;&#039; &#039;&#039;Display&#039;&#039; provides the most important manipulating methods of this matrix. [[Zoom]]ing, [[pan]]ning, and rotation of the whole view are only done by changing the view coordinates. So, as absolute coordinates are never concerned of such transformations and translations, a user must never consider the actual view in layout, assignment, or painting routines. &lt;br /&gt;
&lt;br /&gt;
There are several different ways on how to apply such transformations, additionally, the &#039;&#039;Display&#039;&#039; also supports animated transformations. &lt;br /&gt;
&lt;br /&gt;
==User Interactions==&lt;br /&gt;
&lt;br /&gt;
Mouse or keyboard events are treated by using &#039;&#039;ControlListener&#039;&#039;. Whenever an event occurs which is handled by a &#039;&#039;ControlListener&#039;&#039;, the &#039;&#039;Display&#039;&#039; delegates the event to the respective routine. A &#039;&#039;ControlListener&#039;&#039; differs automatically which visual element is concerned of the event (the view itself or a &#039;&#039;VisualItem&#039;&#039; on the view). &lt;br /&gt;
&lt;br /&gt;
A &#039;&#039;ControlListener&#039;&#039; may just perform simple task like changing the mouse cursor or editing the label of an item. But, in more sophisticated applications, also task like loading new data or dragging items on the view may also be handled. Therefore, a &#039;&#039;ControlListener&#039;&#039; may also work with &#039;&#039;ActionLists&#039;&#039; to execute such tasks. Further, a &#039;&#039;ControlListener&#039;&#039; has also access to the &#039;&#039;Display&#039;&#039; to call methods like zooming or panning. Typically, each &#039;&#039;ControlListener&#039;&#039; forces a repaint when its job is done.  &lt;br /&gt;
&lt;br /&gt;
Most of standard functionality is already predefined in &#039;&#039;prefuse&#039;&#039; and the wanted listeners just have to be set to the &#039;&#039;Display&#039;&#039;. However, the &#039;&#039;Display&#039;&#039; can handle a countless of different listener. Hence, typically only a few listeners must be defined manually as they can be mixed with default ones.  &lt;br /&gt;
&lt;br /&gt;
=Conclusion=&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;prefuse&#039;&#039;&#039; is a very powerful toolkit, providing a large set of components and methods a developer needs to build an [[Information Visualization]]. The [[polylithic design]] is not that easy to understand in the beginning of a development, but once conceived, a visualization is easy to realize even if really special demands have to be fulfilled. Furthermore, using Prefuse forces a clear and well designed architecture of own applications.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;prefuse&#039;&#039;&#039; was created with most attention paid to developers who will finally work with the toolkit. In an evaluation study this goal was approved too. In the meanwhile, there is also a not so small community using and upgrading the toolkit, which is an argue for its usability.&lt;br /&gt;
&lt;br /&gt;
= External links =&lt;br /&gt;
*[http://prefuse.org prefuse Homepage]&lt;br /&gt;
*[http://vw.indiana.edu/ivsi2004/jherr/index.html prefuse Position Paper]&lt;br /&gt;
*[http://sourceforge.net/forum/forum.php?forum_id=343013 prefuse Help Forum]&lt;br /&gt;
&lt;br /&gt;
= References =&lt;br /&gt;
*[Heer, 2004] Jeffrey Heer. [http://jheer.org/publications/2004-Heer-prefuse-Masters.pdf prefuse: a software framework for interactive information visualization]. Masters of Science, Computer Science Division, University of California, Berkeley, 2004.&lt;br /&gt;
*[Heer, 2005] Jeffrey Heer, Stuart K. Card, and James A. Landay. [http://jheer.org/publications/2005-prefuse-CHI.pdf prefuse: a toolkit for interactive information visualization. In &#039;&#039;CHI 2005, Human Factors in Computing Systems&#039;&#039;], 2005.&lt;br /&gt;
*[Heer, 2006a] Jeffrey Heer, prefuse API documentation, Retrieved at: July 06, 2006, http://prefuse.org&lt;br /&gt;
*[Heer, 2006b] Jeffrey Heer, prefuse manual, Retrieved at: July 06, 2006, http://prefuse.org&lt;br /&gt;
*[Sun Microsystems, 2001] Sun Microsystems, Programmer’s Guide to the Java 2DTM API - Enhanced Graphics and Imaging for Java, Retrieved at: April 20, 2006, http://java.sun.com/j2se/1.4/pdf/j2d-book.pdf&lt;br /&gt;
&lt;br /&gt;
[[Category:Toolkits]]&lt;/div&gt;</summary>
		<author><name>Anfe</name></author>
	</entry>
	<entry>
		<id>https://infovis-wiki.net/w/index.php?title=Prefuse&amp;diff=10111</id>
		<title>Prefuse</title>
		<link rel="alternate" type="text/html" href="https://infovis-wiki.net/w/index.php?title=Prefuse&amp;diff=10111"/>
		<updated>2006-07-06T01:38:04Z</updated>

		<summary type="html">&lt;p&gt;Anfe: /* Visual Structures */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Summary =&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Author&#039;&#039;&#039;: Jeffrey Heer / UC Berkeley&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Project Webpage&#039;&#039;&#039;: http://prefuse.sourceforge.net&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Current Version&#039;&#039;&#039;: beta, June 15, 2006&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Requirements&#039;&#039;&#039;: Java 1.4&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Overview:&#039;&#039;&#039; using Java2D graphics library; pipeline architecture; animation and rendering support&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Base data structures&#039;&#039;&#039;: Table, Graph, Tree&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Included visualization techniques:&#039;&#039;&#039; [http://www.cs.umd.edu/hcil/fisheyemenu/ Fisheye Menu], [http://prefuse.sourceforge.net/demos-radial.html Radial Graph], [http://www.cs.umd.edu/hcil/treemap/ Treemap], [http://prefuse.sourceforge.net/demos-distortion.html F+C Distortion]&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Supported File Formats&#039;&#039;&#039;: XGMML (XML), TreeML (XML), tab-delimited text, HDir&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;prefuse&#039;&#039;&#039; is an interactive graphical open source toolkit written in Java. It is thought to support the development of sophisticated, highly interactive, and flexible [[Information Visualization]]s. The architecture of &#039;&#039;&#039;prefuse&#039;&#039;&#039; considers the [[Visualization Pipeline]], a recommendation on how to implement a visualization. To provide flexibility, a [[polylithic design]] was chosen which enables developers to implement only needed functionality and customize these to meet the own requirements. But, in contrast to a [[monolithic design]], this design needs more time to conceive and influences the architecture of the own application heavily (which is not a disadvantage as &#039;&#039;&#039;prefuse&#039;&#039;&#039; is very elaborate). &lt;br /&gt;
&lt;br /&gt;
Typically, &#039;&#039;&#039;prefuse&#039;&#039;&#039; is designed to visualize information which is interrelated so it can be stored in a graph or tree structure, but, also not related data can be used which is stored within a data-table. Even though the structure is hierarchical, the resulting relations must not be considered in the proper graphical representation as layout algorithms are not restricted in any way. The painting of visual items is done by using a renderer which has access to the respective item itself and the Graphics2D context of the view. This approach enables to use the whole range of available painting methods of Java, therefore, the visual representation is completely independent of the toolkit itself.&lt;br /&gt;
&lt;br /&gt;
Besides providing a large set of predefined elements to visualize data, most attention was set toward usability of the visualization. This is obtained by applying several interaction techniques like tooltips or dragging visual elements. But also more sophisticated techniques like [[zoom]]ing, [[pan]]ning, or [[semantic zoom]]ing are supported or partially even provided by the toolkit itself. Further, &#039;&#039;&#039;prefuse&#039;&#039;&#039; clearly distinguishes between absolute and view coordinates. This separation helps users to place all visual elements in a logical way without consideration of later applied visualization techniques that changes the entire view.  &lt;br /&gt;
&lt;br /&gt;
=== Pros ===&lt;br /&gt;
&lt;br /&gt;
* flexible&lt;br /&gt;
* versatile pipeline approach&lt;br /&gt;
* clear and well thought architecture&lt;br /&gt;
* many layout and distortion algorithms included&lt;br /&gt;
* algorithms for force-based physics simulation included&lt;br /&gt;
* custom animations (smooth transitions)&lt;br /&gt;
* color maps&lt;br /&gt;
* query language to navigate within abstract data&lt;br /&gt;
* demos and examples included&lt;br /&gt;
* bounding management&lt;br /&gt;
* open source&lt;br /&gt;
* documentation of code and general guidance available&lt;br /&gt;
* active developer community &lt;br /&gt;
&lt;br /&gt;
=== Cons ===&lt;br /&gt;
&lt;br /&gt;
* [[polylithic design]] takes up more time to conceive and see first results&lt;br /&gt;
* special requirements of a visualization enforce a lot of adapting work&lt;br /&gt;
&lt;br /&gt;
=General Approach=&lt;br /&gt;
&lt;br /&gt;
Going along with the step-wise recommendation of the [[Visualization Pipeline]], a &#039;&#039;&#039;prefuse&#039;&#039;&#039; application consists of different states of data:&lt;br /&gt;
&lt;br /&gt;
[[Image:prefuse_visualization_pipeline.gif|600px]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;prefuse&#039;&#039;&#039; uses a centralized object called &#039;&#039;Visualization&#039;&#039; (former &#039;&#039;ItemRegistry&#039;&#039;) which maintains and manages the whole visualization. This object has to fulfil several tasks. It stores the abstract data as well as visual analogous of these in two different tables. All transformation routines like filtering or rendering are maintained and executed by the &#039;&#039;Visualization&#039;&#039; too. Further, it maintains at least one &#039;&#039;Display&#039;&#039;, a graphical component which can represent visual data of &#039;&#039;&#039;prefuse&#039;&#039;&#039;. &lt;br /&gt;
&lt;br /&gt;
Transformation routines are defined as &#039;&#039;Actions&#039;&#039; which are combined in &#039;&#039;ActionLists&#039;&#039;. An &#039;&#039;ActionList&#039;&#039; is an executable container which is started of the &#039;&#039;Visualization&#039;&#039; whenever necessary. Once it is started, all defined &#039;&#039;Actions&#039;&#039; are executed in the given sequence. Typically, the last called &#039;&#039;Action&#039;&#039; is the &#039;&#039;RepaintAction&#039;&#039; which forces all defined &#039;&#039;Displays&#039;&#039; to perform a repaint. &lt;br /&gt;
&lt;br /&gt;
A &#039;&#039;Display&#039;&#039; is the view of &#039;&#039;&#039;prefuse&#039;&#039;&#039;. It can be embedded in each Java Swing application. The main task of a &#039;&#039;Display&#039;&#039; is the painting of visual structures which are defined in the respective &#039;&#039;Visualization&#039;&#039;. Whenever the &#039;&#039;Display&#039;&#039; performs a repaint it requests all visual items and checks all bounds of them (bounding management). If an item is within the own area the respective rendering mechanism is called.  &lt;br /&gt;
&lt;br /&gt;
Another important task of the &#039;&#039;Display&#039;&#039; is the providing of navigation techniques like [[zoom]]ing or [[pan]]ning. The entire view is managed by an own view coordinate system which is described with an affine transformation matrix. The most important functionality to work with this coordinate system is already predefined. &lt;br /&gt;
&lt;br /&gt;
Furthermore, a &#039;&#039;Display&#039;&#039; also maintains a set of &#039;&#039;ControlListener&#039;&#039; which are used to process user interactions (mouse or keyboard events). Whenever such an event occurs the respective listener is called. This listener already differs on where the event happened (e.g., blank area or a certain item). Further, a &#039;&#039;ControlListener&#039;&#039; may also start an &#039;&#039;ActionList&#039;&#039; again.&lt;br /&gt;
&lt;br /&gt;
==Source Data==&lt;br /&gt;
&lt;br /&gt;
Raw data is the base of the application. Typically, the source of raw data is a file, but also other sources like a database are thinkable. However, &#039;&#039;&#039;prefuse&#039;&#039;&#039; provides several file readers for different formats (CSV, Tab-Delimitated, etc.) that can be transformed into a data table. Further, some readers also support the reading of SQL-Database. If another source is needed, a reader can be written manually.&lt;br /&gt;
&lt;br /&gt;
Once the raw data is read, it is transformed into abstract data and stored within a data table.&lt;br /&gt;
&lt;br /&gt;
==Data Table==&lt;br /&gt;
&lt;br /&gt;
The data table which is used to store abstract data works with data types and a definition schema which maps relations between data type and table. That means, each row contains a data record, and each column contains data values for a named data field with a specific data type. Each record of the table is referred as a &#039;&#039;Tuple&#039;&#039;. &lt;br /&gt;
&lt;br /&gt;
Furthermore, instead of the table itself, a graph or tree may be used to store interrelated data. Instead of &#039;&#039;Tuples&#039;&#039;, records are referred as &#039;&#039;Nodes&#039;&#039; which are connected to others with &#039;&#039;Edges&#039;&#039;. Additionally, a tree has one defined root &#039;&#039;Node&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Abstract data does not contain any visual information like assignment attributes or color settings. Instead, visual attributes are extracted out of the abstract data following a defined logic.&lt;br /&gt;
&lt;br /&gt;
==Visual Abstaction==&lt;br /&gt;
&lt;br /&gt;
Visual structures are created when filtering the data container which contains abstract data. In case of a visualization that displays all items from the beginning on, the filtering routine must only executed once at initializing time. If the visual content changes dynamically, the filtering is executed on certain user interactions by calling a defined filtering &#039;&#039;ActionList&#039;&#039;. &lt;br /&gt;
&lt;br /&gt;
A visual structure is referred as &#039;&#039;VisualItem&#039;&#039; which may distinguished as &#039;&#039;VisualNode&#039;&#039;, &#039;&#039;VisualEdge&#039;&#039;, or an aggregated item which consists of several other items. However, as a &#039;&#039;VisualItem&#039;&#039; is extended of the respective abstract entity it has full access to all abstract information too. &lt;br /&gt;
&lt;br /&gt;
The filtering routine which transforms the abstract data to visual analogues typically consists of following &#039;&#039;Actions&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Filter&#039;&#039;&#039;: This &#039;&#039;Action&#039;&#039; is responsible to transform the abstract data of the backing table to visual analogues. If no special conditions are defined, the filter creates for each &#039;&#039;Tuple&#039;&#039; a visual instance and stores them in a second table. Additionally, a filter also performs a garbage collection and may set visibility attributes of the created items. &lt;br /&gt;
* &#039;&#039;&#039;Layout&#039;&#039;&#039;: A layout takes care about placing the &#039;&#039;VisualItems&#039;&#039;. Several common algorithms for graphs or trees are already predefined (e.g., &#039;&#039;ForceDirectedLayout&#039;&#039; or &#039;&#039;RadialTreeLayout&#039;&#039;). &lt;br /&gt;
* &#039;&#039;&#039;Assignment&#039;&#039;&#039;: Besides layouting, also other assignments may be performed during the filtering process. Such assignments directly changes visual attributes of &#039;&#039;VisualItems&#039;&#039; like color, sizes, fonts, etc.&lt;br /&gt;
&lt;br /&gt;
A visual structure may also contain a paint routine, but, as all painting jobs are initialized or performed by separated renderers, these issues may also be executed by the renderer itself or any other object.&lt;br /&gt;
&lt;br /&gt;
==View==&lt;br /&gt;
&lt;br /&gt;
Typically, the rendered visual structure is not stored, instead, they are re-rendered whenever needed. However, in case of very complex but constant visual representations it makes sense to hold items in an offscreen image. &lt;br /&gt;
&lt;br /&gt;
Each &#039;&#039;VisualItem&#039;&#039; has got one or more associated &#039;&#039;Renderers&#039;&#039; which are maintained by a factory of the &#039;&#039;Visualization&#039;&#039;. A  &#039;&#039;Render&#039;&#039; has to perform two tasks:&lt;br /&gt;
&lt;br /&gt;
* Providing a bounding box of the item. This box is used to determine if the item must actually be painted or if it would not be visible anyway. &lt;br /&gt;
* Providing the painting routine of the item. Paintings may be executed by the &#039;&#039;Renderer&#039;&#039; itself or delegated to other objects which are accessible of the &#039;&#039;Renderer&#039;&#039;. The painting routines are not restricted in any way, but they representation should not exceed the bounding box of the item. &lt;br /&gt;
&lt;br /&gt;
Rendering is always performed on a repaint of the &#039;&#039;Display&#039;&#039;. A repaint can be requested by the &#039;&#039;Visualization&#039;&#039;, on user interaction, and on events like resizing the component, getting the focus, or changing the coordinate system of the view. However, as repaints may occur very often, developers have to ascertain that rendering jobs can are performed fast, otherwise, the performance of the whole visualization would suffer.&lt;br /&gt;
&lt;br /&gt;
=Details=&lt;br /&gt;
&lt;br /&gt;
==Package Structure==&lt;br /&gt;
&lt;br /&gt;
Following picture shows the most important packages of &#039;&#039;&#039;prefuse&#039;&#039;&#039; regarding to the [[Visualization Pipeline]]:&lt;br /&gt;
&lt;br /&gt;
[[Image:prefuse_package_guide.gif|600px]]&lt;br /&gt;
&lt;br /&gt;
These packages also contain predefined components. A default nodes and edges provide standard functionality of abstract data, standard functionality is also available in visual analogous of them. A default filter transforms all defined abstract entities to visual ones. Further, also some special functionality for common requirements are provided by own components. &lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Renderers&#039;&#039;&#039;: &#039;&#039;EdgeRenderer&#039;&#039; to render edges between graph or tree nodes, a &#039;&#039;LableRenderer&#039;&#039; to render test items, and a &#039;&#039;PolygoneRenderer&#039;&#039; to render geometrical items. &lt;br /&gt;
* &#039;&#039;&#039;Layouts&#039;&#039;&#039;: &#039;&#039;RandomLayout&#039;&#039;, &#039;&#039;GridLayout&#039;&#039;, and some more to place non related data, &#039;&#039;ForceDirectedLayout&#039;&#039;, &#039;&#039;TreeLayout&#039;&#039;, &#039;&#039;RadialTreeLayout&#039;&#039; and others to render trees and graphs.&lt;br /&gt;
* &#039;&#039;&#039;Controls&#039;&#039;&#039;: &#039;&#039;DragControl&#039;&#039;, &#039;&#039;ZoomControl&#039;&#039;, &#039;&#039;PanControl&#039;&#039;, &#039;&#039;ToolTipControl&#039;&#039; and several others to react on user interactions. &lt;br /&gt;
&lt;br /&gt;
In simple visualizations the predefined functionality will meet most requirements. If special requirements are needed the default functionality supports a step-wise developing as results can be communicated by these components until the own functionality is implemented.&lt;br /&gt;
&lt;br /&gt;
==Coordinates in prefuse==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;prefuse&#039;&#039;&#039; works with two different coordinate systems. Absolute coordinates are device-independent logical coordinates. All visual attributes like positions or sizes are defined in absolute coordinates. In contrast, view coordinates are device-depended (screen). Transformations between absolute and view coordinates are done automatically by Java painting routines. View coordinates are influenced by the system and device driver (e.g., the absolute point (0,0) is the topmost left point of the actual graphical component which may be on any position at the screen). Further, view coordinates may also be manipulated manually by using an affine transformation matrix which applies linear transformations on absolute coordinates before device-dependent routines convert them to screen coordinates. &lt;br /&gt;
&lt;br /&gt;
A &#039;&#039;&#039;prefuse&#039;&#039;&#039; &#039;&#039;Display&#039;&#039; provides the most important manipulating methods of this matrix. [[Zoom]]ing, [[pan]]ning, and rotation of the whole view are only done by changing the view coordinates. So, as absolute coordinates are never concerned of such transformations and translations, a user must never consider the actual view in layout, assignment, or painting routines. &lt;br /&gt;
&lt;br /&gt;
There are several different ways on how to apply such transformations, additionally, the &#039;&#039;Display&#039;&#039; also supports animated transformations. &lt;br /&gt;
&lt;br /&gt;
==User Interactions==&lt;br /&gt;
&lt;br /&gt;
Mouse or keyboard events are treated by using &#039;&#039;ControlListener&#039;&#039;. Whenever an event occurs which is handled by a &#039;&#039;ControlListener&#039;&#039;, the &#039;&#039;Display&#039;&#039; delegates the event to the respective routine. A &#039;&#039;ControlListener&#039;&#039; differs automatically which visual element is concerned of the event (the view itself or a &#039;&#039;VisualItem&#039;&#039; on the view). &lt;br /&gt;
&lt;br /&gt;
A &#039;&#039;ControlListener&#039;&#039; may just perform simple task like changing the mouse cursor or editing the label of an item. But, in more sophisticated applications, also task like loading new data or dragging items on the view may also be handled. Therefore, a &#039;&#039;ControlListener&#039;&#039; may also work with &#039;&#039;ActionLists&#039;&#039; to execute such tasks. Further, a &#039;&#039;ControlListener&#039;&#039; has also access to the &#039;&#039;Display&#039;&#039; to call methods like zooming or panning. Typically, each &#039;&#039;ControlListener&#039;&#039; forces a repaint when its job is done.  &lt;br /&gt;
&lt;br /&gt;
Most of standard functionality is already predefined in &#039;&#039;prefuse&#039;&#039; and the wanted listeners just have to be set to the &#039;&#039;Display&#039;&#039;. However, the &#039;&#039;Display&#039;&#039; can handle a countless of different listener. Hence, typically only a few listeners must be defined manually as they can be mixed with default ones.  &lt;br /&gt;
&lt;br /&gt;
=Conclusion=&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;prefuse&#039;&#039;&#039; is a very powerful toolkit, providing a large set of components and methods a developer needs to build an [[Information Visualization]]. The [[polylithic design]] is not that easy to understand in the beginning of a development, but once conceived, a visualization is easy to realize even if really special demands have to be fulfilled. Furthermore, using Prefuse forces a clear and well designed architecture of own applications.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;prefuse&#039;&#039;&#039; was created with most attention paid to developers who will finally work with the toolkit. In an evaluation study this goal was approved too. In the meanwhile, there is also a not so small community using and upgrading the toolkit, which is an argue for its usability.&lt;br /&gt;
&lt;br /&gt;
= External links =&lt;br /&gt;
*[http://prefuse.org prefuse Homepage]&lt;br /&gt;
*[http://vw.indiana.edu/ivsi2004/jherr/index.html prefuse Position Paper]&lt;br /&gt;
*[http://sourceforge.net/forum/forum.php?forum_id=343013 prefuse Help Forum]&lt;br /&gt;
&lt;br /&gt;
= References =&lt;br /&gt;
*[Heer, 2004] Jeffrey Heer. [http://jheer.org/publications/2004-Heer-prefuse-Masters.pdf prefuse: a software framework for interactive information visualization]. Masters of Science, Computer Science Division, University of California, Berkeley, 2004.&lt;br /&gt;
*[Heer, 2005] Jeffrey Heer, Stuart K. Card, and James A. Landay. [http://jheer.org/publications/2005-prefuse-CHI.pdf prefuse: a toolkit for interactive information visualization. In &#039;&#039;CHI 2005, Human Factors in Computing Systems&#039;&#039;], 2005.&lt;br /&gt;
*[Heer, 2006a] Jeffrey Heer, prefuse API documentation, Retrieved at: July 06, 2006, http://prefuse.org&lt;br /&gt;
*[Heer, 2006b] Jeffrey Heer, prefuse manual, Retrieved at: July 06, 2006, http://prefuse.org&lt;br /&gt;
*[Sun Microsystems, 2001] Sun Microsystems, Programmer’s Guide to the Java 2DTM API - Enhanced Graphics and Imaging for Java, Retrieved at: April 20, 2006, http://java.sun.com/j2se/1.4/pdf/j2d-book.pdf&lt;br /&gt;
&lt;br /&gt;
[[Category:Toolkits]]&lt;/div&gt;</summary>
		<author><name>Anfe</name></author>
	</entry>
	<entry>
		<id>https://infovis-wiki.net/w/index.php?title=Prefuse&amp;diff=10110</id>
		<title>Prefuse</title>
		<link rel="alternate" type="text/html" href="https://infovis-wiki.net/w/index.php?title=Prefuse&amp;diff=10110"/>
		<updated>2006-07-06T01:37:44Z</updated>

		<summary type="html">&lt;p&gt;Anfe: /* Abstract Data */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Summary =&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Author&#039;&#039;&#039;: Jeffrey Heer / UC Berkeley&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Project Webpage&#039;&#039;&#039;: http://prefuse.sourceforge.net&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Current Version&#039;&#039;&#039;: beta, June 15, 2006&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Requirements&#039;&#039;&#039;: Java 1.4&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Overview:&#039;&#039;&#039; using Java2D graphics library; pipeline architecture; animation and rendering support&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Base data structures&#039;&#039;&#039;: Table, Graph, Tree&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Included visualization techniques:&#039;&#039;&#039; [http://www.cs.umd.edu/hcil/fisheyemenu/ Fisheye Menu], [http://prefuse.sourceforge.net/demos-radial.html Radial Graph], [http://www.cs.umd.edu/hcil/treemap/ Treemap], [http://prefuse.sourceforge.net/demos-distortion.html F+C Distortion]&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Supported File Formats&#039;&#039;&#039;: XGMML (XML), TreeML (XML), tab-delimited text, HDir&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;prefuse&#039;&#039;&#039; is an interactive graphical open source toolkit written in Java. It is thought to support the development of sophisticated, highly interactive, and flexible [[Information Visualization]]s. The architecture of &#039;&#039;&#039;prefuse&#039;&#039;&#039; considers the [[Visualization Pipeline]], a recommendation on how to implement a visualization. To provide flexibility, a [[polylithic design]] was chosen which enables developers to implement only needed functionality and customize these to meet the own requirements. But, in contrast to a [[monolithic design]], this design needs more time to conceive and influences the architecture of the own application heavily (which is not a disadvantage as &#039;&#039;&#039;prefuse&#039;&#039;&#039; is very elaborate). &lt;br /&gt;
&lt;br /&gt;
Typically, &#039;&#039;&#039;prefuse&#039;&#039;&#039; is designed to visualize information which is interrelated so it can be stored in a graph or tree structure, but, also not related data can be used which is stored within a data-table. Even though the structure is hierarchical, the resulting relations must not be considered in the proper graphical representation as layout algorithms are not restricted in any way. The painting of visual items is done by using a renderer which has access to the respective item itself and the Graphics2D context of the view. This approach enables to use the whole range of available painting methods of Java, therefore, the visual representation is completely independent of the toolkit itself.&lt;br /&gt;
&lt;br /&gt;
Besides providing a large set of predefined elements to visualize data, most attention was set toward usability of the visualization. This is obtained by applying several interaction techniques like tooltips or dragging visual elements. But also more sophisticated techniques like [[zoom]]ing, [[pan]]ning, or [[semantic zoom]]ing are supported or partially even provided by the toolkit itself. Further, &#039;&#039;&#039;prefuse&#039;&#039;&#039; clearly distinguishes between absolute and view coordinates. This separation helps users to place all visual elements in a logical way without consideration of later applied visualization techniques that changes the entire view.  &lt;br /&gt;
&lt;br /&gt;
=== Pros ===&lt;br /&gt;
&lt;br /&gt;
* flexible&lt;br /&gt;
* versatile pipeline approach&lt;br /&gt;
* clear and well thought architecture&lt;br /&gt;
* many layout and distortion algorithms included&lt;br /&gt;
* algorithms for force-based physics simulation included&lt;br /&gt;
* custom animations (smooth transitions)&lt;br /&gt;
* color maps&lt;br /&gt;
* query language to navigate within abstract data&lt;br /&gt;
* demos and examples included&lt;br /&gt;
* bounding management&lt;br /&gt;
* open source&lt;br /&gt;
* documentation of code and general guidance available&lt;br /&gt;
* active developer community &lt;br /&gt;
&lt;br /&gt;
=== Cons ===&lt;br /&gt;
&lt;br /&gt;
* [[polylithic design]] takes up more time to conceive and see first results&lt;br /&gt;
* special requirements of a visualization enforce a lot of adapting work&lt;br /&gt;
&lt;br /&gt;
=General Approach=&lt;br /&gt;
&lt;br /&gt;
Going along with the step-wise recommendation of the [[Visualization Pipeline]], a &#039;&#039;&#039;prefuse&#039;&#039;&#039; application consists of different states of data:&lt;br /&gt;
&lt;br /&gt;
[[Image:prefuse_visualization_pipeline.gif|600px]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;prefuse&#039;&#039;&#039; uses a centralized object called &#039;&#039;Visualization&#039;&#039; (former &#039;&#039;ItemRegistry&#039;&#039;) which maintains and manages the whole visualization. This object has to fulfil several tasks. It stores the abstract data as well as visual analogous of these in two different tables. All transformation routines like filtering or rendering are maintained and executed by the &#039;&#039;Visualization&#039;&#039; too. Further, it maintains at least one &#039;&#039;Display&#039;&#039;, a graphical component which can represent visual data of &#039;&#039;&#039;prefuse&#039;&#039;&#039;. &lt;br /&gt;
&lt;br /&gt;
Transformation routines are defined as &#039;&#039;Actions&#039;&#039; which are combined in &#039;&#039;ActionLists&#039;&#039;. An &#039;&#039;ActionList&#039;&#039; is an executable container which is started of the &#039;&#039;Visualization&#039;&#039; whenever necessary. Once it is started, all defined &#039;&#039;Actions&#039;&#039; are executed in the given sequence. Typically, the last called &#039;&#039;Action&#039;&#039; is the &#039;&#039;RepaintAction&#039;&#039; which forces all defined &#039;&#039;Displays&#039;&#039; to perform a repaint. &lt;br /&gt;
&lt;br /&gt;
A &#039;&#039;Display&#039;&#039; is the view of &#039;&#039;&#039;prefuse&#039;&#039;&#039;. It can be embedded in each Java Swing application. The main task of a &#039;&#039;Display&#039;&#039; is the painting of visual structures which are defined in the respective &#039;&#039;Visualization&#039;&#039;. Whenever the &#039;&#039;Display&#039;&#039; performs a repaint it requests all visual items and checks all bounds of them (bounding management). If an item is within the own area the respective rendering mechanism is called.  &lt;br /&gt;
&lt;br /&gt;
Another important task of the &#039;&#039;Display&#039;&#039; is the providing of navigation techniques like [[zoom]]ing or [[pan]]ning. The entire view is managed by an own view coordinate system which is described with an affine transformation matrix. The most important functionality to work with this coordinate system is already predefined. &lt;br /&gt;
&lt;br /&gt;
Furthermore, a &#039;&#039;Display&#039;&#039; also maintains a set of &#039;&#039;ControlListener&#039;&#039; which are used to process user interactions (mouse or keyboard events). Whenever such an event occurs the respective listener is called. This listener already differs on where the event happened (e.g., blank area or a certain item). Further, a &#039;&#039;ControlListener&#039;&#039; may also start an &#039;&#039;ActionList&#039;&#039; again.&lt;br /&gt;
&lt;br /&gt;
==Source Data==&lt;br /&gt;
&lt;br /&gt;
Raw data is the base of the application. Typically, the source of raw data is a file, but also other sources like a database are thinkable. However, &#039;&#039;&#039;prefuse&#039;&#039;&#039; provides several file readers for different formats (CSV, Tab-Delimitated, etc.) that can be transformed into a data table. Further, some readers also support the reading of SQL-Database. If another source is needed, a reader can be written manually.&lt;br /&gt;
&lt;br /&gt;
Once the raw data is read, it is transformed into abstract data and stored within a data table.&lt;br /&gt;
&lt;br /&gt;
==Data Table==&lt;br /&gt;
&lt;br /&gt;
The data table which is used to store abstract data works with data types and a definition schema which maps relations between data type and table. That means, each row contains a data record, and each column contains data values for a named data field with a specific data type. Each record of the table is referred as a &#039;&#039;Tuple&#039;&#039;. &lt;br /&gt;
&lt;br /&gt;
Furthermore, instead of the table itself, a graph or tree may be used to store interrelated data. Instead of &#039;&#039;Tuples&#039;&#039;, records are referred as &#039;&#039;Nodes&#039;&#039; which are connected to others with &#039;&#039;Edges&#039;&#039;. Additionally, a tree has one defined root &#039;&#039;Node&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Abstract data does not contain any visual information like assignment attributes or color settings. Instead, visual attributes are extracted out of the abstract data following a defined logic.&lt;br /&gt;
&lt;br /&gt;
==Visual Structures==&lt;br /&gt;
&lt;br /&gt;
Visual structures are created when filtering the data container which contains abstract data. In case of a visualization that displays all items from the beginning on, the filtering routine must only executed once at initializing time. If the visual content changes dynamically, the filtering is executed on certain user interactions by calling a defined filtering &#039;&#039;ActionList&#039;&#039;. &lt;br /&gt;
&lt;br /&gt;
A visual structure is referred as &#039;&#039;VisualItem&#039;&#039; which may distinguished as &#039;&#039;VisualNode&#039;&#039;, &#039;&#039;VisualEdge&#039;&#039;, or an aggregated item which consists of several other items. However, as a &#039;&#039;VisualItem&#039;&#039; is extended of the respective abstract entity it has full access to all abstract information too. &lt;br /&gt;
&lt;br /&gt;
The filtering routine which transforms the abstract data to visual analogues typically consists of following &#039;&#039;Actions&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Filter&#039;&#039;&#039;: This &#039;&#039;Action&#039;&#039; is responsible to transform the abstract data of the backing table to visual analogues. If no special conditions are defined, the filter creates for each &#039;&#039;Tuple&#039;&#039; a visual instance and stores them in a second table. Additionally, a filter also performs a garbage collection and may set visibility attributes of the created items. &lt;br /&gt;
* &#039;&#039;&#039;Layout&#039;&#039;&#039;: A layout takes care about placing the &#039;&#039;VisualItems&#039;&#039;. Several common algorithms for graphs or trees are already predefined (e.g., &#039;&#039;ForceDirectedLayout&#039;&#039; or &#039;&#039;RadialTreeLayout&#039;&#039;). &lt;br /&gt;
* &#039;&#039;&#039;Assignment&#039;&#039;&#039;: Besides layouting, also other assignments may be performed during the filtering process. Such assignments directly changes visual attributes of &#039;&#039;VisualItems&#039;&#039; like color, sizes, fonts, etc.&lt;br /&gt;
&lt;br /&gt;
A visual structure may also contain a paint routine, but, as all painting jobs are initialized or performed by separated renderers, these issues may also be executed by the renderer itself or any other object. &lt;br /&gt;
&lt;br /&gt;
==View==&lt;br /&gt;
&lt;br /&gt;
Typically, the rendered visual structure is not stored, instead, they are re-rendered whenever needed. However, in case of very complex but constant visual representations it makes sense to hold items in an offscreen image. &lt;br /&gt;
&lt;br /&gt;
Each &#039;&#039;VisualItem&#039;&#039; has got one or more associated &#039;&#039;Renderers&#039;&#039; which are maintained by a factory of the &#039;&#039;Visualization&#039;&#039;. A  &#039;&#039;Render&#039;&#039; has to perform two tasks:&lt;br /&gt;
&lt;br /&gt;
* Providing a bounding box of the item. This box is used to determine if the item must actually be painted or if it would not be visible anyway. &lt;br /&gt;
* Providing the painting routine of the item. Paintings may be executed by the &#039;&#039;Renderer&#039;&#039; itself or delegated to other objects which are accessible of the &#039;&#039;Renderer&#039;&#039;. The painting routines are not restricted in any way, but they representation should not exceed the bounding box of the item. &lt;br /&gt;
&lt;br /&gt;
Rendering is always performed on a repaint of the &#039;&#039;Display&#039;&#039;. A repaint can be requested by the &#039;&#039;Visualization&#039;&#039;, on user interaction, and on events like resizing the component, getting the focus, or changing the coordinate system of the view. However, as repaints may occur very often, developers have to ascertain that rendering jobs can are performed fast, otherwise, the performance of the whole visualization would suffer.&lt;br /&gt;
&lt;br /&gt;
=Details=&lt;br /&gt;
&lt;br /&gt;
==Package Structure==&lt;br /&gt;
&lt;br /&gt;
Following picture shows the most important packages of &#039;&#039;&#039;prefuse&#039;&#039;&#039; regarding to the [[Visualization Pipeline]]:&lt;br /&gt;
&lt;br /&gt;
[[Image:prefuse_package_guide.gif|600px]]&lt;br /&gt;
&lt;br /&gt;
These packages also contain predefined components. A default nodes and edges provide standard functionality of abstract data, standard functionality is also available in visual analogous of them. A default filter transforms all defined abstract entities to visual ones. Further, also some special functionality for common requirements are provided by own components. &lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Renderers&#039;&#039;&#039;: &#039;&#039;EdgeRenderer&#039;&#039; to render edges between graph or tree nodes, a &#039;&#039;LableRenderer&#039;&#039; to render test items, and a &#039;&#039;PolygoneRenderer&#039;&#039; to render geometrical items. &lt;br /&gt;
* &#039;&#039;&#039;Layouts&#039;&#039;&#039;: &#039;&#039;RandomLayout&#039;&#039;, &#039;&#039;GridLayout&#039;&#039;, and some more to place non related data, &#039;&#039;ForceDirectedLayout&#039;&#039;, &#039;&#039;TreeLayout&#039;&#039;, &#039;&#039;RadialTreeLayout&#039;&#039; and others to render trees and graphs.&lt;br /&gt;
* &#039;&#039;&#039;Controls&#039;&#039;&#039;: &#039;&#039;DragControl&#039;&#039;, &#039;&#039;ZoomControl&#039;&#039;, &#039;&#039;PanControl&#039;&#039;, &#039;&#039;ToolTipControl&#039;&#039; and several others to react on user interactions. &lt;br /&gt;
&lt;br /&gt;
In simple visualizations the predefined functionality will meet most requirements. If special requirements are needed the default functionality supports a step-wise developing as results can be communicated by these components until the own functionality is implemented.&lt;br /&gt;
&lt;br /&gt;
==Coordinates in prefuse==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;prefuse&#039;&#039;&#039; works with two different coordinate systems. Absolute coordinates are device-independent logical coordinates. All visual attributes like positions or sizes are defined in absolute coordinates. In contrast, view coordinates are device-depended (screen). Transformations between absolute and view coordinates are done automatically by Java painting routines. View coordinates are influenced by the system and device driver (e.g., the absolute point (0,0) is the topmost left point of the actual graphical component which may be on any position at the screen). Further, view coordinates may also be manipulated manually by using an affine transformation matrix which applies linear transformations on absolute coordinates before device-dependent routines convert them to screen coordinates. &lt;br /&gt;
&lt;br /&gt;
A &#039;&#039;&#039;prefuse&#039;&#039;&#039; &#039;&#039;Display&#039;&#039; provides the most important manipulating methods of this matrix. [[Zoom]]ing, [[pan]]ning, and rotation of the whole view are only done by changing the view coordinates. So, as absolute coordinates are never concerned of such transformations and translations, a user must never consider the actual view in layout, assignment, or painting routines. &lt;br /&gt;
&lt;br /&gt;
There are several different ways on how to apply such transformations, additionally, the &#039;&#039;Display&#039;&#039; also supports animated transformations. &lt;br /&gt;
&lt;br /&gt;
==User Interactions==&lt;br /&gt;
&lt;br /&gt;
Mouse or keyboard events are treated by using &#039;&#039;ControlListener&#039;&#039;. Whenever an event occurs which is handled by a &#039;&#039;ControlListener&#039;&#039;, the &#039;&#039;Display&#039;&#039; delegates the event to the respective routine. A &#039;&#039;ControlListener&#039;&#039; differs automatically which visual element is concerned of the event (the view itself or a &#039;&#039;VisualItem&#039;&#039; on the view). &lt;br /&gt;
&lt;br /&gt;
A &#039;&#039;ControlListener&#039;&#039; may just perform simple task like changing the mouse cursor or editing the label of an item. But, in more sophisticated applications, also task like loading new data or dragging items on the view may also be handled. Therefore, a &#039;&#039;ControlListener&#039;&#039; may also work with &#039;&#039;ActionLists&#039;&#039; to execute such tasks. Further, a &#039;&#039;ControlListener&#039;&#039; has also access to the &#039;&#039;Display&#039;&#039; to call methods like zooming or panning. Typically, each &#039;&#039;ControlListener&#039;&#039; forces a repaint when its job is done.  &lt;br /&gt;
&lt;br /&gt;
Most of standard functionality is already predefined in &#039;&#039;prefuse&#039;&#039; and the wanted listeners just have to be set to the &#039;&#039;Display&#039;&#039;. However, the &#039;&#039;Display&#039;&#039; can handle a countless of different listener. Hence, typically only a few listeners must be defined manually as they can be mixed with default ones.  &lt;br /&gt;
&lt;br /&gt;
=Conclusion=&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;prefuse&#039;&#039;&#039; is a very powerful toolkit, providing a large set of components and methods a developer needs to build an [[Information Visualization]]. The [[polylithic design]] is not that easy to understand in the beginning of a development, but once conceived, a visualization is easy to realize even if really special demands have to be fulfilled. Furthermore, using Prefuse forces a clear and well designed architecture of own applications.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;prefuse&#039;&#039;&#039; was created with most attention paid to developers who will finally work with the toolkit. In an evaluation study this goal was approved too. In the meanwhile, there is also a not so small community using and upgrading the toolkit, which is an argue for its usability.&lt;br /&gt;
&lt;br /&gt;
= External links =&lt;br /&gt;
*[http://prefuse.org prefuse Homepage]&lt;br /&gt;
*[http://vw.indiana.edu/ivsi2004/jherr/index.html prefuse Position Paper]&lt;br /&gt;
*[http://sourceforge.net/forum/forum.php?forum_id=343013 prefuse Help Forum]&lt;br /&gt;
&lt;br /&gt;
= References =&lt;br /&gt;
*[Heer, 2004] Jeffrey Heer. [http://jheer.org/publications/2004-Heer-prefuse-Masters.pdf prefuse: a software framework for interactive information visualization]. Masters of Science, Computer Science Division, University of California, Berkeley, 2004.&lt;br /&gt;
*[Heer, 2005] Jeffrey Heer, Stuart K. Card, and James A. Landay. [http://jheer.org/publications/2005-prefuse-CHI.pdf prefuse: a toolkit for interactive information visualization. In &#039;&#039;CHI 2005, Human Factors in Computing Systems&#039;&#039;], 2005.&lt;br /&gt;
*[Heer, 2006a] Jeffrey Heer, prefuse API documentation, Retrieved at: July 06, 2006, http://prefuse.org&lt;br /&gt;
*[Heer, 2006b] Jeffrey Heer, prefuse manual, Retrieved at: July 06, 2006, http://prefuse.org&lt;br /&gt;
*[Sun Microsystems, 2001] Sun Microsystems, Programmer’s Guide to the Java 2DTM API - Enhanced Graphics and Imaging for Java, Retrieved at: April 20, 2006, http://java.sun.com/j2se/1.4/pdf/j2d-book.pdf&lt;br /&gt;
&lt;br /&gt;
[[Category:Toolkits]]&lt;/div&gt;</summary>
		<author><name>Anfe</name></author>
	</entry>
	<entry>
		<id>https://infovis-wiki.net/w/index.php?title=Prefuse&amp;diff=10109</id>
		<title>Prefuse</title>
		<link rel="alternate" type="text/html" href="https://infovis-wiki.net/w/index.php?title=Prefuse&amp;diff=10109"/>
		<updated>2006-07-06T01:37:26Z</updated>

		<summary type="html">&lt;p&gt;Anfe: /* Raw Data */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Summary =&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Author&#039;&#039;&#039;: Jeffrey Heer / UC Berkeley&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Project Webpage&#039;&#039;&#039;: http://prefuse.sourceforge.net&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Current Version&#039;&#039;&#039;: beta, June 15, 2006&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Requirements&#039;&#039;&#039;: Java 1.4&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Overview:&#039;&#039;&#039; using Java2D graphics library; pipeline architecture; animation and rendering support&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Base data structures&#039;&#039;&#039;: Table, Graph, Tree&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Included visualization techniques:&#039;&#039;&#039; [http://www.cs.umd.edu/hcil/fisheyemenu/ Fisheye Menu], [http://prefuse.sourceforge.net/demos-radial.html Radial Graph], [http://www.cs.umd.edu/hcil/treemap/ Treemap], [http://prefuse.sourceforge.net/demos-distortion.html F+C Distortion]&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Supported File Formats&#039;&#039;&#039;: XGMML (XML), TreeML (XML), tab-delimited text, HDir&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;prefuse&#039;&#039;&#039; is an interactive graphical open source toolkit written in Java. It is thought to support the development of sophisticated, highly interactive, and flexible [[Information Visualization]]s. The architecture of &#039;&#039;&#039;prefuse&#039;&#039;&#039; considers the [[Visualization Pipeline]], a recommendation on how to implement a visualization. To provide flexibility, a [[polylithic design]] was chosen which enables developers to implement only needed functionality and customize these to meet the own requirements. But, in contrast to a [[monolithic design]], this design needs more time to conceive and influences the architecture of the own application heavily (which is not a disadvantage as &#039;&#039;&#039;prefuse&#039;&#039;&#039; is very elaborate). &lt;br /&gt;
&lt;br /&gt;
Typically, &#039;&#039;&#039;prefuse&#039;&#039;&#039; is designed to visualize information which is interrelated so it can be stored in a graph or tree structure, but, also not related data can be used which is stored within a data-table. Even though the structure is hierarchical, the resulting relations must not be considered in the proper graphical representation as layout algorithms are not restricted in any way. The painting of visual items is done by using a renderer which has access to the respective item itself and the Graphics2D context of the view. This approach enables to use the whole range of available painting methods of Java, therefore, the visual representation is completely independent of the toolkit itself.&lt;br /&gt;
&lt;br /&gt;
Besides providing a large set of predefined elements to visualize data, most attention was set toward usability of the visualization. This is obtained by applying several interaction techniques like tooltips or dragging visual elements. But also more sophisticated techniques like [[zoom]]ing, [[pan]]ning, or [[semantic zoom]]ing are supported or partially even provided by the toolkit itself. Further, &#039;&#039;&#039;prefuse&#039;&#039;&#039; clearly distinguishes between absolute and view coordinates. This separation helps users to place all visual elements in a logical way without consideration of later applied visualization techniques that changes the entire view.  &lt;br /&gt;
&lt;br /&gt;
=== Pros ===&lt;br /&gt;
&lt;br /&gt;
* flexible&lt;br /&gt;
* versatile pipeline approach&lt;br /&gt;
* clear and well thought architecture&lt;br /&gt;
* many layout and distortion algorithms included&lt;br /&gt;
* algorithms for force-based physics simulation included&lt;br /&gt;
* custom animations (smooth transitions)&lt;br /&gt;
* color maps&lt;br /&gt;
* query language to navigate within abstract data&lt;br /&gt;
* demos and examples included&lt;br /&gt;
* bounding management&lt;br /&gt;
* open source&lt;br /&gt;
* documentation of code and general guidance available&lt;br /&gt;
* active developer community &lt;br /&gt;
&lt;br /&gt;
=== Cons ===&lt;br /&gt;
&lt;br /&gt;
* [[polylithic design]] takes up more time to conceive and see first results&lt;br /&gt;
* special requirements of a visualization enforce a lot of adapting work&lt;br /&gt;
&lt;br /&gt;
=General Approach=&lt;br /&gt;
&lt;br /&gt;
Going along with the step-wise recommendation of the [[Visualization Pipeline]], a &#039;&#039;&#039;prefuse&#039;&#039;&#039; application consists of different states of data:&lt;br /&gt;
&lt;br /&gt;
[[Image:prefuse_visualization_pipeline.gif|600px]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;prefuse&#039;&#039;&#039; uses a centralized object called &#039;&#039;Visualization&#039;&#039; (former &#039;&#039;ItemRegistry&#039;&#039;) which maintains and manages the whole visualization. This object has to fulfil several tasks. It stores the abstract data as well as visual analogous of these in two different tables. All transformation routines like filtering or rendering are maintained and executed by the &#039;&#039;Visualization&#039;&#039; too. Further, it maintains at least one &#039;&#039;Display&#039;&#039;, a graphical component which can represent visual data of &#039;&#039;&#039;prefuse&#039;&#039;&#039;. &lt;br /&gt;
&lt;br /&gt;
Transformation routines are defined as &#039;&#039;Actions&#039;&#039; which are combined in &#039;&#039;ActionLists&#039;&#039;. An &#039;&#039;ActionList&#039;&#039; is an executable container which is started of the &#039;&#039;Visualization&#039;&#039; whenever necessary. Once it is started, all defined &#039;&#039;Actions&#039;&#039; are executed in the given sequence. Typically, the last called &#039;&#039;Action&#039;&#039; is the &#039;&#039;RepaintAction&#039;&#039; which forces all defined &#039;&#039;Displays&#039;&#039; to perform a repaint. &lt;br /&gt;
&lt;br /&gt;
A &#039;&#039;Display&#039;&#039; is the view of &#039;&#039;&#039;prefuse&#039;&#039;&#039;. It can be embedded in each Java Swing application. The main task of a &#039;&#039;Display&#039;&#039; is the painting of visual structures which are defined in the respective &#039;&#039;Visualization&#039;&#039;. Whenever the &#039;&#039;Display&#039;&#039; performs a repaint it requests all visual items and checks all bounds of them (bounding management). If an item is within the own area the respective rendering mechanism is called.  &lt;br /&gt;
&lt;br /&gt;
Another important task of the &#039;&#039;Display&#039;&#039; is the providing of navigation techniques like [[zoom]]ing or [[pan]]ning. The entire view is managed by an own view coordinate system which is described with an affine transformation matrix. The most important functionality to work with this coordinate system is already predefined. &lt;br /&gt;
&lt;br /&gt;
Furthermore, a &#039;&#039;Display&#039;&#039; also maintains a set of &#039;&#039;ControlListener&#039;&#039; which are used to process user interactions (mouse or keyboard events). Whenever such an event occurs the respective listener is called. This listener already differs on where the event happened (e.g., blank area or a certain item). Further, a &#039;&#039;ControlListener&#039;&#039; may also start an &#039;&#039;ActionList&#039;&#039; again.&lt;br /&gt;
&lt;br /&gt;
==Source Data==&lt;br /&gt;
&lt;br /&gt;
Raw data is the base of the application. Typically, the source of raw data is a file, but also other sources like a database are thinkable. However, &#039;&#039;&#039;prefuse&#039;&#039;&#039; provides several file readers for different formats (CSV, Tab-Delimitated, etc.) that can be transformed into a data table. Further, some readers also support the reading of SQL-Database. If another source is needed, a reader can be written manually.&lt;br /&gt;
&lt;br /&gt;
Once the raw data is read, it is transformed into abstract data and stored within a data table.&lt;br /&gt;
&lt;br /&gt;
==Abstract Data==&lt;br /&gt;
&lt;br /&gt;
The data table which is used to store abstract data works with data types and a definition schema which maps relations between data type and table. That means, each row contains a data record, and each column contains data values for a named data field with a specific data type. Each record of the table is referred as a &#039;&#039;Tuple&#039;&#039;. &lt;br /&gt;
&lt;br /&gt;
Furthermore, instead of the table itself, a graph or tree may be used to store interrelated data. Instead of &#039;&#039;Tuples&#039;&#039;, records are referred as &#039;&#039;Nodes&#039;&#039; which are connected to others with &#039;&#039;Edges&#039;&#039;. Additionally, a tree has one defined root &#039;&#039;Node&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Abstract data does not contain any visual information like assignment attributes or color settings. Instead, visual attributes are extracted out of the abstract data following a defined logic.&lt;br /&gt;
&lt;br /&gt;
==Visual Structures==&lt;br /&gt;
&lt;br /&gt;
Visual structures are created when filtering the data container which contains abstract data. In case of a visualization that displays all items from the beginning on, the filtering routine must only executed once at initializing time. If the visual content changes dynamically, the filtering is executed on certain user interactions by calling a defined filtering &#039;&#039;ActionList&#039;&#039;. &lt;br /&gt;
&lt;br /&gt;
A visual structure is referred as &#039;&#039;VisualItem&#039;&#039; which may distinguished as &#039;&#039;VisualNode&#039;&#039;, &#039;&#039;VisualEdge&#039;&#039;, or an aggregated item which consists of several other items. However, as a &#039;&#039;VisualItem&#039;&#039; is extended of the respective abstract entity it has full access to all abstract information too. &lt;br /&gt;
&lt;br /&gt;
The filtering routine which transforms the abstract data to visual analogues typically consists of following &#039;&#039;Actions&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Filter&#039;&#039;&#039;: This &#039;&#039;Action&#039;&#039; is responsible to transform the abstract data of the backing table to visual analogues. If no special conditions are defined, the filter creates for each &#039;&#039;Tuple&#039;&#039; a visual instance and stores them in a second table. Additionally, a filter also performs a garbage collection and may set visibility attributes of the created items. &lt;br /&gt;
* &#039;&#039;&#039;Layout&#039;&#039;&#039;: A layout takes care about placing the &#039;&#039;VisualItems&#039;&#039;. Several common algorithms for graphs or trees are already predefined (e.g., &#039;&#039;ForceDirectedLayout&#039;&#039; or &#039;&#039;RadialTreeLayout&#039;&#039;). &lt;br /&gt;
* &#039;&#039;&#039;Assignment&#039;&#039;&#039;: Besides layouting, also other assignments may be performed during the filtering process. Such assignments directly changes visual attributes of &#039;&#039;VisualItems&#039;&#039; like color, sizes, fonts, etc.&lt;br /&gt;
&lt;br /&gt;
A visual structure may also contain a paint routine, but, as all painting jobs are initialized or performed by separated renderers, these issues may also be executed by the renderer itself or any other object. &lt;br /&gt;
&lt;br /&gt;
==View==&lt;br /&gt;
&lt;br /&gt;
Typically, the rendered visual structure is not stored, instead, they are re-rendered whenever needed. However, in case of very complex but constant visual representations it makes sense to hold items in an offscreen image. &lt;br /&gt;
&lt;br /&gt;
Each &#039;&#039;VisualItem&#039;&#039; has got one or more associated &#039;&#039;Renderers&#039;&#039; which are maintained by a factory of the &#039;&#039;Visualization&#039;&#039;. A  &#039;&#039;Render&#039;&#039; has to perform two tasks:&lt;br /&gt;
&lt;br /&gt;
* Providing a bounding box of the item. This box is used to determine if the item must actually be painted or if it would not be visible anyway. &lt;br /&gt;
* Providing the painting routine of the item. Paintings may be executed by the &#039;&#039;Renderer&#039;&#039; itself or delegated to other objects which are accessible of the &#039;&#039;Renderer&#039;&#039;. The painting routines are not restricted in any way, but they representation should not exceed the bounding box of the item. &lt;br /&gt;
&lt;br /&gt;
Rendering is always performed on a repaint of the &#039;&#039;Display&#039;&#039;. A repaint can be requested by the &#039;&#039;Visualization&#039;&#039;, on user interaction, and on events like resizing the component, getting the focus, or changing the coordinate system of the view. However, as repaints may occur very often, developers have to ascertain that rendering jobs can are performed fast, otherwise, the performance of the whole visualization would suffer.&lt;br /&gt;
&lt;br /&gt;
=Details=&lt;br /&gt;
&lt;br /&gt;
==Package Structure==&lt;br /&gt;
&lt;br /&gt;
Following picture shows the most important packages of &#039;&#039;&#039;prefuse&#039;&#039;&#039; regarding to the [[Visualization Pipeline]]:&lt;br /&gt;
&lt;br /&gt;
[[Image:prefuse_package_guide.gif|600px]]&lt;br /&gt;
&lt;br /&gt;
These packages also contain predefined components. A default nodes and edges provide standard functionality of abstract data, standard functionality is also available in visual analogous of them. A default filter transforms all defined abstract entities to visual ones. Further, also some special functionality for common requirements are provided by own components. &lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Renderers&#039;&#039;&#039;: &#039;&#039;EdgeRenderer&#039;&#039; to render edges between graph or tree nodes, a &#039;&#039;LableRenderer&#039;&#039; to render test items, and a &#039;&#039;PolygoneRenderer&#039;&#039; to render geometrical items. &lt;br /&gt;
* &#039;&#039;&#039;Layouts&#039;&#039;&#039;: &#039;&#039;RandomLayout&#039;&#039;, &#039;&#039;GridLayout&#039;&#039;, and some more to place non related data, &#039;&#039;ForceDirectedLayout&#039;&#039;, &#039;&#039;TreeLayout&#039;&#039;, &#039;&#039;RadialTreeLayout&#039;&#039; and others to render trees and graphs.&lt;br /&gt;
* &#039;&#039;&#039;Controls&#039;&#039;&#039;: &#039;&#039;DragControl&#039;&#039;, &#039;&#039;ZoomControl&#039;&#039;, &#039;&#039;PanControl&#039;&#039;, &#039;&#039;ToolTipControl&#039;&#039; and several others to react on user interactions. &lt;br /&gt;
&lt;br /&gt;
In simple visualizations the predefined functionality will meet most requirements. If special requirements are needed the default functionality supports a step-wise developing as results can be communicated by these components until the own functionality is implemented.&lt;br /&gt;
&lt;br /&gt;
==Coordinates in prefuse==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;prefuse&#039;&#039;&#039; works with two different coordinate systems. Absolute coordinates are device-independent logical coordinates. All visual attributes like positions or sizes are defined in absolute coordinates. In contrast, view coordinates are device-depended (screen). Transformations between absolute and view coordinates are done automatically by Java painting routines. View coordinates are influenced by the system and device driver (e.g., the absolute point (0,0) is the topmost left point of the actual graphical component which may be on any position at the screen). Further, view coordinates may also be manipulated manually by using an affine transformation matrix which applies linear transformations on absolute coordinates before device-dependent routines convert them to screen coordinates. &lt;br /&gt;
&lt;br /&gt;
A &#039;&#039;&#039;prefuse&#039;&#039;&#039; &#039;&#039;Display&#039;&#039; provides the most important manipulating methods of this matrix. [[Zoom]]ing, [[pan]]ning, and rotation of the whole view are only done by changing the view coordinates. So, as absolute coordinates are never concerned of such transformations and translations, a user must never consider the actual view in layout, assignment, or painting routines. &lt;br /&gt;
&lt;br /&gt;
There are several different ways on how to apply such transformations, additionally, the &#039;&#039;Display&#039;&#039; also supports animated transformations. &lt;br /&gt;
&lt;br /&gt;
==User Interactions==&lt;br /&gt;
&lt;br /&gt;
Mouse or keyboard events are treated by using &#039;&#039;ControlListener&#039;&#039;. Whenever an event occurs which is handled by a &#039;&#039;ControlListener&#039;&#039;, the &#039;&#039;Display&#039;&#039; delegates the event to the respective routine. A &#039;&#039;ControlListener&#039;&#039; differs automatically which visual element is concerned of the event (the view itself or a &#039;&#039;VisualItem&#039;&#039; on the view). &lt;br /&gt;
&lt;br /&gt;
A &#039;&#039;ControlListener&#039;&#039; may just perform simple task like changing the mouse cursor or editing the label of an item. But, in more sophisticated applications, also task like loading new data or dragging items on the view may also be handled. Therefore, a &#039;&#039;ControlListener&#039;&#039; may also work with &#039;&#039;ActionLists&#039;&#039; to execute such tasks. Further, a &#039;&#039;ControlListener&#039;&#039; has also access to the &#039;&#039;Display&#039;&#039; to call methods like zooming or panning. Typically, each &#039;&#039;ControlListener&#039;&#039; forces a repaint when its job is done.  &lt;br /&gt;
&lt;br /&gt;
Most of standard functionality is already predefined in &#039;&#039;prefuse&#039;&#039; and the wanted listeners just have to be set to the &#039;&#039;Display&#039;&#039;. However, the &#039;&#039;Display&#039;&#039; can handle a countless of different listener. Hence, typically only a few listeners must be defined manually as they can be mixed with default ones.  &lt;br /&gt;
&lt;br /&gt;
=Conclusion=&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;prefuse&#039;&#039;&#039; is a very powerful toolkit, providing a large set of components and methods a developer needs to build an [[Information Visualization]]. The [[polylithic design]] is not that easy to understand in the beginning of a development, but once conceived, a visualization is easy to realize even if really special demands have to be fulfilled. Furthermore, using Prefuse forces a clear and well designed architecture of own applications.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;prefuse&#039;&#039;&#039; was created with most attention paid to developers who will finally work with the toolkit. In an evaluation study this goal was approved too. In the meanwhile, there is also a not so small community using and upgrading the toolkit, which is an argue for its usability.&lt;br /&gt;
&lt;br /&gt;
= External links =&lt;br /&gt;
*[http://prefuse.org prefuse Homepage]&lt;br /&gt;
*[http://vw.indiana.edu/ivsi2004/jherr/index.html prefuse Position Paper]&lt;br /&gt;
*[http://sourceforge.net/forum/forum.php?forum_id=343013 prefuse Help Forum]&lt;br /&gt;
&lt;br /&gt;
= References =&lt;br /&gt;
*[Heer, 2004] Jeffrey Heer. [http://jheer.org/publications/2004-Heer-prefuse-Masters.pdf prefuse: a software framework for interactive information visualization]. Masters of Science, Computer Science Division, University of California, Berkeley, 2004.&lt;br /&gt;
*[Heer, 2005] Jeffrey Heer, Stuart K. Card, and James A. Landay. [http://jheer.org/publications/2005-prefuse-CHI.pdf prefuse: a toolkit for interactive information visualization. In &#039;&#039;CHI 2005, Human Factors in Computing Systems&#039;&#039;], 2005.&lt;br /&gt;
*[Heer, 2006a] Jeffrey Heer, prefuse API documentation, Retrieved at: July 06, 2006, http://prefuse.org&lt;br /&gt;
*[Heer, 2006b] Jeffrey Heer, prefuse manual, Retrieved at: July 06, 2006, http://prefuse.org&lt;br /&gt;
*[Sun Microsystems, 2001] Sun Microsystems, Programmer’s Guide to the Java 2DTM API - Enhanced Graphics and Imaging for Java, Retrieved at: April 20, 2006, http://java.sun.com/j2se/1.4/pdf/j2d-book.pdf&lt;br /&gt;
&lt;br /&gt;
[[Category:Toolkits]]&lt;/div&gt;</summary>
		<author><name>Anfe</name></author>
	</entry>
	<entry>
		<id>https://infovis-wiki.net/w/index.php?title=Prefuse&amp;diff=10108</id>
		<title>Prefuse</title>
		<link rel="alternate" type="text/html" href="https://infovis-wiki.net/w/index.php?title=Prefuse&amp;diff=10108"/>
		<updated>2006-07-06T01:37:03Z</updated>

		<summary type="html">&lt;p&gt;Anfe: /* Package Structure */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Summary =&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Author&#039;&#039;&#039;: Jeffrey Heer / UC Berkeley&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Project Webpage&#039;&#039;&#039;: http://prefuse.sourceforge.net&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Current Version&#039;&#039;&#039;: beta, June 15, 2006&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Requirements&#039;&#039;&#039;: Java 1.4&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Overview:&#039;&#039;&#039; using Java2D graphics library; pipeline architecture; animation and rendering support&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Base data structures&#039;&#039;&#039;: Table, Graph, Tree&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Included visualization techniques:&#039;&#039;&#039; [http://www.cs.umd.edu/hcil/fisheyemenu/ Fisheye Menu], [http://prefuse.sourceforge.net/demos-radial.html Radial Graph], [http://www.cs.umd.edu/hcil/treemap/ Treemap], [http://prefuse.sourceforge.net/demos-distortion.html F+C Distortion]&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Supported File Formats&#039;&#039;&#039;: XGMML (XML), TreeML (XML), tab-delimited text, HDir&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;prefuse&#039;&#039;&#039; is an interactive graphical open source toolkit written in Java. It is thought to support the development of sophisticated, highly interactive, and flexible [[Information Visualization]]s. The architecture of &#039;&#039;&#039;prefuse&#039;&#039;&#039; considers the [[Visualization Pipeline]], a recommendation on how to implement a visualization. To provide flexibility, a [[polylithic design]] was chosen which enables developers to implement only needed functionality and customize these to meet the own requirements. But, in contrast to a [[monolithic design]], this design needs more time to conceive and influences the architecture of the own application heavily (which is not a disadvantage as &#039;&#039;&#039;prefuse&#039;&#039;&#039; is very elaborate). &lt;br /&gt;
&lt;br /&gt;
Typically, &#039;&#039;&#039;prefuse&#039;&#039;&#039; is designed to visualize information which is interrelated so it can be stored in a graph or tree structure, but, also not related data can be used which is stored within a data-table. Even though the structure is hierarchical, the resulting relations must not be considered in the proper graphical representation as layout algorithms are not restricted in any way. The painting of visual items is done by using a renderer which has access to the respective item itself and the Graphics2D context of the view. This approach enables to use the whole range of available painting methods of Java, therefore, the visual representation is completely independent of the toolkit itself.&lt;br /&gt;
&lt;br /&gt;
Besides providing a large set of predefined elements to visualize data, most attention was set toward usability of the visualization. This is obtained by applying several interaction techniques like tooltips or dragging visual elements. But also more sophisticated techniques like [[zoom]]ing, [[pan]]ning, or [[semantic zoom]]ing are supported or partially even provided by the toolkit itself. Further, &#039;&#039;&#039;prefuse&#039;&#039;&#039; clearly distinguishes between absolute and view coordinates. This separation helps users to place all visual elements in a logical way without consideration of later applied visualization techniques that changes the entire view.  &lt;br /&gt;
&lt;br /&gt;
=== Pros ===&lt;br /&gt;
&lt;br /&gt;
* flexible&lt;br /&gt;
* versatile pipeline approach&lt;br /&gt;
* clear and well thought architecture&lt;br /&gt;
* many layout and distortion algorithms included&lt;br /&gt;
* algorithms for force-based physics simulation included&lt;br /&gt;
* custom animations (smooth transitions)&lt;br /&gt;
* color maps&lt;br /&gt;
* query language to navigate within abstract data&lt;br /&gt;
* demos and examples included&lt;br /&gt;
* bounding management&lt;br /&gt;
* open source&lt;br /&gt;
* documentation of code and general guidance available&lt;br /&gt;
* active developer community &lt;br /&gt;
&lt;br /&gt;
=== Cons ===&lt;br /&gt;
&lt;br /&gt;
* [[polylithic design]] takes up more time to conceive and see first results&lt;br /&gt;
* special requirements of a visualization enforce a lot of adapting work&lt;br /&gt;
&lt;br /&gt;
=General Approach=&lt;br /&gt;
&lt;br /&gt;
Going along with the step-wise recommendation of the [[Visualization Pipeline]], a &#039;&#039;&#039;prefuse&#039;&#039;&#039; application consists of different states of data:&lt;br /&gt;
&lt;br /&gt;
[[Image:prefuse_visualization_pipeline.gif|600px]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;prefuse&#039;&#039;&#039; uses a centralized object called &#039;&#039;Visualization&#039;&#039; (former &#039;&#039;ItemRegistry&#039;&#039;) which maintains and manages the whole visualization. This object has to fulfil several tasks. It stores the abstract data as well as visual analogous of these in two different tables. All transformation routines like filtering or rendering are maintained and executed by the &#039;&#039;Visualization&#039;&#039; too. Further, it maintains at least one &#039;&#039;Display&#039;&#039;, a graphical component which can represent visual data of &#039;&#039;&#039;prefuse&#039;&#039;&#039;. &lt;br /&gt;
&lt;br /&gt;
Transformation routines are defined as &#039;&#039;Actions&#039;&#039; which are combined in &#039;&#039;ActionLists&#039;&#039;. An &#039;&#039;ActionList&#039;&#039; is an executable container which is started of the &#039;&#039;Visualization&#039;&#039; whenever necessary. Once it is started, all defined &#039;&#039;Actions&#039;&#039; are executed in the given sequence. Typically, the last called &#039;&#039;Action&#039;&#039; is the &#039;&#039;RepaintAction&#039;&#039; which forces all defined &#039;&#039;Displays&#039;&#039; to perform a repaint. &lt;br /&gt;
&lt;br /&gt;
A &#039;&#039;Display&#039;&#039; is the view of &#039;&#039;&#039;prefuse&#039;&#039;&#039;. It can be embedded in each Java Swing application. The main task of a &#039;&#039;Display&#039;&#039; is the painting of visual structures which are defined in the respective &#039;&#039;Visualization&#039;&#039;. Whenever the &#039;&#039;Display&#039;&#039; performs a repaint it requests all visual items and checks all bounds of them (bounding management). If an item is within the own area the respective rendering mechanism is called.  &lt;br /&gt;
&lt;br /&gt;
Another important task of the &#039;&#039;Display&#039;&#039; is the providing of navigation techniques like [[zoom]]ing or [[pan]]ning. The entire view is managed by an own view coordinate system which is described with an affine transformation matrix. The most important functionality to work with this coordinate system is already predefined. &lt;br /&gt;
&lt;br /&gt;
Furthermore, a &#039;&#039;Display&#039;&#039; also maintains a set of &#039;&#039;ControlListener&#039;&#039; which are used to process user interactions (mouse or keyboard events). Whenever such an event occurs the respective listener is called. This listener already differs on where the event happened (e.g., blank area or a certain item). Further, a &#039;&#039;ControlListener&#039;&#039; may also start an &#039;&#039;ActionList&#039;&#039; again.&lt;br /&gt;
&lt;br /&gt;
==Raw Data==&lt;br /&gt;
&lt;br /&gt;
Raw data is the base of the application. Typically, the source of raw data is a file, but also other sources like a database are thinkable. However, &#039;&#039;&#039;prefuse&#039;&#039;&#039; provides several file readers for different formats (CSV, Tab-Delimitated, etc.) that can be transformed into a data table. Further, some readers also support the reading of SQL-Database. If another source is needed, a reader can be written manually.&lt;br /&gt;
&lt;br /&gt;
Once the raw data is read, it is transformed into abstract data and stored within a data table. &lt;br /&gt;
&lt;br /&gt;
==Abstract Data==&lt;br /&gt;
&lt;br /&gt;
The data table which is used to store abstract data works with data types and a definition schema which maps relations between data type and table. That means, each row contains a data record, and each column contains data values for a named data field with a specific data type. Each record of the table is referred as a &#039;&#039;Tuple&#039;&#039;. &lt;br /&gt;
&lt;br /&gt;
Furthermore, instead of the table itself, a graph or tree may be used to store interrelated data. Instead of &#039;&#039;Tuples&#039;&#039;, records are referred as &#039;&#039;Nodes&#039;&#039; which are connected to others with &#039;&#039;Edges&#039;&#039;. Additionally, a tree has one defined root &#039;&#039;Node&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Abstract data does not contain any visual information like assignment attributes or color settings. Instead, visual attributes are extracted out of the abstract data following a defined logic.&lt;br /&gt;
&lt;br /&gt;
==Visual Structures==&lt;br /&gt;
&lt;br /&gt;
Visual structures are created when filtering the data container which contains abstract data. In case of a visualization that displays all items from the beginning on, the filtering routine must only executed once at initializing time. If the visual content changes dynamically, the filtering is executed on certain user interactions by calling a defined filtering &#039;&#039;ActionList&#039;&#039;. &lt;br /&gt;
&lt;br /&gt;
A visual structure is referred as &#039;&#039;VisualItem&#039;&#039; which may distinguished as &#039;&#039;VisualNode&#039;&#039;, &#039;&#039;VisualEdge&#039;&#039;, or an aggregated item which consists of several other items. However, as a &#039;&#039;VisualItem&#039;&#039; is extended of the respective abstract entity it has full access to all abstract information too. &lt;br /&gt;
&lt;br /&gt;
The filtering routine which transforms the abstract data to visual analogues typically consists of following &#039;&#039;Actions&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Filter&#039;&#039;&#039;: This &#039;&#039;Action&#039;&#039; is responsible to transform the abstract data of the backing table to visual analogues. If no special conditions are defined, the filter creates for each &#039;&#039;Tuple&#039;&#039; a visual instance and stores them in a second table. Additionally, a filter also performs a garbage collection and may set visibility attributes of the created items. &lt;br /&gt;
* &#039;&#039;&#039;Layout&#039;&#039;&#039;: A layout takes care about placing the &#039;&#039;VisualItems&#039;&#039;. Several common algorithms for graphs or trees are already predefined (e.g., &#039;&#039;ForceDirectedLayout&#039;&#039; or &#039;&#039;RadialTreeLayout&#039;&#039;). &lt;br /&gt;
* &#039;&#039;&#039;Assignment&#039;&#039;&#039;: Besides layouting, also other assignments may be performed during the filtering process. Such assignments directly changes visual attributes of &#039;&#039;VisualItems&#039;&#039; like color, sizes, fonts, etc.&lt;br /&gt;
&lt;br /&gt;
A visual structure may also contain a paint routine, but, as all painting jobs are initialized or performed by separated renderers, these issues may also be executed by the renderer itself or any other object. &lt;br /&gt;
&lt;br /&gt;
==View==&lt;br /&gt;
&lt;br /&gt;
Typically, the rendered visual structure is not stored, instead, they are re-rendered whenever needed. However, in case of very complex but constant visual representations it makes sense to hold items in an offscreen image. &lt;br /&gt;
&lt;br /&gt;
Each &#039;&#039;VisualItem&#039;&#039; has got one or more associated &#039;&#039;Renderers&#039;&#039; which are maintained by a factory of the &#039;&#039;Visualization&#039;&#039;. A  &#039;&#039;Render&#039;&#039; has to perform two tasks:&lt;br /&gt;
&lt;br /&gt;
* Providing a bounding box of the item. This box is used to determine if the item must actually be painted or if it would not be visible anyway. &lt;br /&gt;
* Providing the painting routine of the item. Paintings may be executed by the &#039;&#039;Renderer&#039;&#039; itself or delegated to other objects which are accessible of the &#039;&#039;Renderer&#039;&#039;. The painting routines are not restricted in any way, but they representation should not exceed the bounding box of the item. &lt;br /&gt;
&lt;br /&gt;
Rendering is always performed on a repaint of the &#039;&#039;Display&#039;&#039;. A repaint can be requested by the &#039;&#039;Visualization&#039;&#039;, on user interaction, and on events like resizing the component, getting the focus, or changing the coordinate system of the view. However, as repaints may occur very often, developers have to ascertain that rendering jobs can are performed fast, otherwise, the performance of the whole visualization would suffer.&lt;br /&gt;
&lt;br /&gt;
=Details=&lt;br /&gt;
&lt;br /&gt;
==Package Structure==&lt;br /&gt;
&lt;br /&gt;
Following picture shows the most important packages of &#039;&#039;&#039;prefuse&#039;&#039;&#039; regarding to the [[Visualization Pipeline]]:&lt;br /&gt;
&lt;br /&gt;
[[Image:prefuse_package_guide.gif|600px]]&lt;br /&gt;
&lt;br /&gt;
These packages also contain predefined components. A default nodes and edges provide standard functionality of abstract data, standard functionality is also available in visual analogous of them. A default filter transforms all defined abstract entities to visual ones. Further, also some special functionality for common requirements are provided by own components. &lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Renderers&#039;&#039;&#039;: &#039;&#039;EdgeRenderer&#039;&#039; to render edges between graph or tree nodes, a &#039;&#039;LableRenderer&#039;&#039; to render test items, and a &#039;&#039;PolygoneRenderer&#039;&#039; to render geometrical items. &lt;br /&gt;
* &#039;&#039;&#039;Layouts&#039;&#039;&#039;: &#039;&#039;RandomLayout&#039;&#039;, &#039;&#039;GridLayout&#039;&#039;, and some more to place non related data, &#039;&#039;ForceDirectedLayout&#039;&#039;, &#039;&#039;TreeLayout&#039;&#039;, &#039;&#039;RadialTreeLayout&#039;&#039; and others to render trees and graphs.&lt;br /&gt;
* &#039;&#039;&#039;Controls&#039;&#039;&#039;: &#039;&#039;DragControl&#039;&#039;, &#039;&#039;ZoomControl&#039;&#039;, &#039;&#039;PanControl&#039;&#039;, &#039;&#039;ToolTipControl&#039;&#039; and several others to react on user interactions. &lt;br /&gt;
&lt;br /&gt;
In simple visualizations the predefined functionality will meet most requirements. If special requirements are needed the default functionality supports a step-wise developing as results can be communicated by these components until the own functionality is implemented.&lt;br /&gt;
&lt;br /&gt;
==Coordinates in prefuse==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;prefuse&#039;&#039;&#039; works with two different coordinate systems. Absolute coordinates are device-independent logical coordinates. All visual attributes like positions or sizes are defined in absolute coordinates. In contrast, view coordinates are device-depended (screen). Transformations between absolute and view coordinates are done automatically by Java painting routines. View coordinates are influenced by the system and device driver (e.g., the absolute point (0,0) is the topmost left point of the actual graphical component which may be on any position at the screen). Further, view coordinates may also be manipulated manually by using an affine transformation matrix which applies linear transformations on absolute coordinates before device-dependent routines convert them to screen coordinates. &lt;br /&gt;
&lt;br /&gt;
A &#039;&#039;&#039;prefuse&#039;&#039;&#039; &#039;&#039;Display&#039;&#039; provides the most important manipulating methods of this matrix. [[Zoom]]ing, [[pan]]ning, and rotation of the whole view are only done by changing the view coordinates. So, as absolute coordinates are never concerned of such transformations and translations, a user must never consider the actual view in layout, assignment, or painting routines. &lt;br /&gt;
&lt;br /&gt;
There are several different ways on how to apply such transformations, additionally, the &#039;&#039;Display&#039;&#039; also supports animated transformations. &lt;br /&gt;
&lt;br /&gt;
==User Interactions==&lt;br /&gt;
&lt;br /&gt;
Mouse or keyboard events are treated by using &#039;&#039;ControlListener&#039;&#039;. Whenever an event occurs which is handled by a &#039;&#039;ControlListener&#039;&#039;, the &#039;&#039;Display&#039;&#039; delegates the event to the respective routine. A &#039;&#039;ControlListener&#039;&#039; differs automatically which visual element is concerned of the event (the view itself or a &#039;&#039;VisualItem&#039;&#039; on the view). &lt;br /&gt;
&lt;br /&gt;
A &#039;&#039;ControlListener&#039;&#039; may just perform simple task like changing the mouse cursor or editing the label of an item. But, in more sophisticated applications, also task like loading new data or dragging items on the view may also be handled. Therefore, a &#039;&#039;ControlListener&#039;&#039; may also work with &#039;&#039;ActionLists&#039;&#039; to execute such tasks. Further, a &#039;&#039;ControlListener&#039;&#039; has also access to the &#039;&#039;Display&#039;&#039; to call methods like zooming or panning. Typically, each &#039;&#039;ControlListener&#039;&#039; forces a repaint when its job is done.  &lt;br /&gt;
&lt;br /&gt;
Most of standard functionality is already predefined in &#039;&#039;prefuse&#039;&#039; and the wanted listeners just have to be set to the &#039;&#039;Display&#039;&#039;. However, the &#039;&#039;Display&#039;&#039; can handle a countless of different listener. Hence, typically only a few listeners must be defined manually as they can be mixed with default ones.  &lt;br /&gt;
&lt;br /&gt;
=Conclusion=&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;prefuse&#039;&#039;&#039; is a very powerful toolkit, providing a large set of components and methods a developer needs to build an [[Information Visualization]]. The [[polylithic design]] is not that easy to understand in the beginning of a development, but once conceived, a visualization is easy to realize even if really special demands have to be fulfilled. Furthermore, using Prefuse forces a clear and well designed architecture of own applications.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;prefuse&#039;&#039;&#039; was created with most attention paid to developers who will finally work with the toolkit. In an evaluation study this goal was approved too. In the meanwhile, there is also a not so small community using and upgrading the toolkit, which is an argue for its usability.&lt;br /&gt;
&lt;br /&gt;
= External links =&lt;br /&gt;
*[http://prefuse.org prefuse Homepage]&lt;br /&gt;
*[http://vw.indiana.edu/ivsi2004/jherr/index.html prefuse Position Paper]&lt;br /&gt;
*[http://sourceforge.net/forum/forum.php?forum_id=343013 prefuse Help Forum]&lt;br /&gt;
&lt;br /&gt;
= References =&lt;br /&gt;
*[Heer, 2004] Jeffrey Heer. [http://jheer.org/publications/2004-Heer-prefuse-Masters.pdf prefuse: a software framework for interactive information visualization]. Masters of Science, Computer Science Division, University of California, Berkeley, 2004.&lt;br /&gt;
*[Heer, 2005] Jeffrey Heer, Stuart K. Card, and James A. Landay. [http://jheer.org/publications/2005-prefuse-CHI.pdf prefuse: a toolkit for interactive information visualization. In &#039;&#039;CHI 2005, Human Factors in Computing Systems&#039;&#039;], 2005.&lt;br /&gt;
*[Heer, 2006a] Jeffrey Heer, prefuse API documentation, Retrieved at: July 06, 2006, http://prefuse.org&lt;br /&gt;
*[Heer, 2006b] Jeffrey Heer, prefuse manual, Retrieved at: July 06, 2006, http://prefuse.org&lt;br /&gt;
*[Sun Microsystems, 2001] Sun Microsystems, Programmer’s Guide to the Java 2DTM API - Enhanced Graphics and Imaging for Java, Retrieved at: April 20, 2006, http://java.sun.com/j2se/1.4/pdf/j2d-book.pdf&lt;br /&gt;
&lt;br /&gt;
[[Category:Toolkits]]&lt;/div&gt;</summary>
		<author><name>Anfe</name></author>
	</entry>
	<entry>
		<id>https://infovis-wiki.net/w/index.php?title=Prefuse&amp;diff=10107</id>
		<title>Prefuse</title>
		<link rel="alternate" type="text/html" href="https://infovis-wiki.net/w/index.php?title=Prefuse&amp;diff=10107"/>
		<updated>2006-07-06T01:34:45Z</updated>

		<summary type="html">&lt;p&gt;Anfe: /* General Approach */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Summary =&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Author&#039;&#039;&#039;: Jeffrey Heer / UC Berkeley&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Project Webpage&#039;&#039;&#039;: http://prefuse.sourceforge.net&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Current Version&#039;&#039;&#039;: beta, June 15, 2006&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Requirements&#039;&#039;&#039;: Java 1.4&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Overview:&#039;&#039;&#039; using Java2D graphics library; pipeline architecture; animation and rendering support&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Base data structures&#039;&#039;&#039;: Table, Graph, Tree&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Included visualization techniques:&#039;&#039;&#039; [http://www.cs.umd.edu/hcil/fisheyemenu/ Fisheye Menu], [http://prefuse.sourceforge.net/demos-radial.html Radial Graph], [http://www.cs.umd.edu/hcil/treemap/ Treemap], [http://prefuse.sourceforge.net/demos-distortion.html F+C Distortion]&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Supported File Formats&#039;&#039;&#039;: XGMML (XML), TreeML (XML), tab-delimited text, HDir&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;prefuse&#039;&#039;&#039; is an interactive graphical open source toolkit written in Java. It is thought to support the development of sophisticated, highly interactive, and flexible [[Information Visualization]]s. The architecture of &#039;&#039;&#039;prefuse&#039;&#039;&#039; considers the [[Visualization Pipeline]], a recommendation on how to implement a visualization. To provide flexibility, a [[polylithic design]] was chosen which enables developers to implement only needed functionality and customize these to meet the own requirements. But, in contrast to a [[monolithic design]], this design needs more time to conceive and influences the architecture of the own application heavily (which is not a disadvantage as &#039;&#039;&#039;prefuse&#039;&#039;&#039; is very elaborate). &lt;br /&gt;
&lt;br /&gt;
Typically, &#039;&#039;&#039;prefuse&#039;&#039;&#039; is designed to visualize information which is interrelated so it can be stored in a graph or tree structure, but, also not related data can be used which is stored within a data-table. Even though the structure is hierarchical, the resulting relations must not be considered in the proper graphical representation as layout algorithms are not restricted in any way. The painting of visual items is done by using a renderer which has access to the respective item itself and the Graphics2D context of the view. This approach enables to use the whole range of available painting methods of Java, therefore, the visual representation is completely independent of the toolkit itself.&lt;br /&gt;
&lt;br /&gt;
Besides providing a large set of predefined elements to visualize data, most attention was set toward usability of the visualization. This is obtained by applying several interaction techniques like tooltips or dragging visual elements. But also more sophisticated techniques like [[zoom]]ing, [[pan]]ning, or [[semantic zoom]]ing are supported or partially even provided by the toolkit itself. Further, &#039;&#039;&#039;prefuse&#039;&#039;&#039; clearly distinguishes between absolute and view coordinates. This separation helps users to place all visual elements in a logical way without consideration of later applied visualization techniques that changes the entire view.  &lt;br /&gt;
&lt;br /&gt;
=== Pros ===&lt;br /&gt;
&lt;br /&gt;
* flexible&lt;br /&gt;
* versatile pipeline approach&lt;br /&gt;
* clear and well thought architecture&lt;br /&gt;
* many layout and distortion algorithms included&lt;br /&gt;
* algorithms for force-based physics simulation included&lt;br /&gt;
* custom animations (smooth transitions)&lt;br /&gt;
* color maps&lt;br /&gt;
* query language to navigate within abstract data&lt;br /&gt;
* demos and examples included&lt;br /&gt;
* bounding management&lt;br /&gt;
* open source&lt;br /&gt;
* documentation of code and general guidance available&lt;br /&gt;
* active developer community &lt;br /&gt;
&lt;br /&gt;
=== Cons ===&lt;br /&gt;
&lt;br /&gt;
* [[polylithic design]] takes up more time to conceive and see first results&lt;br /&gt;
* special requirements of a visualization enforce a lot of adapting work&lt;br /&gt;
&lt;br /&gt;
=General Approach=&lt;br /&gt;
&lt;br /&gt;
Going along with the step-wise recommendation of the [[Visualization Pipeline]], a &#039;&#039;&#039;prefuse&#039;&#039;&#039; application consists of different states of data:&lt;br /&gt;
&lt;br /&gt;
[[Image:prefuse_visualization_pipeline.gif|600px]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;prefuse&#039;&#039;&#039; uses a centralized object called &#039;&#039;Visualization&#039;&#039; (former &#039;&#039;ItemRegistry&#039;&#039;) which maintains and manages the whole visualization. This object has to fulfil several tasks. It stores the abstract data as well as visual analogous of these in two different tables. All transformation routines like filtering or rendering are maintained and executed by the &#039;&#039;Visualization&#039;&#039; too. Further, it maintains at least one &#039;&#039;Display&#039;&#039;, a graphical component which can represent visual data of &#039;&#039;&#039;prefuse&#039;&#039;&#039;. &lt;br /&gt;
&lt;br /&gt;
Transformation routines are defined as &#039;&#039;Actions&#039;&#039; which are combined in &#039;&#039;ActionLists&#039;&#039;. An &#039;&#039;ActionList&#039;&#039; is an executable container which is started of the &#039;&#039;Visualization&#039;&#039; whenever necessary. Once it is started, all defined &#039;&#039;Actions&#039;&#039; are executed in the given sequence. Typically, the last called &#039;&#039;Action&#039;&#039; is the &#039;&#039;RepaintAction&#039;&#039; which forces all defined &#039;&#039;Displays&#039;&#039; to perform a repaint. &lt;br /&gt;
&lt;br /&gt;
A &#039;&#039;Display&#039;&#039; is the view of &#039;&#039;&#039;prefuse&#039;&#039;&#039;. It can be embedded in each Java Swing application. The main task of a &#039;&#039;Display&#039;&#039; is the painting of visual structures which are defined in the respective &#039;&#039;Visualization&#039;&#039;. Whenever the &#039;&#039;Display&#039;&#039; performs a repaint it requests all visual items and checks all bounds of them (bounding management). If an item is within the own area the respective rendering mechanism is called.  &lt;br /&gt;
&lt;br /&gt;
Another important task of the &#039;&#039;Display&#039;&#039; is the providing of navigation techniques like [[zoom]]ing or [[pan]]ning. The entire view is managed by an own view coordinate system which is described with an affine transformation matrix. The most important functionality to work with this coordinate system is already predefined. &lt;br /&gt;
&lt;br /&gt;
Furthermore, a &#039;&#039;Display&#039;&#039; also maintains a set of &#039;&#039;ControlListener&#039;&#039; which are used to process user interactions (mouse or keyboard events). Whenever such an event occurs the respective listener is called. This listener already differs on where the event happened (e.g., blank area or a certain item). Further, a &#039;&#039;ControlListener&#039;&#039; may also start an &#039;&#039;ActionList&#039;&#039; again.&lt;br /&gt;
&lt;br /&gt;
==Raw Data==&lt;br /&gt;
&lt;br /&gt;
Raw data is the base of the application. Typically, the source of raw data is a file, but also other sources like a database are thinkable. However, &#039;&#039;&#039;prefuse&#039;&#039;&#039; provides several file readers for different formats (CSV, Tab-Delimitated, etc.) that can be transformed into a data table. Further, some readers also support the reading of SQL-Database. If another source is needed, a reader can be written manually.&lt;br /&gt;
&lt;br /&gt;
Once the raw data is read, it is transformed into abstract data and stored within a data table. &lt;br /&gt;
&lt;br /&gt;
==Abstract Data==&lt;br /&gt;
&lt;br /&gt;
The data table which is used to store abstract data works with data types and a definition schema which maps relations between data type and table. That means, each row contains a data record, and each column contains data values for a named data field with a specific data type. Each record of the table is referred as a &#039;&#039;Tuple&#039;&#039;. &lt;br /&gt;
&lt;br /&gt;
Furthermore, instead of the table itself, a graph or tree may be used to store interrelated data. Instead of &#039;&#039;Tuples&#039;&#039;, records are referred as &#039;&#039;Nodes&#039;&#039; which are connected to others with &#039;&#039;Edges&#039;&#039;. Additionally, a tree has one defined root &#039;&#039;Node&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Abstract data does not contain any visual information like assignment attributes or color settings. Instead, visual attributes are extracted out of the abstract data following a defined logic.&lt;br /&gt;
&lt;br /&gt;
==Visual Structures==&lt;br /&gt;
&lt;br /&gt;
Visual structures are created when filtering the data container which contains abstract data. In case of a visualization that displays all items from the beginning on, the filtering routine must only executed once at initializing time. If the visual content changes dynamically, the filtering is executed on certain user interactions by calling a defined filtering &#039;&#039;ActionList&#039;&#039;. &lt;br /&gt;
&lt;br /&gt;
A visual structure is referred as &#039;&#039;VisualItem&#039;&#039; which may distinguished as &#039;&#039;VisualNode&#039;&#039;, &#039;&#039;VisualEdge&#039;&#039;, or an aggregated item which consists of several other items. However, as a &#039;&#039;VisualItem&#039;&#039; is extended of the respective abstract entity it has full access to all abstract information too. &lt;br /&gt;
&lt;br /&gt;
The filtering routine which transforms the abstract data to visual analogues typically consists of following &#039;&#039;Actions&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Filter&#039;&#039;&#039;: This &#039;&#039;Action&#039;&#039; is responsible to transform the abstract data of the backing table to visual analogues. If no special conditions are defined, the filter creates for each &#039;&#039;Tuple&#039;&#039; a visual instance and stores them in a second table. Additionally, a filter also performs a garbage collection and may set visibility attributes of the created items. &lt;br /&gt;
* &#039;&#039;&#039;Layout&#039;&#039;&#039;: A layout takes care about placing the &#039;&#039;VisualItems&#039;&#039;. Several common algorithms for graphs or trees are already predefined (e.g., &#039;&#039;ForceDirectedLayout&#039;&#039; or &#039;&#039;RadialTreeLayout&#039;&#039;). &lt;br /&gt;
* &#039;&#039;&#039;Assignment&#039;&#039;&#039;: Besides layouting, also other assignments may be performed during the filtering process. Such assignments directly changes visual attributes of &#039;&#039;VisualItems&#039;&#039; like color, sizes, fonts, etc.&lt;br /&gt;
&lt;br /&gt;
A visual structure may also contain a paint routine, but, as all painting jobs are initialized or performed by separated renderers, these issues may also be executed by the renderer itself or any other object. &lt;br /&gt;
&lt;br /&gt;
==View==&lt;br /&gt;
&lt;br /&gt;
Typically, the rendered visual structure is not stored, instead, they are re-rendered whenever needed. However, in case of very complex but constant visual representations it makes sense to hold items in an offscreen image. &lt;br /&gt;
&lt;br /&gt;
Each &#039;&#039;VisualItem&#039;&#039; has got one or more associated &#039;&#039;Renderers&#039;&#039; which are maintained by a factory of the &#039;&#039;Visualization&#039;&#039;. A  &#039;&#039;Render&#039;&#039; has to perform two tasks:&lt;br /&gt;
&lt;br /&gt;
* Providing a bounding box of the item. This box is used to determine if the item must actually be painted or if it would not be visible anyway. &lt;br /&gt;
* Providing the painting routine of the item. Paintings may be executed by the &#039;&#039;Renderer&#039;&#039; itself or delegated to other objects which are accessible of the &#039;&#039;Renderer&#039;&#039;. The painting routines are not restricted in any way, but they representation should not exceed the bounding box of the item. &lt;br /&gt;
&lt;br /&gt;
Rendering is always performed on a repaint of the &#039;&#039;Display&#039;&#039;. A repaint can be requested by the &#039;&#039;Visualization&#039;&#039;, on user interaction, and on events like resizing the component, getting the focus, or changing the coordinate system of the view. However, as repaints may occur very often, developers have to ascertain that rendering jobs can are performed fast, otherwise, the performance of the whole visualization would suffer.&lt;br /&gt;
&lt;br /&gt;
=Details=&lt;br /&gt;
&lt;br /&gt;
==Package Structure==&lt;br /&gt;
&lt;br /&gt;
Following picture shows the most important packages of &#039;&#039;&#039;prefuse&#039;&#039;&#039; regarding to the [[Visualization Pipeline]]:&lt;br /&gt;
&lt;br /&gt;
[[Image:prefuse_package_guide.gif|800px]]&lt;br /&gt;
&lt;br /&gt;
These packages also contain predefined components. A default nodes and edges provide standard functionality of abstract data, standard functionality is also available in visual analogous of them. A default filter transforms all defined abstract entities to visual ones. Further, also some special functionality for common requirements are provided by own components. &lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Renderers&#039;&#039;&#039;: &#039;&#039;EdgeRenderer&#039;&#039; to render edges between graph or tree nodes, a &#039;&#039;LableRenderer&#039;&#039; to render test items, and a &#039;&#039;PolygoneRenderer&#039;&#039; to render geometrical items. &lt;br /&gt;
* &#039;&#039;&#039;Layouts&#039;&#039;&#039;: &#039;&#039;RandomLayout&#039;&#039;, &#039;&#039;GridLayout&#039;&#039;, and some more to place non related data, &#039;&#039;ForceDirectedLayout&#039;&#039;, &#039;&#039;TreeLayout&#039;&#039;, &#039;&#039;RadialTreeLayout&#039;&#039; and others to render trees and graphs.&lt;br /&gt;
* &#039;&#039;&#039;Controls&#039;&#039;&#039;: &#039;&#039;DragControl&#039;&#039;, &#039;&#039;ZoomControl&#039;&#039;, &#039;&#039;PanControl&#039;&#039;, &#039;&#039;ToolTipControl&#039;&#039; and several others to react on user interactions. &lt;br /&gt;
&lt;br /&gt;
In simple visualizations the predefined functionality will meet most requirements. If special requirements are needed the default functionality supports a step-wise developing as results can be communicated by these components until the own functionality is implemented.&lt;br /&gt;
&lt;br /&gt;
==Coordinates in prefuse==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;prefuse&#039;&#039;&#039; works with two different coordinate systems. Absolute coordinates are device-independent logical coordinates. All visual attributes like positions or sizes are defined in absolute coordinates. In contrast, view coordinates are device-depended (screen). Transformations between absolute and view coordinates are done automatically by Java painting routines. View coordinates are influenced by the system and device driver (e.g., the absolute point (0,0) is the topmost left point of the actual graphical component which may be on any position at the screen). Further, view coordinates may also be manipulated manually by using an affine transformation matrix which applies linear transformations on absolute coordinates before device-dependent routines convert them to screen coordinates. &lt;br /&gt;
&lt;br /&gt;
A &#039;&#039;&#039;prefuse&#039;&#039;&#039; &#039;&#039;Display&#039;&#039; provides the most important manipulating methods of this matrix. [[Zoom]]ing, [[pan]]ning, and rotation of the whole view are only done by changing the view coordinates. So, as absolute coordinates are never concerned of such transformations and translations, a user must never consider the actual view in layout, assignment, or painting routines. &lt;br /&gt;
&lt;br /&gt;
There are several different ways on how to apply such transformations, additionally, the &#039;&#039;Display&#039;&#039; also supports animated transformations. &lt;br /&gt;
&lt;br /&gt;
==User Interactions==&lt;br /&gt;
&lt;br /&gt;
Mouse or keyboard events are treated by using &#039;&#039;ControlListener&#039;&#039;. Whenever an event occurs which is handled by a &#039;&#039;ControlListener&#039;&#039;, the &#039;&#039;Display&#039;&#039; delegates the event to the respective routine. A &#039;&#039;ControlListener&#039;&#039; differs automatically which visual element is concerned of the event (the view itself or a &#039;&#039;VisualItem&#039;&#039; on the view). &lt;br /&gt;
&lt;br /&gt;
A &#039;&#039;ControlListener&#039;&#039; may just perform simple task like changing the mouse cursor or editing the label of an item. But, in more sophisticated applications, also task like loading new data or dragging items on the view may also be handled. Therefore, a &#039;&#039;ControlListener&#039;&#039; may also work with &#039;&#039;ActionLists&#039;&#039; to execute such tasks. Further, a &#039;&#039;ControlListener&#039;&#039; has also access to the &#039;&#039;Display&#039;&#039; to call methods like zooming or panning. Typically, each &#039;&#039;ControlListener&#039;&#039; forces a repaint when its job is done.  &lt;br /&gt;
&lt;br /&gt;
Most of standard functionality is already predefined in &#039;&#039;prefuse&#039;&#039; and the wanted listeners just have to be set to the &#039;&#039;Display&#039;&#039;. However, the &#039;&#039;Display&#039;&#039; can handle a countless of different listener. Hence, typically only a few listeners must be defined manually as they can be mixed with default ones.  &lt;br /&gt;
&lt;br /&gt;
=Conclusion=&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;prefuse&#039;&#039;&#039; is a very powerful toolkit, providing a large set of components and methods a developer needs to build an [[Information Visualization]]. The [[polylithic design]] is not that easy to understand in the beginning of a development, but once conceived, a visualization is easy to realize even if really special demands have to be fulfilled. Furthermore, using Prefuse forces a clear and well designed architecture of own applications.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;prefuse&#039;&#039;&#039; was created with most attention paid to developers who will finally work with the toolkit. In an evaluation study this goal was approved too. In the meanwhile, there is also a not so small community using and upgrading the toolkit, which is an argue for its usability.&lt;br /&gt;
&lt;br /&gt;
= External links =&lt;br /&gt;
*[http://prefuse.org prefuse Homepage]&lt;br /&gt;
*[http://vw.indiana.edu/ivsi2004/jherr/index.html prefuse Position Paper]&lt;br /&gt;
*[http://sourceforge.net/forum/forum.php?forum_id=343013 prefuse Help Forum]&lt;br /&gt;
&lt;br /&gt;
= References =&lt;br /&gt;
*[Heer, 2004] Jeffrey Heer. [http://jheer.org/publications/2004-Heer-prefuse-Masters.pdf prefuse: a software framework for interactive information visualization]. Masters of Science, Computer Science Division, University of California, Berkeley, 2004.&lt;br /&gt;
*[Heer, 2005] Jeffrey Heer, Stuart K. Card, and James A. Landay. [http://jheer.org/publications/2005-prefuse-CHI.pdf prefuse: a toolkit for interactive information visualization. In &#039;&#039;CHI 2005, Human Factors in Computing Systems&#039;&#039;], 2005.&lt;br /&gt;
*[Heer, 2006a] Jeffrey Heer, prefuse API documentation, Retrieved at: July 06, 2006, http://prefuse.org&lt;br /&gt;
*[Heer, 2006b] Jeffrey Heer, prefuse manual, Retrieved at: July 06, 2006, http://prefuse.org&lt;br /&gt;
*[Sun Microsystems, 2001] Sun Microsystems, Programmer’s Guide to the Java 2DTM API - Enhanced Graphics and Imaging for Java, Retrieved at: April 20, 2006, http://java.sun.com/j2se/1.4/pdf/j2d-book.pdf&lt;br /&gt;
&lt;br /&gt;
[[Category:Toolkits]]&lt;/div&gt;</summary>
		<author><name>Anfe</name></author>
	</entry>
	<entry>
		<id>https://infovis-wiki.net/w/index.php?title=Prefuse&amp;diff=10106</id>
		<title>Prefuse</title>
		<link rel="alternate" type="text/html" href="https://infovis-wiki.net/w/index.php?title=Prefuse&amp;diff=10106"/>
		<updated>2006-07-06T01:34:29Z</updated>

		<summary type="html">&lt;p&gt;Anfe: /* General Approach */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Summary =&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Author&#039;&#039;&#039;: Jeffrey Heer / UC Berkeley&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Project Webpage&#039;&#039;&#039;: http://prefuse.sourceforge.net&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Current Version&#039;&#039;&#039;: beta, June 15, 2006&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Requirements&#039;&#039;&#039;: Java 1.4&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Overview:&#039;&#039;&#039; using Java2D graphics library; pipeline architecture; animation and rendering support&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Base data structures&#039;&#039;&#039;: Table, Graph, Tree&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Included visualization techniques:&#039;&#039;&#039; [http://www.cs.umd.edu/hcil/fisheyemenu/ Fisheye Menu], [http://prefuse.sourceforge.net/demos-radial.html Radial Graph], [http://www.cs.umd.edu/hcil/treemap/ Treemap], [http://prefuse.sourceforge.net/demos-distortion.html F+C Distortion]&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Supported File Formats&#039;&#039;&#039;: XGMML (XML), TreeML (XML), tab-delimited text, HDir&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;prefuse&#039;&#039;&#039; is an interactive graphical open source toolkit written in Java. It is thought to support the development of sophisticated, highly interactive, and flexible [[Information Visualization]]s. The architecture of &#039;&#039;&#039;prefuse&#039;&#039;&#039; considers the [[Visualization Pipeline]], a recommendation on how to implement a visualization. To provide flexibility, a [[polylithic design]] was chosen which enables developers to implement only needed functionality and customize these to meet the own requirements. But, in contrast to a [[monolithic design]], this design needs more time to conceive and influences the architecture of the own application heavily (which is not a disadvantage as &#039;&#039;&#039;prefuse&#039;&#039;&#039; is very elaborate). &lt;br /&gt;
&lt;br /&gt;
Typically, &#039;&#039;&#039;prefuse&#039;&#039;&#039; is designed to visualize information which is interrelated so it can be stored in a graph or tree structure, but, also not related data can be used which is stored within a data-table. Even though the structure is hierarchical, the resulting relations must not be considered in the proper graphical representation as layout algorithms are not restricted in any way. The painting of visual items is done by using a renderer which has access to the respective item itself and the Graphics2D context of the view. This approach enables to use the whole range of available painting methods of Java, therefore, the visual representation is completely independent of the toolkit itself.&lt;br /&gt;
&lt;br /&gt;
Besides providing a large set of predefined elements to visualize data, most attention was set toward usability of the visualization. This is obtained by applying several interaction techniques like tooltips or dragging visual elements. But also more sophisticated techniques like [[zoom]]ing, [[pan]]ning, or [[semantic zoom]]ing are supported or partially even provided by the toolkit itself. Further, &#039;&#039;&#039;prefuse&#039;&#039;&#039; clearly distinguishes between absolute and view coordinates. This separation helps users to place all visual elements in a logical way without consideration of later applied visualization techniques that changes the entire view.  &lt;br /&gt;
&lt;br /&gt;
=== Pros ===&lt;br /&gt;
&lt;br /&gt;
* flexible&lt;br /&gt;
* versatile pipeline approach&lt;br /&gt;
* clear and well thought architecture&lt;br /&gt;
* many layout and distortion algorithms included&lt;br /&gt;
* algorithms for force-based physics simulation included&lt;br /&gt;
* custom animations (smooth transitions)&lt;br /&gt;
* color maps&lt;br /&gt;
* query language to navigate within abstract data&lt;br /&gt;
* demos and examples included&lt;br /&gt;
* bounding management&lt;br /&gt;
* open source&lt;br /&gt;
* documentation of code and general guidance available&lt;br /&gt;
* active developer community &lt;br /&gt;
&lt;br /&gt;
=== Cons ===&lt;br /&gt;
&lt;br /&gt;
* [[polylithic design]] takes up more time to conceive and see first results&lt;br /&gt;
* special requirements of a visualization enforce a lot of adapting work&lt;br /&gt;
&lt;br /&gt;
=General Approach=&lt;br /&gt;
&lt;br /&gt;
Going along with the step-wise recommendation of the [[Visualization Pipeline]], a &#039;&#039;&#039;prefuse&#039;&#039;&#039; application consists of different states of data:&lt;br /&gt;
&lt;br /&gt;
[[Image:prefuse_visualization_pipeline.gif]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;prefuse&#039;&#039;&#039; uses a centralized object called &#039;&#039;Visualization&#039;&#039; (former &#039;&#039;ItemRegistry&#039;&#039;) which maintains and manages the whole visualization. This object has to fulfil several tasks. It stores the abstract data as well as visual analogous of these in two different tables. All transformation routines like filtering or rendering are maintained and executed by the &#039;&#039;Visualization&#039;&#039; too. Further, it maintains at least one &#039;&#039;Display&#039;&#039;, a graphical component which can represent visual data of &#039;&#039;&#039;prefuse&#039;&#039;&#039;. &lt;br /&gt;
&lt;br /&gt;
Transformation routines are defined as &#039;&#039;Actions&#039;&#039; which are combined in &#039;&#039;ActionLists&#039;&#039;. An &#039;&#039;ActionList&#039;&#039; is an executable container which is started of the &#039;&#039;Visualization&#039;&#039; whenever necessary. Once it is started, all defined &#039;&#039;Actions&#039;&#039; are executed in the given sequence. Typically, the last called &#039;&#039;Action&#039;&#039; is the &#039;&#039;RepaintAction&#039;&#039; which forces all defined &#039;&#039;Displays&#039;&#039; to perform a repaint. &lt;br /&gt;
&lt;br /&gt;
A &#039;&#039;Display&#039;&#039; is the view of &#039;&#039;&#039;prefuse&#039;&#039;&#039;. It can be embedded in each Java Swing application. The main task of a &#039;&#039;Display&#039;&#039; is the painting of visual structures which are defined in the respective &#039;&#039;Visualization&#039;&#039;. Whenever the &#039;&#039;Display&#039;&#039; performs a repaint it requests all visual items and checks all bounds of them (bounding management). If an item is within the own area the respective rendering mechanism is called.  &lt;br /&gt;
&lt;br /&gt;
Another important task of the &#039;&#039;Display&#039;&#039; is the providing of navigation techniques like [[zoom]]ing or [[pan]]ning. The entire view is managed by an own view coordinate system which is described with an affine transformation matrix. The most important functionality to work with this coordinate system is already predefined. &lt;br /&gt;
&lt;br /&gt;
Furthermore, a &#039;&#039;Display&#039;&#039; also maintains a set of &#039;&#039;ControlListener&#039;&#039; which are used to process user interactions (mouse or keyboard events). Whenever such an event occurs the respective listener is called. This listener already differs on where the event happened (e.g., blank area or a certain item). Further, a &#039;&#039;ControlListener&#039;&#039; may also start an &#039;&#039;ActionList&#039;&#039; again.&lt;br /&gt;
&lt;br /&gt;
==Raw Data==&lt;br /&gt;
&lt;br /&gt;
Raw data is the base of the application. Typically, the source of raw data is a file, but also other sources like a database are thinkable. However, &#039;&#039;&#039;prefuse&#039;&#039;&#039; provides several file readers for different formats (CSV, Tab-Delimitated, etc.) that can be transformed into a data table. Further, some readers also support the reading of SQL-Database. If another source is needed, a reader can be written manually.&lt;br /&gt;
&lt;br /&gt;
Once the raw data is read, it is transformed into abstract data and stored within a data table. &lt;br /&gt;
&lt;br /&gt;
==Abstract Data==&lt;br /&gt;
&lt;br /&gt;
The data table which is used to store abstract data works with data types and a definition schema which maps relations between data type and table. That means, each row contains a data record, and each column contains data values for a named data field with a specific data type. Each record of the table is referred as a &#039;&#039;Tuple&#039;&#039;. &lt;br /&gt;
&lt;br /&gt;
Furthermore, instead of the table itself, a graph or tree may be used to store interrelated data. Instead of &#039;&#039;Tuples&#039;&#039;, records are referred as &#039;&#039;Nodes&#039;&#039; which are connected to others with &#039;&#039;Edges&#039;&#039;. Additionally, a tree has one defined root &#039;&#039;Node&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Abstract data does not contain any visual information like assignment attributes or color settings. Instead, visual attributes are extracted out of the abstract data following a defined logic.&lt;br /&gt;
&lt;br /&gt;
==Visual Structures==&lt;br /&gt;
&lt;br /&gt;
Visual structures are created when filtering the data container which contains abstract data. In case of a visualization that displays all items from the beginning on, the filtering routine must only executed once at initializing time. If the visual content changes dynamically, the filtering is executed on certain user interactions by calling a defined filtering &#039;&#039;ActionList&#039;&#039;. &lt;br /&gt;
&lt;br /&gt;
A visual structure is referred as &#039;&#039;VisualItem&#039;&#039; which may distinguished as &#039;&#039;VisualNode&#039;&#039;, &#039;&#039;VisualEdge&#039;&#039;, or an aggregated item which consists of several other items. However, as a &#039;&#039;VisualItem&#039;&#039; is extended of the respective abstract entity it has full access to all abstract information too. &lt;br /&gt;
&lt;br /&gt;
The filtering routine which transforms the abstract data to visual analogues typically consists of following &#039;&#039;Actions&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Filter&#039;&#039;&#039;: This &#039;&#039;Action&#039;&#039; is responsible to transform the abstract data of the backing table to visual analogues. If no special conditions are defined, the filter creates for each &#039;&#039;Tuple&#039;&#039; a visual instance and stores them in a second table. Additionally, a filter also performs a garbage collection and may set visibility attributes of the created items. &lt;br /&gt;
* &#039;&#039;&#039;Layout&#039;&#039;&#039;: A layout takes care about placing the &#039;&#039;VisualItems&#039;&#039;. Several common algorithms for graphs or trees are already predefined (e.g., &#039;&#039;ForceDirectedLayout&#039;&#039; or &#039;&#039;RadialTreeLayout&#039;&#039;). &lt;br /&gt;
* &#039;&#039;&#039;Assignment&#039;&#039;&#039;: Besides layouting, also other assignments may be performed during the filtering process. Such assignments directly changes visual attributes of &#039;&#039;VisualItems&#039;&#039; like color, sizes, fonts, etc.&lt;br /&gt;
&lt;br /&gt;
A visual structure may also contain a paint routine, but, as all painting jobs are initialized or performed by separated renderers, these issues may also be executed by the renderer itself or any other object. &lt;br /&gt;
&lt;br /&gt;
==View==&lt;br /&gt;
&lt;br /&gt;
Typically, the rendered visual structure is not stored, instead, they are re-rendered whenever needed. However, in case of very complex but constant visual representations it makes sense to hold items in an offscreen image. &lt;br /&gt;
&lt;br /&gt;
Each &#039;&#039;VisualItem&#039;&#039; has got one or more associated &#039;&#039;Renderers&#039;&#039; which are maintained by a factory of the &#039;&#039;Visualization&#039;&#039;. A  &#039;&#039;Render&#039;&#039; has to perform two tasks:&lt;br /&gt;
&lt;br /&gt;
* Providing a bounding box of the item. This box is used to determine if the item must actually be painted or if it would not be visible anyway. &lt;br /&gt;
* Providing the painting routine of the item. Paintings may be executed by the &#039;&#039;Renderer&#039;&#039; itself or delegated to other objects which are accessible of the &#039;&#039;Renderer&#039;&#039;. The painting routines are not restricted in any way, but they representation should not exceed the bounding box of the item. &lt;br /&gt;
&lt;br /&gt;
Rendering is always performed on a repaint of the &#039;&#039;Display&#039;&#039;. A repaint can be requested by the &#039;&#039;Visualization&#039;&#039;, on user interaction, and on events like resizing the component, getting the focus, or changing the coordinate system of the view. However, as repaints may occur very often, developers have to ascertain that rendering jobs can are performed fast, otherwise, the performance of the whole visualization would suffer.&lt;br /&gt;
&lt;br /&gt;
=Details=&lt;br /&gt;
&lt;br /&gt;
==Package Structure==&lt;br /&gt;
&lt;br /&gt;
Following picture shows the most important packages of &#039;&#039;&#039;prefuse&#039;&#039;&#039; regarding to the [[Visualization Pipeline]]:&lt;br /&gt;
&lt;br /&gt;
[[Image:prefuse_package_guide.gif|800px]]&lt;br /&gt;
&lt;br /&gt;
These packages also contain predefined components. A default nodes and edges provide standard functionality of abstract data, standard functionality is also available in visual analogous of them. A default filter transforms all defined abstract entities to visual ones. Further, also some special functionality for common requirements are provided by own components. &lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Renderers&#039;&#039;&#039;: &#039;&#039;EdgeRenderer&#039;&#039; to render edges between graph or tree nodes, a &#039;&#039;LableRenderer&#039;&#039; to render test items, and a &#039;&#039;PolygoneRenderer&#039;&#039; to render geometrical items. &lt;br /&gt;
* &#039;&#039;&#039;Layouts&#039;&#039;&#039;: &#039;&#039;RandomLayout&#039;&#039;, &#039;&#039;GridLayout&#039;&#039;, and some more to place non related data, &#039;&#039;ForceDirectedLayout&#039;&#039;, &#039;&#039;TreeLayout&#039;&#039;, &#039;&#039;RadialTreeLayout&#039;&#039; and others to render trees and graphs.&lt;br /&gt;
* &#039;&#039;&#039;Controls&#039;&#039;&#039;: &#039;&#039;DragControl&#039;&#039;, &#039;&#039;ZoomControl&#039;&#039;, &#039;&#039;PanControl&#039;&#039;, &#039;&#039;ToolTipControl&#039;&#039; and several others to react on user interactions. &lt;br /&gt;
&lt;br /&gt;
In simple visualizations the predefined functionality will meet most requirements. If special requirements are needed the default functionality supports a step-wise developing as results can be communicated by these components until the own functionality is implemented.&lt;br /&gt;
&lt;br /&gt;
==Coordinates in prefuse==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;prefuse&#039;&#039;&#039; works with two different coordinate systems. Absolute coordinates are device-independent logical coordinates. All visual attributes like positions or sizes are defined in absolute coordinates. In contrast, view coordinates are device-depended (screen). Transformations between absolute and view coordinates are done automatically by Java painting routines. View coordinates are influenced by the system and device driver (e.g., the absolute point (0,0) is the topmost left point of the actual graphical component which may be on any position at the screen). Further, view coordinates may also be manipulated manually by using an affine transformation matrix which applies linear transformations on absolute coordinates before device-dependent routines convert them to screen coordinates. &lt;br /&gt;
&lt;br /&gt;
A &#039;&#039;&#039;prefuse&#039;&#039;&#039; &#039;&#039;Display&#039;&#039; provides the most important manipulating methods of this matrix. [[Zoom]]ing, [[pan]]ning, and rotation of the whole view are only done by changing the view coordinates. So, as absolute coordinates are never concerned of such transformations and translations, a user must never consider the actual view in layout, assignment, or painting routines. &lt;br /&gt;
&lt;br /&gt;
There are several different ways on how to apply such transformations, additionally, the &#039;&#039;Display&#039;&#039; also supports animated transformations. &lt;br /&gt;
&lt;br /&gt;
==User Interactions==&lt;br /&gt;
&lt;br /&gt;
Mouse or keyboard events are treated by using &#039;&#039;ControlListener&#039;&#039;. Whenever an event occurs which is handled by a &#039;&#039;ControlListener&#039;&#039;, the &#039;&#039;Display&#039;&#039; delegates the event to the respective routine. A &#039;&#039;ControlListener&#039;&#039; differs automatically which visual element is concerned of the event (the view itself or a &#039;&#039;VisualItem&#039;&#039; on the view). &lt;br /&gt;
&lt;br /&gt;
A &#039;&#039;ControlListener&#039;&#039; may just perform simple task like changing the mouse cursor or editing the label of an item. But, in more sophisticated applications, also task like loading new data or dragging items on the view may also be handled. Therefore, a &#039;&#039;ControlListener&#039;&#039; may also work with &#039;&#039;ActionLists&#039;&#039; to execute such tasks. Further, a &#039;&#039;ControlListener&#039;&#039; has also access to the &#039;&#039;Display&#039;&#039; to call methods like zooming or panning. Typically, each &#039;&#039;ControlListener&#039;&#039; forces a repaint when its job is done.  &lt;br /&gt;
&lt;br /&gt;
Most of standard functionality is already predefined in &#039;&#039;prefuse&#039;&#039; and the wanted listeners just have to be set to the &#039;&#039;Display&#039;&#039;. However, the &#039;&#039;Display&#039;&#039; can handle a countless of different listener. Hence, typically only a few listeners must be defined manually as they can be mixed with default ones.  &lt;br /&gt;
&lt;br /&gt;
=Conclusion=&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;prefuse&#039;&#039;&#039; is a very powerful toolkit, providing a large set of components and methods a developer needs to build an [[Information Visualization]]. The [[polylithic design]] is not that easy to understand in the beginning of a development, but once conceived, a visualization is easy to realize even if really special demands have to be fulfilled. Furthermore, using Prefuse forces a clear and well designed architecture of own applications.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;prefuse&#039;&#039;&#039; was created with most attention paid to developers who will finally work with the toolkit. In an evaluation study this goal was approved too. In the meanwhile, there is also a not so small community using and upgrading the toolkit, which is an argue for its usability.&lt;br /&gt;
&lt;br /&gt;
= External links =&lt;br /&gt;
*[http://prefuse.org prefuse Homepage]&lt;br /&gt;
*[http://vw.indiana.edu/ivsi2004/jherr/index.html prefuse Position Paper]&lt;br /&gt;
*[http://sourceforge.net/forum/forum.php?forum_id=343013 prefuse Help Forum]&lt;br /&gt;
&lt;br /&gt;
= References =&lt;br /&gt;
*[Heer, 2004] Jeffrey Heer. [http://jheer.org/publications/2004-Heer-prefuse-Masters.pdf prefuse: a software framework for interactive information visualization]. Masters of Science, Computer Science Division, University of California, Berkeley, 2004.&lt;br /&gt;
*[Heer, 2005] Jeffrey Heer, Stuart K. Card, and James A. Landay. [http://jheer.org/publications/2005-prefuse-CHI.pdf prefuse: a toolkit for interactive information visualization. In &#039;&#039;CHI 2005, Human Factors in Computing Systems&#039;&#039;], 2005.&lt;br /&gt;
*[Heer, 2006a] Jeffrey Heer, prefuse API documentation, Retrieved at: July 06, 2006, http://prefuse.org&lt;br /&gt;
*[Heer, 2006b] Jeffrey Heer, prefuse manual, Retrieved at: July 06, 2006, http://prefuse.org&lt;br /&gt;
*[Sun Microsystems, 2001] Sun Microsystems, Programmer’s Guide to the Java 2DTM API - Enhanced Graphics and Imaging for Java, Retrieved at: April 20, 2006, http://java.sun.com/j2se/1.4/pdf/j2d-book.pdf&lt;br /&gt;
&lt;br /&gt;
[[Category:Toolkits]]&lt;/div&gt;</summary>
		<author><name>Anfe</name></author>
	</entry>
	<entry>
		<id>https://infovis-wiki.net/w/index.php?title=File:Prefuse_visualization_pipeline.gif&amp;diff=10105</id>
		<title>File:Prefuse visualization pipeline.gif</title>
		<link rel="alternate" type="text/html" href="https://infovis-wiki.net/w/index.php?title=File:Prefuse_visualization_pipeline.gif&amp;diff=10105"/>
		<updated>2006-07-06T01:33:21Z</updated>

		<summary type="html">&lt;p&gt;Anfe: /* Summary */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Summary ==&lt;br /&gt;
The image shows the visualization pipeline used in prefuse.&lt;br /&gt;
&lt;br /&gt;
== Copyright status ==&lt;br /&gt;
GNU Free Documentation License &amp;lt;br/&amp;gt;&lt;br /&gt;
Copyright (C) 2000,2001,2002  Free Software Foundation, Inc.&amp;lt;br/&amp;gt;&lt;br /&gt;
51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA&amp;lt;br/&amp;gt;&lt;br /&gt;
Everyone is permitted to copy and distribute verbatim copies&amp;lt;br/&amp;gt;&lt;br /&gt;
of this license document, but changing it is not allowed.&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Source ==&lt;br /&gt;
[Heer, 2006] Jeffrey Heer, prefuse manual, Retrieved at: July 06, 2006, http://prefuse.org&lt;/div&gt;</summary>
		<author><name>Anfe</name></author>
	</entry>
	<entry>
		<id>https://infovis-wiki.net/w/index.php?title=File:Prefuse_visualization_pipeline.gif&amp;diff=10104</id>
		<title>File:Prefuse visualization pipeline.gif</title>
		<link rel="alternate" type="text/html" href="https://infovis-wiki.net/w/index.php?title=File:Prefuse_visualization_pipeline.gif&amp;diff=10104"/>
		<updated>2006-07-06T01:32:46Z</updated>

		<summary type="html">&lt;p&gt;Anfe: /* Copyright status */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Summary ==&lt;br /&gt;
&lt;br /&gt;
== Copyright status ==&lt;br /&gt;
GNU Free Documentation License &amp;lt;br/&amp;gt;&lt;br /&gt;
Copyright (C) 2000,2001,2002  Free Software Foundation, Inc.&amp;lt;br/&amp;gt;&lt;br /&gt;
51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA&amp;lt;br/&amp;gt;&lt;br /&gt;
Everyone is permitted to copy and distribute verbatim copies&amp;lt;br/&amp;gt;&lt;br /&gt;
of this license document, but changing it is not allowed.&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Source ==&lt;br /&gt;
[Heer, 2006] Jeffrey Heer, prefuse manual, Retrieved at: July 06, 2006, http://prefuse.org&lt;/div&gt;</summary>
		<author><name>Anfe</name></author>
	</entry>
	<entry>
		<id>https://infovis-wiki.net/w/index.php?title=File:Prefuse_visualization_pipeline.gif&amp;diff=10103</id>
		<title>File:Prefuse visualization pipeline.gif</title>
		<link rel="alternate" type="text/html" href="https://infovis-wiki.net/w/index.php?title=File:Prefuse_visualization_pipeline.gif&amp;diff=10103"/>
		<updated>2006-07-06T01:32:18Z</updated>

		<summary type="html">&lt;p&gt;Anfe: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Summary ==&lt;br /&gt;
&lt;br /&gt;
== Copyright status ==&lt;br /&gt;
&lt;br /&gt;
== Source ==&lt;br /&gt;
[Heer, 2006] Jeffrey Heer, prefuse manual, Retrieved at: July 06, 2006, http://prefuse.org&lt;/div&gt;</summary>
		<author><name>Anfe</name></author>
	</entry>
	<entry>
		<id>https://infovis-wiki.net/w/index.php?title=File:Prefuse_package_guide.gif&amp;diff=10102</id>
		<title>File:Prefuse package guide.gif</title>
		<link rel="alternate" type="text/html" href="https://infovis-wiki.net/w/index.php?title=File:Prefuse_package_guide.gif&amp;diff=10102"/>
		<updated>2006-07-06T01:31:33Z</updated>

		<summary type="html">&lt;p&gt;Anfe: /* Copyright status */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Summary ==&lt;br /&gt;
The picture shows the most important packages of prefuse regarding to the Visualization Pipeline.&lt;br /&gt;
== Copyright status ==&lt;br /&gt;
GNU Free Documentation License &amp;lt;br/&amp;gt;&lt;br /&gt;
Copyright (C) 2000,2001,2002  Free Software Foundation, Inc.&amp;lt;br/&amp;gt;&lt;br /&gt;
51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA&amp;lt;br/&amp;gt;&lt;br /&gt;
Everyone is permitted to copy and distribute verbatim copies&amp;lt;br/&amp;gt;&lt;br /&gt;
of this license document, but changing it is not allowed.&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Source ==&lt;br /&gt;
[Heer, 2006] Jeffrey Heer, prefuse manual, Retrieved at: July 06, 2006, http://prefuse.org&lt;/div&gt;</summary>
		<author><name>Anfe</name></author>
	</entry>
	<entry>
		<id>https://infovis-wiki.net/w/index.php?title=File:Prefuse_package_guide.gif&amp;diff=10101</id>
		<title>File:Prefuse package guide.gif</title>
		<link rel="alternate" type="text/html" href="https://infovis-wiki.net/w/index.php?title=File:Prefuse_package_guide.gif&amp;diff=10101"/>
		<updated>2006-07-06T01:30:57Z</updated>

		<summary type="html">&lt;p&gt;Anfe: /* Copyright status */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Summary ==&lt;br /&gt;
The picture shows the most important packages of prefuse regarding to the Visualization Pipeline.&lt;br /&gt;
== Copyright status ==&lt;br /&gt;
GNU Free Documentation License&lt;br /&gt;
Copyright (C) 2000,2001,2002  Free Software Foundation, Inc.&lt;br /&gt;
51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA&lt;br /&gt;
Everyone is permitted to copy and distribute verbatim copies&lt;br /&gt;
of this license document, but changing it is not allowed.&lt;br /&gt;
&lt;br /&gt;
== Source ==&lt;br /&gt;
[Heer, 2006] Jeffrey Heer, prefuse manual, Retrieved at: July 06, 2006, http://prefuse.org&lt;/div&gt;</summary>
		<author><name>Anfe</name></author>
	</entry>
	<entry>
		<id>https://infovis-wiki.net/w/index.php?title=Prefuse&amp;diff=10100</id>
		<title>Prefuse</title>
		<link rel="alternate" type="text/html" href="https://infovis-wiki.net/w/index.php?title=Prefuse&amp;diff=10100"/>
		<updated>2006-07-06T01:30:11Z</updated>

		<summary type="html">&lt;p&gt;Anfe: /* Package Structure */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Summary =&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Author&#039;&#039;&#039;: Jeffrey Heer / UC Berkeley&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Project Webpage&#039;&#039;&#039;: http://prefuse.sourceforge.net&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Current Version&#039;&#039;&#039;: beta, June 15, 2006&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Requirements&#039;&#039;&#039;: Java 1.4&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Overview:&#039;&#039;&#039; using Java2D graphics library; pipeline architecture; animation and rendering support&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Base data structures&#039;&#039;&#039;: Table, Graph, Tree&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Included visualization techniques:&#039;&#039;&#039; [http://www.cs.umd.edu/hcil/fisheyemenu/ Fisheye Menu], [http://prefuse.sourceforge.net/demos-radial.html Radial Graph], [http://www.cs.umd.edu/hcil/treemap/ Treemap], [http://prefuse.sourceforge.net/demos-distortion.html F+C Distortion]&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Supported File Formats&#039;&#039;&#039;: XGMML (XML), TreeML (XML), tab-delimited text, HDir&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;prefuse&#039;&#039;&#039; is an interactive graphical open source toolkit written in Java. It is thought to support the development of sophisticated, highly interactive, and flexible [[Information Visualization]]s. The architecture of &#039;&#039;&#039;prefuse&#039;&#039;&#039; considers the [[Visualization Pipeline]], a recommendation on how to implement a visualization. To provide flexibility, a [[polylithic design]] was chosen which enables developers to implement only needed functionality and customize these to meet the own requirements. But, in contrast to a [[monolithic design]], this design needs more time to conceive and influences the architecture of the own application heavily (which is not a disadvantage as &#039;&#039;&#039;prefuse&#039;&#039;&#039; is very elaborate). &lt;br /&gt;
&lt;br /&gt;
Typically, &#039;&#039;&#039;prefuse&#039;&#039;&#039; is designed to visualize information which is interrelated so it can be stored in a graph or tree structure, but, also not related data can be used which is stored within a data-table. Even though the structure is hierarchical, the resulting relations must not be considered in the proper graphical representation as layout algorithms are not restricted in any way. The painting of visual items is done by using a renderer which has access to the respective item itself and the Graphics2D context of the view. This approach enables to use the whole range of available painting methods of Java, therefore, the visual representation is completely independent of the toolkit itself.&lt;br /&gt;
&lt;br /&gt;
Besides providing a large set of predefined elements to visualize data, most attention was set toward usability of the visualization. This is obtained by applying several interaction techniques like tooltips or dragging visual elements. But also more sophisticated techniques like [[zoom]]ing, [[pan]]ning, or [[semantic zoom]]ing are supported or partially even provided by the toolkit itself. Further, &#039;&#039;&#039;prefuse&#039;&#039;&#039; clearly distinguishes between absolute and view coordinates. This separation helps users to place all visual elements in a logical way without consideration of later applied visualization techniques that changes the entire view.  &lt;br /&gt;
&lt;br /&gt;
=== Pros ===&lt;br /&gt;
&lt;br /&gt;
* flexible&lt;br /&gt;
* versatile pipeline approach&lt;br /&gt;
* clear and well thought architecture&lt;br /&gt;
* many layout and distortion algorithms included&lt;br /&gt;
* algorithms for force-based physics simulation included&lt;br /&gt;
* custom animations (smooth transitions)&lt;br /&gt;
* color maps&lt;br /&gt;
* query language to navigate within abstract data&lt;br /&gt;
* demos and examples included&lt;br /&gt;
* bounding management&lt;br /&gt;
* open source&lt;br /&gt;
* documentation of code and general guidance available&lt;br /&gt;
* active developer community &lt;br /&gt;
&lt;br /&gt;
=== Cons ===&lt;br /&gt;
&lt;br /&gt;
* [[polylithic design]] takes up more time to conceive and see first results&lt;br /&gt;
* special requirements of a visualization enforce a lot of adapting work&lt;br /&gt;
&lt;br /&gt;
=General Approach=&lt;br /&gt;
&lt;br /&gt;
Going along with the step-wise recommendation of the [[Visualization Pipeline]], a &#039;&#039;&#039;prefuse&#039;&#039;&#039; application consists of different states of data:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;prefuse&#039;&#039;&#039; uses a centralized object called &#039;&#039;Visualization&#039;&#039; (former &#039;&#039;ItemRegistry&#039;&#039;) which maintains and manages the whole visualization. This object has to fulfil several tasks. It stores the abstract data as well as visual analogous of these in two different tables. All transformation routines like filtering or rendering are maintained and executed by the &#039;&#039;Visualization&#039;&#039; too. Further, it maintains at least one &#039;&#039;Display&#039;&#039;, a graphical component which can represent visual data of &#039;&#039;&#039;prefuse&#039;&#039;&#039;. &lt;br /&gt;
&lt;br /&gt;
Transformation routines are defined as &#039;&#039;Actions&#039;&#039; which are combined in &#039;&#039;ActionLists&#039;&#039;. An &#039;&#039;ActionList&#039;&#039; is an executable container which is started of the &#039;&#039;Visualization&#039;&#039; whenever necessary. Once it is started, all defined &#039;&#039;Actions&#039;&#039; are executed in the given sequence. Typically, the last called &#039;&#039;Action&#039;&#039; is the &#039;&#039;RepaintAction&#039;&#039; which forces all defined &#039;&#039;Displays&#039;&#039; to perform a repaint. &lt;br /&gt;
&lt;br /&gt;
A &#039;&#039;Display&#039;&#039; is the view of &#039;&#039;&#039;prefuse&#039;&#039;&#039;. It can be embedded in each Java Swing application. The main task of a &#039;&#039;Display&#039;&#039; is the painting of visual structures which are defined in the respective &#039;&#039;Visualization&#039;&#039;. Whenever the &#039;&#039;Display&#039;&#039; performs a repaint it requests all visual items and checks all bounds of them (bounding management). If an item is within the own area the respective rendering mechanism is called.  &lt;br /&gt;
&lt;br /&gt;
Another important task of the &#039;&#039;Display&#039;&#039; is the providing of navigation techniques like [[zoom]]ing or [[pan]]ning. The entire view is managed by an own view coordinate system which is described with an affine transformation matrix. The most important functionality to work with this coordinate system is already predefined. &lt;br /&gt;
&lt;br /&gt;
Furthermore, a &#039;&#039;Display&#039;&#039; also maintains a set of &#039;&#039;ControlListener&#039;&#039; which are used to process user interactions (mouse or keyboard events). Whenever such an event occurs the respective listener is called. This listener already differs on where the event happened (e.g., blank area or a certain item). Further, a &#039;&#039;ControlListener&#039;&#039; may also start an &#039;&#039;ActionList&#039;&#039; again.&lt;br /&gt;
&lt;br /&gt;
==Raw Data==&lt;br /&gt;
&lt;br /&gt;
Raw data is the base of the application. Typically, the source of raw data is a file, but also other sources like a database are thinkable. However, &#039;&#039;&#039;prefuse&#039;&#039;&#039; provides several file readers for different formats (CSV, Tab-Delimitated, etc.) that can be transformed into a data table. Further, some readers also support the reading of SQL-Database. If another source is needed, a reader can be written manually.&lt;br /&gt;
&lt;br /&gt;
Once the raw data is read, it is transformed into abstract data and stored within a data table. &lt;br /&gt;
&lt;br /&gt;
==Abstract Data==&lt;br /&gt;
&lt;br /&gt;
The data table which is used to store abstract data works with data types and a definition schema which maps relations between data type and table. That means, each row contains a data record, and each column contains data values for a named data field with a specific data type. Each record of the table is referred as a &#039;&#039;Tuple&#039;&#039;. &lt;br /&gt;
&lt;br /&gt;
Furthermore, instead of the table itself, a graph or tree may be used to store interrelated data. Instead of &#039;&#039;Tuples&#039;&#039;, records are referred as &#039;&#039;Nodes&#039;&#039; which are connected to others with &#039;&#039;Edges&#039;&#039;. Additionally, a tree has one defined root &#039;&#039;Node&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Abstract data does not contain any visual information like assignment attributes or color settings. Instead, visual attributes are extracted out of the abstract data following a defined logic.&lt;br /&gt;
&lt;br /&gt;
==Visual Structures==&lt;br /&gt;
&lt;br /&gt;
Visual structures are created when filtering the data container which contains abstract data. In case of a visualization that displays all items from the beginning on, the filtering routine must only executed once at initializing time. If the visual content changes dynamically, the filtering is executed on certain user interactions by calling a defined filtering &#039;&#039;ActionList&#039;&#039;. &lt;br /&gt;
&lt;br /&gt;
A visual structure is referred as &#039;&#039;VisualItem&#039;&#039; which may distinguished as &#039;&#039;VisualNode&#039;&#039;, &#039;&#039;VisualEdge&#039;&#039;, or an aggregated item which consists of several other items. However, as a &#039;&#039;VisualItem&#039;&#039; is extended of the respective abstract entity it has full access to all abstract information too. &lt;br /&gt;
&lt;br /&gt;
The filtering routine which transforms the abstract data to visual analogues typically consists of following &#039;&#039;Actions&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Filter&#039;&#039;&#039;: This &#039;&#039;Action&#039;&#039; is responsible to transform the abstract data of the backing table to visual analogues. If no special conditions are defined, the filter creates for each &#039;&#039;Tuple&#039;&#039; a visual instance and stores them in a second table. Additionally, a filter also performs a garbage collection and may set visibility attributes of the created items. &lt;br /&gt;
* &#039;&#039;&#039;Layout&#039;&#039;&#039;: A layout takes care about placing the &#039;&#039;VisualItems&#039;&#039;. Several common algorithms for graphs or trees are already predefined (e.g., &#039;&#039;ForceDirectedLayout&#039;&#039; or &#039;&#039;RadialTreeLayout&#039;&#039;). &lt;br /&gt;
* &#039;&#039;&#039;Assignment&#039;&#039;&#039;: Besides layouting, also other assignments may be performed during the filtering process. Such assignments directly changes visual attributes of &#039;&#039;VisualItems&#039;&#039; like color, sizes, fonts, etc.&lt;br /&gt;
&lt;br /&gt;
A visual structure may also contain a paint routine, but, as all painting jobs are initialized or performed by separated renderers, these issues may also be executed by the renderer itself or any other object. &lt;br /&gt;
&lt;br /&gt;
==View==&lt;br /&gt;
&lt;br /&gt;
Typically, the rendered visual structure is not stored, instead, they are re-rendered whenever needed. However, in case of very complex but constant visual representations it makes sense to hold items in an offscreen image. &lt;br /&gt;
&lt;br /&gt;
Each &#039;&#039;VisualItem&#039;&#039; has got one or more associated &#039;&#039;Renderers&#039;&#039; which are maintained by a factory of the &#039;&#039;Visualization&#039;&#039;. A  &#039;&#039;Render&#039;&#039; has to perform two tasks:&lt;br /&gt;
&lt;br /&gt;
* Providing a bounding box of the item. This box is used to determine if the item must actually be painted or if it would not be visible anyway. &lt;br /&gt;
* Providing the painting routine of the item. Paintings may be executed by the &#039;&#039;Renderer&#039;&#039; itself or delegated to other objects which are accessible of the &#039;&#039;Renderer&#039;&#039;. The painting routines are not restricted in any way, but they representation should not exceed the bounding box of the item. &lt;br /&gt;
&lt;br /&gt;
Rendering is always performed on a repaint of the &#039;&#039;Display&#039;&#039;. A repaint can be requested by the &#039;&#039;Visualization&#039;&#039;, on user interaction, and on events like resizing the component, getting the focus, or changing the coordinate system of the view. However, as repaints may occur very often, developers have to ascertain that rendering jobs can are performed fast, otherwise, the performance of the whole visualization would suffer. &lt;br /&gt;
&lt;br /&gt;
=Details=&lt;br /&gt;
&lt;br /&gt;
==Package Structure==&lt;br /&gt;
&lt;br /&gt;
Following picture shows the most important packages of &#039;&#039;&#039;prefuse&#039;&#039;&#039; regarding to the [[Visualization Pipeline]]:&lt;br /&gt;
&lt;br /&gt;
[[Image:prefuse_package_guide.gif|800px]]&lt;br /&gt;
&lt;br /&gt;
These packages also contain predefined components. A default nodes and edges provide standard functionality of abstract data, standard functionality is also available in visual analogous of them. A default filter transforms all defined abstract entities to visual ones. Further, also some special functionality for common requirements are provided by own components. &lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Renderers&#039;&#039;&#039;: &#039;&#039;EdgeRenderer&#039;&#039; to render edges between graph or tree nodes, a &#039;&#039;LableRenderer&#039;&#039; to render test items, and a &#039;&#039;PolygoneRenderer&#039;&#039; to render geometrical items. &lt;br /&gt;
* &#039;&#039;&#039;Layouts&#039;&#039;&#039;: &#039;&#039;RandomLayout&#039;&#039;, &#039;&#039;GridLayout&#039;&#039;, and some more to place non related data, &#039;&#039;ForceDirectedLayout&#039;&#039;, &#039;&#039;TreeLayout&#039;&#039;, &#039;&#039;RadialTreeLayout&#039;&#039; and others to render trees and graphs.&lt;br /&gt;
* &#039;&#039;&#039;Controls&#039;&#039;&#039;: &#039;&#039;DragControl&#039;&#039;, &#039;&#039;ZoomControl&#039;&#039;, &#039;&#039;PanControl&#039;&#039;, &#039;&#039;ToolTipControl&#039;&#039; and several others to react on user interactions. &lt;br /&gt;
&lt;br /&gt;
In simple visualizations the predefined functionality will meet most requirements. If special requirements are needed the default functionality supports a step-wise developing as results can be communicated by these components until the own functionality is implemented.&lt;br /&gt;
&lt;br /&gt;
==Coordinates in prefuse==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;prefuse&#039;&#039;&#039; works with two different coordinate systems. Absolute coordinates are device-independent logical coordinates. All visual attributes like positions or sizes are defined in absolute coordinates. In contrast, view coordinates are device-depended (screen). Transformations between absolute and view coordinates are done automatically by Java painting routines. View coordinates are influenced by the system and device driver (e.g., the absolute point (0,0) is the topmost left point of the actual graphical component which may be on any position at the screen). Further, view coordinates may also be manipulated manually by using an affine transformation matrix which applies linear transformations on absolute coordinates before device-dependent routines convert them to screen coordinates. &lt;br /&gt;
&lt;br /&gt;
A &#039;&#039;&#039;prefuse&#039;&#039;&#039; &#039;&#039;Display&#039;&#039; provides the most important manipulating methods of this matrix. [[Zoom]]ing, [[pan]]ning, and rotation of the whole view are only done by changing the view coordinates. So, as absolute coordinates are never concerned of such transformations and translations, a user must never consider the actual view in layout, assignment, or painting routines. &lt;br /&gt;
&lt;br /&gt;
There are several different ways on how to apply such transformations, additionally, the &#039;&#039;Display&#039;&#039; also supports animated transformations. &lt;br /&gt;
&lt;br /&gt;
==User Interactions==&lt;br /&gt;
&lt;br /&gt;
Mouse or keyboard events are treated by using &#039;&#039;ControlListener&#039;&#039;. Whenever an event occurs which is handled by a &#039;&#039;ControlListener&#039;&#039;, the &#039;&#039;Display&#039;&#039; delegates the event to the respective routine. A &#039;&#039;ControlListener&#039;&#039; differs automatically which visual element is concerned of the event (the view itself or a &#039;&#039;VisualItem&#039;&#039; on the view). &lt;br /&gt;
&lt;br /&gt;
A &#039;&#039;ControlListener&#039;&#039; may just perform simple task like changing the mouse cursor or editing the label of an item. But, in more sophisticated applications, also task like loading new data or dragging items on the view may also be handled. Therefore, a &#039;&#039;ControlListener&#039;&#039; may also work with &#039;&#039;ActionLists&#039;&#039; to execute such tasks. Further, a &#039;&#039;ControlListener&#039;&#039; has also access to the &#039;&#039;Display&#039;&#039; to call methods like zooming or panning. Typically, each &#039;&#039;ControlListener&#039;&#039; forces a repaint when its job is done.  &lt;br /&gt;
&lt;br /&gt;
Most of standard functionality is already predefined in &#039;&#039;prefuse&#039;&#039; and the wanted listeners just have to be set to the &#039;&#039;Display&#039;&#039;. However, the &#039;&#039;Display&#039;&#039; can handle a countless of different listener. Hence, typically only a few listeners must be defined manually as they can be mixed with default ones.  &lt;br /&gt;
&lt;br /&gt;
=Conclusion=&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;prefuse&#039;&#039;&#039; is a very powerful toolkit, providing a large set of components and methods a developer needs to build an [[Information Visualization]]. The [[polylithic design]] is not that easy to understand in the beginning of a development, but once conceived, a visualization is easy to realize even if really special demands have to be fulfilled. Furthermore, using Prefuse forces a clear and well designed architecture of own applications.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;prefuse&#039;&#039;&#039; was created with most attention paid to developers who will finally work with the toolkit. In an evaluation study this goal was approved too. In the meanwhile, there is also a not so small community using and upgrading the toolkit, which is an argue for its usability.&lt;br /&gt;
&lt;br /&gt;
= External links =&lt;br /&gt;
*[http://prefuse.org prefuse Homepage]&lt;br /&gt;
*[http://vw.indiana.edu/ivsi2004/jherr/index.html prefuse Position Paper]&lt;br /&gt;
*[http://sourceforge.net/forum/forum.php?forum_id=343013 prefuse Help Forum]&lt;br /&gt;
&lt;br /&gt;
= References =&lt;br /&gt;
*[Heer, 2004] Jeffrey Heer. [http://jheer.org/publications/2004-Heer-prefuse-Masters.pdf prefuse: a software framework for interactive information visualization]. Masters of Science, Computer Science Division, University of California, Berkeley, 2004.&lt;br /&gt;
*[Heer, 2005] Jeffrey Heer, Stuart K. Card, and James A. Landay. [http://jheer.org/publications/2005-prefuse-CHI.pdf prefuse: a toolkit for interactive information visualization. In &#039;&#039;CHI 2005, Human Factors in Computing Systems&#039;&#039;], 2005.&lt;br /&gt;
*[Heer, 2006a] Jeffrey Heer, prefuse API documentation, Retrieved at: July 06, 2006, http://prefuse.org&lt;br /&gt;
*[Heer, 2006b] Jeffrey Heer, prefuse manual, Retrieved at: July 06, 2006, http://prefuse.org&lt;br /&gt;
*[Sun Microsystems, 2001] Sun Microsystems, Programmer’s Guide to the Java 2DTM API - Enhanced Graphics and Imaging for Java, Retrieved at: April 20, 2006, http://java.sun.com/j2se/1.4/pdf/j2d-book.pdf&lt;br /&gt;
&lt;br /&gt;
[[Category:Toolkits]]&lt;/div&gt;</summary>
		<author><name>Anfe</name></author>
	</entry>
</feed>