Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

Code Block
titleExample
linenumberstrue
properties:
    de.cau.cs.kieler.algorithm="de.cau.cs.kieler.klay.tree"
 
knode n1 {
    size: width=50 height=50
    
    kedge (-> n2)
    kedge (-> n3)
}
knode n2 {
    size: width=50 height=50
}
knode n3 {
    size: width=50 height=50
}

A More Complex Example

We finish with a more complex example that highlights some of the features of the KIELER graph layout technology and how to use it through the KGT format.

Section
Column
Code Block
titleExample
linenumberstrue
properties:
    de.cau.cs.kieler.edgeRouting=ORTHOGONAL
    de.cau.cs.kieler.direction=DOWN
    de.cau.cs.kieler.separateConnComp=FALSE

// The node label of N1 is placed outside. Edges connect directly to
// the node, without any ports in between
knode N1 {
    properties:
        de.cau.cs.kieler.nodeLabelPlacement="OUTSIDE H_LEFT V_TOP"
        de.cau.cs.kieler.sizeConstraint="NODE_LABELS PORTS"
    klabel "N1"
    
    kedge (-> N2)
}

// Compared to N1, this node will be slightly higher because the size
// constraints also take a default minimum size into account
knode N2 {
    properties:
        de.cau.cs.kieler.nodeLabelPlacement="OUTSIDE H_LEFT V_TOP"
        de.cau.cs.kieler.sizeConstraint="MINIMUM_SIZE NODE_LABELS PORTS"
        de.cau.cs.kieler.sizeOptions=DEFAULT_MINIMUM_SIZE
    klabel "N2"
    
    kedge (-> N3:N3Port)
    kedge (-> N4:N4Port)
}

// N3 is a compound node with three nodes nested inside. The layout
// algorithm uses the default node placement algorithm
knode N3 {
    properties:
        de.cau.cs.kieler.edgeRouting=ORTHOGONAL
        de.cau.cs.kieler.direction=DOWN
        de.cau.cs.kieler.nodeLabelPlacement="OUTSIDE H_CENTER V_BOTTOM"
    klabel "N3"
    
    kport N3Port {
        size: width=5 height=5
        pos: x=10 y=-5
    }
    kedge (:N3Port -> N31)
    
    knode N31 {
        size: width=80 height=30
        properties:
            de.cau.cs.kieler.nodeLabelPlacement="INSIDE H_CENTER V_CENTER"
        klabel "N31"
        
        kedge (-> N32)
        kedge (-> N33)
    }
    
    knode N32 {
        size: width=80 height=30
        properties:
            de.cau.cs.kieler.nodeLabelPlacement="INSIDE H_CENTER V_CENTER"
        klabel "N32"
    }
    
    knode N33 {
        size: width=80 height=30
        properties:
            de.cau.cs.kieler.nodeLabelPlacement="INSIDE H_CENTER V_CENTER"
        klabel "N33"
    }
}

// Another a compound node with three nodes nested inside. The layout
// algorithm uses the linear segments algorithm for node placement
knode N4 {
    properties:
        de.cau.cs.kieler.edgeRouting=ORTHOGONAL
        de.cau.cs.kieler.direction=DOWN
        de.cau.cs.kieler.klay.layered.nodePlace=LINEAR_SEGMENTS
        de.cau.cs.kieler.nodeLabelPlacement="OUTSIDE H_CENTER V_BOTTOM"
    klabel "N4"
    
    kport N4Port {
        size: width=5 height=5
    }
    kedge (:N4Port -> N41)
    
    knode N41 {
        size: width=80 height=30
        properties:
            de.cau.cs.kieler.nodeLabelPlacement="INSIDE H_CENTER V_CENTER"
        klabel "N41"
        
        kedge (-> N42)
        kedge (-> N43)
    }
    
    knode N42 {
        size: width=80 height=30
        properties:
            de.cau.cs.kieler.nodeLabelPlacement="INSIDE H_CENTER V_CENTER"
        klabel "N42"
    }
    
    knode N43 {
        size: width=80 height=30
        properties:
            de.cau.cs.kieler.nodeLabelPlacement="INSIDE H_CENTER V_CENTER"
        klabel "N43"
    }
} 
Column

Image Added