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; }
/// <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); }
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; }
/// <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)); }
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// //생성 : //수정 : //목적 : 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); }
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); }
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// //생성 : //수정 : //목적 : 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); }
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); }
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// //생성 : //수정 : //목적 : Run 추상객체 //설명 : ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// public abstract bool HLRun(Bitmap bipmapImage, out CResultData objResultData);
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// //생성 : //수정 : //목적 : 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); }
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// //생성 : //수정 : //목적 : 결과 추상객체 //설명 : ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// public abstract bool HLGetResult(out CResultData objResultData);