internal void AddEdgeToSite(CdtEdge edge) { if (Edges == null) { Edges = new List <CdtEdge>(); } Edges.Add(edge); }
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); }