コード例 #1
0
        double GetMaxLabelWidth(IntPair intPair) {
            IEnumerable<Label> multiEdgeLabels = PairLabels(intPair);

            if (multiEdgeLabels.Any())
                return multiEdgeLabels.Max(label => label.Width);
            return 0;
        }
コード例 #2
0
        public static int Compare(IntPair pair0, IntPair pair1) {
            if (pair0 < pair1)
                return 1;
            if (pair0 == pair1)
                return 0;

            return -1;
        }
コード例 #3
0
        /// <summary>
        /// override the equality
        /// </summary>
        /// <param name="obj"></param>
        /// <returns></returns>
        public override bool Equals(object obj)
        {
            IntPair other = obj as IntPair;

            if (other == null)
            {
                return(false);
            }

            return(x == other.x && y == other.y);
        }
コード例 #4
0
        public static int Compare(IntPair pair0, IntPair pair1)
        {
            if (pair0 < pair1)
            {
                return(1);
            }
            if (pair0 == pair1)
            {
                return(0);
            }

            return(-1);
        }
コード例 #5
0
        internal void AddFeedbackSet(IEnumerable<IEdge> edges) {
            foreach (IEdge e in edges) {
                IntPair ip = new IntPair(e.Source, e.Target);
                IntPair ipr = new IntPair(e.Target, e.Source);

                //we shuffle reversed edges into the other multiedge
                List<IntEdge> listToShuffle = multiedges[ip];
                foreach (IntEdge er in listToShuffle)
                    er.Revert();

                if (multiedges.ContainsKey(ipr))
                    multiedges[ipr].AddRange(listToShuffle);
                else
                    multiedges[ipr] = listToShuffle;

                multiedges.Remove(ip);
            }
        }
コード例 #6
0
 static IntEdge CreateUpDownConstrainedIntEdge(IntPair intPair) {
     var intEdge = new IntEdge(intPair.x, intPair.y);
     intEdge.Weight = 0;
     //we do not want the edge weight to contribute in to the sum but just take the constraint into account
     intEdge.Separation = 1;
     return intEdge;
 }
コード例 #7
0
 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;
 }
コード例 #8
0
        void CalculateRegionAndInsertJumper(int i) {
            IntPair ip = new IntPair(Up(i), Down(i));
            this.possibleJumperFeasibleIntervals[i] = ip;

            InsertJumper(ip.x, ip.y, i);
        }
コード例 #9
0
        public int CompareTo(IntPair other)
        {
            var r = x.CompareTo(other.x);

            return(r != 0 ? r : y.CompareTo(other.y));
        }
コード例 #10
0
        internal void RegisterOriginalEdgeInMultiedges(IntEdge edge) {
            IntPair ip = new IntPair(edge.Source, edge.Target);
            List<IntEdge> o;
            if (multiedges.ContainsKey(ip) == false)
                multiedges[ip] = o = new List<IntEdge>();
            else
                o = multiedges[ip];

            o.Add(edge);
        }
コード例 #11
0
        internal List<IntEdge> GetMultiedge(IntPair ip) {
            if (multiedges.ContainsKey(ip))
                return multiedges[ip];

            return new List<IntEdge>();
        }
 internal IntPair GluedIntPair(IntPair p) {
     return new IntPair(NodeToRepr(p.First), NodeToRepr(p.Second));
 }
コード例 #13
0
 IEnumerable<Label> PairLabels(IntPair intPair) {
     return from edge in Database.GetMultiedge(intPair)
            let label = edge.Edge.Label
            where label != null
            select label;
 }
コード例 #14
0
 double GetLabelWeight(IntPair intPair) {
     return Database.GetMultiedge(intPair).Count;
 }
コード例 #15
0
 internal void AddConstraintEdge(IntPair intPair) {
     int source = intPair.First; int target = intPair.Second;
     GetOrCreateNodeInfo(source).AddOutConstrainedEdge(target);
     GetOrCreateNodeInfo(target).AddInConstrainedEdge(source);
 }
コード例 #16
0
 internal void AddEdge(IntPair edge) {
     edgesToKeep.Insert(edge);
     int source = edge.First; int target = edge.Second;
     GetOrCreateNodeInfo(source).AddOutEdge(target);
     GetOrCreateNodeInfo(target).AddInEdge(source);
 }