Exemplo n.º 1
0
        //--------------------------------------------------------------------------------------------------

        void Snap()
        {
            double snapDistance = Double.MaxValue;
            Vec2d  snapDelta    = MoveDelta;

            foreach (var point in Points)
            {
                var movedPoint = _Sketch.Points[point].Translated(MoveDelta);

                // Calc snapping position and distance to grid
                var snapInfo = SketchToolHelper.Snap(movedPoint, _Sketch);
                if (snapInfo.Distance < snapDistance)
                {
                    // This point snaps closer
                    snapDistance = snapInfo.Distance;
                    snapDelta    = new Vec2d(snapInfo.Point.Coord.Subtracted(_Sketch.Points[point].Coord));
                }
            }

            if (snapDistance < WorkspaceController.ActiveViewport.GizmoScale * 0.2)
            {
                MoveDelta = snapDelta;
            }
        }
Exemplo n.º 2
0
        //--------------------------------------------------------------------------------------------------

        Pnt2d Snap(Pnt2d point)
        {
            Pnt2d snapPoint = point;

            // Snap
            double snapDistance = WorkspaceController.ActiveViewport.GizmoScale * 0.2;
            var    snapInfo     = SketchToolHelper.Snap(point, _SketchEditorTool.Sketch, AdditionalSnapPoints);

            if (snapInfo.Distance < snapDistance)
            {
                snapPoint = snapInfo.Point;
            }

            // Constraint point
            OnConstraintPoint(ref snapPoint);

            // Find merge candidate
            double mergeDistance = WorkspaceController.ActiveViewport.GizmoScale * 0.2;

            MergeCandidateIndex = -1;

            if (EnablePointMerge)
            {
                foreach (var pointKvp in _SketchEditorTool.Sketch.Points)
                {
                    var distance = pointKvp.Value.Distance(snapPoint);
                    if (distance < mergeDistance)
                    {
                        _MergeCandidatePoint = pointKvp.Value;
                        MergeCandidateIndex  = pointKvp.Key;
                    }
                }
            }

            return(snapPoint);
        }