Exemplo n.º 1
0
        public static void UpdateRelativeCoordinate(this PartSearchingDefinition def,
                                                    IRelativeCoordinate relativeCoordinate)
        {
            var p1 = def.RoiRelativeLine.GetPoint1();
            var p2 = def.RoiRelativeLine.GetPoint2();

            var actualP1 = relativeCoordinate.GetOriginalPoint(p1);
            var actualP2 = relativeCoordinate.GetOriginalPoint(p2);

            var roiLine = new Line {
                X1 = actualP1.X, Y1 = actualP1.Y, X2 = actualP2.X, Y2 = actualP2.Y
            };

            def.RoiLine = roiLine;

            //
            var p1a = def.AreaRelativeLine.GetPoint1();
            var p2b = def.AreaRelativeLine.GetPoint2();

            var actualP1a = relativeCoordinate.GetOriginalPoint(p1a);
            var actualP2b = relativeCoordinate.GetOriginalPoint(p2b);

            var areaLine = new Line {
                X1 = actualP1a.X, Y1 = actualP1a.Y, X2 = actualP2b.X, Y2 = actualP2b.Y
            };

            def.AreaLine = areaLine;
        }
Exemplo n.º 2
0
        public static void UpdateRelativeCoordinate(this EdgeSearchingDefinition def,
                                                    IRelativeCoordinate relativeCoordinate)
        {
            if (def.RelativeLine.IsEmpty)
            {
                return;
            }

            //            if (Math.Abs(def.RelativeLine.X1) < 0.000001 ||
            //                  Math.Abs(def.RelativeLine.Y1) < 0.000001 ||
            //                  Math.Abs(def.RelativeLine.X2) < 0.000001 ||
            //                  Math.Abs(def.RelativeLine.Y2) < 0.000001)
            //            { return; }

            var p1 = def.RelativeLine.GetPoint1();
            var p2 = def.RelativeLine.GetPoint2();

            var actualP1 = relativeCoordinate.GetOriginalPoint(p1);
            var actualP2 = relativeCoordinate.GetOriginalPoint(p2);

            def.StartX = actualP1.X;
            def.StartY = actualP1.Y;

            def.EndX = actualP2.X;
            def.EndY = actualP2.Y;
        }
Exemplo n.º 3
0
 public static void UpdateRelativeCoordinate(this IEnumerable <SurfaceDefinition> definitions,
                                             IRelativeCoordinate relativeCoordinate)
 {
     foreach (var esd in definitions)
     {
         esd.UpdateRelativeCoordinate(relativeCoordinate);
     }
 }
Exemplo n.º 4
0
        public static void UpdateRelativeCoordinate(this CircleSearchingResult circleResult,
                                                    IRelativeCoordinate relativeCoordinate)
        {
            var actualCenterPoint = circleResult.Circle.GetCenterPoint();
            var relativePoint     = relativeCoordinate.GetRelativePoint(actualCenterPoint);

            circleResult.RelativeCircle = new Circle(relativePoint, circleResult.Circle.Radius);
        }
Exemplo n.º 5
0
 public static void UpdateRelativeCoordinate(this IEnumerable <CircleSearchingDefinition> circleResults,
                                             IRelativeCoordinate relativeCoordinate)
 {
     foreach (var circleResult in circleResults)
     {
         circleResult.UpdateRelativeCoordinate(relativeCoordinate);
     }
 }
Exemplo n.º 6
0
        public static void UpdateRelativeCoordinate(this SurfacePartDefinition def,
                                                    IRelativeCoordinate relativeCoordinate)
        {
            if (def.RoiRelativeRect == null)
            {
                return;
            }
            var rect = def.RoiRelativeRect.UpdateRelativeCoordinate(relativeCoordinate);

            def.RoiActualRect = rect;
        }
Exemplo n.º 7
0
        public static void UpdateRelativeCoordinate(this RegionTargetDefinition definition,
                                                    IRelativeCoordinate relativeCoordinate)
        {
            if (definition.RoiRelativeLine.IsEmpty)
            {
                return;
            }

            var actualLine = definition.RoiRelativeLine.UpdateRelativeCoordinate(relativeCoordinate);

            definition.RoiActualLine = actualLine;
        }
Exemplo n.º 8
0
        public static void UpdateRelativeCoordinate(this SurfaceDefinition def,
                                                    IRelativeCoordinate relativeCoordinate)
        {
            foreach (var includeRegion in def.IncludeParts)
            {
                includeRegion.UpdateRelativeCoordinate(relativeCoordinate);
            }

            foreach (var excludeRegion in def.ExcludeParts)
            {
                excludeRegion.UpdateRelativeCoordinate(relativeCoordinate);
            }
        }
Exemplo n.º 9
0
        public static Line UpdateRelativeCoordinate(this Line relativeLine,
                                                    IRelativeCoordinate relativeCoordinate)
        {
            var p1 = relativeLine.GetPoint1();
            var p2 = relativeLine.GetPoint2();

            var actualP1 = relativeCoordinate.GetOriginalPoint(p1);
            var actualP2 = relativeCoordinate.GetOriginalPoint(p2);

            var actualLine = new Line {
                X1 = actualP1.X, Y1 = actualP1.Y, X2 = actualP2.X, Y2 = actualP2.Y
            };

            return(actualLine);
        }
Exemplo n.º 10
0
 public static void UpdateRelativeCoordinate(this CircleSearchingDefinition csd,
                                             IRelativeCoordinate coordinate)
 {
     if (csd.BaselineX > 0 || csd.BaselineY > 0)
     {
         var relativeVector = new Vector(csd.BaselineX * 1000.0 / 16.0, csd.BaselineY * 1000.0 / 16.0);
         var originalVector = coordinate.GetOriginalVector(relativeVector);
         csd.CenterX = originalVector.X;
         csd.CenterY = originalVector.Y;
     }
     else
     {
         csd.CenterX = csd.CenterX;
         csd.CenterY = csd.CenterY;
     }
 }
Exemplo n.º 11
0
        public static IRectangle2 UpdateRelativeCoordinate(this IRectangle2 rectangle2,
                                                           IRelativeCoordinate relativeCoordinate)
        {
            var relativeCenterVector = new Vector(rectangle2.X, rectangle2.Y);
            var actualCenterVector   = relativeCoordinate.GetOriginalVector(relativeCenterVector);

            var relativeRect = new Rectangle2
            {
                X          = actualCenterVector.X,
                Y          = actualCenterVector.Y,
                Angle      = relativeCoordinate.GetCoordinateAngle() + rectangle2.Angle,
                HalfWidth  = rectangle2.HalfWidth,
                HalfHeight = rectangle2.HalfHeight
            };

            return(relativeRect);
        }
Exemplo n.º 12
0
        public static MeasurementInfo GetMeasurementInfo(this Line line, IRelativeCoordinate coordinate)
        {
            Vector relativeP1 = coordinate.GetRelativeVector(line.GetPoint1().ToVector());
            Vector relativeP2 = coordinate.GetRelativeVector(line.GetPoint2().ToVector());

            var measurement = new MeasurementInfo
            {
                StartPointX            = line.GetPoint1().X,
                StartPointY            = line.GetPoint1().Y,
                EndPointX              = line.GetPoint2().X,
                EndPointY              = line.GetPoint2().Y,
                Value                  = line.GetLength(),
                ValueActualValue       = line.GetLength().ToMillimeterFromPixel(16),
                StartPointXActualValue = relativeP1.X.ToMillimeterFromPixel(16),
                StartPointYActualValue = relativeP1.Y.ToMillimeterFromPixel(16),
                EndPointXActualValue   = relativeP2.X.ToMillimeterFromPixel(16),
                EndPointYActualValue   = relativeP2.Y.ToMillimeterFromPixel(16),
            };

            return(measurement);
        }
Exemplo n.º 13
0
        public InspectionController CreateCoordinate()
        {
            var sw = new NotifyStopwatch("InspectionController.CreateCoordinate.Inspect()");

            try
            {
                switch (_inspectionSchema.CoordinateType)
                {
                case CoordinateType.Baseline:
                    var origin    = _inspectionResult.CoordinateCircles[0];
                    var refCircle = _inspectionResult.CoordinateCircles[1];
                    _coordinate = new RelativeCoordinate(
                        origin.Circle.GetCenterPoint(),
                        refCircle.Circle.GetCenterPoint(),
                        refCircle.Definition.BaselineAngle);
                    break;

                case CoordinateType.VectorsCenter:
                    var inspector =
                        InspectorFactory.CreateCircleInspector(_inspectionSchema.CircleSearching_InspectorName);
                    var searchCoordinateCircles = inspector.SearchCircles(_image, _inspectionSchema.CoordinateCircles);
                    _inspectionResult.CoordinateCircles = new CircleSearchingResultCollection(searchCoordinateCircles);
                    _coordinate = RelativeCoordinateFactory.CreateCoordinate(_inspectionResult.CoordinateCircles);
                    break;

                case CoordinateType.NearOrigin:
                    throw new NotSupportedException("CoordinateType does not implement!");
                    break;

                case CoordinateType.Boarder:
                    var inspector2            = InspectorFactory.CreateEdgeInspector(_inspectionSchema.EdgeSearching_InspectorName);
                    var searchCoordinateEdges = inspector2.SearchEdges(_image, _inspectionSchema.CoordinateEdges);
                    _inspectionResult.CoordinateEdges = new EdgeSearchingResultCollection(searchCoordinateEdges);
                    _coordinate =
                        RelativeCoordinateFactory.CreateCoordinateUsingBorder(_inspectionResult.CoordinateEdges);
                    break;

                default:
                    throw new NotSupportedException("CoordinateType does not support!");
                }
            }
            catch (CreateCoordinateFailedException e)
            {
//                _inspectionResult
                throw;
            }


            if (_inspectionSchema.CoordinateOriginOffsetEnable)
            {
                _coordinate.OriginOffset = new Vector(_inspectionSchema.CoordinateOriginOffsetX,
                                                      _inspectionSchema.CoordinateOriginOffsetY);
            }

            _inspectionResult.CoordinateCircles.UpdateRelativeCoordinate(_coordinate);

            //
            _inspectionSchema.CoordinateCircles.UpdateRelativeCoordinate(_coordinate);
            _inspectionSchema.CoordinateEdges.UpdateRelativeCoordinate(_coordinate);
            _inspectionSchema.CircleSearchingDefinitions.UpdateRelativeCoordinate(_coordinate);
            _inspectionSchema.EdgeSearchingDefinitions.UpdateRelativeCoordinate(_coordinate);
            _inspectionSchema.PartSearchingDefinitions.UpdateRelativeCoordinate(_coordinate);
            _inspectionSchema.SurfaceDefinitions.UpdateRelativeCoordinate(_coordinate);
            _inspectionSchema.RegionTargetDefinitions.UpdateRelativeCoordinate(_coordinate);

            sw.Dispose();

            return(this);
        }
Exemplo n.º 14
0
        public static void ChangeOriginOffsetUsingActual(this IRelativeCoordinate coordinate, Vector actualVector)
        {
            var relativeVector = coordinate.GetRelativeVector(actualVector);

            coordinate.OriginOffset = relativeVector;
        }
Exemplo n.º 15
0
 public static void ChangeOriginOffsetUsingRelative(this IRelativeCoordinate coordinate, Point relativePoint)
 {
     coordinate.ChangeOriginOffsetUsingRelative(relativePoint.ToVector());
 }
Exemplo n.º 16
0
 public static void ChangeOriginOffsetUsingActual(this IRelativeCoordinate coordinate, Point actualPoint)
 {
     coordinate.ChangeOriginOffsetUsingActual(actualPoint.ToVector());
 }
Exemplo n.º 17
0
 public static void ChangeOriginOffsetUsingRelative(this IRelativeCoordinate coordinate, Vector relativeVector)
 {
     coordinate.OriginOffset = relativeVector;
 }
Exemplo n.º 18
0
        public static InspectInfo GetInspectionInfo(this InspectionResult inspectionResult, IRelativeCoordinate coordinate)
        {
            var inspectionInfo = new InspectInfo();

            Debug.WriteLine("GetInspectionInfo().Start");

            for (int i = 0; i < inspectionResult.DistanceBetweenPointsResults.Count; i++)
            {
                var result = inspectionResult.DistanceBetweenPointsResults[i];
                if (result.HasError)
                {
                    var measurement2 = new MeasurementInfo {
                        HasError = true
                    };
                    inspectionInfo.MeasurementInfos.Add(measurement2);
                    continue;
                }
                ;

                var line        = new Line(result.Point1, result.Point2);
                var measurement = line.GetMeasurementInfo(coordinate);
                measurement.Index       = i;
                measurement.GroupName   = result.Definition.GroupName;
                measurement.TypeCode    = 100 + i;
                measurement.Name        = result.Definition.Name;
                measurement.DisplayName = result.Definition.DisplayName;
                measurement.ExpectValue = result.Definition.ExpectValue;
                inspectionInfo.MeasurementInfos.Add(measurement);
            }

            Debug.WriteLine("GetInspectionInfo().DistanceBetweenPointsResults");


            for (int i = 0; i < inspectionResult.RegionTargets.Count; i++)
            {
                var result = inspectionResult.RegionTargets[i];

                if (!result.Definition.Rect2Len2Line_DisplayEnabled &&
                    !result.Definition.Rect2Len1Line_DisplayEnabled)
                {
                    continue;
                }

                if (result.HasError)
                {
                    var measurement = new MeasurementInfo {
                        HasError = true
                    };
                    inspectionInfo.MeasurementInfos.Add(measurement);
                    continue;
                }
                ;

                var rect2   = result.TargetRegion.GetSmallestHRectangle2();
                var roiRect = rect2.GetRoiRectangle();

                if (result.Definition.Rect2Len2Line_DisplayEnabled)
                {
                    var line        = roiRect.GetWidthLine();
                    var measurement = line.GetMeasurementInfo(coordinate);
                    measurement.DisplayName = result.Definition.Rect2Len2Line_DisplayName;
                    measurement.GroupName   = result.Definition.Rect2Len2Line_GroupName;
                    measurement.ExpectValue = result.Definition.Rect2Len2Line_ExpectValue;
                    inspectionInfo.MeasurementInfos.Add(measurement);
                }

                if (result.Definition.Rect2Len1Line_DisplayEnabled)
                {
                    var line        = roiRect.GetLine();
                    var measurement = line.GetMeasurementInfo(coordinate);
                    measurement.DisplayName = result.Definition.Rect2Len1Line_DisplayName;
                    measurement.GroupName   = result.Definition.Rect2Len1Line_GroupName;
                    measurement.ExpectValue = result.Definition.Rect2Len1Line_ExpectValue;
                    inspectionInfo.MeasurementInfos.Add(measurement);
                }
            }

            Debug.WriteLine("GetInspectionInfo().RegionTargets");


            for (int i = 0; i < inspectionResult.Circles.Count; i++)
            {
                var result = inspectionResult.Circles[i];

                if (!result.Definition.Diameter_DisplayEnabled)
                {
                    continue;
                }

                if (result.HasError)
                {
                    var measurement2 = new MeasurementInfo {
                        HasError = true
                    };
                    inspectionInfo.MeasurementInfos.Add(measurement2);
                    continue;
                }
                ;

                var line        = result.Circle.GetLine(-45);
                var measurement = line.GetMeasurementInfo(coordinate);
                measurement.DisplayName = result.Definition.Diameter_DisplayName;
                measurement.GroupName   = result.Definition.Diameter_GroupName;
                measurement.ExpectValue = result.Definition.Diameter_ExpectValue;
                inspectionInfo.MeasurementInfos.Add(measurement);
            }

            Debug.WriteLine("GetInspectionInfo().Circles");

            for (int i = 0; i < inspectionResult.Parts.Count; i++)
            {
                var part = inspectionResult.Parts[i];

                if (part.PartRegion == null)
                {
                    Debug.WriteLine("GetInspectionInfo().Parts: PartRegion == null");
                    continue;
                }

                if (part.PartRegion.CountObj() == 0)
                {
                    Debug.WriteLine("GetInspectionInfo().Parts: PartRegion.CountObj == 0");
                    continue;
                }

                if (part.PartRegion.GetArea() < 1)
                {
                    Debug.WriteLine("GetInspectionInfo().Parts: PartRegion.GetArea() < 1");
                    continue;
                }

                var partRegion = part.PartRegion;

                var centerX = partRegion.GetColumn();
                var centerY = partRegion.GetRow();
                var x       = partRegion.GetColumn1();
                var y       = partRegion.GetRow1();
                var width   = partRegion.GetWidth();
                var height  = partRegion.GetHeight();
                var area    = partRegion.GetArea();

                var relativeCenter = coordinate.GetRelativeVector(new Vector(centerX, centerY));

                var di = new DefectInfo
                {
                    Index             = i,
                    X                 = x,
                    Y                 = y,
                    Width             = width,
                    Height            = height,
                    TypeCode          = (int)DefectType.PartExist,
                    Size              = area,
                    XActualValue      = relativeCenter.X.ToMillimeterFromPixel(16),
                    YActualValue      = relativeCenter.Y.ToMillimeterFromPixel(16),
                    WidthActualValue  = ((double)width).ToMillimeterFromPixel(16),
                    HeightActualValue = ((double)height).ToMillimeterFromPixel(16),
                    SizeActualValue   = area * 256.0 / 1000000.0
                };

                inspectionInfo.DefectInfos.Add(di);
            }

            Debug.WriteLine("GetInspectionInfo().Parts");

            var drs = inspectionResult.RegionDefectResults.SelectMany(x => x.DefectResults).ToList();

            for (int i = 0; i < drs.Count; i++)
            {
                var dr = drs[i];

                var relPoint = coordinate.GetRelativeVector(new Vector(dr.X - dr.Width / 2.0, dr.Y - dr.Height / 2.0));

                var di = new DefectInfo
                {
                    Index             = i,
                    X                 = dr.X - dr.Width / 2.0,
                    Y                 = dr.Y - dr.Height / 2.0,
                    Width             = dr.Width,
                    Height            = dr.Height,
                    TypeCode          = dr.TypeCode,
                    Size              = dr.Size * 256.0 / 1000000.0,
                    XActualValue      = relPoint.X.ToMillimeterFromPixel(16),
                    YActualValue      = relPoint.Y.ToMillimeterFromPixel(16),
                    WidthActualValue  = dr.Width.ToMillimeterFromPixel(16),
                    HeightActualValue = dr.Height.ToMillimeterFromPixel(16),
                    SizeActualValue   = dr.Size * 256.0 / 1000000.0
                };

                inspectionInfo.DefectInfos.Add(di);
            }

            Debug.WriteLine("GetInspectionInfo().RegionDefectResults");

            return(inspectionInfo);
        }
Exemplo n.º 19
0
 public static Point GetOriginalPoint(this IRelativeCoordinate coordinate, Point relativePoint)
 {
     return(coordinate.GetOriginalVector(relativePoint.ToVector()).ToPoint());
 }