Exemplo n.º 1
0
        //public void DrawStaticLine(double _StartX, double _StartY, double _EndX, double _EndY, int _Tickness, string _GroupName, CogColorConstants _Color)
        //{
        //    StaticLineSegment.Color = _Color;
        //    StaticLineSegment.Interactive = false;
        //    StaticLineSegment.LineStyle = CogGraphicLineStyleConstants.Solid;
        //    StaticLineSegment.LineWidthInScreenPixels = _Tickness;
        //    StaticLineSegment.SetStartEnd(_StartX, _StartY, _EndX, _EndY);
        //    kCogDisplay.StaticGraphics.Add(StaticLineSegment, _GroupName);
        //}

        public void DrawStaticLine(CogLineSegment _Line, string _GroupName, CogColorConstants _Color, CogGraphicLineStyleConstants _LineStyle = CogGraphicLineStyleConstants.Solid)
        {
            StaticLineSegment             = _Line;
            StaticLineSegment.Color       = _Color;
            StaticLineSegment.Interactive = false;
            StaticLineSegment.LineStyle   = _LineStyle;
            kCogDisplay.StaticGraphics.Add(StaticLineSegment, _GroupName);
        }
Exemplo n.º 2
0
        public void AddLine(double dStartX, double dStartY, double dEndX, double dEndY, CogColorConstants color)
        {
            CogLineSegment cogLineSegment = new CogLineSegment();

            cogLineSegment.StartX = dStartX;
            cogLineSegment.StartY = dStartY;
            cogLineSegment.EndX   = dEndX;
            cogLineSegment.EndY   = dEndY;

            ICogGraphic icogGraphic = cogLineSegment as ICogGraphic;

            icogGraphic.Color = color;
            AddStaticGraphic(icogGraphic, "");
        }
Exemplo n.º 3
0
        //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        //생성 :
        //수정 :
        //목적 : Run
        //설명 :
        //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        public override bool HLRun(System.Drawing.Bitmap bipmapImage, out CResultData objResultData)
        {
            objResultData = new CResultData();
            bool bReturn = false;

            do
            {
                try
                {
                    m_dScore = 0;
                    m_objFindLineTool.InputImage = new CogImage8Grey(bipmapImage);
                    m_objFindLineTool.Run();

                    if (0 < m_objFindLineTool.Results.Count)
                    {
                        m_objResultLine        = m_objFindLineTool.Results.GetLine();
                        m_objResultLineSegment = m_objFindLineTool.Results.GetLineSegment();
                        m_objGraphics          = m_objFindLineTool.Results[0].CreateResultGraphics(CogFindLineResultGraphicConstants.All);

                        m_objResultLine.GetXYRotation(out m_dLinePositionX, out m_dLinePositionY, out m_dAngle);
                        m_dAngle = m_dAngle * (180 / Math.PI);
                    }
                    else
                    {
                        m_dLinePositionX = 0; m_dLinePositionY = 0; m_dAngle = 0;
                        MakeErrorMessage("HLSaveRecipe", 5305, "Line Fail");
                        break;
                    }
                }
                catch (System.Exception ex)
                {
                    Trace.Write(ex.Message + "-> " + ex.StackTrace);
                    break;
                }

                m_dScore = 1;
                bReturn  = true;
            } while(false);

            //   objResultData.objGraphics = new CogCompositeShape();
            objResultData.dLinePositionX[0] = m_dLinePositionX;    objResultData.dLinePositionY[0] = m_dLinePositionY;        objResultData.dLineAngle[0] = m_dAngle;    objResultData.dScore[0] = m_dScore;
            //  objResultData.objGraphics = m_objGraphics;               objResultData.bitmapInputImage = bipmapImage;
            objResultData.bResult = bReturn;
            m_objResultData       = ( CResultData )objResultData.Clone();
            return(bReturn);
        }
Exemplo n.º 4
0
        private void ApplyLineFindValueFunction(CogLineFindAlgo _CogLineFindAlgo, ref CogLineFindResult _CogLineFindResult)
        {
            if (eTeachStep.ALGO_SET != CurrentTeachStep)
            {
                MessageBox.Show("Not select \"Algorithm Set\" button"); return;
            }
            AlgorithmAreaDisplayRefresh();

            CogImage8Grey _DestImage = new CogImage8Grey();
            bool          _Result    = InspLineFindProcess.Run(InspectionImage, ref _DestImage, AlgoRegionRectangle, _CogLineFindAlgo, ref _CogLineFindResult);

            CogLineSegment _CogLine = new CogLineSegment();

            if (_CogLineFindResult.StartX != 0 && _CogLineFindResult.StartY != 0 && _CogLineFindResult.Length != 0)
            {
                _CogLine.SetStartLengthRotation(_CogLineFindResult.StartX, _CogLineFindResult.StartY, _CogLineFindResult.Length, _CogLineFindResult.Rotation);
                kpTeachDisplay.DrawStaticLine(_CogLine, "LineFind", CogColorConstants.Green);
            }
        }
Exemplo n.º 5
0
        //public void DrawFindLineCaliper(CogLineSegment _CogFindLine = null)
        public void DrawFindLineCaliper(CogFindLine _CogFindLine = null)
        {
            ICogRecord           _Record;
            CogGraphicCollection _Region;

            LineCaliperTool.InputImage = (CogImage8Grey)kCogDisplay.Image;
            LineCaliperTool.RunParams  = _CogFindLine;

            _Record         = LineCaliperTool.CreateCurrentRecord();
            InteractiveLine = (CogLineSegment)_Record.SubRecords["InputImage"].SubRecords["ExpectedShapeSegment"].Content;
            _Region         = (CogGraphicCollection)_Record.SubRecords["InputImage"].SubRecords["CaliperRegions"].Content;

            kCogDisplay.InteractiveGraphics.Add(InteractiveLine, "Line", false);
            foreach (ICogGraphic _ICogGra in _Region)
            {
                kCogDisplay.InteractiveGraphics.Add((ICogGraphicInteractive)_ICogGra, "", false);
            }
            GC.Collect();
        }
Exemplo n.º 6
0
        private Boolean make_results()
        {
            string ProcID = System.Reflection.MethodInfo.GetCurrentMethod().Name.ToString();

            try
            {
                if (mFindLineTool.Results != null)
                {
                    CogLine        iLine        = mFindLineTool.Results.GetLine();
                    CogLineSegment iLineSegment = mFindLineTool.Results.GetLineSegment();

                    if (iLine != null && iLineSegment != null)
                    {
                        mFindLineTool_Results.lineX    = iLine.X;
                        mFindLineTool_Results.lineY    = iLine.Y;
                        mFindLineTool_Results.rotation = iLine.Rotation;
                        mFindLineTool_Results.startX   = iLineSegment.StartX;
                        mFindLineTool_Results.startY   = iLineSegment.StartY;
                        mFindLineTool_Results.endX     = iLineSegment.EndX;
                        mFindLineTool_Results.endY     = iLineSegment.EndY;
                        return(true);
                    }
                    else
                    {
                        SaveLog.Msg_("iLine or iLineSegment is null!");
                        return(false);
                    }
                }
                else
                {
                    SaveLog.Msg_("FindLineTool Doesn't have any result!");
                    return(false);
                    //MessageBox.Show("Didn't find any line");
                }
            }
            catch (Exception ex)
            {
                SaveLog.Msg_("FindLineTool make_results Failed : " + ModularID + ":\r\n" + ProcID + ":\r\n" + ex.ToString());
                return(false);
            }
        }
Exemplo n.º 7
0
        //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        //생성 :
        //수정 :
        //목적 : 초기화
        //설명 :
        //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        public override bool HLInitialize(HLDevice.Abstract.CVisionLibraryAbstract.CInitializeParameter objInitializeParameter)
        {
            bool bReturn = false;

            do
            {
                m_objResultLine        = new CogLine();
                m_objResultLineSegment = new CogLineSegment();
                m_objGraphics          = new CogCompositeShape();

                m_objFindLineTool = new CogFindLineTool();

                m_iIndex = m_objInitializeParameter.iIndex;
                m_objInitializeParameter = ( CInitializeParameter )objInitializeParameter.Clone();
                HLLoadRecipe(m_objInitializeParameter.strRecipePath, m_objInitializeParameter.strRecipeName);

                bReturn = true;
            } while(false);

            return(bReturn);
        }
Exemplo n.º 8
0
        /// <summary>
        /// Displays a alignment reticle in middle of image
        /// </summary>
        public void DisplayReticle2(int cameraModule, CogDisplay cogDisplay)
        {
            if (cogDisplay != null)
            {
                // remove any old group

                foreach (string groupName in cogDisplay.StaticGraphics.ZOrderGroups)
                {
                    if (groupName == "Reticle")
                    {
                        cogDisplay.StaticGraphics.Remove("Reticle");
                    }
                }
                // image must be visible to see
                CogLineSegment cogLineSegment;

                cogLineSegment = new CogLineSegment();

                // vertical line
                cogLineSegment.SelectedSpaceName = "#";
                cogLineSegment.StartX            = this.displaySizeX[cameraModule] / 2;
                cogLineSegment.StartY            = 0;
                cogLineSegment.EndX  = this.displaySizeX[cameraModule] / 2;
                cogLineSegment.EndY  = this.displaySizeY[cameraModule];
                cogLineSegment.Color = CogColorConstants.Blue;
                cogLineSegment.LineWidthInScreenPixels = 1;

                cogDisplay.StaticGraphics.Add(cogLineSegment, "Reticle");

                // horizontal line
                cogLineSegment.StartX = 0;
                cogLineSegment.StartY = this.displaySizeY[cameraModule] / 2;
                cogLineSegment.EndX   = this.displaySizeX[cameraModule];
                cogLineSegment.EndY   = this.displaySizeY[cameraModule] / 2;

                cogDisplay.StaticGraphics.Add(cogLineSegment, "Reticle");
            }
        }
Exemplo n.º 9
0
        //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        //생성 :
        //수정 :
        //목적 : 초기화
        //설명 :
        //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        public override bool HLInitialize(HLDevice.Abstract.CVisionLibraryAbstract.CInitializeParameter objInitializeParameter)
        {
            bool bReturn = false;

            do
            {
                m_objInitializeParameter = (HLDevice.Abstract.CVisionLibraryAbstract.CInitializeParameter)objInitializeParameter.Clone();

                m_objFindLineTool      = new CogFindLineTool[( int )CResultData.enumLine.LINE_FINAL];
                m_objResultLine        = new CogLine[( int )CResultData.enumLine.LINE_FINAL];
                m_objResultLineSegment = new CogLineSegment[( int )CResultData.enumLine.LINE_FINAL];
                m_objLineGraphics      = new CogCompositeShape[( int )CResultData.enumLine.LINE_FINAL];

                m_dLinePositionX = new double[( int )CResultData.enumLine.LINE_FINAL];
                m_dLinePositionY = new double[( int )CResultData.enumLine.LINE_FINAL];
                m_dLineAngle     = new double[( int )CResultData.enumLine.LINE_FINAL];


                for (int iLoopCount = 0; iLoopCount < ( int )CResultData.enumLine.LINE_FINAL; iLoopCount++)
                {
                    m_objFindLineTool[iLoopCount]      = new CogFindLineTool();
                    m_objResultLine[iLoopCount]        = new CogLine();
                    m_objResultLineSegment[iLoopCount] = new CogLineSegment();
                    m_objLineGraphics[iLoopCount]      = new CogCompositeShape();
                }

                m_objIntersectTool = new CogIntersectLineLineTool();

                m_iIndex = m_objInitializeParameter.iIndex;
                m_objInitializeParameter = ( CInitializeParameter )objInitializeParameter.Clone();
                HLLoadRecipe(m_objInitializeParameter.strRecipePath, m_objInitializeParameter.strRecipeName);

                bReturn = true;
            } while(false);

            return(bReturn);
        }
Exemplo n.º 10
0
        private void ApplyLeadInspValueFunction(CogLeadAlgo _CogLeadAlgo, ref CogLeadResult _CogLeadResult, bool _IsDisplay = true)
        {
            if (eTeachStep.ALGO_SET != CurrentTeachStep)
            {
                MessageBox.Show("Not select \"Algorithm Set\" button"); return;
            }
            if (_IsDisplay)
            {
                AlgorithmAreaDisplayRefresh();
            }

            bool _Result = InspLeadProcess.Run(InspectionImage, AlgoRegionRectangle, _CogLeadAlgo, ref _CogLeadResult);

            #region Result Display
            if (_IsDisplay)
            {
                for (int iLoopCount = 0; iLoopCount < _CogLeadResult.BlobCount; ++iLoopCount)
                {
                    //Blob Boundary
                    CogRectangleAffine _BlobRectAffine = new CogRectangleAffine();
                    _BlobRectAffine.SetCenterLengthsRotationSkew(_CogLeadResult.BlobCenterX[iLoopCount], _CogLeadResult.BlobCenterY[iLoopCount], _CogLeadResult.PrincipalWidth[iLoopCount], _CogLeadResult.PrincipalHeight[iLoopCount], _CogLeadResult.Angle[iLoopCount], 0);
                    kpTeachDisplay.DrawStaticShape(_BlobRectAffine, "BlobRectAffine" + (iLoopCount + 1), CogColorConstants.Green);
                    kpTeachDisplay.DrawBlobResult(_CogLeadResult.ResultGraphic[iLoopCount], "BlobRectGra" + (iLoopCount + 1));

                    CogLineSegment _CenterLine = new CogLineSegment();
                    kpTeachDisplay.DrawStaticLine(_CogLeadResult.BlobCenterX[iLoopCount], _CogLeadResult.BlobCenterY[iLoopCount], _CogLeadResult.PrincipalWidth[iLoopCount] / 2 + 20, _CogLeadResult.Angle[iLoopCount], 2, "CenterLine+_" + (iLoopCount + 1), CogColorConstants.Cyan);
                    kpTeachDisplay.DrawStaticLine(_CogLeadResult.BlobCenterX[iLoopCount], _CogLeadResult.BlobCenterY[iLoopCount], _CogLeadResult.PrincipalWidth[iLoopCount] / 2 + 20, (Math.PI) + _CogLeadResult.Angle[iLoopCount], 2, "CenterLine-_" + (iLoopCount + 1), CogColorConstants.Cyan);

                    CogPointMarker _PitchPoint = new CogPointMarker();
                    _PitchPoint.SetCenterRotationSize(_CogLeadResult.LeadPitchTopX[iLoopCount], _CogLeadResult.LeadPitchTopY[iLoopCount], 0, 1);
                    kpTeachDisplay.DrawStaticShape(_PitchPoint, "PointStart" + (iLoopCount + 1), CogColorConstants.Yellow, 2);
                    _PitchPoint.SetCenterRotationSize(_CogLeadResult.LeadPitchBottomX[iLoopCount], _CogLeadResult.LeadPitchBottomY[iLoopCount], 0, 1);
                    kpTeachDisplay.DrawStaticShape(_PitchPoint, "PointEnd" + (iLoopCount + 1), CogColorConstants.Orange, 2);
                }
            }
            #endregion Result Display

            #region Pitch Average 측정
            try
            {
                double[] _LeadPitchX = new double[_CogLeadResult.BlobCount];
                Array.Copy(_CogLeadResult.LeadPitchTopX, _LeadPitchX, _CogLeadResult.BlobCount);
                Array.Sort(_LeadPitchX);

                double[] _LeadPitches = new double[_CogLeadResult.BlobCount - 1];
                for (int iLoopCount = 0; iLoopCount < _CogLeadResult.BlobCount - 1; ++iLoopCount)
                {
                    _LeadPitches[iLoopCount] = _LeadPitchX[iLoopCount + 1] - _LeadPitchX[iLoopCount];
                }

                Array.Sort(_LeadPitches);
                double _Gab = _LeadPitches[4];
                int    _Index = 1;
                double _PitchSum = _LeadPitches[4], _PitchArray = 0;
                for (int iLoopCount = 5; iLoopCount < _CogLeadResult.BlobCount - 1; ++iLoopCount)
                {
                    if (_Gab + 20 < _LeadPitches[iLoopCount])
                    {
                        break;
                    }
                    _PitchSum += _LeadPitches[iLoopCount];
                    _Index++;
                }

                _PitchArray = _PitchSum / _Index;
                _CogLeadResult.LeadPitchAvg = _PitchArray;
            }

            catch
            {
                _CogLeadResult.LeadPitchAvg = 0;
                CLogManager.AddInspectionLog(CLogManager.LOG_TYPE.ERR, "ApplyLeadInspValueFunction Exception", CLogManager.LOG_LEVEL.LOW);
            }
            #endregion Pitch Average 측정

            #region Lead Angle Average 측정
            try
            {
                double[] _LeadAngles = new double[_CogLeadResult.BlobCount];
                Array.Copy(_CogLeadResult.Angle, _LeadAngles, _CogLeadResult.BlobCount);
                Array.Sort(_LeadAngles);

                int    _Index = 0;
                double _AngleSum = 0, _AngleAvg = 0;
                for (int iLoopCount = 5; iLoopCount < _CogLeadResult.BlobCount - 5; ++iLoopCount)
                {
                    _AngleSum += _CogLeadResult.Angle[iLoopCount];
                    _Index++;
                }
                _AngleAvg = _AngleSum / _Index;
                _CogLeadResult.LeadAngleAvg = _AngleAvg;
            }

            catch
            {
                _CogLeadResult.LeadAngleAvg = 0;
                CLogManager.AddInspectionLog(CLogManager.LOG_TYPE.ERR, "ApplyLeadInspValueFunction Exception", CLogManager.LOG_LEVEL.LOW);
            }
            #endregion Lead Angle Average 측정
        }
Exemplo n.º 11
0
        private SendResultParameter GetLeadInspectionResultAnalysis()
        {
            SendResultParameter _SendResParam = new SendResultParameter();

            _SendResParam.ID          = ID;
            _SendResParam.NgType      = eNgType.GOOD;
            _SendResParam.IsGood      = true;
            _SendResParam.ProjectItem = ProjectItem;

            SendLeadResult _SendResult = new SendLeadResult();

            for (int iLoopCount = 0; iLoopCount < AlgoResultParamList.Count; ++iLoopCount)
            {
                if (eAlgoType.C_LEAD == AlgoResultParamList[iLoopCount].ResultAlgoType)
                {
                    var _AlgoResultParam = AlgoResultParamList[iLoopCount].ResultParam as CogLeadResult;

                    _SendResult.LeadCount      = _AlgoResultParam.LeadCount;
                    _SendResult.LeadAngle      = _AlgoResultParam.Angle;
                    _SendResult.LeadWidth      = _AlgoResultParam.Width;
                    _SendResult.LeadLength     = _AlgoResultParam.LeadLength;
                    _SendResult.LeadPitchTopX  = _AlgoResultParam.LeadPitchTopX;
                    _SendResult.LeadPitchTopY  = _AlgoResultParam.LeadPitchTopY;
                    _SendResult.IsLeadBendGood = _AlgoResultParam.IsLeadBentGood;

                    _SendResParam.IsGood    &= _AlgoResultParam.IsGood;
                    _SendResParam.SendResult = _SendResult;
                    if (_SendResParam.NgType == eNgType.GOOD)
                    {
                        _SendResParam.NgType = (_AlgoResultParam.IsGood == true) ? eNgType.GOOD : eNgType.LEAD_BENT;
                    }

                    _SendResParam.IsGood &= _AlgoResultParam.IsLeadCountGood;
                    if (false == _AlgoResultParam.IsLeadCountGood)
                    {
                        _SendResParam.NgType = eNgType.LEAD_CNT;
                    }
                }

                else if (AlgoResultParamList[iLoopCount].ResultAlgoType == eAlgoType.C_LINE_FIND)
                {
                    var _AlgoResultParam = AlgoResultParamList[iLoopCount].ResultParam as CogLineFindResult;

                    _SendResult.BodyReferenceX = (_AlgoResultParam.StartX + _AlgoResultParam.EndX) / 2;
                    _SendResult.BodyReferenceY = (_AlgoResultParam.StartY + _AlgoResultParam.EndY) / 2;
                }

                else if (AlgoResultParamList[iLoopCount].ResultAlgoType == eAlgoType.C_BLOB_REFER)
                {
                }

                else if (AlgoResultParamList[iLoopCount].ResultAlgoType == eAlgoType.C_PATTERN)
                {
                }
            }

            //Mergy Result
            if (_SendResult.LeadPitchTopX != null && _SendResult.LeadPitchTopY != null && _SendResult.LeadLength != null)
            {
                _SendResult.LeadWidthReal  = new double[_SendResult.LeadPitchTopX.Length];
                _SendResult.LeadLengthReal = new double[_SendResult.LeadPitchTopX.Length];

                for (int iLoopCount = 0; iLoopCount < _SendResult.LeadPitchTopX.Length; ++iLoopCount)
                {
                    _SendResult.LeadLength[iLoopCount]     = Math.Abs(_SendResult.BodyReferenceY - _SendResult.LeadPitchTopY[iLoopCount]);
                    _SendResult.LeadLengthReal[iLoopCount] = _SendResult.LeadLength[iLoopCount] * ResolutionY;
                    _SendResult.LeadWidthReal[iLoopCount]  = _SendResult.LeadWidth[iLoopCount] * ResolutionY;

                    CogLineSegment _LengthLine = new CogLineSegment();
                    _LengthLine.SetStartEnd(_SendResult.LeadPitchTopX[iLoopCount], _SendResult.LeadPitchTopY[iLoopCount],
                                            _SendResult.LeadPitchTopX[iLoopCount], _SendResult.BodyReferenceY);
                    ResultDisplay(_LengthLine, "LengthLine" + (iLoopCount + 1), CogColorConstants.Green);
                }
            }

            return(_SendResParam);
        }
Exemplo n.º 12
0
        public bool Run(CogImage8Grey _SrcImage, CogRectangle _InspRegion, CogLeadAlgo _CogLeadAlgo, ref CogLeadResult _CogLeadResult, double _ReferX = -1, double _ReferY = -1)
        {
            bool _Result = true;

            SetHardFixedThreshold(_CogLeadAlgo.ThresholdMin);
            SetConnectivityMinimum((int)_CogLeadAlgo.BlobAreaMin);
            SetPolarity(Convert.ToBoolean(_CogLeadAlgo.ForeGround));

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

            if (GetResults().BlobCount > 0)
            {
                _CogLeadResult           = GetResults();
                _CogLeadResult.LeadCount = _CogLeadResult.BlobCount;

                #region Lead Pitch Point Get
                for (int iLoopCount = 0; iLoopCount < _CogLeadResult.BlobCount; ++iLoopCount)
                {
                    #region Lead Bent Check
                    double _Angle = _CogLeadResult.Angle[iLoopCount] * 180 / Math.PI;
                    if (_Angle > 0)
                    {
                        _Angle = 90 - (_CogLeadResult.Angle[iLoopCount] * 180 / Math.PI);
                    }
                    else
                    {
                        _Angle = -(90 + (_CogLeadResult.Angle[iLoopCount] * 180 / Math.PI));
                    }

                    _CogLeadResult.IsLeadBentGood[iLoopCount] = true;
                    if (_CogLeadAlgo.IsLeadBentInspection)
                    {
                        if ((_Angle > _CogLeadAlgo.LeadBentMax) || (_Angle < -_CogLeadAlgo.LeadBentMin))
                        {
                            _CogLeadResult.IsLeadBentGood[iLoopCount] = false;
                            _CogLeadResult.IsGood &= _CogLeadResult.IsLeadBentGood[iLoopCount];
                        }
                    }
                    #endregion Lead Bent Check

                    #region Pitch Point 구하기
                    if (_CogLeadResult.Angle[iLoopCount] > 0)
                    {
                        CogLineSegment _CenterLine = new CogLineSegment();
                        _CenterLine.SetStartLengthRotation(_CogLeadResult.BlobCenterX[iLoopCount], _CogLeadResult.BlobCenterY[iLoopCount], _CogLeadResult.PrincipalWidth[iLoopCount] / 2, (Math.PI) + _CogLeadResult.Angle[iLoopCount]);
                        _CogLeadResult.LeadPitchTopX[iLoopCount] = _CenterLine.EndX;
                        _CogLeadResult.LeadPitchTopY[iLoopCount] = _CenterLine.EndY;

                        _CenterLine.SetStartLengthRotation(_CogLeadResult.BlobCenterX[iLoopCount], _CogLeadResult.BlobCenterY[iLoopCount], _CogLeadResult.PrincipalWidth[iLoopCount] / 2, _CogLeadResult.Angle[iLoopCount]);
                        _CogLeadResult.LeadPitchBottomX[iLoopCount] = _CenterLine.EndX;
                        _CogLeadResult.LeadPitchBottomY[iLoopCount] = _CenterLine.EndY;
                    }

                    else
                    {
                        CogLineSegment _CenterLine = new CogLineSegment();
                        _CenterLine.SetStartLengthRotation(_CogLeadResult.BlobCenterX[iLoopCount], _CogLeadResult.BlobCenterY[iLoopCount], _CogLeadResult.PrincipalWidth[iLoopCount] / 2, _CogLeadResult.Angle[iLoopCount]);
                        _CogLeadResult.LeadPitchTopX[iLoopCount] = _CenterLine.EndX;
                        _CogLeadResult.LeadPitchTopY[iLoopCount] = _CenterLine.EndY;

                        _CenterLine.SetStartLengthRotation(_CogLeadResult.BlobCenterX[iLoopCount], _CogLeadResult.BlobCenterY[iLoopCount], _CogLeadResult.PrincipalWidth[iLoopCount] / 2, (Math.PI) + _CogLeadResult.Angle[iLoopCount]);
                        _CogLeadResult.LeadPitchBottomX[iLoopCount] = _CenterLine.EndX;
                        _CogLeadResult.LeadPitchBottomY[iLoopCount] = _CenterLine.EndY;
                    }
                    #endregion Pitch Point 구하기

                    #region Length 구하기
                    if (_ReferY != -1 && _ReferY != -1)
                    {
                        _CogLeadResult.LeadLength[iLoopCount]       = Math.Abs(_ReferY - _CogLeadResult.LeadPitchTopY[iLoopCount]);
                        _CogLeadResult.LeadLengthStartX[iLoopCount] = _CogLeadResult.LeadPitchTopX[iLoopCount];
                        _CogLeadResult.LeadLengthStartY[iLoopCount] = _ReferY;
                    }
                    #endregion Length 구하기
                }
                #endregion Lead Pitch Point Get

                #region Lead Length Get
                #endregion Lead Length Get

                _CogLeadResult.IsGood &= true;
            }

            else
            {
                _CogLeadResult.IsGood = false;
            }

            return(_Result);
        }