public PointImage() { _points = new List<PointImagePoint>(); _imageControl = new Image(); InitializeComponent(); _zoomControl.Child = _imageControl; TemporaryPoint = new PointImagePoint(true); SelectedPoint = new PointImagePoint(true); CrossColor = Colors.Black; SelectedColor = Colors.White; _imageControl.MouseLeftButtonDown += ImageMouseLeftButtonDown; _imageControl.MouseMove += ImageMouseMove; IsDeletionEnable = false; }
// On delete pressed if deletion is enabled, delete and raise ondelete event protected override void OnKeyDown(KeyEventArgs e) { if(e.Key == Key.Delete) { if(!SelectedPoint.IsNullPoint) { var removed = SelectedPoint; RemovePoint(SelectedPoint); SelectedPoint = new PointImagePoint(true); if(PointDeleted != null) PointDeleted(this, new PointImageEventArgs() { OldImagePoint = removed }); } } base.OnKeyDown(e); }
protected void ImageMouseLeftButtonDown(object sender, MouseButtonEventArgs e) { // Get mouse pos and transform to image source coords Point mpos = Mouse.GetPosition(_imageControl); mpos.X *= _finalImage.PixelWidth / _imageControl.ActualWidth; mpos.Y *= _finalImage.PixelHeight / _imageControl.ActualHeight; // If isn't within image then return if(mpos.X < 2 || mpos.Y < 2 && mpos.X > _finalImage.PixelWidth - 3 || mpos.Y > _finalImage.PixelHeight - 3) { SelectedPoint = new PointImagePoint() { IsNullPoint = true }; return; } // Check if mouse hovers over point -> list of such points List<PointImagePoint> hoverPoints = new List<PointImagePoint>(); foreach(var point in _points) { if(PointHitTest(mpos, point.Position)) { hoverPoints.Add(point); } } if(hoverPoints.Count > 0) { // If it hovers over ones then find closest one PointImagePoint hoverPoint = new PointImagePoint(); double minDist = 999999; foreach(var point in hoverPoints) { double dist = (point.Position.X - mpos.X) + (point.Position.Y - mpos.Y); if(dist < minDist) { hoverPoint = point; minDist = dist; } } if(hoverPoint != _selectedPoint)// if clicked not on selected one, deselect it and select new one { SelectedPoint = new PointImagePoint() { IsNullPoint = true }; SelectedPoint = hoverPoint; _imageMouseXPos.Text = hoverPoint.Position.X.ToString(); _imageMouseYPos.Text = hoverPoint.Position.Y.ToString(); } } else { // If cursor do not hover over any, set tempPoint as mpos SelectedPoint = new PointImagePoint() { IsNullPoint = true }; MoveTempPoint(mpos); _imageMouseXPos.Text = mpos.X.ToString(); _imageMouseYPos.Text = mpos.Y.ToString(); } base.OnMouseLeftButtonDown(e); }
// Do not rise event public void SelectPointQuiet(PointImagePoint point) { if(_selectedPoint == point) return; PointImagePoint oldpoint = _selectedPoint; _selectedPoint = point; if(_selectedPoint.IsNullPoint) // Deselect old point { oldpoint.IsSelected = false; if(!oldpoint.IsNullPoint) DrawCross(oldpoint.Position, _finalImage, CrossColor); } else // Remove temp point if there's one and select point { RemoveTempPoint(); DrawCross(_selectedPoint.Position, _finalImage, SelectedColor); _selectedPoint.IsSelected = true; } }
public void RemovePoint(PointImagePoint point) { _points.Remove(point); point.PositionChanged -= PointPositionChanged; RemoveCross(point.Position, _finalImage); }
public void AddPoint(PointImagePoint point) { point.ParentImage = this; _points.Add(point); point.PositionChanged += PointPositionChanged; DrawCross(point.Position, _finalImage, CrossColor); }
public PointImagePoint AcceptTempPoint(object value) { if(_tempPoint.IsNullPoint) return null; PointImagePoint newPoint = new PointImagePoint() { Position = _tempPoint.Position, Value = value, ParentImage = this }; _points.Add(newPoint); newPoint.PositionChanged += PointPositionChanged; TemporaryPoint.IsNullPoint = true; return newPoint; }
private void UpdateMatchedPoints() { _camImageFirst.ResetPoints(); _camImageSec.ResetPoints(); foreach(var match in _matches) { PointImagePoint pipLeft = new PointImagePoint() { Position = new Point(match.LeftPoint.X, match.LeftPoint.Y), Value = match }; PointImagePoint pipRight = new PointImagePoint() { Position = new Point(match.RightPoint.X, match.RightPoint.Y), Value = match }; _camImageFirst.AddPoint(pipLeft); _camImageSec.AddPoint(pipRight); } }