Exemple #1
0
        internal static ICurve CreateBaseSegmentForDraggingEdgeWithSource(Point delta, GeomEdge edge,
                                                                          EdgeRestoreData edgeRestoreData,
                                                                          Dictionary <GeomEdge, double> offsets)
        {
            double offset;
            ICurve seg;
            Point  a = edgeRestoreData.UnderlyingPolyline.HeadSite.Point + delta;
            Point  b = edgeRestoreData.UnderlyingPolyline.LastSite.Point;

            if (offsets.TryGetValue(edge, out offset) && offset != 0)
            {
                Point ab      = b - a;
                Point abOrtog = ab.Normalize().Rotate(Math.PI / 2) * offset;
                seg = CreateBaseSegOnSourceTargetAndOrth(ref a, ref b, ref abOrtog);
                //        SugiyamaLayoutSettings.Show(seg, edge.Curve, edge.Source.BoundaryCurve);
            }
            else
            {
                seg = new LineSegment(a, b);
            }

            return(seg);
        }
        static internal void DragEdgeWithTarget(Point delta, GeomEdge edge, EdgeRestoreData edgeRestoreData)
        {
            double closenessToLine = Math.Min(1.0, (delta.Length / edgeRestoreData.DistanceWhenEdgeIsTurningToLine));

            Point lineStart = edgeRestoreData.Polyline.HeadSite.Point;
            Point lineEnd   = edgeRestoreData.Polyline.LastSite.Point + delta;

            edge.UnderlyingPolyline.LastSite.Point = lineEnd;

            Point lineVectorBetweenToPolylinePoints = (lineEnd - lineStart) / edgeRestoreData.NumberOfPolylineSegments;

            Site liveSite    = edge.UnderlyingPolyline.HeadSite;
            Site restoreSite = edgeRestoreData.Polyline.HeadSite;

            for (int i = 1; i < edgeRestoreData.NumberOfPolylineSegments; i++)
            {
                Point linePoint = lineStart + ((double)i) * lineVectorBetweenToPolylinePoints;
                liveSite       = liveSite.Next;
                restoreSite    = restoreSite.Next;
                liveSite.Point = closenessToLine * linePoint + (1 - closenessToLine) * restoreSite.Point;
            }

            CreateCurveOnChangedPolyline(delta, edge, edgeRestoreData);
        }
        /// <summary>
        /// redoes the editing
        /// </summary>
        public override void Redo()
        {
            EdgeRestoreData erd = (EdgeRestoreData)GetRestoreData(editedEdge);

            GeometryGraphEditor.DragEdgeWithSite(Delta, editedEdge, erd, erd.Site, erd.InitialSitePosition);
        }
        /// <summary>
        /// undoes the editing
        /// </summary>
        public override void Undo()
        {
            EdgeRestoreData erd = (EdgeRestoreData)GetRestoreData(editedEdge);

            GeometryGraphEditor.DragEdgeWithSite(new Point(0, 0), editedEdge, erd, erd.Site, erd.InitialSitePosition);
        }
 /// <summary>
 ///
 /// </summary>
 /// <param name="delta">delta of the drag</param>
 /// <param name="e">the modified edge</param>
 /// <param name="edgeRestoreData"></param>
 /// <param name="site"></param>
 /// <param name="previousSitePosition"></param>
 static internal void DragEdgeWithSite(Point delta, GeomEdge e, EdgeRestoreData edgeRestoreData, Site site, Point previousSitePosition)
 {
     site.Point = previousSitePosition + delta;
     CreateCurveOnChangedPolyline(delta, e, edgeRestoreData);
 }