private void Copy(DrawingBox drawingBox) { List <float?> scans = CopyImpl(drawingBox); var text = JsonConvert.SerializeObject(scans); Clipboard.SetText(text, TextDataFormat.Text); }
private List <float?> CopyImpl(DrawingBox drawingBox) { var bitmap = drawingBox.Bitmap; var scans = new List <float?>(); for (var x = 0; x < bitmap.Current.Width; x++) { var cs = new List <float>(); for (var y = bitmap.Current.Height - 1; y >= 0; y--) { var color = bitmap.Current.GetPixel(x, y); if (bitmap.IsTransparent(color)) { continue; // if transparent...no way } var yy = (float)(bitmap.Current.Height - y) / (float)bitmap.Current.Height; cs.Add(yy); } if (cs.Any()) { scans.Add(cs.Average()); } else { scans.Add(null); } } return(scans); }
private void PasteImpl(DrawingBox drawingBox, float?[] scans) { var bitmap = drawingBox.Bitmap; bitmap.Clear(); var dx = (float)scans.Length / (float)bitmap.Current.Width; var sx = 0.0f; bool lastWasNull = true; for (var x = 0; x < bitmap.Current.Width; x++) { var scan = scans[(int)sx]; if (scan == null) { sx += dx; lastWasNull = true; continue; } var y = (int)((1.0f - scan) * (float)bitmap.Current.Height); bitmap.Current.SetPixel(x, y, System.Drawing.Color.Red); if (lastWasNull) { bitmap.MoveTo(x, y); lastWasNull = false; } else { bitmap.DrawTo(x, y); } } drawingBox.Invalidate(); }
private void DrawingBox_MouseMove(object sender, MouseEventArgs e) { if (currentPollygon != null) { currentPollygon.MovePoint(e.Location.X - recentLocation.X, e.Location.Y - recentLocation.Y); DrawingBox.Invalidate(); } recentLocation = e.Location; }
private void GeometryTestForm_Load(object sender, EventArgs e) { drawingBox = new DrawingBox(); drawingBox.Anchor = AnchorStyles.Left; drawingBox.Size = this.ClientSize; drawingBox.Paint += DrawingBox_Paint; this.Controls.Add(drawingBox); intesectDrawController = new IntersectDrawController(drawingBox); intesectDrawController.Test(); pointInPolygonController = new PointInPolygonController(drawingBox); pointInPolygonController.Test(); pointRelationPosController = new PointRelationPosController(drawingBox); pointRelationPosController.Test(); }
private void Paste(DrawingBox drawingBox, bool withClear = false) { if (!Clipboard.ContainsText(TextDataFormat.Text)) { return; } var jsonTentative = Clipboard.GetText(TextDataFormat.Text); try { var scans = JsonConvert.DeserializeObject <float?[]>(jsonTentative); if (withClear) { Clear(drawingBox); } PasteImpl(drawingBox, scans); } catch { // nothing to do } }
private void Clear(DrawingBox drawingBox) { drawingBox.Bitmap.Clear(); }
private void Timer_Tick(object sender, EventArgs e) { LightSettings.MoveLightSource((double)timer.Interval / 1000); DrawingBox.Invalidate(); }