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();
        }
示例#4
0
 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();
 }
示例#8
0
 private void Timer_Tick(object sender, EventArgs e)
 {
     LightSettings.MoveLightSource((double)timer.Interval / 1000);
     DrawingBox.Invalidate();
 }