Apply Force Directed Layout (Network Diagram)

Summary

Emphasizes loops contained in a network diagram.

Learn more about the Force Directed layout algorithm

Caution:

If you have an open edit session, you must save your edits prior to running this tool. This ensures that the diagram reflects the latest changes made to the network topology in the database. If you fail to save your edits, the edits will not be reflected in the diagram.

Note:

Each layout algorithm includes default parameter values. The default parameter values will be used unless otherwise specified. If the input network diagram is based on a template for which this layout has been configured with a different parameter value, that value is used instead.

Usage

  • This tool is not supported when working with a database connection to a utility network or trace network in an enterprise geodatabase. You must use either the related published utility network or trace network service, or a utility network or trace network in a file geodatabase.

  • The input network diagram layer must be from either a utility network or a trace network in a file geodatabase or a network diagram service.

  • This layout algorithm uses a physical analogy to draw graphs by identifying a force system in which it tries to locally minimize the energy. It searches for an equilibrium state of the force system—a position for each diagram junction where the total force on each junction is zero.

  • Because this algorithm has a tendency to emphasize loops contained in a network diagram, it is often used by operators who manage highly meshed networks, such as water, wastewater, or gas.

  • Consider applying the layout in asynchronous mode on the server when working on very large diagrams.

Syntax

arcpy.nd.ApplyForceDirectedLayout(in_network_diagram_layer, {are_containers_preserved}, {iterations_number}, {repel_factor}, {degree_freedom}, {breakpoint_position}, {edge_display_type}, {run_async})
ParameterExplanationData Type
in_network_diagram_layer

The network diagram to which the layout will be applied.

Diagram Layer
are_containers_preserved
(Optional)

Specifies how the algorithm will process containers.

  • PRESERVE_CONTAINERS The layout algorithm will execute on the top graph of the diagram so containers are preserved.
  • IGNORE_CONTAINERSThe layout algorithm will execute on both content and noncontent features in the diagram. This is the default.
Boolean
iterations_number
(Optional)

The number of iterations to process. The default is 20.

Long
repel_factor
(Optional)

Adds distance between diagram junctions that are close together. The larger the repel factor, the greater the distance that will be added between nearly overlapping diagram junctions. The default is 1.

Double
degree_freedom
(Optional)

Specifies the area used to move the diagram junctions during each algorithm iteration.

  • LOWThe area used to move the diagram junctions will be limited. This is the default.
  • HIGHThe area used to move the diagram junctions will be large.
  • MEDIUMThe area used to move the diagram junctions will be moderate.
String
breakpoint_position
(Optional)

The relative position of the two inflexion points that will be inserted along the diagram edges to compute the curved edges geometry when Edge Display Type is set to Curved edges (edges_display_type = "CURVED_EDGES" in Python). It is a percentage between 15 and 40; the default is 30. For example, with a Break Point Relative Position (%) parameter value of N between 15 and 40, the following is true:

  • X being the x-coordinate of the edge's from junction and Y being the y-coordinate of the edge's to junction for a horizontal tree:
    • The first inflexion point will be positioned at N% of the length of the [XY] segment
    • The second inflexion point will be positioned at (100 - N)% of the length of the [XY] segment
  • Y being the y-coordinate of the edge's from junction and X being the x-coordinate of the edge's to junction for a vertical tree:
    • The first inflexion point will be positioned at N% of the length of the [YX] segment
    • The second inflexion point will be positioned at (100 - N)% of the length of the [XY] segment

Note:

The concept of the from and to junctions above is relative to the tree direction; it is not related to the topology of the network feature or object edge.

This parameter is ignored when the Edge Display Type parameter is set to Regular edges (edges_display_type = "REGULAR_EDGES" in Python).

Double
edge_display_type
(Optional)

Specifies the type of display for the diagram edges.

  • REGULAR_EDGESAll diagram edges display as straight lines. This is the default.
  • CURVED_EDGESAll diagram edges are curved.
String
run_async
(Optional)

Specifies whether the layout algorithm will run asynchronously or synchronously on the server.

  • RUN_ASYNCHRONOUSLYThe layout algorithm will run asynchronously on the server. This option dedicates server resources to run the layout algorithm with a longer time-out. Running asynchronously is recommended when executing layouts that are time consuming and may exceed the server time-out—for example, Partial Overlapping Edges—and applying to large diagrams—more than 25,000 features.
  • RUN_SYNCHRONOUSLYThe layout algorithm will run synchronously on the server. It can fail without completion if its execution exceeds the service time-out: 600 seconds by default. This is the default.
Boolean

Derived Output

NameExplanationData Type
out_network_diagram_layer

The updated network diagram layer.

Diagram Layer

Code sample

ApplyForceDirectedLayout example (Python window)

Apply the Force Directed Layout algorithm to the diagram called Temporary Diagram.

import arcpy
arcpy.ApplyForceDirectedLayout_nd("Temporary Diagram", "PRESERVE_CONTAINERS", 
                                  20, 1, "LOW", 25, "CURVED_EDGES", 
                                  "RUN_SYNCHRONOUSLY")

Environments

This tool does not use any geoprocessing environments.

Licensing information

  • Basic: No
  • Standard: Yes
  • Advanced: Yes

Related topics