private void surface_MouseMove(object sender, MouseEventArgs e) { if (!DataReady) { return; } if (_projection == null || _projection.Empty) { return; } bool outOfSurface; var point2D = Surface2Image(new Point(e.X, e.Y), out outOfSurface); Debug.Print(point2D.X + ":" + point2D.Y); if (!outOfSurface) { _probe.Dencity(_projection.Pixels[point2D.X, point2D.Y]); } if (_cropLock == CropLock.None) // not locked { var cropLock = MouseOverCropBox(point2D); if (cropLock != CropLock.None) //can lock on click { Cursor = Cursors.Hand; } else { if (!outOfSurface) { Cursor = Cursors.Cross; } else { Cursor = Cursors.Default; } } } var crop = _labelMapSet.Current.Crop; switch (_axis) { case Axis.X: switch (_cropLock) { case CropLock.YL: crop.YL = point2D.X; break; case CropLock.YR: crop.YR = point2D.X; break; case CropLock.ZL: crop.ZL = point2D.Y; break; case CropLock.ZR: crop.ZR = point2D.Y; break; } break; case Axis.Y: switch (_cropLock) { case CropLock.XL: crop.XL = point2D.X; break; case CropLock.XR: crop.XR = point2D.X; break; case CropLock.ZL: crop.ZL = point2D.Y; break; case CropLock.ZR: crop.ZR = point2D.Y; break; } break; case Axis.Z: switch (_cropLock) { case CropLock.XL: crop.XL = point2D.X; break; case CropLock.XR: crop.XR = point2D.X; break; case CropLock.YL: crop.YL = point2D.Y; break; case CropLock.YR: crop.YR = point2D.Y; break; } break; default: throw new ArgumentOutOfRangeException(); } }