Welcome Guest Search | Active Topics | Members

Measurements Options
ChrisT
Posted: Monday, March 20, 2006 11:42:05 PM
Rank: Member
Groups: Member

Joined: 3/20/2006
Posts: 2
Points: 0
Is it possible to do measurements in Mill.Net? Like retrieving the length of a line? (of course after 'callibrating' the image)
Dmitry
Posted: Tuesday, March 21, 2006 1:52:05 AM
Rank: Advanced Member
Groups: Administration , Member

Joined: 8/3/2003
Posts: 587
Points: 591
Hello,

You can implement your rubberband for BitmapViewer control and do measurements using points, marked by rubberband, zoom ratio and resolutions of bitmap.

If you have questions regarding this matter, please, let me know.

Sincerely yours,
Dmitry Sevostyanov.
ChrisT
Posted: Wednesday, March 22, 2006 11:17:10 PM
Rank: Member
Groups: Member

Joined: 3/20/2006
Posts: 2
Points: 0
hi,

i'm new to Mill.net... i'm evaluating a couple of components...
it would be nice to have some sample of this "rubberband" handling for measurements?
Alex Kon
Posted: Thursday, March 23, 2006 9:16:17 PM
Rank: Advanced Member
Groups: Administration , Member

Joined: 1/31/2005
Posts: 386
Points: 403
Hi, ChrisT,

Here is small sample of rubberband for the BitmapViewer control which implements measurement. After connecting the rubberband object to BitmapViewer instance you may specify points by mouse click and obtain the distance between them using InchDistance, MmDistance and PixelDistance properties of the rubberband. Here rubberband class code:
Code:

public class DistanceMeterRubberband: Aurigma.GraphicsMill.WinControls.UserInputController, Aurigma.GraphicsMill.WinControls.IRubberband
{
      //
      // Construction / destruction
      //
      public DistanceMeterRubberband()
      {      
            points = new System.Drawing.Point[2];                  
            points[0] = System.Drawing.Point.Empty;
            points[1] = System.Drawing.Point.Empty;

            waitingIndex = 0;

            pen = new System.Drawing.Pen(System.Drawing.Color.Red, 1.0f);
            brush = new System.Drawing.SolidBrush(System.Drawing.Color.Green);
      }


      #region "Distance calculation"
      public double PixelDistance
      {
            get
            {
                  double dx = Math.Abs(points[0].X - points[1].X) + 1;
                  double dy = Math.Abs(points[0].Y - points[1].Y) + 1;
                  
                  return Math.Sqrt(dx * dx + dy * dy);
            }
      }


      public double InchDistance
      {
            get
            {
                  return GetUnitDistance(Aurigma.GraphicsMill.Unit.Inch);
            }
      }


      public double MmDistance
      {
            get
            {
                  return GetUnitDistance(Aurigma.GraphicsMill.Unit.Mm);
            }
      }


      private double GetUnitDistance(Aurigma.GraphicsMill.Unit destinationUnit)
      {
            int pixelsDx = Math.Abs(points[0].X - points[1].X) + 1;
            int pixelsDy = Math.Abs(points[0].Y - points[1].Y) + 1;

            double unitDx = Aurigma.GraphicsMill.UnitConverter.ConvertPixelsToUnits(this.BitmapViewer.Bitmap.HorizontalResolution, pixelsDx, destinationUnit);
            double unitDy = Aurigma.GraphicsMill.UnitConverter.ConvertPixelsToUnits(this.BitmapViewer.Bitmap.VerticalResolution, pixelsDy, destinationUnit);

            return Math.Sqrt(unitDx * unitDx + unitDy * unitDy);
      }
      #endregion //"Distance calculation"


      #region "Overloaded methods from UserInputController"
      protected override void OnBitmapViewerMouseDown(System.Windows.Forms.MouseEventArgs e)
      {
            if (!this.IsBitmapLoaded)
                  return;

            System.Drawing.Point bitmapPoint = this.BitmapViewer.ControlToBitmapPoint(new System.Drawing.Point(e.X, e.Y));
            if (bitmapPoint.X < 0 || bitmapPoint.X >= this.BitmapViewer.Bitmap.Width ||
                  bitmapPoint.Y < 0 || bitmapPoint.Y >= this.BitmapViewer.Bitmap.Height)
                  return;

            points[waitingIndex] = bitmapPoint;
            waitingIndex = (waitingIndex + 1) % 2;

            this.BitmapViewer.Invalidate();
      }


      protected override void OnBitmapViewerDoubleBufferPaint(System.Windows.Forms.PaintEventArgs e)
      {
            if(!IsBitmapLoaded)
                  return;

            DrawAnchorPoint(e.Graphics, points[0]);
            DrawAnchorPoint(e.Graphics, points[1]);
      }
      #endregion


      #region "Drawing stuff"
      private void DrawAnchorPoint(System.Drawing.Graphics g, System.Drawing.Point pnt)
      {
            System.Drawing.Point controlPnt = this.BitmapViewer.BitmapToControlPoint(pnt);

            int radius = 4;
            g.FillEllipse(brush, controlPnt.X - radius, controlPnt.Y - radius, radius * 2, radius * 2);
            g.DrawEllipse(pen, controlPnt.X - radius, controlPnt.Y - radius, radius * 2, radius * 2);                  
      }
      #endregion


      #region "Private variables"
      private System.Drawing.Point[] points;
      private int waitingIndex;
      
      private System.Drawing.Pen pen;
      private System.Drawing.Brush brush;
      #endregion //"Private variables"
}

Here is the code sample which shows how to use this rubberband. Add this line of code into initialization method of your application:
Code:
bitmapViewer.Rubberband = new DistanceMeterRubberband();
and add handler for BitmapMouseUp event of the BitmapViewer instance with the following code:
Code:

private void bitmapViewer_BitmapMouseUp(object sender, System.Windows.Forms.MouseEventArgs e)
{
      if (bitmapViewer.Bitmap.IsEmpty)
            return;

      DistanceMeterRubberband dr = (DistanceMeterRubberband)bitmapViewer.Rubberband;

      pixelDistanceLabel.Text = String.Format("Pixels: {0:F}", dr.PixelDistance);
      inchDistanceLabel.Text = String.Format("Inches: {0:F}", dr.InchDistance);
      mmDistanceLabel.Text = String.Format("Mm: {0:F}", dr.MmDistance);
}


Best wishes, Alex.
Users browsing this topic
Guest


Forum Jump
You cannot post new topics in this forum.
You cannot reply to topics in this forum.
You cannot delete your posts in this forum.
You cannot edit your posts in this forum.
You cannot create polls in this forum.
You cannot vote in polls in this forum.

Main Forum RSS : RSS

YAFVision Theme Created by Jaben Cargman (Tiny Gecko)
Yet Another Forum.net version 1.9.1.6 running under Cuyahoga.
Copyright © 2003-2006 Yet Another Forum.net. All rights reserved.