/// <summary> /// Related Edge Finder (Caliper Tool) Operations /// </summary> /// <param name="iCamNo"></param> /// <param name="dPosX"></param> /// <param name="dPosY"></param> /// <returns></returns> public int FindEdge(int iCamNo, ref CEdgeData pEdgeData) { #if SIMULATION_VISION return SUCCESS; #endif // Vision System이 초기화 된지를 확인함 if (m_bSystemInit == false) return GenerateErrorCode(ERR_VISION_SYSTEM_FAIL); // Edge Find 지령 m_RefComp.System.FindEdge(iCamNo,ref pEdgeData); if(pEdgeData.m_bSuccess) { pEdgeData.m_strResult = ""; for (int i = 0; i < pEdgeData.m_iEdgeNum; i++) { pEdgeData.m_strResult = pEdgeData.m_strResult + string.Format("-Edge No:{0} P_X:{1:0.00} P_Y:{2:0.00} \n", i+1, pEdgeData.m_dPosX[i], pEdgeData.m_dPosY[i]); } pEdgeData.m_strResult = "Edge Search OK \n" + pEdgeData.m_strResult; } else { pEdgeData.m_strResult = "Edge Search Fail"; } return SUCCESS; }
private void btnEdgeFind_Click(object sender, EventArgs e) { int iCamNo = CMainFrame.LWDicer.m_Vision.m_iCurrentViewNum; CEdgeData mEdgeData = new CEdgeData(); CMainFrame.LWDicer.m_Vision.SetEdgeFinderArea(iCamNo); CMainFrame.LWDicer.m_Vision.FindEdge(iCamNo, ref mEdgeData); lblResult.Text = mEdgeData.m_strResult; }
/// <summary> /// Edge를 찾음 /// dPosX,dPosY에 검출된 값을 보내줌 /// </summary> /// <param name="iCam"></param> /// <param name="dPosX"></param> /// <param name="dPosY"></param> /// <returns></returns> public int FindEdge(int iCam, ref CEdgeData pEdgeData) { // Edge 검출 설정이 되어 있는지를 확인함. if (m_EdgeMaker == MIL.M_NULL) { return(ERR_VISION_ERROR); } // 검출할 영상 Image를 가져온다. MIL_ID m_MilImage = m_pDisplay[iCam].GetImage(); // 결과를 Display할 Overlay를 가져온다. MIL_ID m_DisplayGraph = m_pDisplay[iCam].GetViewGraph(); // Find the marker and compute all applicable measurements. // Edge검출 명령 실행 MIL.MmeasFindMarker(MIL.M_DEFAULT, m_MilImage, m_EdgeMaker, MIL.M_DEFAULT); // Overlay Clear MIL.MgraClear(MIL.M_DEFAULT, m_DisplayGraph); // Edge 검출 영역을 Overlay에 표시함 MIL.MgraColor(MIL.M_DEFAULT, MIL.M_COLOR_GREEN); MIL.MmeasDraw(MIL.M_DEFAULT, m_EdgeMaker, m_DisplayGraph, MIL.M_DRAW_SEARCH_REGION, MIL.M_DEFAULT, MIL.M_RESULT); // Edge 개수 확인 MIL_INT FindEdgeNum = 0; MIL.MmeasGetResult(m_EdgeMaker, MIL.M_NUMBER + MIL.M_TYPE_MIL_INT, ref FindEdgeNum, MIL.M_NULL); // Edge 검출 되었을 경우 if (FindEdgeNum >= 1) { pEdgeData.m_bSuccess = true; pEdgeData.m_iEdgeNum = FindEdgeNum; pEdgeData.m_dPosX = new double[FindEdgeNum]; pEdgeData.m_dPosY = new double[FindEdgeNum]; // 검출된 Edge를 Overlay에 표시함. MIL.MgraColor(MIL.M_DEFAULT, MIL.M_COLOR_RED); MIL.MmeasDraw(MIL.M_DEFAULT, m_EdgeMaker, m_DisplayGraph, MIL.M_DRAW_POSITION, MIL.M_DEFAULT, MIL.M_RESULT); MIL.MmeasGetResult(m_EdgeMaker, MIL.M_POSITION + MIL.M_EDGE_FIRST, ref pEdgeData.m_dPosX[0], ref pEdgeData.m_dPosY[0]); return(SUCCESS); } else { pEdgeData.m_bSuccess = false; //pEdgeData.m_dPosX = 0.0; //pEdgeData.m_dPosY = 0.0; pEdgeData.m_iEdgeNum = 0; return(GenerateErrorCode(ERR_VISION_EDGE_SEARCH_FAIL)); } }