Exemple #1
0
        public MVisionCamera(CObjectInfo objInfo) : base(objInfo)
        {
            int iMarkNum = (int)EPatternMarkType.ALIGN_MARK_COUNT;

            m_iCamID         = 0;
            m_iResult        = 0;
            m_bLive          = false;
            m_cCameraData    = new CCameraData();
            m_rgsCSearchData = new CVisionPatternData[iMarkNum];
            m_rgsCResultData = new CResultData[iMarkNum];

            for (int i = 0; i < iMarkNum; i++)
            {
                // Search Data Init
                m_rgsCSearchData[i]                        = new CVisionPatternData();
                m_rgsCSearchData[i].m_bIsModel             = false;
                m_rgsCSearchData[i].m_dAcceptanceThreshold = DEF_DEFAULT_ACCEP_THRESHOLD;
                m_rgsCSearchData[i].m_dCertaintyThreshold  = DEF_DEFAULT_CERTAIN_THRESHOLD;

                // Result Data Init
                m_rgsCResultData[i] = new CResultData();
                m_rgsCResultData[i].m_bSearchSuccess = false;
                m_rgsCResultData[i].m_milResult      = MIL.M_NULL;
                m_rgsCResultData[i].m_milGMFResult   = MIL.M_NULL;
            }

            m_cCameraData.m_iGrabSettlingTime = 0;
            m_cCameraData.m_iCameraChangeTime = 0;
        }
Exemple #2
0
        /// <summary>
        /// 등록된 Mark Search.. GMF는 적용안됨.
        /// </summary>
        /// <param name="iCamNo": Camera Number></param>
        /// <param name="iModelNo": Model Mark Number></param>
        /// <param name="pPatResult" : Result value Check></param>
        /// <param name="bUseGMF" : Not Use></param>
        /// <returns></returns>
        public int RecognitionPatternMark(int iCamNo, int iModelNo, out CResultData pPatResult, bool bUseGMF = false)
        {
            // Vision System이 초기화 된지를 확인함
            if (m_bSystemInit == false) goto VISION_ERROR_GO;
            
            int iResult = 0;
            CVisionPatternData pSData = m_RefComp.Camera[iCamNo].GetSearchData(iModelNo);
            CResultData pSResult; 

            // 모델 생성 여부 확인
            if (pSData.m_bIsModel == false) goto VISION_ERROR_GO;

            // Mark Search 실행
            iResult = m_RefComp.System.SearchByNGC(iCamNo, pSData, out pSResult);

            if(iResult == SUCCESS)
            {
                pSResult.m_strResult = string.Format("-MK:{0} P_X:{1:0.00}  P_Y:{2:0.00}  \n        Sc:{3:0.00}%% Tm:{4:0.0}ms",
                                                    iModelNo,
                                                    pSResult.m_dPixelX,
                                                    pSResult.m_dPixelY,
                                                    pSResult.m_dScore,
                                                    pSResult.m_dTime  *1000);
                if (pSResult.m_bSearchSuccess)
                    pSResult.m_strResult = "OK" + pSResult.m_strResult;
                else
                    pSResult.m_strResult = "NG" + pSResult.m_strResult;

            }
            else
            {
                pSResult.m_strResult = string.Format("Camera{0} : Model : {1} is Not Found! \n [sc:{2:0.00}%% Tm:{3:0.0}ms",
                                                    iCamNo,
                                                    iModelNo,
                                                    pSResult.m_dScore,
                                                    pSResult.m_dTime  *1000);
            }
            // Search 결과 대입
            pPatResult = pSResult;

            // Pattern Search Fail시 Image 저장
            if (pSResult.m_bSearchSuccess==false)
            {
                if(m_bSaveErrorImage)
                {
                    iResult = SaveImage(iCamNo,1,90);
                    if(iResult != SUCCESS)
                    {
                        return GenerateErrorCode(ERR_VISION_PATTERN_SEARCH_FAIL);
                    }
                }
            }
           
            return SUCCESS;
        // Vision Error 처리
        VISION_ERROR_GO:

            pPatResult = new CResultData();
            return GenerateErrorCode(ERR_VISION_PATTERN_SEARCH_FAIL);
        }
        public override bool HLRun(Cognex.VisionPro.CogImage8Grey objCogImage, out HLDevice.Abstract.CVisionLibraryAbstract.CResultData objResultData, bool bUseCalibrationImage = false)
        {
            objResultData = new CResultData();
            bool bReturn = false;

            do
            {
                try {
                    m_objFixtureTool.InputImage = objCogImage;
                    // 여기에 패턴에서 찾은 좌표를 넣어야하는데..

                    m_objFixtureTool.Run();
                    CogImage8Grey objResultImage = ( CogImage8Grey )m_objFixtureTool.OutputImage;
                    if (null == objResultImage)
                    {
                        objResultData.objCogImage = objCogImage;
                        break;
                    }
                    else
                    {
                        objResultData.objCogImage = objResultImage;
                    }
                } catch (System.Exception ex) {
                    Trace.Write(ex.Message + "-> " + ex.StackTrace);
                    break;
                }

                bReturn = true;
            } while(false);


            objResultData.bResult = bReturn;
            m_objResultData       = ( CResultData )objResultData.Clone();
            return(bReturn);
        }
        //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        //생성 :
        //수정 :
        //목적 : Run
        //설명 :
        //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        public override bool HLRun(System.Drawing.Bitmap bipmapImage, out CResultData objResultData)
        {
            objResultData = new CResultData();
            bool bReturn = false;

            do
            {
                try
                {
                    m_objImageProcess.InputImage = new CogImage8Grey(bipmapImage);
                    m_objImageProcess.Run();
                    CogImage8Grey objResultImage = ( CogImage8Grey )m_objImageProcess.OutputImage;
                    objResultData.bitmapResultImage = objResultImage.ToBitmap();
                }
                catch (System.Exception ex)
                {
                    Trace.Write(ex.Message + "-> " + ex.StackTrace);
                    MakeErrorMessage("HLRun", 5505, ex.Message);
                    break;
                }

                bReturn = true;
            } while(false);

            objResultData.bitmapInputImage = null;//bipmapImage;
            objResultData.bResult          = bReturn;
            objResultData.eLibrary         = CResultData.enumLibrary.IMAGEPROCESS;
            m_objResultData = ( CResultData )objResultData.Clone();
            return(bReturn);
        }
        //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        //생성 :
        //수정 :
        //목적 : Run
        //설명 :
        //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        public override bool HLRun(Cognex.VisionPro.CogImage8Grey objCogImage, out HLDevice.Abstract.CVisionLibraryAbstract.CResultData objResultData, bool bUseCalibrationImage = true)
        {
            objResultData = new CResultData();
            bool bReturn = false;

            do
            {
                try {
                    m_objImageProcess.InputImage = objCogImage;
                    m_objImageProcess.Run();
                    CogImage8Grey objResultImage = ( CogImage8Grey )m_objImageProcess.OutputImage;
                    objResultData.objCogImage = objResultImage;
                } catch (System.Exception ex) {
                    Trace.Write(ex.Message + "-> " + ex.StackTrace);
                    MakeErrorMessage("HLRun", 5505, ex.Message);
                    break;
                }

                bReturn = true;
            } while(false);

            objResultData.bitmapInputImage = null;//objCogImage.ToBitmap();
            objResultData.bResult          = bReturn;
            objResultData.eLibrary         = CResultData.enumLibrary.IMAGEPROCESS;
            m_objResultData = ( CResultData )objResultData.Clone();
            return(bReturn);
        }
Exemple #6
0
        private void btnMarkSearchB_Click(object sender, EventArgs e)
        {
            CResultData pResult = new CResultData();

            CMainFrame.LWDicer.m_Vision.RecognitionPatternMark(CMainFrame.LWDicer.m_Vision.m_iCurrentViewNum, PATTERN_B, out pResult);

            lblResult.Text = pResult.m_strResult;
        }
Exemple #7
0
        /// <summary>
        /// Pattern Maching으로 Mark의 위치를 검색함
        /// </summary>
        /// <param name="iCam"></param>
        /// <param name="pSdata"></param>
        /// <param name="pRData"></param>
        /// <returns></returns>
        public int SearchByNGC(int iCamNo, CVisionPatternData pSdata, out CResultData pRData)
        {
            MIL_ID m_MilImage     = m_pDisplay[iCamNo].GetImage();
            MIL_ID m_DisplayGraph = m_pDisplay[iCamNo].GetViewGraph();

            CResultData pResult    = new CResultData();
            Point       RectOffset = new Point();

            // Mark Search Timer Reset
            MIL.MappTimer(MIL.M_DEFAULT, MIL.M_TIMER_RESET + MIL.M_SYNCHRONOUS, MIL.M_NULL);
            // Mark Search Command
            MIL.MpatFindModel(m_MilImage, pSdata.m_milModel, m_SearchResult);
            // Mark Search Timer Check
            MIL.MappTimer(MIL.M_DEFAULT, MIL.M_TIMER_READ + MIL.M_SYNCHRONOUS, ref pResult.m_dTime);

            if (MIL.MpatGetNumber(m_SearchResult) == 1L)
            {
                // Display Mark Area
                //MIL.MgraClear(MIL.M_DEFAULT, m_DisplayGraph);
                m_pDisplay[iCamNo].ClearOverlay();
                MIL.MgraColor(MIL.M_DEFAULT, MIL.M_COLOR_GREEN);
                MIL.MpatDraw(MIL.M_DEFAULT, m_SearchResult, m_DisplayGraph, MIL.M_DRAW_BOX, MIL.M_DEFAULT, MIL.M_DEFAULT);
                //DisplaySearchResult();

                MIL.MpatGetResult(m_SearchResult, MIL.M_POSITION_X, ref pResult.m_dPixelX);
                MIL.MpatGetResult(m_SearchResult, MIL.M_POSITION_Y, ref pResult.m_dPixelY);
                MIL.MpatGetResult(m_SearchResult, MIL.M_SCORE, ref pResult.m_dScore);

                RectOffset.X = (int)pResult.m_dPixelX - pSdata.m_pointReference.X - pSdata.m_rectSearch.X;
                RectOffset.Y = (int)pResult.m_dPixelY - pSdata.m_pointReference.Y - pSdata.m_rectSearch.Y;

                pResult.m_rectFindedModel = pSdata.m_rectModel;
                pResult.m_rectFindedModel.Offset(RectOffset);
                pResult.m_rectSearch = pSdata.m_rectSearch;

                if (pResult.m_dScore > pSdata.m_dAcceptanceThreshold)
                {
                    pResult.m_bSearchSuccess = true;

                    // Result Data 전달
                    pRData = pResult;
                    return(SUCCESS);
                }
            }

            // Search Data를 초기화 한다.
            pResult.m_bSearchSuccess  = false;
            pResult.m_dPixelX         = 0.0;
            pResult.m_dPixelY         = 0.0;
            pResult.m_rectSearch      = new Rectangle(0, 0, 0, 0);
            pResult.m_rectFindedModel = new Rectangle(0, 0, 0, 0);

            // Result Data 전달
            pRData = pResult;

            return(GenerateErrorCode(ERR_VISION_PATTERN_SEARCH_FAIL));
        }
Exemple #8
0
        //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        //생성 :
        //수정 :
        //목적 : Run 추상객체
        //설명 :
        //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        public virtual bool HLRun(Cognex.VisionPro.CogImage8Grey objCogImage, out HLDevice.Abstract.CVisionLibraryAbstract.CResultData objResultData, bool bUseCalibrationImage = true)
        {
            objResultData = new CResultData();
            bool bReturn = false;

            do
            {
            } while(false);

            return(bReturn);
        }
Exemple #9
0
            public object Clone()
            {
                CResultData objResultData = new CResultData();

                objResultData.bResult          = bResult;
                objResultData.eLibrary         = eLibrary;
                objResultData.bitmapInputImage = bitmapInputImage;                   objResultData.bitmapResultImage = bitmapResultImage;                             objResultData.objGraphics = (object[])objGraphics.Clone();                                               objResultData.objLineGraphics = objLineGraphics;
                objResultData.dPositionX       = ( double[] )dPositionX.Clone();               objResultData.dPositionY = ( double[] )dPositionY.Clone();                           objResultData.dPositionAngle = ( double[] )dPositionAngle.Clone();                 objResultData.dScore = ( double[] )dScore.Clone();
                objResultData.dLinePositionX   = ( double[] )dLinePositionX.Clone();      objResultData.dLinePositionY = ( double[] )dLinePositionY.Clone();                 objResultData.dLineAngle = ( double[] )dLineAngle.Clone();

                return(objResultData);
            }
        //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        //생성 :
        //수정 :
        //목적 : 결과
        //설명 :
        //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        public override bool HLGetResult(out CResultData objResultData)
        {
            objResultData = ( CResultData )m_objResultData.Clone();

            bool bReturn = false;

            do
            {
                bReturn = true;
            } while(false);

            return(bReturn);
        }
Exemple #11
0
        //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        //생성 :
        //수정 :
        //목적 : Run
        //설명 :
        //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        public override bool HLRun(System.Drawing.Bitmap bipmapImage, out CResultData objResultData)
        {
            objResultData = new CResultData();

            bool bReturn = false;

            do
            {
                bReturn = true;
            } while(false);

            return(bReturn);
        }
        //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        //생성 :
        //수정 :
        //목적 : 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);
        }
        //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        //생성 :
        //수정 :
        //목적 : Run
        //설명 :
        //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        public override bool HLRun(System.Drawing.Bitmap bipmapImage, out CResultData objResultData)
        {
            objResultData = new CResultData();
            bool bReturn = false;

            do
            {
                try
                {
                    m_objCalibration.InputImage = new CogImage8Grey(bipmapImage);
                    m_objCalibration.Run();
                    CogImage8Grey objResultImage = ( CogImage8Grey )m_objCalibration.OutputImage;
                    if (null == objResultImage)
                    {
                        objResultData.bitmapResultImage = (System.Drawing.Bitmap)bipmapImage.Clone();
                        //break;
                    }
                    else
                    {
                        objResultData.bitmapResultImage = objResultImage.ToBitmap();
                    }
                }
                catch (System.Exception ex)
                {
                    Trace.Write(ex.Message + "-> " + ex.StackTrace);
                    MakeErrorMessage("HLRun", 5505, ex.Message);
                    break;
                }

                bReturn = true;
            } while(false);

            if (null != bipmapImage)
            {
                objResultData.bitmapInputImage = null;// bipmapImage;
            }
            objResultData.bResult  = bReturn;
            objResultData.eLibrary = CResultData.enumLibrary.CALIBRATION;;
            m_objResultData        = ( CResultData )objResultData.Clone();
            return(bReturn);
        }
Exemple #14
0
        public override bool HLRun(Cognex.VisionPro.CogImage8Grey objCogImage, out HLDevice.Abstract.CVisionLibraryAbstract.CResultData objResultData, bool bUseCalibrationImage = false)
        {
            objResultData = new CResultData();
            bool bReturn = false;

            do
            {
                try {
                } catch (System.Exception ex) {
                    Trace.Write(ex.Message + "-> " + ex.StackTrace);
                    break;
                }

                bReturn = true;
            } while(false);


            objResultData.bResult = bReturn;
            m_objResultData       = ( CResultData )objResultData.Clone();
            return(bReturn);
        }
        //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        //생성 :
        //수정 :
        //목적 : Run
        //설명 :
        //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        public override bool HLRun(System.Drawing.Bitmap bipmapImage, out CResultData objResultData)
        {
            objResultData = new CResultData();
            bool bReturn = false;

            do
            {
                try
                {
                }
                catch (System.Exception ex)
                {
                    Trace.Write(ex.Message + "-> " + ex.StackTrace);
                    break;
                }

                bReturn = true;
            } while(false);


            objResultData.bResult = bReturn;
            m_objResultData       = ( CResultData )objResultData.Clone();
            return(bReturn);
        }
        //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        //생성 :
        //수정 :
        //목적 : Run
        //설명 :
        //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        public override bool HLRun(Cognex.VisionPro.CogImage8Grey objCogImage, out HLDevice.Abstract.CVisionLibraryAbstract.CResultData objResultData, bool bUseCalibrationImage = false)
        {
            objResultData = new CResultData();
            bool bReturn = false;

            do
            {
                try {
                    if (null == objCogImage)
                    {
                        break;
                    }
                    if (false == m_objPMAlignTool.Pattern.Trained)
                    {
                        break;
                    }
                    objCogImage.SelectedSpaceName = "@";
                    m_objPMAlignTool.InputImage   = objCogImage;

                    if (false == bUseCalibrationImage)
                    {
                        m_objPMAlignTool.InputImage.CoordinateSpaceTree.RootName = @"#@Checkerboard Calibration";
                        m_objPMAlignTool.InputImage.SelectedSpaceName            = @"#@Checkerboard Calibration";
                    }


                    m_objPMAlignTool.Run();

                    if (0 < m_objPMAlignTool.Results.Count) //&& iScoreLimit < m_objPMAlignTool.Results[0].Score * 100 ) // 리미트 설정은 추후
                    {
                        for (int iLoopCount = 0; iLoopCount < m_objPMAlignTool.Results.Count; iLoopCount++)
                        {
                            if (( int )Abstract.CVisionLibraryAbstract.CResultData.enumInspectPosition.INSPECT_POSITION_FINAL <= iLoopCount)
                            {
                                break;
                            }
                            m_dPositionX[iLoopCount] = m_objPMAlignTool.Results[iLoopCount].GetPose().TranslationX; m_dPositionY[iLoopCount] = m_objPMAlignTool.Results[iLoopCount].GetPose().TranslationY; m_dAngle[iLoopCount] = m_objPMAlignTool.Results[iLoopCount].GetPose().Rotation *(180 / Math.PI); m_dScore[iLoopCount] = m_objPMAlignTool.Results[iLoopCount].Score;
                            //m_objGraphics[ iLoopCount ] = m_objPMAlignTool.Results[ iLoopCount ].CreateResultGraphics( CogPMAlignResultGraphicConstants.All );
                        }
                        CogImage8Grey FixtureImage = (CogImage8Grey)m_objPMAlignTool.InputImage;//.CopyBase( CogImageCopyModeConstants.CopyPixels ) as CogImage8Grey;
                        FixtureImage.SelectedSpaceName = "@";

                        m_objFixtureTool.InputImage = FixtureImage;
                        m_objFixtureTool.RunParams.UnfixturedFromFixturedTransform = m_objPMAlignTool.Results[0].GetPose();
                        m_objFixtureTool.Run();
                        objResultData.objCogImage = m_objFixtureTool.OutputImage as CogImage8Grey;
                        if (null == objResultData.objCogImage)
                        {
                            m_objFixtureTool.InputImage = FixtureImage;
                            m_objFixtureTool.RunParams.UnfixturedFromFixturedTransform = m_objPMAlignTool.Results[0].GetPose();
                            m_objFixtureTool.Run();
                            objResultData.objCogImage = m_objFixtureTool.OutputImage as CogImage8Grey;
                        }
                    }
                    else
                    {
                        for (int iLoopCount = 0; iLoopCount < ( int )Abstract.CVisionLibraryAbstract.CResultData.enumInspectPosition.INSPECT_POSITION_FINAL; iLoopCount++)
                        {
                            // m_objGraphics = null;
                            m_dPositionX[iLoopCount] = m_dPositionY[iLoopCount] = -1; m_dAngle[iLoopCount] = 0; m_dScore[iLoopCount] = 0;
                        }
                        objResultData.objCogImage = objCogImage;
                        MakeErrorMessage("HLRun", 5205, "Pattern Fail");
                        break;
                    }
                } catch (System.Exception ex) {
                    Trace.Write(ex.Message + "-> " + ex.StackTrace);
                    break;
                }

                bReturn = true;
            } while(false);

            if (null != m_objPMAlignTool.Results)
            {
                for (int iLoopCount = 0; iLoopCount < m_objPMAlignTool.Results.Count; iLoopCount++)
                {
                    if (false == bReturn)
                    {
                    }
                    else
                    {
                        if (( int )Abstract.CVisionLibraryAbstract.CResultData.enumInspectPosition.INSPECT_POSITION_FINAL <= iLoopCount)
                        {
                            break;
                        }
                        objResultData.objGraphics[iLoopCount] = new CogCompositeShape();
                        objResultData.objGraphics[iLoopCount] = m_objGraphics[iLoopCount];
                        objResultData.dPositionX[iLoopCount]  = m_dPositionX[iLoopCount]; objResultData.dPositionY[iLoopCount] = m_dPositionY[iLoopCount]; objResultData.dPositionAngle[iLoopCount] = m_dAngle[iLoopCount]; objResultData.dScore[iLoopCount] = m_dScore[iLoopCount];
                    }
                }
            }
            if (null != objCogImage)
            {
                objResultData.bitmapInputImage = null;//objCogImage.ToBitmap();
            }
            //m_objGraphics[ 0 ] = m_objPMAlignTool.CreateLastRunRecord();
            objResultData.objGraphics[0] = m_objPMAlignTool.CreateLastRunRecord();
            objResultData.bResult        = bReturn; objResultData.eLibrary = CResultData.enumLibrary.PMALIGN;
            m_objResultData = ( CResultData )objResultData.Clone();
            return(bReturn);
        }
        //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        //생성 :
        //수정 :
        //목적 : Run
        //설명 :
        //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        public override bool HLRun(System.Drawing.Bitmap bipmapImage, out CResultData objResultData)
        {
            objResultData = new CResultData();
            bool bReturn = false;

            do
            {
                try
                {
                    if (false == m_objPMAlignTool.Pattern.Trained)
                    {
                        break;
                    }

                    m_objPMAlignTool.InputImage = new CogImage8Grey(bipmapImage);
                    m_objPMAlignTool.Run();

                    if (0 < m_objPMAlignTool.Results.Count)  //&& iScoreLimit < m_objPMAlignTool.Results[0].Score * 100 ) // 리미트 설정은 추후
                    {
                        for (int iLoopCount = 0; iLoopCount < m_objPMAlignTool.Results.Count; iLoopCount++)
                        {
                            if (( int )Abstract.CVisionLibraryAbstract.CResultData.enumInspectPosition.INSPECT_POSITION_FINAL <= iLoopCount)
                            {
                                break;
                            }
                            m_dPositionX[iLoopCount] = m_objPMAlignTool.Results[iLoopCount].GetPose().TranslationX; m_dPositionY[iLoopCount] = m_objPMAlignTool.Results[iLoopCount].GetPose().TranslationY; m_dAngle[iLoopCount] = m_objPMAlignTool.Results[iLoopCount].GetPose().Rotation *(180 / Math.PI); m_dScore[iLoopCount] = m_objPMAlignTool.Results[iLoopCount].Score;
                            //m_objGraphics[ iLoopCount ] = m_objPMAlignTool.Results[ iLoopCount ].CreateResultGraphics( CogPMAlignResultGraphicConstants.All );
                        }
                    }
                    else
                    {
                        for (int iLoopCount = 0; iLoopCount < ( int )Abstract.CVisionLibraryAbstract.CResultData.enumInspectPosition.INSPECT_POSITION_FINAL; iLoopCount++)
                        {
                            //   m_objGraphics = null;
                            m_dPositionX[iLoopCount] = m_dPositionY[iLoopCount] = -1; m_dAngle[iLoopCount] = 0; m_dScore[iLoopCount] = 0;
                        }

                        MakeErrorMessage("HLRun", 5205, "Pattern Fail");
                        break;
                    }
                }
                catch (System.Exception ex)
                {
                    Trace.Write(ex.Message + "-> " + ex.StackTrace);
                    break;
                }

                bReturn = true;
            } while(false);


            for (int iLoopCount = 0; iLoopCount < m_objPMAlignTool.Results.Count; iLoopCount++)
            {
                if (false == bReturn)
                {
                }
                else
                {
                    if (( int )Abstract.CVisionLibraryAbstract.CResultData.enumInspectPosition.INSPECT_POSITION_FINAL <= iLoopCount)
                    {
                        break;
                    }
                    objResultData.objGraphics[iLoopCount] = new CogCompositeShape();
                    objResultData.objGraphics[iLoopCount] = m_objGraphics[iLoopCount];
                    objResultData.dPositionX[iLoopCount]  = m_dPositionX[iLoopCount]; objResultData.dPositionY[iLoopCount] = m_dPositionY[iLoopCount]; objResultData.dPositionAngle[iLoopCount] = m_dAngle[iLoopCount]; objResultData.dScore[iLoopCount] = m_dScore[iLoopCount];
                }
            }
            m_objGraphics[0] = m_objPMAlignTool.CreateLastRunRecord();
            objResultData.bitmapInputImage = null;//bipmapImage;
            objResultData.bResult          = bReturn;              objResultData.eLibrary = CResultData.enumLibrary.PMALIGN;
            m_objResultData = ( CResultData )objResultData.Clone();
            return(bReturn);
        }
Exemple #18
0
 //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
 //생성 :
 //수정 :
 //목적 : Run 추상객체
 //설명 :
 //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
 public abstract bool HLRun(Bitmap bipmapImage, out CResultData objResultData);
Exemple #19
0
        //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        //생성 :
        //수정 :
        //목적 : Run
        //설명 :
        //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        public override bool HLRun(Cognex.VisionPro.CogImage8Grey objCogImage, out HLDevice.Abstract.CVisionLibraryAbstract.CResultData objResultData, bool bUseCalibrationImage = false)
        {
            objResultData = new CResultData();
            bool bReturn = false;

            do
            {
                try {
                    m_dScore = 0;
                    //이미지 결과 그래픽 생성
                    objResultData.objLineGraphics = new CogCompositeShape[2];

                    for (int iLoopCount = 0; iLoopCount < ( int )CResultData.enumLine.LINE_FINAL; iLoopCount++)
                    {
                        m_objFindLineTool[iLoopCount].InputImage = objCogImage;
                        m_objFindLineTool[iLoopCount].Run();

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

                            objResultData.objLineGraphics[iLoopCount] = new CogCompositeShape();
                            objResultData.objLineGraphics[iLoopCount] = m_objLineGraphics[iLoopCount];
                            m_objResultLine[iLoopCount].GetXYRotation(out m_dLinePositionX[iLoopCount], out m_dLinePositionY[iLoopCount], out m_dLineAngle[iLoopCount]);
                            m_dLineAngle[iLoopCount] = m_dLineAngle[iLoopCount] * (180 / Math.PI);
                        }
                        else
                        {
                            m_dLinePositionX[iLoopCount] = 0; m_dLinePositionY[iLoopCount] = 0; m_dLineAngle[iLoopCount] = 0;
                            MakeErrorMessage("HLSaveRecipe", 5405, "Line Fail");
                            break;
                        }
                    }
                } catch (System.Exception ex) {
                    Trace.Write(ex.Message + "-> " + ex.StackTrace);
                    break;
                }

                m_objIntersectTool.InputImage = objCogImage;
                m_objIntersectTool.LineA      = m_objResultLine[( int )CResultData.enumLine.LINE_VERTICAL]; m_objIntersectTool.LineB = m_objResultLine[( int )CResultData.enumLine.LINE_HORIZON];
                m_objIntersectTool.Run();

                if (true == m_objIntersectTool.Intersects)
                {
                    m_dAngle = Math.Abs(m_objIntersectTool.Angle * (180 / Math.PI));

                    if ((85 < m_dAngle || 95 > m_dAngle) || (265 < m_dAngle || 275 > m_dAngle))
                    {
                        m_dPositionX = m_objIntersectTool.X; m_dPositionY = m_objIntersectTool.Y;
                    }
                    else
                    {
                        m_dPositionX = -1; m_dPositionY = -1;
                        MakeErrorMessage("HLSaveRecipe", 5406, "IntersectTool Angle Range Out");
                        break;
                    }
                }
                else
                {
                    m_dPositionX = -1; m_dPositionY = -1;
                    MakeErrorMessage("HLSaveRecipe", 5407, "IntersectTool Fail");
                    break;
                }

                m_dScore = 1;
                bReturn  = true;
            } while(false);
            for (int iLoopCount = 0; iLoopCount < ( int )CResultData.enumLine.LINE_FINAL; iLoopCount++)
            {
                objResultData.dLinePositionX[iLoopCount] = m_dLinePositionX[iLoopCount]; objResultData.dLinePositionY[0] = m_dLinePositionY[iLoopCount]; objResultData.dLineAngle[0] = m_dLineAngle[iLoopCount];
            }
            objResultData.dPositionX[0] = m_dPositionX; objResultData.dPositionY[0] = m_dPositionY; objResultData.dScore[0] = m_dScore;
//            objResultData.bitmapInputImage = objCogImage.ToBitmap();
            objResultData.bResult = bReturn; objResultData.eLibrary = CResultData.enumLibrary.FINDLINE_INTERSECT;
            m_objResultData       = ( CResultData )objResultData.Clone();

            return(bReturn);
        }
Exemple #20
0
 //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
 //생성 :
 //수정 :
 //목적 : 결과 추상객체
 //설명 :
 //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
 public abstract bool HLGetResult(out CResultData objResultData);