Refactor
This commit is contained in:
parent
d002531768
commit
8c84ed0378
2 changed files with 11 additions and 6 deletions
|
|
@ -21,4 +21,4 @@ const ACTIVATION_BOX_EDGE_PAD = 5.
|
||||||
const ACTIVATION_BOX_DEPTH_GROW_FACTOR = 10.
|
const ACTIVATION_BOX_DEPTH_GROW_FACTOR = 10.
|
||||||
|
|
||||||
// when a activation box has a single edge
|
// when a activation box has a single edge
|
||||||
const DEFAULT_ACTIVATION_BOX_HEIGHT = MIN_EDGE_DISTANCE / 2.
|
const MIN_ACTIVATION_BOX_HEIGHT = MIN_EDGE_DISTANCE / 2.
|
||||||
|
|
|
||||||
|
|
@ -42,11 +42,13 @@ type sequenceDiagram struct {
|
||||||
activations []*d2graph.Object
|
activations []*d2graph.Object
|
||||||
|
|
||||||
// can be either actors or activation boxes
|
// can be either actors or activation boxes
|
||||||
objectRank map[*d2graph.Object]int
|
// rank: left to right position of actors/activations
|
||||||
|
objectRank map[*d2graph.Object]int
|
||||||
|
// depth: the nested levels of a given actor/activation
|
||||||
objectDepth map[*d2graph.Object]int
|
objectDepth map[*d2graph.Object]int
|
||||||
|
|
||||||
// keep track of the first and last edge of a given actor
|
// keep track of the first and last edge of a given actor
|
||||||
// needed for activation boxes
|
// the edge rank is the order in which it appears from top to bottom
|
||||||
minEdgeRank map[*d2graph.Object]int
|
minEdgeRank map[*d2graph.Object]int
|
||||||
maxEdgeRank map[*d2graph.Object]int
|
maxEdgeRank map[*d2graph.Object]int
|
||||||
|
|
||||||
|
|
@ -69,7 +71,7 @@ func (sd *sequenceDiagram) init() {
|
||||||
sd.actors = append(sd.actors, obj)
|
sd.actors = append(sd.actors, obj)
|
||||||
sd.objectRank[obj] = len(sd.actors)
|
sd.objectRank[obj] = len(sd.actors)
|
||||||
sd.objectDepth[obj] = 0
|
sd.objectDepth[obj] = 0
|
||||||
sd.maxActorHeight = math.Max(sd.maxActorHeight, obj.Height+VERTICAL_PAD)
|
sd.maxActorHeight = math.Max(sd.maxActorHeight, obj.Height)
|
||||||
} else {
|
} else {
|
||||||
// activations boxes are always rectangles and have no labels
|
// activations boxes are always rectangles and have no labels
|
||||||
obj.Attributes.Label = d2graph.Scalar{Value: ""}
|
obj.Attributes.Label = d2graph.Scalar{Value: ""}
|
||||||
|
|
@ -83,7 +85,7 @@ func (sd *sequenceDiagram) init() {
|
||||||
}
|
}
|
||||||
|
|
||||||
for rank, edge := range sd.edges {
|
for rank, edge := range sd.edges {
|
||||||
sd.edgeYStep = math.Max(sd.edgeYStep, float64(edge.LabelDimensions.Height)+VERTICAL_PAD)
|
sd.edgeYStep = math.Max(sd.edgeYStep, float64(edge.LabelDimensions.Height))
|
||||||
|
|
||||||
sd.setMinMaxEdgeRank(edge.Src, rank)
|
sd.setMinMaxEdgeRank(edge.Src, rank)
|
||||||
sd.setMinMaxEdgeRank(edge.Dst, rank)
|
sd.setMinMaxEdgeRank(edge.Dst, rank)
|
||||||
|
|
@ -94,6 +96,9 @@ func (sd *sequenceDiagram) init() {
|
||||||
distributedLabelWidth := float64(edge.LabelDimensions.Width) / rankDiff
|
distributedLabelWidth := float64(edge.LabelDimensions.Width) / rankDiff
|
||||||
sd.actorXStep = math.Max(sd.actorXStep, distributedLabelWidth+HORIZONTAL_PAD)
|
sd.actorXStep = math.Max(sd.actorXStep, distributedLabelWidth+HORIZONTAL_PAD)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
sd.maxActorHeight += VERTICAL_PAD
|
||||||
|
sd.edgeYStep += VERTICAL_PAD
|
||||||
}
|
}
|
||||||
|
|
||||||
func (sd *sequenceDiagram) setMinMaxEdgeRank(actor *d2graph.Object, rank int) {
|
func (sd *sequenceDiagram) setMinMaxEdgeRank(actor *d2graph.Object, rank int) {
|
||||||
|
|
@ -213,7 +218,7 @@ func (sd *sequenceDiagram) placeActivationBoxes() {
|
||||||
maxY += ACTIVATION_BOX_EDGE_PAD
|
maxY += ACTIVATION_BOX_EDGE_PAD
|
||||||
}
|
}
|
||||||
|
|
||||||
height := math.Max(maxY-minY, DEFAULT_ACTIVATION_BOX_HEIGHT)
|
height := math.Max(maxY-minY, MIN_ACTIVATION_BOX_HEIGHT)
|
||||||
width := ACTIVATION_BOX_WIDTH + (float64(sd.objectDepth[activation]-1) * ACTIVATION_BOX_DEPTH_GROW_FACTOR)
|
width := ACTIVATION_BOX_WIDTH + (float64(sd.objectDepth[activation]-1) * ACTIVATION_BOX_DEPTH_GROW_FACTOR)
|
||||||
x := rankToX[sd.objectRank[activation]] - (width / 2.)
|
x := rankToX[sd.objectRank[activation]] - (width / 2.)
|
||||||
activation.Box = geo.NewBox(geo.NewPoint(x, minY), width, height)
|
activation.Box = geo.NewBox(geo.NewPoint(x, minY), width, height)
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue