Example #1
0
            /// <summary>
            /// MouseMove method for PlotDrag interaction
            /// </summary>
            /// <param name="X">mouse X position</param>
            /// <param name="Y"> mouse Y position</param>
            /// <param name="keys"> mouse and keyboard modifiers</param>
            /// <param name="ps">the InteractivePlotSurface2D</param>
            public override bool DoMouseMove(int X, int Y, Modifier keys, InteractivePlotSurface2D ps)
            {
                Rectangle area = ps.PlotAreaBoundingBoxCache;

                // Mouse Left-Button gives Plot Drag, Ctrl.Left-Button Zooms
                if (((keys & Modifier.Button1) != 0) && dragInitiated_) {
                    ps.CacheAxes();

                    double dX = X - lastPoint_.X;		// distance mouse has moved
                    double dY = Y - lastPoint_.Y;
                    lastPoint_ = new Point(X, Y);

                    if ((keys & Modifier.Control) != 0) {
                        // Axis re-ranging required
                        double factor = Sensitivity;
                        if ((keys & Modifier.Alt) != 0) {
                         factor *= 0.25;	// arbitrary change
                        }
                        double xProportion = +dX*factor/area.Width;
                        double yProportion = -dY*factor/area.Height;

                        if (horizontal_) {
                            ps.ZoomAxis(ps.XAxis1, xProportion, focusX);
                            ps.ZoomAxis(ps.XAxis2, xProportion, focusX);
                        }
                        if (vertical_) {
                            ps.ZoomAxis(ps.YAxis1, yProportion, focusY);
                            ps.ZoomAxis(ps.YAxis2, yProportion, focusY);
                        }
                    }
                    else {
                        // Axis translation required
                        double xShift = -dX / area.Width;
                        double yShift = +dY / area.Height;

                        if (horizontal_) {
                            ps.TranslateAxis(ps.XAxis1, xShift);
                            ps.TranslateAxis(ps.XAxis2, xShift);
                        }
                        if (vertical_) {
                            ps.TranslateAxis(ps.YAxis1, yShift);
                            ps.TranslateAxis(ps.YAxis2, yShift);
                        }
                    }
                    return true;
                }
                return false;
            }