Central implementation of the IGraph interface.
ImplementsInheritance Hierarchy

Remarks

This implementation deals with the proper firing of events and handling of default values.

This implementation has inherent support for undoability. If the undoEngineEnabled property is set to true, changes to the structure of the graph will automatically be recorded using the UndoEngine instance that can be queried from this instance's lookup method. Clients that wish to enqueue custom undo events or that need to make non-structural changes to the graph can use the UndoEngine to do so. The current instance of UndoEngine can be queried using the lookup method of this instance. Also there are several protected methods Create...UndoUnit that will be used by this instance to create the actual undo units for structural changes in the graph's structure. If clients need to customize these units they can create a subclass of Graph and override these methods.

Finally this implementation supports grouped graphs.

See Also

DefaultGraph is IGraph's default implementation as described in the section The Graph Model - IGraph.

Developer's Guide

API

createUndoEngine, lookup, Graph, FoldingManager

Demos

Shows the graph editing features of the graph component.

Members

Show:

Constructors

Creates a new instance of a graph that provides an ILookupDecorator for all of its entities.

Parameters

Properties

Gets a live view of all bends contained in this IGraph.
readonly

See Also

API
bends

Defined in

IGraph.bends
Gets a GraphDecorator instance for use with this graph.
Gets or sets the defaults for edges.
The settings that are obtained from the instance influence newly created elements only. Setting different defaults afterward does not influence existing elements.
final
Gets a live view of all edge labels contained in this IGraph.
readonly
Gets a view of the edges contained in this graph.

This is a live view of the edges that always represents the current state of the graph. The same reference will be returned for each invocation.

Note that even though edges can be accessed via index, the underlying graph structure in the default IGraph implementation is a linked list and indexed access can be slow. In those cases it is recommended to store the edges in your own list, if possible. This is not necessary for the first or last element or when iterating over the edges via a foreach loop.

readonlyfinal

Implements

IGraph.edges
Gets the IFoldingView instance associated with this IGraph or null if none is associated with it.
This convenience method uses the lookup of the IGraph to obtain the IFoldingView.
readonly

See Also

Developer's Guide
API
FoldingManager, createFoldingView
Creates a GroupingSupport instance for the graph.
GroupingSupport provides less frequently used methods for grouped graphs, such as methods for analyzing and walking the grouping hierarchy.
readonly

See Also

Developer's Guide
Gets or sets the defaults for group nodes.
The settings that are obtained from the instance influence newly created elements only. Setting different defaults afterwards does not influence existing elements.
final
Gets a view of the labels contained in this graph.

This is a live view of the labels that always represents the current state of the graph. The same reference will be returned for each invocation.

Note that even though labels can be accessed via index, the underlying graph structure in the default IGraph implementation is a linked list and indexed access can be slow. In those cases it is recommended to store the labels in your own list, if possible. This is not necessary for the first or last element or when iterating over the labels via a foreach loop.

readonlyfinal

Implements

IGraph.labels
Gets or sets the defaults for normal nodes.
The settings that are obtained from the instance influence newly created elements only. Setting different defaults afterwards does not influence existing elements.
final
Gets a live view of all node labels contained in this IGraph.
readonly
Gets a view of the nodes contained in this graph.

This is a live view of the nodes that always represents the current state of the graph. The same reference will be returned for each invocation.

Note that even though nodes can be accessed via index, the underlying graph structure in the default IGraph implementation is a linked list and indexed access can be slow. In those cases it is recommended to store the nodes in your own list, if possible. This is not necessary for the first or last element or when iterating over the nodes via a foreach loop.

readonlyfinal

Implements

IGraph.nodes
Gets a live view of all port labels contained in this IGraph.
readonly
Gets a view of the ports contained in this graph.

This is a live view of the ports that always represents the current state of the graph. The same reference will be returned for each invocation.

Note that even though ports can be accessed via index, the underlying graph structure in the default IGraph implementation is a linked list and indexed access can be slow. In those cases it is recommended to store the ports in your own list, if possible. This is not necessary for the first or last element or when iterating over the ports via a foreach loop.

readonlyfinal

Implements

IGraph.ports
Gets or sets the tag object associated with this item instance.
The tag is an optional user-defined object which can be used to store arbitrary data related to this item. The item itself just provides the storage for the object.
final

Implements

ITagOwner.tag
Gets the UndoEngine instance associated with this IGraph or null if none is associated with it.
This convenience method uses the lookup of the IGraph to obtain the UndoEngine.
readonly

See Also

Developer's Guide
Gets or sets whether the UndoEngine used for this instance should be enabled.
The default is false. In order to enable undoability for this instance, set this property to true and lookup the UndoEngine type. Disabling this property clears and removes the current UndoEngine (and all enqueued IUndoUnits).

Methods

Adds a bend at the given index to the given edge using the coordinates provided.

The added instance will be returned.

To retrieve the current bends of an edge, use bends

Parameters

edge: IEdge
The edge to which the bend will be added.
location: Point
The coordinates to use for the newly created bend. To change the location after the bend has been added, use setBendLocation.
index?: number
The index for the newly added bend; A negative value (which is the default) indicates that the bend should be appended to the end of the list of bends.

Return Value

IBend
A newly created live bend

Implements

IGraph.addBend
Adds bends with the given locations to the end of the bend list of the given edge.

Parameters

edge: IEdge
The edge to add the bends to.
locations: IEnumerable<Point>
The locations of the bends.

Throws

Exception ({ name: 'ArgumentError' })
edge is not in this graph.
Exception ({ name: 'ArgumentError' })
locations contains one or more NaN values.

See Also

API
addBend

Defined in

IGraph.addBends
Add a label to the given node or edge using the text as the initial label text and label model parameter, style, and tag.

Parameters

owner: ILabelOwner
The node, edge, or port to add the label to. Note that the owner cannot be changed after the label has been added.
text: string
The initial text of the label. To change the text after the label has been added, use setLabelText.
layoutParameter?: ILabelModelParameter
The label model parameter instance to use. If omitted the default parameter will be set. To change the parameter after the label has been added, use setLabelLayoutParameter.
style?: ILabelStyle
The style to use for the label. If omitted the default style will be set. To change the style after the label has been added, use setStyle.
preferredSize?: Size
The initial values to use for the preferredSize. If omitted size will be determined automatically. To change the preferred size after the label has been added, use setLabelPreferredSize.
tag?: ILabel['tag']
The initial tag to assign.

Return Value

ILabel
The newly created label.

Implements

IGraph.addLabel
Adds the chain element to the lookup for this instance.

Parameters

lookup: IContextLookupChainLink
The lookup to decorate the current instance with.
Add a port to the given port owner using the coordinates as the new initial position of the port anchor.

Parameters

owner: IPortOwner
The owner to add the port instance to.
locationParameter?: IPortLocationModelParameter
The parameter to use for the port to determine its location.
style?: IPortStyle
The style to assign initially to the port, e.g. VOID_PORT_STYLE.
tag?: IPort['tag']
The tag to associate with the port, may be null.

Return Value

IPort
The newly created port

Throws

Exception ({ name: 'NotSupportedError' })
If this instance cannot add a port to owner.
Exception ({ name: 'ArgumentError' })
If owner is not in this graph.

See Also

API
port-added

Implements

IGraph.addPort
Add a port to the given port owner using the absolute coordinates as the new initial position of the port anchor.

Parameters

owner: IPortOwner
The owner to add the port instance to.
location: Point
The location to use for the port to determine its location. This is passed to the createDefaultPortLocationParameter method to determine the initial IPortLocationModelParameter to use.
style?: IPortStyle
The style to initially assign to the style property, e.g. VOID_PORT_STYLE.
tag?: IPort['tag']
The initial tag to assign.

Return Value

IPort
The newly created port

Throws

Exception ({ name: 'NotSupportedError' })
If this instance cannot add a port to owner.
Exception ({ name: 'ArgumentError' })
owner is not in this graph.
Exception ({ name: 'ArgumentError' })
location contains one or more NaN values.

See Also

Developer's Guide
API
addPort, setPortLocation
Adds a new port to the graph at the node using a location that is relative to the center of the node.
The port style for the newly-created port is taken from the graph's defaults. The location parameter is determined by delegating to addPortAt.

Parameters

node: INode
The owner of the port.
relativeLocation: Point
The offset of the port relative to the center of the layout.

Return Value

IPort
The newly added port instance.

Throws

Exception ({ name: 'ArgumentError' })
node is not in this graph.
Exception ({ name: 'ArgumentError' })
relativeLocation contains one or more NaN values.

See Also

API
addPort, addPortAt, setRelativePortLocation
Uses the UndoEngine from the IGraph's ILookup to add a unit.

Parameters

undoName: string
The name of the undo operation.
redoName: string
The name of the redo operation.
undo: function
The undo action.
redo: function
The redo action.

See Also

Developer's Guide
Method to adjust the size of a group node.
This will resize the group node bounds such that the node requires the least amount of space. If the node does not have any children, its bounds will be left unchanged. This will also respect any INodeSizeConstraintProviders for INodes that are available in the lookup of the groupNode.

Parameters

groupNode: INode
The group node to adjust the size of.

Throws

Exception ({ name: 'ArgumentError' })
groupNode is not in this graph.

Examples

How to create create a group node with children
// create a group node
const group = graph.createGroupNode()
// add some child nodes
graph.createNode(group, new Rect(10, 10, 30, 30))
graph.createNode(group, new Rect(50, 10, 30, 30))
graph.createNode(group, new Rect(50, 50, 30, 30))
// adjust the group node's layout to include all its children
graph.adjustGroupNodeLayout(group)
AdjustGroupNodeLayout only affects the node it is called for. To properly adjust all of its ancestors, too, one has to adjust all of them from the given node to the root:
for (const nodeToAdjust of graph.groupingSupport.getAncestors(
  innermostGroup,
)) {
  graph.adjustGroupNodeLayout(nodeToAdjust)
}

See Also

Developer's Guide
API
IGroupBoundsCalculator, INodeSizeConstraintProvider, calculateMinimumEnclosedArea, enlargeGroupNode, enlargeAllGroupNodes
Adjusts the preferredSize property of a label to fit the suggested size of its ILabelStyleRenderer.
This implementation uses the style's renderer for the label to determine the preferred rendering size. This is useful after the label's content or style have been changed.

Parameters

label: ILabel
The label to adjust the size for.

See Also

API
autoAdjustPreferredSize, setLabelPreferredSize, preferredSize, calculateLabelPreferredSize
Runs an ILayoutAlgorithm synchronously on the given graph.
For more control over how to apply a layout use LayoutExecutor.
This method is not available unless the module view-layout-bridge is loaded. Either load the module 'view-layout-bridge' explicitly or ensure that the LayoutExecutor type is available at runtime.

Parameters

layout: ILayoutAlgorithm
The layout.
layoutData?: LayoutData<INode, IEdge, ILabel, ILabel>
The layout data.
stopDuration?: TimeSpan
the maximum runtime for the layout calculation before it is automatically stopped.
cancelDuration?: TimeSpan
the maximum runtime for the layout calculation before it is automatically canceled.
portAdjustmentPolicies?: ItemMapping<IPort, PortAdjustmentPolicy>
The policy that specifies how port locations should be adjusted after a layout has been calculated.
portPlacementPolicies?: ItemMapping<IPort, PortPlacementPolicy>
The policy that specifies how ports should be placed by the layout algorithm.
portLabelPolicies?: ItemMapping<ILabel, PortLabelPolicy>
Sets how ILabels at IPorts should be treated by the layout algorithm.
anchoredItems?: ItemMapping<IModelItem, LayoutAnchoringPolicy>
Specifies which part of the items should be used to anchor the graph during layout.
labelPlacementPolicies?: ItemMapping<ILabel, LabelPlacementPolicy>
Sets how ILabels should be placed by the layout algorithm.
nodeComparator?: function(INode, INode): number
A comparison function that normalizes the order of the nodes for the layout calculation to ensure the same order for multiple layout invocations.
edgeComparator?: function(IEdge, IEdge): number
A comparison function that normalizes the order of the edges for the layout calculation to ensure the same order for multiple layout invocations.

See Also

Developer's Guide
API
LayoutExecutor, applyLayoutAnimated
Starts an ICompoundEdit that records graph changes and custom undo units in a single compound unit.

This method can be used to bracket several undo units. All edits added to the queue after this call and before a call to cancel or commit will be placed into the queue as a single block.

Client code needs to make sure that either the cancel or commit method is called on the returned instance.

Parameters

undoName: string
The undo name for the compound edit.
redoName: string
The redo name for the compound edit.

Return Value

ICompoundEdit
The handle to stop the recording by calling cancel or commit on it.

See Also

Developer's Guide
Starts an ICompoundEdit that uses the memento design pattern to record changes to the items in the given items collection.

This method uses the IMementoSupport returned by the provider to record the state of an item at the beginning of the edit and when commit is called to create an IUndoUnit that can revert the item to the recorded state and back. If no provider is given, this method uses the IMementoSupport returned by the lookup implementation of the items to record the state of an item at the beginning of the edit and when commit is called to create an IUndoUnit that can revert the item to the recorded state and back.

Calling this method will immediately enqueue an IUndoUnit into the undo queue. Subsequent additions to the queue will be added after the created instance, even if they are added to the queue before the commit method has been called.

Parameters

undoName: string
The undoName of the IUndoUnit that will be placed into the undo queue after commit has been called.
redoName: string
The redoName of the IUndoUnit that will be placed into the undo queue after commit has been called.
items: IEnumerable<T>
The items that will be changed after this call and before the call to commit.
provider?: function(T): IMementoSupport
The provider for the IMementoSupport of the items. if the provider returns null for a given item, changes to this item are not being recorded.

Return Value

ICompoundEdit
An implementation of the ICompoundEdit interface whose commit or cancel methods need to be called after the items have been modified.

Examples

The following is an example implementation of an item that is being managed using IMementoSupport:

A sample business object that implements ILookup to return IMementoSupport
class Employee extends BaseClass<ILookup>(ILookup) implements ILookup {
  _name: string
  position: string
  age: number

  constructor(name: string, position: string, age: number) {
    super()
    this._name = name
    this.position = position
    this.age = age
  }

  get name(): string {
    return this._name
  }

  // eslint-disable-next-line @typescript-eslint/no-unnecessary-type-constraint
  lookup<T extends any>(type: Constructor<any>): T | null {
    if (type === IMementoSupport) {
      return new EmployeeMementoSupport() as T
    }
    return null
  }
}

A collection of items from this type can then be watched using the following code snippet:

Using an ICompoundEdit
const edit = graph.beginEdit(
  undoName,
  redoName,
  listWithMyEmployeesToWatch,
)

// changes to the employees are done here

if (!success) {
  // if we don't want the changes to be done after all, then we need to cancel the edit
  edit.cancel()
}

Alternatively, when using a specific provider, consider the following examples. The following is an example implementation of an item that is being managed using IMementoSupport:

A sample business object
class SimpleEmployee {
  private readonly _name: string
  position: string
  age: number

  constructor(name: string, position: string, age: number) {
    this._name = name
    this.position = position
    this.age = age
  }

  get name(): string {
    return this._name
  }
}

A collection of items from this type can then be watched using the following code snippet, using the provider to return an appropriate IMementoSupport implementation:

Using an ICompoundEdit
const edit = graph.beginEdit(
  undoName,
  redoName,
  listWithMyEmployeesToWatch,
  (item) => new EmployeeMementoSupport(),
)

// changes to the employees are done here

if (!success) {
  // if we don't want the changes to be done after all, then we need to cancel the edit
  edit.cancel()
}

Implementing the IMementoSupport interface is quite unrestrained, the type of the state returned by getState method can by anything as long as the applyState and stateEquals methods can deal with it:

Sample implementation of IMementoSupport
class EmployeeMementoSupport
  extends BaseClass<IMementoSupport>(IMementoSupport)
  implements IMementoSupport
{
  getState(subject: any): EmployeeState | null {
    if (subject instanceof Employee) {
      return new EmployeeState(subject.position, subject.age)
    }
    return null
  }

  applyState(subject: any, state: any): void {
    if (subject instanceof Employee && state instanceof EmployeeState) {
      subject.position = state.position
      subject.age = state.age
    }
  }

  stateEquals(state1: any, state2: any): boolean {
    if (
      state1 instanceof EmployeeState &&
      state2 instanceof EmployeeState
    ) {
      return (
        state1.position === state2.position && state1.age === state2.age
      )
    }
    return state1 === state2
  }
}

class EmployeeState {
  _position: string
  _age: number

  constructor(position: string, age: number) {
    this._position = position
    this._age = age
  }

  get position(): string {
    return this._position
  }

  get age(): number {
    return this._age
  }
}

In summary, use this concept when you want to track the state of items during certain operations for undo/redo. This is efficient if it's easier to handle an item's state than the changes to the item themselves. If you want to focus on the changes or on certain events, you should use custom IUndoUnit

See Also

Developer's Guide
API
IMementoSupport
Calculates the preferred size of a label with the given properties.

Parameters

owner: ILabelOwner
The item that will own the label.
text: string
The text.
layoutParameter?: ILabelModelParameter
The label model parameter.
style?: ILabelStyle
The label style.
tag?: ILabel['tag']
The tag for the label.

Return Value

Size
The size as calculated by the ILabelStyleRenderer.

See Also

API
setLabelPreferredSize, preferredSize, adjustLabelPreferredSize
Clears the graph, removing all items in proper order.

See Also

Developer's Guide
API
remove

Defined in

IGraph.clear
Removes all bends from the given edge.
The edge must be part of this graph at the time of the invocation. This will trigger the corresponding events.

Parameters

owner: IEdge
the edge whose bends will be removed

Throws

Exception ({ name: 'ArgumentError' })
owner is not in this graph.

See Also

API
remove, bend-removed, bends
Removes all labels from the given ILabelOwner, which can be an INode, IEdge, or IPort.
The owner must be part of this graph at the time of the invocation. This will trigger the corresponding events.

Parameters

labelOwner: ILabelOwner
the owner whose labels will be removed

Throws

Exception ({ name: 'ArgumentError' })
labelOwner is not in this graph.

See Also

API
remove, label-removed, labels
Removes all ports from the given IPortOwner, which can be an INode or an IEdge.
The owner must be part of this graph at the time of the invocation. This will trigger the corresponding events.

Parameters

portOwner: IPortOwner
the owner whose ports will be removed

Throws

Exception ({ name: 'ArgumentError' })
portOwner is not in this graph.

See Also

API
remove, port-removed, ports
Determines whether this graph contains the specified item.

Parameters

item: IModelItem
The item.

Return Value

boolean
true if this graph contains the specified item; otherwise, false.

Implements

IGraph.contains
Returns an instance of CompositeLayoutData<TNode, TEdge, TNodeLabel, TEdgeLabel> that combines the given layout data instances.
The generic type arguments of the created layout data are compatible with instances of IGraph, but the layout data is not bound to a specific graph instance. Therefore, the created layout data still has to be passed as an argument of applyLayout in order to be applied.
This method is not available unless the module view-layout-bridge is loaded. Either load the module 'view-layout-bridge' explicitly or ensure that the LayoutExecutor type is available at runtime.

Parameters

items: LayoutData<INode, IEdge, ILabel, ILabel>
the layout data instances that should be combined into the created CompositeLayoutData<TNode, TEdge, TNodeLabel, TEdgeLabel>

Return Value

CompositeLayoutData<INode, IEdge, ILabel, ILabel>
an instance of CompositeLayoutData<TNode, TEdge, TNodeLabel, TEdgeLabel> that combines the given layout data instances.
Creates the label layout parameter for a given ILabelOwner.
This implementation uses the label defaults for the graph to obtain the parameter instance.

Parameters

owner: ILabelOwner
The item that is the owner of the label in question.

Return Value

ILabelModelParameter
The default label layout parameter to use for newly created labels at the item.

See Also

API
getLayoutParameterInstance, getLabelDefaults
Creates a location model parameter for a newly created IPort at the owner that matches the location.
If location is null, this method uses the port defaults for the owner to obtain the location parameter.

Parameters

owner: IPortOwner
The owner of the port.
location?: Point
The location in the world coordinate system where the port should be added.

Return Value

IPortLocationModelParameter
Either a location model parameter that matches the location, or the default parameter to use for the IPortOwner as returned by getLocationParameterInstance.

Throws

Exception ({ name: 'ArgumentError' })
location contains one or more NaN values.

See Also

API
createParameter, getPortDefaults
Creates and returns an edge that connects to the given node instances using the given style instance.
The nodes must be part of this graph at the time of the invocation, and the implementation will choose the IPort instances to which the edge will be connected. The edge will be a part of this graph after the method returns. This will trigger the corresponding events.

Parameters

source: INode
The source node the created edge will connect to. This implementation queries the getNewSourcePort method to determine which port to use.
target: INode
The target node the created edge will connect to. This implementation queries the getNewSourcePort method to determine which port to use.
style?: IEdgeStyle
The style instance that will be assigned to the newly created instance. This is done by reference.
tag?: IEdge['tag']
the initial tag to assign.

Return Value

IEdge
the newly created edge instance

Throws

Exception ({ name: 'ArgumentError' })
If source or target is not in this graph.

See Also

API
edge-created, getNewSourcePort, getNewTargetPort, createEdge
Creates and returns an edge that connects to the given port instances.
The ports must be part of this graph at the time of the invocation. The edge will be a part of this graph after the method returns. This will trigger the corresponding events.

Parameters

sourcePort: IPort
The source port the created edge will connect to. To change the source port after the edge has been created, use setEdgePorts.
targetPort: IPort
The target port the created edge will connect to. To change the target port after the edge has been created, use setEdgePorts.
style?: IEdgeStyle
The style instance that will be assigned to the newly created instance. This is done by reference. If omitted the default style will be set. To change the style after the edge has been created, use setStyle.
tag?: IEdge['tag']
The initial value of the tag that will be assigned to the new edge.

Return Value

IEdge
the newly created edge instance
Returns an instance of LayoutData<TNode, TEdge, TNodeLabel, TEdgeLabel> that can be used to easily associate custom item-specific data with an IGraph.
The generic type arguments of the created layout data are compatible with instances of IGraph, but the layout data is not bound to a specific graph instance. Therefore, the created layout data still has to be passed as an argument of applyLayout in order to be applied.
This method is not available unless the module view-layout-bridge is loaded. Either load the module 'view-layout-bridge' explicitly or ensure that the LayoutExecutor type is available at runtime.

Return Value

GenericLayoutData<INode, IEdge, ILabel, ILabel>
an instance of GenericLayoutData<TNode, TEdge, TNodeLabel, TEdgeLabel> that can be used to easily associate custom item-specific data with a graph.
Creates a new group node using the provided style and layout as a child of parent.

The group node will be a direct descendant of parent.

To create group nodes interactively use the GraphEditorInputMode as input mode and enable the grouping operations.

final

Parameters

parent?: INode
The node to use as the parent in the grouping hierarchy or null if the new node should become a top-level node. To change the parent after the group node has been created, use setParent.
layout?: Rect
The initial layout to use for the new node. If omitted the node will be placed with its top left corner at 0,0 and the default size. To change the layout after the group node has been created, use setNodeLayout.
style?: INodeStyle
The style to use for the new node. If omitted the default style will be set. To change the style after the group node has been created, use setStyle.
tag?: INode['tag']
The tag to assign to the INode.

Return Value

INode
The newly created group node.
Creates and returns a node using the specified values for the initial geometry, style, and tag.
The node will be a part of this graph after the method returns. This will trigger the corresponding events.

Parameters

layout: Rect
The layout to use initially. The values will be copied to the node's layout field. To change the layout after the node has been created, use setNodeLayout.
style?: INodeStyle
The style instance that will be assigned to the newly created instance. This is done by reference. If omitted the default style will be set. To change the style after the node has been added, use setStyle.
tag?: INode['tag']
The initial value of the tag that will be assigned to the new node.

Return Value

INode
A newly created node instance
Creates a new ordinary node as a direct descendant of parent using the given layout and style.

Parameters

parent?: INode
The node to use as the parent in the grouping hierarchy or null if the new node should become a top-level node. To change the parent after the group node has been created, use setParent.
layout?: Rect
The layout to use initially. The values will be copied to the node's layout field. If omitted the default size will be set and the node's top left corner will be placed at 0,0. To change the layout after the group node has been created, use setNodeLayout.
style?: INodeStyle
The style instance that will be assigned to the newly created instance. This is done by reference. If omitted the default style will be set.
tag?: INode['tag']
The tag to assign to the INode.

Return Value

INode
The newly created node.
Creates and returns a node using the specified initial center location and style, as well as the tag.
The node will be a part of this graph after the method returns. This will trigger the corresponding events.

Parameters

location: Point
the initial coordinates of the center of the node's layout property
style?: INodeStyle
The style instance that will be assigned to the newly created instance. This is done by reference.
tag?: INode['tag']
The initial value of the tag that will be assigned to the new node.

Return Value

INode
A newly created node instance

Throws

Exception ({ name: 'ArgumentError' })
location contains one or more NaN values.

See Also

Developer's Guide
API
node-created, createNode, setNodeCenter
Creates an UndoEngine instance that automatically triggers invalidateDisplays upon each invocation of undo and redo
protected

Return Value

UndoEngine
An UndoEngine instance.

See Also

Developer's Guide
Creates the bend addition undo unit for the given bend.
protected

Parameters

bend: IBend
The bend that has been added.
index: number
The index at which the bend has been added.

Return Value

IUndoUnit
The unit that can be used to undo and redo the creation.
Creates the bend removal undo unit for the given bend.
protected

Parameters

bend: IBend
The bend that will be removed.

Return Value

IUndoUnit
The unit that can be used to undo and redo the removal.
Creates the undo unit for changing the tag of the given bend.
protected

Parameters

bend: IBend
The bend whose tag has been changed.
oldTag: any
The old tag used before the change.

Return Value

IUndoUnit
The unit that can be used to undo and redo the tag change.
Creates the edge creation undo unit for the given edge.
protected

Parameters

edge: IEdge
The edge that has been created.

Return Value

IUndoUnit
The unit that can be used to undo and redo the creation.
Creates the edge reconnection undo unit for the given edge.
protected

Parameters

edge: IEdge
The edge that has been reconnected to other ports.
oldSource: IPort
The old source port the edge connected to before the change.
oldTarget: IPort
The old target port the edge connected to before the change.

Return Value

IUndoUnit
The unit that can be used to undo and redo the port change operation.
Creates the edge removal undo unit for the given edge.
protected

Parameters

edge: IEdge
The edge that will be removed.

Return Value

IUndoUnit
The unit that can be used to undo and redo the removal.
Creates the undo unit for changing the style of the given edge.
protected

Parameters

edge: IEdge
The edge whose style has been changed.
oldStyle: IEdgeStyle
The old style used before the change.

Return Value

IUndoUnit
The unit that can be used to undo and redo the style change.
Creates the undo unit for changing the tag of the given edge.
protected

Parameters

edge: IEdge
The edge whose tag has been changed.
oldTag: any
The old tag used before the change.

Return Value

IUndoUnit
The unit that can be used to undo and redo the tag change.
Creates the undo unit for changing the tag of the given graph.
protected

Parameters

tagOwner: ITagOwner
The graph whose tag has been changed.
oldTag: any
The old tag used before the change.

Return Value

IUndoUnit
The unit that can be used to undo and redo the tag change.
Creates the undo unit for changing whether the given node is a group node.
protected

Parameters

node: INode
The node whose group node status has been changed.
isGroupNode: boolean
The new group node status.

Return Value

IUndoUnit
The unit that can be used to undo and redo the group node status change.
Creates the label addition undo unit for the given label.
protected

Parameters

label: ILabel
The label that has been added.

Return Value

IUndoUnit
The unit that can be used to undo and redo the creation.
Creates the undo unit for changing the layout parameter of the given label.
protected

Parameters

label: ILabel
The label whose layout parameter has been changed.
oldParam: ILabelModelParameter
The old layout parameter used before the change.

Return Value

IUndoUnit
The unit that can be used to undo and redo the layout parameter change.
Creates the label removal undo unit for the given label.
protected

Parameters

label: ILabel
The label that will be removed.

Return Value

IUndoUnit
The unit that can be used to undo and redo the removal.
Creates the undo unit for changing the style of the given label.
protected

Parameters

label: ILabel
The label whose style has been changed.
oldStyle: ILabelStyle
The old style used before the change.

Return Value

IUndoUnit
The unit that can be used to undo and redo the style change.
Creates the undo unit for changing the tag of the given label.
protected

Parameters

label: ILabel
The label whose tag has been changed.
oldTag: any
The old tag used before the change.

Return Value

IUndoUnit
The unit that can be used to undo and redo the tag change.
Creates the undo unit for changing the text of the given label.
protected

Parameters

label: ILabel
The label whose text has been changed.
oldText: string
The old text used before the change.

Return Value

IUndoUnit
The unit that can be used to undo and redo the text change.
Creates the undo unit for changing the location parameter of the given port.
protected

Parameters

port: IPort
The port whose location parameter has been changed.
oldParameter: IPortLocationModelParameter
The old location parameter used before the change.

Return Value

IUndoUnit
The unit that can be used to undo and redo the location parameter change.
Creates the node creation undo unit for the given node.
protected

Parameters

node: INode
The node that has been created.
parent: INode
The parent node.
isGroupNode: boolean
Specifies if the node is a group node.

Return Value

IUndoUnit
The unit that can be used to undo and redo the creation.
Creates the node removal undo unit for the given node.
protected

Parameters

node: INode
The node that will be removed.

Return Value

IUndoUnit
The unit that can be used to undo and redo the removal.

See Also

Developer's Guide
Creates the undo unit for changing the style of the given node.
protected

Parameters

node: INode
The node whose style has been changed.
oldStyle: INodeStyle
The old style used before the change.

Return Value

IUndoUnit
The unit that can be used to undo and redo the style change.
Creates the undo unit for changing the tag of the given node.
protected

Parameters

node: INode
The node whose tag has been changed.
oldTag: any
The old tag used before the change.

Return Value

IUndoUnit
The unit that can be used to undo and redo the tag change.
Creates the parent change undo unit for the given node.
protected

Parameters

node: INode
The node whose parent has been changed.
oldParent: INode
The previous parent node.
newParent: INode
The node which is the new parent.

Return Value

IUndoUnit
The unit that can be used to undo and redo the parent change.
Creates the port addition undo unit for the given port.
protected

Parameters

port: IPort
The port that has been added.

Return Value

IUndoUnit
The unit that can be used to undo and redo the creation.
Creates the port removal undo unit for the given port.
protected

Parameters

port: IPort
The port that will be removed.

Return Value

IUndoUnit
The unit that can be used to undo and redo the removal.
Creates the undo unit for changing the style of the given port.
protected

Parameters

port: IPort
The port whose style has been changed.
oldStyle: IPortStyle
The old style used before the change.

Return Value

IUndoUnit
The unit that can be used to undo and redo the style change.
Creates the undo unit for changing the tag of the given port.
protected

Parameters

port: IPort
The port whose tag has been changed.
oldTag: any
The old tag used before the change.

Return Value

IUndoUnit
The unit that can be used to undo and redo the tag change.
Creates the undo unit for changing the preferred size of the given label.
protected

Parameters

label: ILabel
The label whose preferred size has been changed.
oldSize: Size
The old preferred size used before the change.

Return Value

IUndoUnit
The unit that can be used to undo and redo the preferred size change.
Calculates the number of edges at the given IPortOwner for this graph.
Note that an edge that is both incoming and outgoing will be counted twice.

Parameters

owner: IPortOwner
The port owner to count the degree of.

Return Value

number
The number of edges that are incident to the port owner.

Throws

Exception ({ name: 'ArgumentError' })
owner is not in this graph.

See Also

Developer's Guide
API
edgesAt

Defined in

IGraph.degree
Calculates the number of edges at the given IPort for this graph.
Note that an edge that is both incoming and outgoing will be counted twice.

Parameters

port: IPort
The port owner to count the degree of.

Return Value

number
The number of edges that are incident to the port.

Throws

Exception ({ name: 'ArgumentError' })
port is not in this graph.

See Also

Developer's Guide
API
edgesAt

Defined in

IGraph.degree
Returns an IListEnumerable<T> for the incoming, the outgoing, or all edges adjacent to the given port, depending on type.

If the given type is ALL, adjacent self-loops will appear twice in the returned enumerable. For INCOMING or OUTGOING, self-loops will only appear once.

Note that even though edges can be accessed via index, the underlying graph structure in the default IGraph implementation is a linked list and indexed access can be slow. In those cases, it is recommended to store the edges in your own list, if possible. This is not necessary for the first or last element or when iterating over the adjacent edges via a foreach loop.

Parameters

port: IPort
The port to check. The returned edges will have this port as a sourcePort or targetPort.
type?: AdjacencyTypes
The type of adjacency to consider. Default is ALL, which includes both incoming and outgoing edges.

Return Value

IListEnumerable<IEdge>
An enumeration of all adjacent edges of the given type (incoming, outgoing, or both).

Implements

IGraph.edgesAt
Returns an IListEnumerable<T> for the incoming, the outgoing, or all edges adjacent to the given port owner, depending on type.

If the given type is ALL, adjacent self-loops will appear twice in the returned enumerable. For INCOMING or OUTGOING, self-loops will only appear once.

Note that even though edges can be accessed via index, the underlying graph structure in the default IGraph implementation is a linked list and indexed access can be slow. In those cases, it is recommended to store the edges in your own list, if possible. This is not necessary for the first or last element or when iterating over the adjacent edges via a foreach loop.

Parameters

owner: IPortOwner
The port to check. The returned edges will have one of the ports at this owner as a sourcePort or targetPort.
type?: AdjacencyTypes
The type of adjacency to consider. Default is ALL, which includes both incoming and outgoing edges.

Return Value

IListEnumerable<IEdge>
An enumeration of all adjacent edges of the given type (incoming, outgoing, or both).

Implements

IGraph.edgesAt
Returns an enumerable over the children of the provided node.

This method returns the direct children, i.e. all nodes that have node as their parent. To get all descendants method getDescendants can be used.

To make a node a child of node, use setParent or create the node directly as a child with createNode

final

Parameters

node: INode
The node for which to return the children or null if the top-level nodes should be returned.

Return Value

IListEnumerable<INode>
All nodes that have node as their parent.
Finds an edge that connects from and to in the given graph.

Parameters

from: IPortOwner
The sourcePort owner of the edge to find.
to: IPortOwner
The targetPort owner of the edge to find.

Return Value

IEdge
An edge that satisfies the constraints or null, if none was found.

Throws

Exception ({ name: 'ArgumentError' })
from or to are not in this graph.

See Also

API
edgesAt

Defined in

IGraph.getEdge
Finds an edge that connects sourcePort and targetPort in the given graph.

Parameters

sourcePort: IPort
The sourcePort of the edge to find.
targetPort: IPort
The targetPort of the edge to find.

Return Value

IEdge
An edge that satisfies the constraints or null, if none was found.

Throws

Exception ({ name: 'ArgumentError' })
sourcePort or targetPort are not in this graph.

See Also

API
edgesAt

Defined in

IGraph.getEdge
Returns the edges between the specified source and target owners.
By default, only directed edges are returned. To retrieve all edges (both incoming and outgoing), set directed to false.

Parameters

source: IPortOwner
The owner from which the edges start.
target: IPortOwner
The owner at which the edges end.
directed?: boolean
Specifies whether to return only directed edges (default) or all edges regardless of direction.

Return Value

IEnumerable<IEdge>
An enumerable collection of edges connecting the source to the target.
Returns the edges between the specified source and target ports.
By default, only directed edges are returned. To retrieve all edges (both incoming and outgoing), set directed to false.

Parameters

sourcePort: IPort
The port from which the edges start.
targetPort: IPort
The port at which the edges end.
directed?: boolean
Specifies whether to return only directed edges (default) or all edges regardless of direction.

Return Value

IEnumerable<IEdge>
An enumerable collection of edges connecting the sourcePort to the targetPort.
Gets the ILabelDefaults for a given ILabelOwner in the context of the graph.

Parameters

owner: ILabelOwner
The item that the label defaults are returned for. If this is a group node, the groupNodeDefaults's label defaults will be returned, otherwise the nodeDefaults or edgeDefaults labels will be returned.

Return Value

ILabelDefaults
Appropriate ILabelDefaults for the provided owner.
Determines a IPort instance to use for the creation of a new edge that starts at the given IPortOwner.
This implementation will add a new center anchored port to the node.
protected

Parameters

source: IPortOwner
The source node to find a port for.

Return Value

IPort
The port to use for a newly created edge.

See Also

API
createEdge
Determines a IPort instance to use for the creation of a new edge that ends at the given IPortOwner.
This implementation will add a new center anchored port to the node.
protected

Parameters

targetOwner: IPortOwner
The target node to find a port for.

Return Value

IPort
The port to use for a newly created edge.

See Also

API
createEdge
Returns the parent node of the node or null if node is a top-level node.
final

Parameters

node: INode
The node to retrieve the parent node for.

Return Value

INode
The parent node in this hierarchy or null if node is a top-level node.
Gets the IPortDefaults for a given IPortOwner in the context of the graph.

Parameters

owner: IPortOwner
The item that the label defaults are returned for. If this is a group node, the groupNodeDefaults's port defaults will be returned, otherwise the nodeDefaults or edgeDefaults ports will be returned.

Return Value

IPortDefaults
Appropriate IPortDefaults for the provided owner.
Groups the nodes in children into the provided group node.
The parent needs to be a group node at the time of the invocation. This operation is basically the same as calling setParent for each node in children whose parent is not part of the set.
How to create add multiple children to a group node
// create some nodes
const children = []
for (let i = 0; i < 5; i++) {
  children.push(graph.createNode())
}
// create a group node
const parent = graph.createGroupNode()
// add the nodes as children to the group
graph.groupNodes(parent, children)
// adjust the group node's layout to include all its children
graph.adjustGroupNodeLayout(parent)

Parameters

parent: INode
The node to use as the parent in the grouping hierarchy.
children: IEnumerable<INode>
The children to group into the group node.

Throws

Exception ({ name: 'ArgumentError' })
parent or one of children is not in this graph.

See Also

Developer's Guide
API
groupNodes, setParent, createGroupNode
Groups the nodes in children into a newly created group node.
The group node will be created at the common ancestor level of all nodes in children.
How to create a new group node with multiple children
// create some nodes
const children = []
for (let i = 0; i < 5; i++) {
  children.push(graph.createNode())
}
// create a group node and add the given nodes as children
const group = graph.groupNodes(children)
// adjust the group node's layout to include all its children
graph.adjustGroupNodeLayout(group)

Parameters

children: IEnumerable<INode>
The children to group into the new group node.
style?: INodeStyle
The style for the new group node
tag?: any
The group node's tag

Return Value

INode
The newly created group node.

Throws

Exception ({ name: 'ArgumentError' })
One of children is not in this graph.

See Also

Developer's Guide
API
getNearestCommonAncestor, groupNodes
Calculates the number of incoming edges at the given IPortOwner for this graph.

Parameters

owner: IPortOwner
The port owner to count the incoming edges of.

Return Value

number
The number of edges that have the port owner as their target port's owner.

Throws

Exception ({ name: 'ArgumentError' })
owner is not in this graph.

See Also

Developer's Guide
API
edgesAt

Defined in

IGraph.inDegree
Calculates the number of incoming edges at the given IPort for this graph.

Parameters

port: IPort
The port to count the incoming edges of.

Return Value

number
The number of edges that have the port as their target port.

Throws

Exception ({ name: 'ArgumentError' })
port is not in this graph.

See Also

Developer's Guide
API
edgesAt

Defined in

IGraph.inDegree
Returns the incoming edges at the given owner.

This method delegates to edgesAt using INCOMING.

Note that even though edges can be accessed via index, the underlying graph structure in the default IGraph implementation is a linked list and indexed access can be slow. In those cases it is recommended to store the edges in your own list, if possible. This is not necessary for the first or last element or when iterating over the incoming edges via a foreach loop.

Parameters

owner: IPortOwner
The owner of the edges.

Return Value

IListEnumerable<IEdge>
An enumerable for the edges.

Throws

Exception ({ name: 'ArgumentError' })
owner is not in this graph.

See Also

Developer's Guide
API
edgesAt, outEdgesAt
Returns the incoming edges at the given port.

This method delegates to edgesAt using INCOMING.

Note that even though edges can be accessed via index, the underlying graph structure in the default IGraph implementation is a linked list and indexed access can be slow. In those cases it is recommended to store the edges in your own list, if possible. This is not necessary for the first or last element or when iterating over the incoming edges via a foreach loop.

Parameters

port: IPort
The port of the edges.

Return Value

IListEnumerable<IEdge>
An enumerable for the edges.

Throws

Exception ({ name: 'ArgumentError' })
port is not in this graph.

See Also

Developer's Guide
API
edgesAt, outEdgesAt
The last element in the lookup chain is implemented by this method.
protected

Parameters

type: Constructor
The type for which an instance shall be returned

Return Value

any
An instance that is assignable to type or null.
Triggers the displays-invalidated event.
Clients can call this method to force an invalidation of the displays that show this graph instance. This implementation delegates to onInvalidateDisplays.
Returns whether the given node is a group node.
Group nodes are nodes which can have children. They may have children but do not necessarily have to.
final

Parameters

node: INode
The node to check.

Return Value

boolean
Whether the node is considered a group node.
Returns an instance that provides another aspect of this instance of the given type or null.
Typically, this method will be called in order to obtain a different view or aspect of the current instance. This is quite similar to casting or using a super type or interface of this instance, but is not limited to inheritance or compile-time constraints. This method is not required to return non-null implementations for the types, nor does it have to return the same instance any time. Also, it depends on the type and context whether the instance returned stays up to date or needs to be re-obtained for subsequent use.

Parameters

type: Constructor<T>
The type for which an instance shall be returned

Return Value

T
An instance that is assignable to type or null

Implements

ILookup.lookup
Enumerates the neighbors of a given INode.
Neighbors are calculated by going through all ports and inspecting the edges at these ports, collecting the opposites.

Parameters

node: INode
The node.

Return Value

IEnumerable<INode>
An enumerable over all neighbors.

Throws

Exception ({ name: 'ArgumentError' })
node is not in this graph.

See Also

Developer's Guide
API
edgesAt
Called before a bend is added to this graph's structure.
protected

Parameters

edge: IEdge
The edge the bend will be added to.
bend: IBend
The bend that will be added to the edge.
index: number
The index where the bend will be added to the edge.
Called just before an edge label is added to an edge.
protected

Parameters

edge: IEdge
The edge to which the label is added.
label: ILabel
The label to be added to the edge.
Called just before a node label is added to a node.
protected

Parameters

node: INode
The node to which the label is added.
label: ILabel
The label to be added to the node.
Called when a port is going to be added to a node.
protected

Parameters

owner: IPortOwner
The node.
port: IPort
The port to be added.
Called just before a port label is added to a port.
protected

Parameters

port: IPort
The port to which the label is added.
label: ILabel
The label to be added to the port.
Called after a bend has been added to this graph's structure.
When overriding this method, it is mandatory to call the base implementation.
protected

Parameters

bend: IBend
The bend that has been added to the edge.
Called after a bend location has changed.
This will trigger the bend-location-changed event.
protected

Parameters

bend: IBend
The bend whose location has changed.
oldLocation: Point
The bend location before the change.
Called just after a bend has been removed from its edge.
When overriding this method, it is mandatory to call the base implementation.
protected

Parameters

owner: IEdge
The old edge.
bend: IBend
The bend.
index: number
The former index of the bend in the bends list.
Called after a bend tag has changed.
This will trigger the bend-tag-changed event.
protected

Parameters

bend: IBend
The bend whose tag has changed.
oldTag: any
The bend tag before the change.
Called before the ports of an edge are being changed.
protected

Parameters

edge: IEdge
An edge whose ports are to be changed.
newSource: IPort
The new source port
newTarget: IPort
The new target port
Called before an edge style is being changed.
protected

Parameters

edge: IEdge
An edge whose the style is going to be changed.
newStyle: IEdgeStyle
The new edge style.
Called before the graph's tag is being changed.
protected

Parameters

newTag: any
The new port tag
Called before the layoutParameter of a label is being changed.
protected

Parameters

label: ILabel
A label whose layoutParameter is to be changed.
newLayoutParameter: ILabelModelParameter
The new label model parameter.
Called before the preferred size of a label is being changed.
protected

Parameters

label: ILabel
A label whose preferred size is going to be changed.
newSize: Size
The new preferred size.
Called before a label style is being changed.
protected

Parameters

label: ILabel
A label whose style is going to be changed.
newStyle: ILabelStyle
The new label style.
Called before the text of a label is being changed.
protected

Parameters

label: ILabel
A label whose text is going to be changed.
newText: string
The new label text.
Called before a node style is being changed.
protected

Parameters

node: INode
A node whose the style is going to be changed.
newStyle: INodeStyle
The new node style.
Called before the locationParameter of a port is being changed.
protected

Parameters

port: IPort
A port whose locationParameter is to be changed.
newLocationParameter: IPortLocationModelParameter
The new location model parameter.
Called before a port style is being changed.
protected

Parameters

port: IPort
A port whose style is going to be changed.
newStyle: IPortStyle
The new port style.
Called before the edge is added to this graph's structure.
protected

Parameters

edge: IEdge
An edge that is not yet contained in this graph.
sourcePort: IPort
The source port this edge will connect to.
targetPort: IPort
The target port this edge will connect to.
Called before the node is added to this graph's structure.
protected

Parameters

node: INode
A node that is not yet contained in this graph.
Triggers the edge-created event.
protected

Parameters

edge: IEdge
The edge that has been created.
Called after a label has been added to an edge.

This method triggers the label-added event.

When overriding this method it is mandatory to call the base implementation.

protected

Parameters

label: ILabel
The label that has just been added.
Called after an edge label has been removed from its edge.
When overriding this method, it is mandatory to call the base implementation.
protected

Parameters

owner: ILabelOwner
The previous owner of the label.
label: ILabel
The label that has just been removed.
Called after the ports of an edge have changed.
This will trigger the edge-ports-changed event.
protected

Parameters

edge: IEdge
The edge whose ports have changed.
oldSource: IPort
The source port that the edge had been connected to before the change.
oldTarget: IPort
The target port that the edge had been connected to before the change.
Triggers the edge-removed event.
protected

Parameters

edge: IEdge
The edge that got removed
oldSource: IPort
The source port that the edge had been connected to.
oldTarget: IPort
The target port that the edge had been connected to.
Called after the style of an edge has changed.
This will trigger the edge-style-changed event.
protected

Parameters

edge: IEdge
The edge whose style has changed.
oldStyle: IEdgeStyle
The edge style before the change.
Called after the tag of an edge has changed.
This will trigger the edge-tag-changed event.
protected

Parameters

edge: IEdge
The edge whose tag has changed.
oldTag: any
The edge tag before the change.
Triggers the graph-tag-changed event.
protected

Parameters

oldTag: any
The graph tag before the change.
Triggers the displays-invalidated event.
protected

Parameters

evt: EventArgs
The event arguments.
Called after a label model parameter has changed.
This will trigger the label-layout-parameter-changed event.
protected

Parameters

label: ILabel
The label whose model parameter has changed.
oldLayoutParameter: ILabelModelParameter
The label model parameter before the change
Called after the preferred size of a label has changed.
This will trigger the label-preferred-size-changed event.
protected

Parameters

label: ILabel
The label whose preferred size has changed.
oldSize: Size
The preferred size of the label before the change.
Called after a label style has changed.
This will trigger the label-style-changed event.
protected

Parameters

label: ILabel
The label whose style has changed.
oldStyle: ILabelStyle
The label style before the change.
Called after a label tag has changed.
This will trigger the label-tag-changed event.
protected

Parameters

label: ILabel
The label whose tag has changed.
oldTag: any
The label tag before the change.
Called after a label text has changed.
This will trigger the label-text-changed event.
protected

Parameters

label: ILabel
The label whose text has changed.
oldText: string
The label text before the change.
Triggers the node-created event.
protected

Parameters

node: INode
The node that has been created.
Called after a label has been added to a node.

This method triggers the label-added event.

When overriding this method it is mandatory to call the base implementation.

protected

Parameters

label: ILabel
The label that has just been added.
Called after a label has been removed from its node.
When overriding this method, it is mandatory to call the base implementation.
protected

Parameters

owner: ILabelOwner
The old owner of the label.
label: ILabel
The label that has just been removed.
Called after a node layout has changed.
This will trigger the node-layout-changed event.
protected

Parameters

node: INode
The node whose layout has changed.
oldLayout: Rect
The node layout before the change.
Triggers the node-removed event.
protected

Parameters

node: INode
The node that got removed
oldParent: INode
The old parent node
oldIsGroupNode: boolean
Indicates if the old node was a group node
Called after a node style has changed.
This will trigger the node-style-changed event.
protected

Parameters

node: INode
The node whose style has changed.
oldStyle: INodeStyle
The node style before the change.
Called after a node tag has changed.
This will trigger the node-tag-changed event.
protected

Parameters

node: INode
The node whose tag has changed.
oldTag: any
The node tag before the change.
Called when a port has been added to a node.
When overriding this method, it is mandatory to call the base implementation.
protected

Parameters

port: IPort
The port that has just been added to its owner.
Called after a label has been added to a port.

This method triggers the label-added event.

When overriding this method it is mandatory to call the base implementation.

protected

Parameters

label: ILabel
The label that has just been added.
Called after a port label has been removed from its port.
When overriding this method, it is mandatory to call the base implementation.
protected

Parameters

owner: ILabelOwner
The old owner of the label.
label: ILabel
The label that has just been removed.
Called after a port location model parameter has changed.
This will trigger the port-location-parameter-changed event.
protected

Parameters

port: IPort
The port whose location model parameter has changed.
oldLocationParameter: IPortLocationModelParameter
The port location model parameter before the change.
Called just after a port has been removed from its owner.
When overriding this method, it is mandatory to call the base implementation.
protected

Parameters

oldOwner: IPortOwner
The previous owner of the port.
port: IPort
The port that has been removed.
Called after a port style has changed.
This will trigger the port-style-changed event.
protected

Parameters

port: IPort
The port whose style has changed.
oldStyle: IPortStyle
The port style before the change.
Called after a port tag has changed.
This will trigger the port-tag-changed event.
protected

Parameters

port: IPort
The port whose tag has changed.
oldTag: any
The port tag before the change.
Called just before a bend is removed.
protected

Parameters

bend: IBend
The bend that will be removed.
Called before the node will be removed.
protected

Parameters

edge: IEdge
That edge that is going to be removed.
Called just before an edge label is removed from its edge.
protected

Parameters

label: ILabel
The label before the removal of which this function is called
Called before the node will be removed.
protected

Parameters

node: INode
The node that is going to be removed.
Called just before a node label is removed from its node.
protected

Parameters

label: ILabel
The label before the removal of which this function is called
Called just before a port will be removed.
protected

Parameters

port: IPort
The port that is about to be removed.
Called just before a port label is removed from its port.
protected

Parameters

label: ILabel
The label before the removal of which this function is called
Calculates the number of outgoing edges at the given IPortOwner for this graph.

Parameters

owner: IPortOwner
The port owner to count the outgoing edges of.

Return Value

number
The number of edges that have the port owner as their source port's owner.

Throws

Exception ({ name: 'ArgumentError' })
owner is not in this graph.

See Also

Developer's Guide
API
edgesAt
Calculates the number of outgoing edges at the given IPort for this graph.

Parameters

port: IPort
The port to count the outgoing edges of.

Return Value

number
The number of edges that have the port as their source port.

Throws

Exception ({ name: 'ArgumentError' })
port is not in this graph.

See Also

Developer's Guide
API
edgesAt
Returns the outgoing edges at the given owner.

This method delegates to edgesAt using OUTGOING.

Note that even though edges can be accessed via index, the underlying graph structure in the default IGraph implementation is a linked list and indexed access can be slow. In those cases it is recommended to store the edges in your own list, if possible. This is not necessary for the first or last element or when iterating over the outgoing edges via a foreach loop.

Parameters

owner: IPortOwner
The owner of the edges.

Return Value

IListEnumerable<IEdge>
An enumerable for the edges.

Throws

Exception ({ name: 'ArgumentError' })
owner is not in this graph.

See Also

Developer's Guide
API
edgesAt, inEdgesAt
Returns the outgoing edges at the given port.

This method delegates to edgesAt using OUTGOING.

Note that even though edges can be accessed via index, the underlying graph structure in the default IGraph implementation is a linked list and indexed access can be slow. In those cases it is recommended to store the edges in your own list, if possible. This is not necessary for the first or last element or when iterating over the outgoing edges via a foreach loop.

Parameters

port: IPort
The owner of the edges.

Return Value

IListEnumerable<IEdge>
An enumerable for the edges.

Throws

Exception ({ name: 'ArgumentError' })
port is not in this graph.

See Also

Developer's Guide
API
edgesAt, inEdgesAt
Enumerates the predecessors of a given INode.
Predecessors are calculated by going through all ports and inspecting the incoming edges at these ports, collecting the sourcePort owners.

Parameters

node: INode
The node.

Return Value

IEnumerable<INode>
An enumerable over all predecessors.

Throws

Exception ({ name: 'ArgumentError' })
node is not in this graph.

See Also

Developer's Guide
Removes the given item from this graph.

The item must be a part of this graph.

If the item is a node, the node-removed event will be triggered. This will remove all adjacent edges and their corresponding ports in proper order before the node will be removed. Also, this will trigger the removal of all labels owned by this instance.

If the item is an edge, the edge-removed event will be triggered. Also, this will trigger the removal of all labels and bends owned by this instance. An implementation may decide to remove the corresponding ports from the node if no other edge connects to them after the given edge has been removed. The implementations provided by yFiles do so according to the value set to autoCleanUp in their IPortDefaults.

If the item is a bend, the bend-removed event will be triggered.

If the item is a port, the port-removed event will be triggered. This will also remove all edges that are currently connected to the port and all labels and bends owned by this instance.

If the item is a label, the label-removed event will be triggered.

Parameters

item: IModelItem
the item to be removed from this graph instance

Implements

IGraph.remove
Removes a previously added lookup chain element from the lookup of this.

Parameters

lookup: IContextLookupChainLink
The element to remove.
This also reverses the bends by clearing them and reinserting them in reverse order if there is more than one bend.

Parameters

edge: IEdge
The edge to reverse.

Throws

Exception ({ name: 'ArgumentError' })
edge is not in this graph.

See Also

Developer's Guide
API
setEdgePorts

Defined in

IGraph.reverse
Modifies the location of the given bend.
This implementation will also trigger an invalidateDisplays call.

Parameters

bend: IBend
the bend whose location is to be modified
location: Point
the new coordinates of the bend

Throws

Exception ({ name: 'ArgumentError' })
If bend is not in this graph.

See Also

API
addBend
Sets the ports of the given edge to the new values.
This will trigger an edge-ports-changed event if source or target ports differ from the current ones. Both ports and the edge must belong to the current graph instance. If autoCleanUp is enabled, this method will remove unoccupied ports after they have been changed.

Parameters

edge: IEdge
The edge to change the ports.
sourcePort: IPort
The new source port instance.
targetPort: IPort
The new target port instance.
Changes whether the given node is a group node or not.

Group nodes are nodes which can have children. They may not necessarily have to, however.

Attempting to set a node to the non-group-node-status while it has children at the same time will result in an InvalidOperationError.

final

Parameters

node: INode
The node to set the group node status for.
isGroupNode: boolean
Whether to make the node a group node.
Sets the label model parameter for the given label.
To query the label layout parameter, use layoutParameter.

Parameters

label: ILabel
The label.
layoutParameter: ILabelModelParameter
The new parameter.
Sets the preferred size of the label.
To query the label preferred size, use preferredSize.

Parameters

label: ILabel
The label.
size: Size
The new preferred size.
Sets the label text of the given label.
This implementation will adjust the preferred size for the label if autoAdjustPreferredSize is enabled.

Parameters

label: ILabel
The label to modify
text: string
The new text of the label

Throws

Exception ({ name: 'ArgumentError' })
If label is not in this graph.
Exception ({ name: 'ArgumentError' })
If text is null.

See Also

API
text
Sets the center of a node to the given world coordinates.
This implementation delegates to setNodeLayout

Parameters

node: INode
The node to recenter.
center: Point
The new center coordinates of the node in the world coordinate system.

Throws

Exception ({ name: 'ArgumentError' })
center contains one or more NaN values.

See Also

Developer's Guide
API
setNodeLayout
Sets the layout of the given node to the new values.
This will trigger a call to invalidateDisplays.

Parameters

node: INode
a live node that belongs to this graph
layout: Rect
the new absolute layout in world coordinates of the node

Throws

Exception ({ name: 'ArgumentError' })
node is not in this graph, or layout contains one or more NaN values.

See Also

API
layout
Sets the parent node for a given node.

Use null as parent to make node a top-level node for this graph.

This method does not move or enlarge the parent to enclose its new node. Developers have to take care to adjust the node layout after grouping, e.g. by calling adjustGroupNodeLayout.

If parent is not a group node before the call it will be converted into one.

To query the parent of a node, use getParent.

final

Parameters

node: INode
The node to assign a new parent.
parent: INode
The parent group node to assign to node or null to make node a top-level node.
Tries to set the absolute coordinates of the given port to the given values.
For full control over the placement of the ports, the setPortLocationParameter method should be used instead. This implementation will use the port's locationParameter's model to obtain a new IPortLocationModelParameter via the createParameter method. This might result in the port using a different location, because the model might not support parameters that result in the given location. This will also trigger an invalidateDisplays call.

Parameters

port: IPort
The port to modify
location: Point
the new absolute coordinates of the port

Throws

Exception ({ name: 'ArgumentError' })
port is not in this graph.
Exception ({ name: 'ArgumentError' })
location contains one or more NaN values.

See Also

API
addPort, setPortLocationParameter, setRelativePortLocation
Sets a new IPortLocationModelParameter for the given port.
To query the port location parameter, use locationParameter. To place the port at an absolute resp. relative location, you can use the setPortLocation resp. setRelativePortLocation convenience methods.

Parameters

port: IPort
The port to modify
locationParameter: IPortLocationModelParameter
The new parameter that determines the coordinates of the port
Tries to set the location of the port relative to its owner if the owner is a node.
If the port is not owned by a node that is part of this graph, this method will throw an ArgumentError. This method will delegate to setPortLocation.

Parameters

port: IPort
the port
relativeLocation: Point
the new coordinate offsets relative to the center of the node's layout's center.

Throws

Exception ({ name: 'ArgumentError' })
port is not in this graph or has no owner.
Exception ({ name: 'ArgumentError' })
relativeLocation contains one or more NaN values.

See Also

API
layout, setPortLocation, setPortLocationParameter
Assigns the given style instance by reference to the node.
Style instances can be shared.

Parameters

node: INode
The node that will be assigned the new style
style: INodeStyle
The style instance that will be assigned to the node.

Throws

Exception ({ name: 'ArgumentError' })
If node is not in this graph.
Exception ({ name: 'ArgumentError' })
If style is null.

See Also

API
style, onChangingNodeStyle, node-style-changed

Implements

IGraph.setStyle
Assigns the given style instance by reference to the label.

Style instances can be shared.

This implementation will adjust the preferred size for the label if autoAdjustPreferredSize is enabled.

Parameters

label: ILabel
The label that will be assigned the new style
style: ILabelStyle
The style instance that will be assigned to the label.

Throws

Exception ({ name: 'ArgumentError' })
If label is not in this graph.
Exception ({ name: 'ArgumentError' })
If style is null.

See Also

API
style, onChangingLabelStyle, label-style-changed

Implements

IGraph.setStyle
Assigns the given style instance by reference to the edge.

Style instances can be shared.

To query the edge style, use style.

Styles are automatically converted between WebGL and SVG rendering modes. Due to differences in feature sets, conversion may not be exact. For better control, apply styles specific to the rendering mode or use a WebGLEdgeStyleDecorator style when switching render modes.

Parameters

edge: IEdge
The edge that will be assigned the new style
style: IEdgeStyle
The style instance that will be assigned to the edge.

Implements

IGraph.setStyle
Assigns the given style instance by reference to the port.

Style instances can be shared.

To query the port style, use style.

Parameters

port: IPort
The port that will be assigned the new style
style: IPortStyle
The style instance that will be assigned to the port.

Implements

IGraph.setStyle
Enumerates the successors of a given INode.
Successors are calculated by going through all ports and inspecting the outgoing edges at these ports, collecting the targetPort owners.

Parameters

node: INode
The node.

Return Value

IEnumerable<INode>
An enumerable over all successors.

Throws

Exception ({ name: 'ArgumentError' })
node is not in this graph.

See Also

Developer's Guide
Returns a string representation for this object.

Events

Occurs when a bend has been added to an edge in this graph.
This event is intended to provide notification of low level changes in the graph structure. Please use the bend-created event if you are interested only in bend creation events that result from user interaction.

Properties of

ItemEventArgs<IBend>
item: T
Gets the item that is the subject of the event.
Occurs when the location of a bend has been changed.
This event is intended to provide notification of low level changes in the graph structure.

Properties of

function(IBend, Point, this): void
Occurs when a bend has been removed from an edge in this graph.

This event will be triggered, too, if an edge has been removed from the graph, for each of the bends that belonged to the edge.

This event is intended to provide notification of low level changes in the graph structure. Please use the deleted-item event if you are interested only in bend removal events that result from user interaction.

Properties of

BendEventArgs
index: number
Gets the former index of the bend in the bends list.
item: IBend
Gets the item that is the subject of the event.
owner: IEdge
Gets the owner of the bend that owned the bend before the event happened.
Occurs when the tag of a bend has been replaced.
This event is intended to provide notification of low level changes in the graph structure.

Properties of

ItemChangedEventArgs<IBend, any>
item: TItem
Gets the item that is the subject of the event.
oldValue: TValue
Gets the value of the property before the change.
Occurs when the graph has changed visually and the display should be updated to reflect the changes.
This event is invoked with EMPTY per default.

Properties of

EventArgs
Occurs when an edge has been created.
This event is intended to provide notification of low level changes in the graph structure. Please use the edge-created event if you are interested only in edge creation events that result from user interaction.

Properties of

ItemEventArgs<IEdge>
item: T
Gets the item that is the subject of the event.
Occurs when an edge had its sourcePort or targetPort changed.
This event is intended to provide notification of low level changes in the graph structure.

Properties of

EdgeEventArgs
item: IEdge
Gets the item that is the subject of the event.
sourcePort: IPort
Gets the source port the edge was connected to before the event happened.
sourcePortOwner: IPortOwner
Gets the owner of the source port the edge was connected to before the event happened.
targetPort: IPort
Gets the target port the edge was connected to before the event happened.
targetPortOwner: IPortOwner
Gets the owner of the target port the edge was connected to before the event happened.
Occurs when an edge has been removed.

This event will be triggered, too, prior to a node removal.

This event is intended to provide notification of low level changes in the graph structure. Please use the deleted-item event if you are interested only in edge removal events that result from user interaction.

Properties of

EdgeEventArgs
item: IEdge
Gets the item that is the subject of the event.
sourcePort: IPort
Gets the source port the edge was connected to before the event happened.
sourcePortOwner: IPortOwner
Gets the owner of the source port the edge was connected to before the event happened.
targetPort: IPort
Gets the target port the edge was connected to before the event happened.
targetPortOwner: IPortOwner
Gets the owner of the target port the edge was connected to before the event happened.
Occurs when an edge style has been replaced.
This event is intended to provide notification of low level changes in the graph structure.
item: TItem
Gets the item that is the subject of the event.
oldValue: TValue
Gets the value of the property before the change.
Occurs when the tag of an edge has been replaced.
This event is intended to provide notification of low level changes in the graph structure.

Properties of

ItemChangedEventArgs<IEdge, any>
item: TItem
Gets the item that is the subject of the event.
oldValue: TValue
Gets the value of the property before the change.
Occurs when the tag of the graph has been replaced.
This event is intended to provide notification of low level changes in the graph structure.

Properties of

ItemChangedEventArgs<IGraph, any>
item: TItem
Gets the item that is the subject of the event.
oldValue: TValue
Gets the value of the property before the change.
Occurs if the group node status of a node has changed.

Properties of

NodeEventArgs
isGroupNode: boolean
Gets whether the node was a group node before this event.
item: INode
Gets the item that is the subject of the event.
parent: INode
Gets the parent of the node before this event.
Occurs when a label has been added to this graph instance.
This event is intended to provide notification of low level changes in the graph structure. Please use the label-added event if you are interested only in label creation events that result from user interaction.

Properties of

ItemEventArgs<ILabel>
item: T
Gets the item that is the subject of the event.
Occurs when the model parameter of a label has been changed.
This event is intended to provide notification of low level changes in the graph structure.
item: TItem
Gets the item that is the subject of the event.
oldValue: TValue
Gets the value of the property before the change.
Occurs when the preferred size of a label has been changed.
This event is intended to provide notification of low level changes in the graph structure.
item: TItem
Gets the item that is the subject of the event.
oldValue: TValue
Gets the value of the property before the change.
Occurs when a label has been removed from this graph instance.

This event will also be triggered, prior to the removal of the owner of the label.

This event is intended to provide notification of low level changes in the graph structure. Please use the deleted-item event if you are interested only in label removal events that result from user interaction.

Properties of

LabelEventArgs
item: ILabel
Gets the item that is the subject of the event.
owner: ILabelOwner
Gets the owner of the label that owned the label before the event happened.
Occurs when a label style has been replaced.
This event is intended to provide notification of low level changes in the graph structure.
item: TItem
Gets the item that is the subject of the event.
oldValue: TValue
Gets the value of the property before the change.
Occurs when the tag of a label has been replaced.
This event is intended to provide notification of low level changes in the graph structure.

Properties of

ItemChangedEventArgs<ILabel, any>
item: TItem
Gets the item that is the subject of the event.
oldValue: TValue
Gets the value of the property before the change.
Occurs when the text of a label has been changed.
This event is intended to provide notification of low level changes in the graph structure.

Properties of

ItemChangedEventArgs<ILabel, string>
item: TItem
Gets the item that is the subject of the event.
oldValue: TValue
Gets the value of the property before the change.
Occurs when a node has been created.
This event is intended to provide notification of low level changes in the graph structure. Please use the node-created event if you are interested only in node creation events that result from user interaction.

Properties of

ItemEventArgs<INode>
item: T
Gets the item that is the subject of the event.
Occurs when a node layout has been changed.
This event is intended to provide notification of low level changes in the graph structure.

Properties of

function(INode, Rect, this): void
Occurs when a node has been removed.
This event is intended to provide notification of low level changes in the graph structure. Please use the deleted-item event if you are interested only in node removal events that result from user interaction.

Properties of

NodeEventArgs
isGroupNode: boolean
Gets whether the node was a group node before this event.
item: INode
Gets the item that is the subject of the event.
parent: INode
Gets the parent of the node before this event.
Occurs when a node style has been replaced.
This event is intended to provide notification of low level changes in the graph structure.
item: TItem
Gets the item that is the subject of the event.
oldValue: TValue
Gets the value of the property before the change.
Occurs when the tag of a node has been replaced.
This event is intended to provide notification of low level changes in the graph structure.

Properties of

ItemChangedEventArgs<INode, any>
item: TItem
Gets the item that is the subject of the event.
oldValue: TValue
Gets the value of the property before the change.
Occurs if a node has been reparented in the model.

Properties of

NodeEventArgs
isGroupNode: boolean
Gets whether the node was a group node before this event.
item: INode
Gets the item that is the subject of the event.
parent: INode
Gets the parent of the node before this event.
Occurs when a port has been added to this graph instance.
This event is intended to provide notification of low level changes in the graph structure.

Properties of

ItemEventArgs<IPort>
item: T
Gets the item that is the subject of the event.
Occurs when the location model parameter of a port has been changed.
This event is intended to provide notification of low level changes in the graph structure.
item: TItem
Gets the item that is the subject of the event.
oldValue: TValue
Gets the value of the property before the change.
Occurs when a port has been removed from its owner.

This event will also be triggered prior to the removal of the corresponding owner of the port.

This event is intended to provide notification of low level changes in the graph structure. Please use the deleted-item event if you are interested only in port removal events that result from user interaction.

Properties of

PortEventArgs
item: IPort
Gets the item that is the subject of the event.
owner: IPortOwner
Gets the owner of the port that was connected to before the event happened.
Occurs when a port style has been replaced.
This event is intended to provide notification of low level changes in the graph structure.
item: TItem
Gets the item that is the subject of the event.
oldValue: TValue
Gets the value of the property before the change.
Occurs when the tag of a port has been replaced.
This event is intended to provide notification of low level changes in the graph structure.

Properties of

ItemChangedEventArgs<IPort, any>
item: TItem
Gets the item that is the subject of the event.
oldValue: TValue
Gets the value of the property before the change.

Constants

Gets an IContextLookup that provides the default implementations returned by an IBend's lookup.
The provided default implementations can, for example, be used as fallback when the bend lookup is wrapped.
staticreadonly
Gets an IContextLookup that provides the default implementations returned by an IEdge's lookup.
The provided default implementations can, for example, be used as fallback when the edge lookup is wrapped.
staticreadonly
Gets an IContextLookup that provides the default implementations returned by an ILabel's lookup.
The provided default implementations can, for example, be used as fallback when the label lookup is wrapped.
staticreadonly
Gets an IContextLookup that provides the default implementations returned by an INode's lookup.
The provided default implementations can, for example, be used as fallback when the node lookup is wrapped.
staticreadonly
Gets an IContextLookup that provides the default implementations returned by an IPort's lookup.
The provided default implementations can, for example, be used as fallback when the port lookup is wrapped.
staticreadonly

Static Methods

Whether the given label has a valid owner.
static

Parameters

label: ILabel
The label whose owner needs to be checked.

Return Value

boolean
true if the label has an owner.
Whether the given port has a valid owner.
static

Parameters

port: IPort
The port whose owner needs to be checked.

Return Value

boolean
true if the port has an owner.
Whether the given bend has a valid owner.
static

Parameters

bend: IBend
The bend whose owner needs to be checked.

Return Value

boolean
true if the bend has an owner.
Whether the given edge has both valid source and target ports.
static

Parameters

edge: IEdge
The edge whose ports need to be checked.

Return Value

boolean
true if the edge has both valid source and target ports.