Exemple #1
0
        private void DrawNeedleCircleFindCaliperFunction(CogNeedleFindAlgo _CogNeedleFindAlgo)
        {
            if (eTeachStep.ALGO_SET != CurrentTeachStep)
            {
                MessageBox.Show("Not select \"Algorithm Set\" button"); return;
            }
            AlgorithmAreaDisplayRefresh();

            CogFindCircle _CogFindCircle = new CogFindCircle();

            _CogFindCircle.NumCalipers                    = _CogNeedleFindAlgo.CaliperNumber;
            _CogFindCircle.CaliperSearchLength            = _CogNeedleFindAlgo.CaliperSearchLength;
            _CogFindCircle.CaliperProjectionLength        = _CogNeedleFindAlgo.CaliperProjectionLength;
            _CogFindCircle.NumToIgnore                    = _CogNeedleFindAlgo.CaliperIgnoreNumber;
            _CogFindCircle.CaliperSearchDirection         = (CogFindCircleSearchDirectionConstants)_CogNeedleFindAlgo.CaliperSearchDirection;
            _CogFindCircle.CaliperRunParams.Edge0Polarity = (CogCaliperPolarityConstants)_CogNeedleFindAlgo.CaliperPolarity;

            _CogFindCircle.ExpectedCircularArc.CenterX    = _CogNeedleFindAlgo.ArcCenterX;
            _CogFindCircle.ExpectedCircularArc.CenterY    = _CogNeedleFindAlgo.ArcCenterY;
            _CogFindCircle.ExpectedCircularArc.Radius     = _CogNeedleFindAlgo.ArcRadius;
            _CogFindCircle.ExpectedCircularArc.AngleStart = _CogNeedleFindAlgo.ArcAngleStart;
            _CogFindCircle.ExpectedCircularArc.AngleSpan  = _CogNeedleFindAlgo.ArcAngleSpan;

            kpTeachDisplay.DrawFindCircleCaliper(_CogFindCircle);
        }
Exemple #2
0
        private void ApplyNeedleCircleFindValueFunction(CogNeedleFindAlgo _CogNeedleFindAlgo, ref CogNeedleFindResult _CogNeedleFindResult)
        {
            if (eTeachStep.ALGO_SET != CurrentTeachStep)
            {
                MessageBox.Show("Not select \"Algorithm Set\" button"); return;
            }
            AlgorithmAreaDisplayRefresh();

            bool _Result = InspNeedleCircleFindProcess.Run(InspectionImage, _CogNeedleFindAlgo, ref _CogNeedleFindResult);

            _CogNeedleFindResult.CenterXReal = (_CogNeedleFindResult.CenterX - (InspectionImage.Width / 2)) * ResolutionX;
            _CogNeedleFindResult.CenterYReal = (_CogNeedleFindResult.CenterY - (InspectionImage.Height / 2)) * ResolutionY;
            _CogNeedleFindResult.OriginXReal = (_CogNeedleFindResult.OriginX - (InspectionImage.Width / 2)) * ResolutionX;
            _CogNeedleFindResult.OriginYReal = (_CogNeedleFindResult.OriginY - (InspectionImage.Height / 2)) * ResolutionY;
            _CogNeedleFindResult.RadiusReal  = _CogNeedleFindResult.Radius * ResolutionX;

            CogCircle _CogCircle = new CogCircle();

            if (_CogNeedleFindResult.Radius <= 0)
            {
                return;
            }
            _CogCircle.SetCenterRadius(_CogNeedleFindResult.CenterX, _CogNeedleFindResult.CenterY, _CogNeedleFindResult.Radius);
            CogPointMarker _CogCenterPoint = new CogPointMarker();

            _CogCenterPoint.SetCenterRotationSize(_CogNeedleFindResult.CenterX, _CogNeedleFindResult.CenterY, 0, 2);
            kpTeachDisplay.DrawStaticShape(_CogCircle, "Circle", CogColorConstants.Green, 3);
            kpTeachDisplay.DrawStaticShape(_CogCenterPoint, "CirclePoint", CogColorConstants.Green);

            string _CenterName = string.Format("X = {0:F2}mm, Y = {1:F2}mm, R = {2:F2}mm", _CogNeedleFindResult.CenterXReal, _CogNeedleFindResult.CenterYReal, _CogNeedleFindResult.RadiusReal);

            kpTeachDisplay.DrawText(_CenterName, _CogNeedleFindResult.CenterX, _CogNeedleFindResult.CenterY + 150, CogColorConstants.Green, 10, CogGraphicLabelAlignmentConstants.BaselineCenter);
        }
        private void DrawCircleFindCaliper()
        {
            if (!AlgoInitFlag)
            {
                return;
            }

            CogNeedleFindAlgo _CogNeedleFindAlgoRcp = new CogNeedleFindAlgo();

            _CogNeedleFindAlgoRcp.CaliperNumber           = Convert.ToInt32(numUpDownCaliperNumber.Value);
            _CogNeedleFindAlgoRcp.CaliperSearchLength     = Convert.ToDouble(numUpDownSearchLength.Value);
            _CogNeedleFindAlgoRcp.CaliperProjectionLength = Convert.ToDouble(numUpDownProjectionLength.Value);
            _CogNeedleFindAlgoRcp.CaliperSearchDirection  = Convert.ToInt32(graLabelSearchDirection.Text);
            _CogNeedleFindAlgoRcp.CaliperIgnoreNumber     = Convert.ToInt32(numUpDownIgnoreNumber.Value);
            _CogNeedleFindAlgoRcp.CaliperPolarity         = Convert.ToInt32(graLabelPolarity.Text);
            _CogNeedleFindAlgoRcp.ArcCenterX    = Convert.ToDouble(numUpDownArcCenterX.Value);
            _CogNeedleFindAlgoRcp.ArcCenterY    = Convert.ToDouble(numUpDownArcCenterY.Value);
            _CogNeedleFindAlgoRcp.ArcRadius     = Convert.ToDouble(numUpDownArcRadius.Value);
            _CogNeedleFindAlgoRcp.ArcAngleStart = Convert.ToDouble(numUpDownAngleStart.Value);
            _CogNeedleFindAlgoRcp.ArcAngleSpan  = Convert.ToDouble(numUpDownAngleSpan.Value);

            var _DrawNeedleCircleFindCaliperEvent = DrawNeedleCircleFindCaliperEvent;

            if (_DrawNeedleCircleFindCaliperEvent != null)
            {
                _DrawNeedleCircleFindCaliperEvent(_CogNeedleFindAlgoRcp);
            }
        }
        private void ApplySettingValue()
        {
            CogNeedleFindResult _CogNeedleFindResult  = new CogNeedleFindResult();
            CogNeedleFindAlgo   _CogNeedleFindAlgoRcp = new CogNeedleFindAlgo();

            _CogNeedleFindAlgoRcp.CaliperNumber           = Convert.ToInt32(numUpDownCaliperNumber.Value);
            _CogNeedleFindAlgoRcp.CaliperSearchLength     = Convert.ToDouble(numUpDownSearchLength.Value);
            _CogNeedleFindAlgoRcp.CaliperProjectionLength = Convert.ToDouble(numUpDownProjectionLength.Value);
            _CogNeedleFindAlgoRcp.CaliperSearchDirection  = Convert.ToInt32(graLabelSearchDirection.Text);
            _CogNeedleFindAlgoRcp.CaliperIgnoreNumber     = Convert.ToInt32(numUpDownIgnoreNumber.Value);
            _CogNeedleFindAlgoRcp.CaliperPolarity         = Convert.ToInt32(graLabelPolarity.Text);
            _CogNeedleFindAlgoRcp.ArcCenterX    = Convert.ToDouble(numUpDownArcCenterX.Value);
            _CogNeedleFindAlgoRcp.ArcCenterY    = Convert.ToDouble(numUpDownArcCenterY.Value);
            _CogNeedleFindAlgoRcp.ArcRadius     = Convert.ToDouble(numUpDownArcRadius.Value);
            _CogNeedleFindAlgoRcp.ArcAngleStart = Convert.ToDouble(numUpDownAngleStart.Value);
            _CogNeedleFindAlgoRcp.ArcAngleSpan  = Convert.ToDouble(numUpDownAngleSpan.Value);

            var _ApplyNeedleCircleFindValueEvent = ApplyNeedleCircleFindValueEvent;

            if (_ApplyNeedleCircleFindValueEvent != null)
            {
                _ApplyNeedleCircleFindValueEvent(_CogNeedleFindAlgoRcp, ref _CogNeedleFindResult);
            }

            if (_CogNeedleFindResult.IsGood)
            {
                textBoxCenterX.Text = (_CogNeedleFindResult.CenterXReal).ToString("F3");
                textBoxCenterY.Text = (_CogNeedleFindResult.CenterYReal).ToString("F3");
                textBoxRadius.Text  = (_CogNeedleFindResult.RadiusReal).ToString("F3");

                OriginX = _CogNeedleFindResult.CenterX;
                OriginY = _CogNeedleFindResult.CenterY;
            }

            else
            {
                textBoxCenterX.Text = "-";
                textBoxCenterY.Text = "-";
                textBoxRadius.Text  = "-";

                _CogNeedleFindAlgoRcp.OriginX = 0;
                _CogNeedleFindAlgoRcp.OriginY = 0;
            }
        }
        public void SetAlgoRecipe(Object _Algorithm, double _BenchMarkOffsetX, double _BenchMarkOffsetY, double _ResolutionX, double _ResolutionY)
        {
            if (_Algorithm != null)
            {
                AlgoInitFlag = false;

                CogNeedleFindAlgoRcp = _Algorithm as CogNeedleFindAlgo;

                ResolutionX                     = _ResolutionX;
                ResolutionY                     = _ResolutionY;
                BenchMarkOffsetX                = _BenchMarkOffsetX;
                BenchMarkOffsetY                = _BenchMarkOffsetY;
                numUpDownCaliperNumber.Value    = Convert.ToDecimal(CogNeedleFindAlgoRcp.CaliperNumber);
                numUpDownSearchLength.Value     = Convert.ToDecimal(CogNeedleFindAlgoRcp.CaliperSearchLength);
                numUpDownProjectionLength.Value = Convert.ToDecimal(CogNeedleFindAlgoRcp.CaliperProjectionLength);
                numUpDownIgnoreNumber.Value     = Convert.ToDecimal(CogNeedleFindAlgoRcp.CaliperIgnoreNumber);
                numUpDownArcCenterX.Value       = Convert.ToDecimal(CogNeedleFindAlgoRcp.ArcCenterX - BenchMarkOffsetX);
                numUpDownArcCenterY.Value       = Convert.ToDecimal(CogNeedleFindAlgoRcp.ArcCenterY - BenchMarkOffsetY);
                numUpDownArcRadius.Value        = Convert.ToDecimal(CogNeedleFindAlgoRcp.ArcRadius);
                numUpDownAngleStart.Value       = Convert.ToDecimal(CogNeedleFindAlgoRcp.ArcAngleStart);
                numUpDownAngleSpan.Value        = Convert.ToDecimal(CogNeedleFindAlgoRcp.ArcAngleSpan);
                textBoxCenterX.Text             = (CogNeedleFindAlgoRcp.OriginX * ResolutionX).ToString("F3");
                textBoxCenterY.Text             = (CogNeedleFindAlgoRcp.OriginY * ResolutionY).ToString("F3");
                textBoxRadius.Text              = CogNeedleFindAlgoRcp.OriginRadius.ToString("F3");

                graLabelSearchDirection.Text = CogNeedleFindAlgoRcp.CaliperSearchDirection.ToString();
                graLabelPolarity.Text        = CogNeedleFindAlgoRcp.CaliperPolarity.ToString();
                SetSearchDirection(CogNeedleFindAlgoRcp.CaliperSearchDirection);
                SetPolarity(CogNeedleFindAlgoRcp.CaliperPolarity);

                AlgoInitFlag = true;
            }

            else
            {
                //LOG
            }
        }
        //public void SetOffsetValue(double _OffsetX, double _OffsetY)
        //{
        //    CircleCenterOffsetX = _OffsetX;
        //    CircleCenterOffsetY = _OffsetY;
        //}

        public bool Run(CogImage8Grey _SrcImage, CogNeedleFindAlgo _CogNeedleFindAlgo, ref CogNeedleFindResult _CogNeedleFindResult, double _OffsetX = 0, double _OffsetY = 0, int _NgNumber = 0)
        {
            bool _Result = true;

            SetCaliperDirection(_CogNeedleFindAlgo.CaliperSearchDirection, _CogNeedleFindAlgo.CaliperPolarity);
            SetCaliper(_CogNeedleFindAlgo.CaliperNumber, _CogNeedleFindAlgo.CaliperSearchLength, _CogNeedleFindAlgo.CaliperProjectionLength, _CogNeedleFindAlgo.CaliperIgnoreNumber);
            SetCircularArc(_CogNeedleFindAlgo.ArcCenterX - _OffsetX, _CogNeedleFindAlgo.ArcCenterY - _OffsetY, _CogNeedleFindAlgo.ArcRadius, _CogNeedleFindAlgo.ArcAngleStart, _CogNeedleFindAlgo.ArcAngleSpan);

            if (true == Inspection(_SrcImage))
            {
                GetResult();
            }

            if (FindCircleResults != null && FindCircleResults.Count > 0)
            {
                _CogNeedleFindResult.IsGood = true;
            }
            else
            {
                _CogNeedleFindResult.IsGood = false;
            }

            if (!_CogNeedleFindResult.IsGood)
            {
                CLogManager.AddInspectionLog(CLogManager.LOG_TYPE.INFO, " - Needle Find Fail!!", CLogManager.LOG_LEVEL.MID);
                _CogNeedleFindResult.CenterX = _CogNeedleFindAlgo.ArcCenterX;
                _CogNeedleFindResult.CenterY = _CogNeedleFindAlgo.ArcCenterY;
                _CogNeedleFindResult.Radius  = _CogNeedleFindAlgo.ArcRadius;
                _CogNeedleFindResult.OriginX = 0;
                _CogNeedleFindResult.OriginY = 0;
            }

            else
            {
                if (FindCircleResults.GetCircle() != null)
                {
                    CLogManager.AddInspectionLog(CLogManager.LOG_TYPE.INFO, " - Needle Find Complete", CLogManager.LOG_LEVEL.MID);

                    _CogNeedleFindResult.PointFoundCount = FindCircleResults.NumPointsFound;
                    _CogNeedleFindResult.CenterX         = FindCircleResults.GetCircle().CenterX;
                    _CogNeedleFindResult.CenterY         = FindCircleResults.GetCircle().CenterY;
                    _CogNeedleFindResult.Radius          = FindCircleResults.GetCircle().Radius;
                    _CogNeedleFindResult.OriginX         = FindCircleResults.GetCircle().CenterX;
                    _CogNeedleFindResult.OriginY         = FindCircleResults.GetCircle().CenterY;

                    _CogNeedleFindResult.PointPosXInfo   = new double[FindCircleResults.Count];
                    _CogNeedleFindResult.PointPosYInfo   = new double[FindCircleResults.Count];
                    _CogNeedleFindResult.PointStatusInfo = new bool[FindCircleResults.Count];
                    for (int iLoopCount = 0; iLoopCount < FindCircleResults.Count; ++iLoopCount)
                    {
                        if (true == FindCircleResults[iLoopCount].Found)
                        {
                            _CogNeedleFindResult.PointPosXInfo[iLoopCount] = FindCircleResults[iLoopCount].X;
                            _CogNeedleFindResult.PointPosYInfo[iLoopCount] = FindCircleResults[iLoopCount].Y;
                        }
                        _CogNeedleFindResult.PointStatusInfo[iLoopCount] = FindCircleResults[iLoopCount].Used;
                    }

                    CLogManager.AddInspectionLog(CLogManager.LOG_TYPE.INFO, String.Format(" - Center X : {0}, Y : {1}", _CogNeedleFindResult.CenterX.ToString("F2"), _CogNeedleFindResult.CenterY.ToString("F2")), CLogManager.LOG_LEVEL.MID);
                    CLogManager.AddInspectionLog(CLogManager.LOG_TYPE.INFO, String.Format(" - Radius : {0}", _CogNeedleFindResult.Radius.ToString("F2")), CLogManager.LOG_LEVEL.MID);
                }

                else
                {
                    CLogManager.AddInspectionLog(CLogManager.LOG_TYPE.INFO, " - Needle Find Fail!!", CLogManager.LOG_LEVEL.MID);

                    _CogNeedleFindResult.CenterX = 0;
                    _CogNeedleFindResult.CenterY = 0;
                    _CogNeedleFindResult.Radius  = 0;
                    _CogNeedleFindResult.OriginX = 0;
                    _CogNeedleFindResult.OriginY = 0;
                    _CogNeedleFindResult.IsGood  = false;
                }
            }

            CLogManager.AddInspectionLog(CLogManager.LOG_TYPE.INFO, " - Result : " + _CogNeedleFindResult.IsGood.ToString(), CLogManager.LOG_LEVEL.MID);

            return(_Result);
        }