void AddSeparationConstraintsForFlatEdges(LayerInfo layerInfo, ISolverShell solver)
 {
     if (layerInfo != null)
     {
         foreach (var p in layerInfo.flatEdges)
         {
             int left, right;
             if (LayerArrays.X[p.Item1] < LayerArrays.X[p.Item2])
             {
                 left  = p.Item1;
                 right = p.Item2;
             }
             else
             {
                 left  = p.Item2;
                 right = p.Item1;
             }
             if (left == right)
             {
                 continue;
             }
             double gap = GetGap(left, right);
             foreach (IntEdge edge in database.GetMultiedge(p.Item1, p.Item2))
             {
                 solver.AddLeftRightSeparationConstraint(left, right,
                                                         gap + NodeSeparation() +
                                                         (edge.Edge.Label != null ? edge.Edge.Label.Width : 0));
             }
         }
     }
 }
Ejemplo n.º 2
0
 IEnumerable <Label> PairLabels(IntPair intPair)
 {
     return(from edge in Database.GetMultiedge(intPair)
            let label = edge.Edge.Label
                        where label != null
                        select label);
 }
        static double WidthOfSelfEdge(Database database, int i, ref double rightAnchor, ref double topAnchor,
                                      ref double bottomAnchor, SugiyamaLayoutSettings settings) {
            double delta = 0;
            List<IntEdge> multiedges = database.GetMultiedge(i, i);
            //it could be a multiple self edge
            if (multiedges.Count > 0) {
                foreach (IntEdge e in multiedges)
                    if (e.Edge.Label != null) {
                        rightAnchor += e.Edge.Label.Width;
                        if (topAnchor < e.Edge.Label.Height/2.0)
                            topAnchor = bottomAnchor = e.Edge.Label.Height/2.0f;
                    }

                delta += (settings.NodeSeparation + settings.MinNodeWidth)*multiedges.Count;
            }
            return delta;
        }
 static double SetFlatEdgesLabelsHeightAndPositionts(IntPair pair, double ymax, double dy, Database database) {
     double height = 0;
     List<IntEdge> list = database.GetMultiedge(pair);
     foreach (IntEdge edge in list) {
         height += dy;
         Label label = edge.Edge.Label;
         if (label != null) {
             label.Center = new Point(label.Center.X, ymax + height + label.Height/2);
             height += label.Height;
         }
     }
     return height;
 }
Ejemplo n.º 5
0
 double GetLabelWeight(IntPair intPair)
 {
     return(Database.GetMultiedge(intPair).Count);
 }
Ejemplo n.º 6
0
 IEnumerable <IntEdge> IntEdges()
 {
     return(from pair in pairArray from edge in Database.GetMultiedge(pair) select edge);
 }