Exemplo n.º 1
0
 internal void AddEdgeToSite(CdtEdge edge)
 {
     if (Edges == null)
     {
         Edges = new List <CdtEdge>();
     }
     Edges.Add(edge);
 }
Exemplo n.º 2
0
 internal void AddInEdge(CdtEdge e)
 {
     if (InEdges == null)
     {
         InEdges = new List <CdtEdge>();
     }
     InEdges.Add(e);
 }
        public double GetWeightOfCdtEdgePenalizeSegmentCrossings(CdtEdge e)
        {
            Point point1 = Round(e.upperSite.Point);
            Point point2 = Round(e.lowerSite.Point);
            TreeNode n1 = pointToTreeNode[point1];
            TreeNode n2 = pointToTreeNode[point2];

            Rectangle box1 = n1.rect;
            Rectangle box2 = n2.rect;

            bool overlap = Rectangle.Intersect(box1, box2).IsEmpty;
            double t;

            if (!Rectangle.Intersect(box1, box2).IsEmpty)
                return GetWeightOverlappingRectangles(box1, box2, out t);

            double factor = ( IsCrossedBySegment(new SymmetricSegment(point1, point2)) ? 3 : 1 );

            return factor * GetDistance(box1, box2);
        }
        public double GetWeightOfCdtEdgePenalizeFixed(CdtEdge e)
        {
            Point point1 = Round(e.upperSite.Point);
            Point point2 = Round(e.lowerSite.Point);
            TreeNode n1 = pointToTreeNode[point1];
            TreeNode n2 = pointToTreeNode[point2];

            Rectangle box1 = n1.rect;
            Rectangle box2 = n2.rect;

            bool overlap = Rectangle.Intersect(box1, box2).IsEmpty;
            double t;

            if (!Rectangle.Intersect(box1, box2).IsEmpty)
                return GetWeightOverlappingRectangles(box1, box2, out t);

            double factor = (n1.isFixed || n2.isFixed ? 10 : 1);

            return factor * GetDistance(box1, box2);
        }
        public double GetWeightOfCdtEdgeDefault(CdtEdge e) {
            Point point1 = Round(e.upperSite.Point);
            Point point2 = Round(e.lowerSite.Point);
            TreeNode n1 = pointToTreeNode[point1];
            TreeNode n2 = pointToTreeNode[point2];

            if (n1.type == SiteType.AdditionalPointBoxSegmentOverlap ||
                n2.type == SiteType.AdditionalPointBoxSegmentOverlap)
                return -Math.Max(n1.rect.Diagonal, n2.rect.Diagonal); // todo: better values? should be very small

            Rectangle box1 = n1.rect;
            Rectangle box2 = n2.rect;

            double t;

            if (!Rectangle.Intersect(box1, box2).IsEmpty)
                return GetWeightOverlappingRectangles(box1, box2, out t);

            return GetDistance(box1, box2);
        }
 internal void AddInEdge(CdtEdge e)
 {
     if (InEdges == null)
         InEdges = new List<CdtEdge>();
     InEdges.Add(e);
 }
 internal void AddEdgeToSite(CdtEdge edge)
 {
     if (Edges == null)
         Edges = new List<CdtEdge>();
     Edges.Add(edge);
 }