Connections

A Port defines a connectable part of an item. Handles can connect to ports to make connections between items.

Constraints

Diagram items can have internal constraints, which can be used to position item’s ports within an item itself.

For example, Element item could create constraints to position ports over its edges of rectanglular area. The result is duplication of constraints as Element already constraints position of handles to keep them in a rectangle.

For example, a horizontal line could be implemented like:

class HorizontalLine(gaphas.item.Item):
    def __init__(self, connections: gaphas.connections.Connections):
        super(HorizontalLine, self).__init__()

        self.start = Handle()
        self.end = Handle()

        self.port = LinePort(self.start.pos, self.end.pos)

        connections.add_constraint(self,
            constraint(horizontal=(self.start.pos, self.end.pos)))

Connections

Connection between two items is established by creating a constraint between handle’s position and port’s positions (positions are constraint solver variables).

To create a constraint between two items, the constraint needs a common coordinate space (each item has it’s own origin coordinate). This can be done with the gaphas.position.MatrixProjection class, which translates coordinates to a common (“canvas”) coordinate space where they can be used to connect two different items.

Examples of ports can be found in Gaphas and Gaphor source code

  • gaphas.item.Line and gaphas.item.Element classes

  • Gaphor interface and lifeline items have own specific ports