Graph Modification Earlier, we saw how to add vertices and edges to a new graph by calling the addVertex and addEdge methods on the Graph interface. Likewise, there are corresponding methods for removing graph components. All of these methods are modeled on the java. There are two convenience helpers available to assist with this when adding components to a graph; both of them take care of automatically adding vertices whenever edges are added: The Graphs utility class provides methods such as addEdgeWithVertices The GraphBuilder framework also allows you to use method chaining when populating data in a new graph.
|Published (Last):||8 January 2019|
|PDF File Size:||4.7 Mb|
|ePub File Size:||1.92 Mb|
|Price:||Free* [*Free Regsitration Required]|
Note that these are not core API methods, as usual these methods are on the mxGraph class, where appropriate, and they perform the update encapsulation for you. Design Background - Some people are confused by the presence of visual information being stored by the model. These attributes comprise cell positioning, visibility and collapsed state.
The model stores the default state of these attributes, providing a common place to set them on a per-cell basis, whereas, views can override the values on a per-view basis. The model is simply the first common place in the architecture where these attributes can be set on a global basis. Remember, this is a graph visualization library, the visualization part is the core functionality. Inserting Cells The three graph cells created in the HelloWorld application are two vertices and one edge connecting the vertices.
If you are not familiar with basic graph theory and its terminology, please see the wikipedia entry. You can add vertices and edges using the add method on the model. However, for the purposes of general usage of this library, learn that mxGraph. The method of the model requires that the cell to be added is already created, whereas the mxGraph. Core API methods: mxGraph. The parameters of the method are: parent — the cell which is the immediate parent of the new cell in the group structure.
We will address the group structure shortly, but for now use graph. This is primarily for referencing the cells in the persistent output externally. If you do not wish to maintain ids yourself, pass null into this parameter and ensure that mxGraphModel.
This way the model will manage the ids and ensure they are unique. User object are simply that, just objects, but form the objects that allow you to associate the business logic of an application with the visual representation of JGraphX. They will be described in more detail later in this manual, however, to start with if you use a string as the user object, this will be displayed as the label on the vertex or edge.
Styles will be described in more detail shortly, but at a simple level this parameter is a string that follows a particular format. Until we create custom styles, we will just use those currently available. With the edge addition method, the identically named parameters perform the same method as in the vertex addition method. The source and target parameters define the vertices to which the edge is connected.
Note that the source and target vertices should already have been inserted into the model. The key difference in usage is that using the model methods creates the appropriate event notifications and undo, using the cell makes the change but there is no record of the change. This can be useful for temporary visual effects such as animations or changes on a mouse over, for example.
As a general rule though, use the model editing API unless you encounter a specific problem with this mechanism. When creating a new cell, three things are required in the constructor, a value user object , a geometry and a style.
We will now explore these 3 concepts before returning to the cell. Styles The concept of styles and stylesheets in conceptually similar to CSS stylesheets. Open up the util. If you scroll down you will see a large number of strings defined for all the various styles available with this prefix. Some of styles apply to vertices, some to edges and some to both.
As you can see, these define visual attributes on the element they act upon. The mxStylesheet holds one object, styles, which is a hashtable mapping style names to an array of styles: Style arrays within the styles collection In the above image the blue box represents the styles hashtable in mxStyleSheet.
Note that JGraphX creates two default styles, one for vertices and one for edges. If you look back to the helloworld example, no style was passed into the optional style parameter of insertVertex or insertEdge. In this case the default style would be used for those cells. The style that you pass has the form stylename. If the string starts with no semi-colon, the default style is used. The coordinate system in Java is x is positive to the right and y is positive downwards, and in terms of the graph, the positioning is absolute to the container within which the mxGraph is placed.
The reason for a separate mxGeometry class, as opposed to simply having the mxRectangle class store this information, is that the edges also have geometry information. The width and height values are ignored for edges and the x and y values relate to the positioning of the edge label. In addition, edges have the concept of control points.
These are intermediate points along the edge that the edge is drawn as passing through. The use of control points is sometimes referred to as edge routing. An edge routed by 2 control points There are two more important additional concepts in geometry, relative positioning and offsets Relative Positioning By default, the x and y position of a vertex is the offset of the top left point of the bounding rectangle of the parent to the top left point of the bounding rectangle of the cell itself.
The concept of parents and groups is discussed later in this chapter, but without going into too much detail, if a cell does not have cell parent, the graph container is its parent for positioning purposes. Non-relative vertex positioning For an edge, in non-relative mode, which is the default mode, the edge label position is the absolute offset from the graph origin. The same relative positioning extends below 0 and above 1 for both dimensions.
This positioning is useful for keeping child cells fixed relative to the overall parent cell size. Relative vertex positions Lastly, edge labels in relative mode are palced based on the positioning from the center of the edge.
The x-coordinate is the relative distance from the source end of the edge, at -1, to the target end of the edge, at 1. The y co-ordinate is the pixel offset orthogonal from the edge. The diagram below shows the values of x,y for various edge labels in relative mode. Note that for a straight edge, the calculations are simple. The y value is the orthogonal offset from that segment. Switching relative positioning on for edge labels is a common preference for applications. Navigate to the mxGraph.
In createEdge the geometry is set relative for every edge created using this prototype. This is partly the reason for the amount of helper methods in mxGraph, they enable easy changing of the default behaviour.
You should try to use the mxGraph class API as much as possible to provide this benefit in your applications. Offsets The offset field in mxGeometry is an absolute x,y offset applied to the cell label.
In the case of edge labels, the offset is always applied after the edge label has been calculated according to the relative flag in the above section. User Objects The User object is what gives JGraphX diagrams a context, it stores the business logic associated with a visual cell. In the HelloWorld example the user object has just been a string, in this case it simply represents the label that will be displayed for that cell. In more complex applications, these user objects will be objects instead.
Some attribute of that object will generally be the label that the visual cell will display, the rest of the object describes logic relating to the application domain. There might be a reference to some process on the workflow engine as to how the inventory is actually checked. This might be an application specific mechanism for both the server and client to assign some identification to remote method calls. Another value might be the type of object that process returned, maybe a boolean or an integer to indicate stock level in this case.
Given that return type, it is possible to enforce constraints with the diagram and provide visual alerts of if, say, the outgoing edges decision check does not correspond to the return type of the vertex. Next, as an example, the user objects of the outgoing edges might contain a label and a boolean state. Again, the JGraphX-based editor might provide the means to alter the boolean value. When executing the process, it might follow the edges that correspond to the boolean value returned by the decision node.
Keep in mind that the above example is very domain specific, it is there to explain how the user object maps to the business logic of the application. It visualizes how JGraphX creates what we term a contextual graph. The context is formed by the connections between vertices and the business logic stored within the user objects. Cell Types As described previously, mxGraph is the primary API for using this library and the same concept applies to cells.
One basic state of the cell not exposed on the graph is whether a cell is a vertex or an edge, this call be performed on the cell or on the model. There are two boolean flags on mxCell, vertex and edge, and the helper methods set one of these to true when the cell is created. Technically, it is possible to switch the type of a cell at runtime, but take care to invalidate the cell state see later section after changing the type. Also, be aware that the geometry object variable means different things to vertices and edges.
Generally, it is not recommended to change a cell type at runtime. Group Structure Grouping, within JGraphX, is the concept of logically associating cells with one another. This is commonly referred to as the concept of sub-graphs in many graph toolkits.
Grouping involves one or more vertices or edges becoming children of a parent vertex or edge usually a vertex in the graph model data structure. Grouping allows JGraphX to provide a number of useful features: Sub-graphs, the concept of a logically separate graph that is displayed in the higher level graph as a cell per sub-graph.
Expanding and collapsing. Collapsing is the ability to replace a collection of grouped cells visually with just their parent cell. Expanding is the reverse of this. This is described in the Complexity Management section below.
Layering is the concept of assigning cells to a particular z-order layer within the graph display. Drill down, step up. These concepts allow sub-graphs to be visualized and edited as if they are a complete graph. Take, for example, the case where a developer is describing each of the vertices in the process as the software processes that perform the task.
The application might have an option to drill down into the check inventory vertex. This would result in a new graph appearing that describes in detail how exactly the system checks the inventory. In grouping, cells are assigned a parent cell.
Overview for Application Developers
Note that these are not core API methods, as usual these methods are on the mxGraph class, where appropriate, and they perform the update encapsulation for you. Design Background - Some people are confused by the presence of visual information being stored by the model. These attributes comprise cell positioning, visibility and collapsed state. The model stores the default state of these attributes, providing a common place to set them on a per-cell basis, whereas, views can override the values on a per-view basis. The model is simply the first common place in the architecture where these attributes can be set on a global basis. Remember, this is a graph visualization library, the visualization part is the core functionality. Inserting Cells The three graph cells created in the HelloWorld application are two vertices and one edge connecting the vertices.
Compares two community structures using various distance measures. Parameters: comm1 - the first community structure as a membership list or as a Clustering object. This is handy if your Clustering object was constructed using VertexClustering. FromAttribute using an attribute which was not defined for all the vertices.
JGraphX (JGraph 6) User Manual