Point FigureOutHookLocationForClusterOtherPort(Polyline poly, ClusterBoundaryPort otherEdgeEndPort, EdgeGeometry edgeGeom) {
     var shapes = shortestPathRouter.MakeTransparentShapesOfEdgeGeometry(edgeGeom);
     //SplineRouter.ShowVisGraph(this.VisibilityGraph, this.LooseHierarchy.GetAllLeaves(),
     //    shapes.Select(sh => sh.BoundaryCurve), new[] { new LineSegment(edgeGeom.SourcePort.Location, edgeGeom.TargetPort.Location) });
     var s = new MultipleSourceMultipleTargetsShortestPathOnVisibilityGraph(otherEdgeEndPort.LoosePolyline.Select(p => VisibilityGraph.FindVertex(p)),             
         poly.Select(p => VisibilityGraph.FindVertex(p)), VisibilityGraph);
     var path = s.GetPath();
     foreach (var sh in shapes)
         sh.IsTransparent = false;
     return path.Last().Point;
 }