//internal void HideTightPolylineContainingPoint(Point sourcePortLocation) { // //the source polyline should not participate in // sourceTightNode = InteractiveEdgeRouter.GetFirstHitRectangleNode(sourcePortLocation, this.RootOfTightHierararchy); // sourceTightNode.rectangle = new Rectangle(double.PositiveInfinity, double.PositiveInfinity, double.PositiveInfinity, double.PositiveInfinity); //need to restore it when edge routing is done //} internal void ScaleLooseObstacles(double coefficient) { LooseObstacles.Clear(); foreach (var tightPolyline in TightObstacles) { LooseObstacles.Add(LoosePolylineWithFewCorners(tightPolyline, tightPolylinesToLooseDistances[tightPolyline] * coefficient)); } RootOfLooseHierarchy = CalculateHierarchy(LooseObstacles); Debug.Assert(GetOverlappedPairSet(RootOfLooseHierarchy).Count == 0, "Overlaps are found in LooseObstacles"); }
void CreateLooseObstacles() { RootOfLooseHierarchy = RootOfTightHierararchy.Clone(); TraverseHierarchy(RootOfLooseHierarchy, delegate(RectangleNode <Polyline> node) { if (node.UserData != null) { Polyline tightPolyline = node.UserData; double distance = FindMaxPaddingForTightPolyline(tightPolyline); LooseObstacles.Add( node.UserData = LoosePolylineWithFewCorners(tightPolyline, Math.Min( router.LoosePadding, distance * 0.3))); node.Rectangle = node.UserData.BoundingBox; InteractiveObstacleCalculator.UpdateRectsForParents(node); } }); }