diff --git a/sourceCode/workpieceHolePositioning.cpp b/sourceCode/workpieceHolePositioning.cpp index 7aeac8b..411db3a 100644 --- a/sourceCode/workpieceHolePositioning.cpp +++ b/sourceCode/workpieceHolePositioning.cpp @@ -13,7 +13,8 @@ //version 1.4.0 : 添加了华航孔定位功能 //version 1.4.1 : 华航孔定位客户发布初始版本,修正了1.4.0版本的一些问题 //version 1.4.2 : 华航孔定位改进:(1)法向量计算改进(2)添加3x3平滑(3)修正了bug -std::string m_strVersion = "1.4.2"; +//version 1.4.3 : 对1.3.0拓普发孔定位中调平Bug进行了修正 +std::string m_strVersion = "1.4.3"; const char* wd_workpieceHolePositioningVersion(void) { return m_strVersion.c_str(); @@ -683,6 +684,12 @@ void wd_workpieceHolePositioning( double valieCommonNumRatio = 0.25; wd_getHoleInfo(scanLines, lineSegPara, filterParam, growParam, valieCommonNumRatio, segTrees_v, segTrees_h, validObjects); + for (int i = 0; i < lineNum; i++) + { + for (int j = 0; j < (int)scanLinesInput[i].size(); j++) + scanLines[i][j].nPointIdx = 0; //清零 + } + //生成聚类信息, std::vector> clusters; //只记录位置 std::vector clustersRoi3D; @@ -696,37 +703,41 @@ void wd_workpieceHolePositioning( for (int m = 0; m < (int)segTrees_v[vTreeIdx].treeNodes.size(); m++) { SWD_segFeature& a_seg = segTrees_v[vTreeIdx].treeNodes[m]; - if (scanLinesInput[a_seg.lineIdx][a_seg.endPtIdx].nPointIdx == 0) + if (scanLines[a_seg.lineIdx][a_seg.endPtIdx].nPointIdx == 0) { + scanLines[a_seg.lineIdx][a_seg.endPtIdx].nPointIdx = vTreeIdx + 1; // 0x01; scanLinesInput[a_seg.lineIdx][a_seg.endPtIdx].nPointIdx = vTreeIdx + 1; // 0x01; SVzNL2DPoint a_pos = { a_seg.lineIdx , a_seg.endPtIdx }; a_cluster.push_back(a_pos); - _updateRoi3D(a_roi3D, scanLinesInput[a_seg.lineIdx][a_seg.endPtIdx].pt3D); + _updateRoi3D(a_roi3D, scanLines[a_seg.lineIdx][a_seg.endPtIdx].pt3D); } - if (scanLinesInput[a_seg.lineIdx][a_seg.startPtIdx].nPointIdx == 0) + if (scanLines[a_seg.lineIdx][a_seg.startPtIdx].nPointIdx == 0) { + scanLines[a_seg.lineIdx][a_seg.startPtIdx].nPointIdx = vTreeIdx + 1; // 0x01; scanLinesInput[a_seg.lineIdx][a_seg.startPtIdx].nPointIdx = vTreeIdx + 1; // 0x01; SVzNL2DPoint a_pos = { a_seg.lineIdx , a_seg.startPtIdx }; a_cluster.push_back(a_pos); - _updateRoi3D(a_roi3D, scanLinesInput[a_seg.lineIdx][a_seg.startPtIdx].pt3D); + _updateRoi3D(a_roi3D, scanLines[a_seg.lineIdx][a_seg.startPtIdx].pt3D); } } for (int m = 0; m < (int)segTrees_h[hTreeIdx].treeNodes.size(); m++) { SWD_segFeature& a_seg = segTrees_h[hTreeIdx].treeNodes[m]; - if (scanLinesInput[a_seg.startPtIdx][a_seg.lineIdx].nPointIdx == 0) + if (scanLines[a_seg.startPtIdx][a_seg.lineIdx].nPointIdx == 0) { + scanLines[a_seg.startPtIdx][a_seg.lineIdx].nPointIdx = vTreeIdx + 1; // 0x02; scanLinesInput[a_seg.startPtIdx][a_seg.lineIdx].nPointIdx = vTreeIdx + 1; // 0x02; SVzNL2DPoint a_pos = { a_seg.startPtIdx , a_seg.lineIdx }; a_cluster.push_back(a_pos); - _updateRoi3D(a_roi3D, scanLinesInput[a_seg.startPtIdx][a_seg.lineIdx].pt3D); + _updateRoi3D(a_roi3D, scanLines[a_seg.startPtIdx][a_seg.lineIdx].pt3D); } - if (scanLinesInput[a_seg.endPtIdx][a_seg.lineIdx].nPointIdx == 0) + if (scanLines[a_seg.endPtIdx][a_seg.lineIdx].nPointIdx == 0) { + scanLines[a_seg.endPtIdx][a_seg.lineIdx].nPointIdx = vTreeIdx + 1; // 0x02; scanLinesInput[a_seg.endPtIdx][a_seg.lineIdx].nPointIdx = vTreeIdx + 1; // 0x02; SVzNL2DPoint a_pos = { a_seg.endPtIdx , a_seg.lineIdx }; a_cluster.push_back(a_pos); - _updateRoi3D(a_roi3D, scanLinesInput[a_seg.endPtIdx][a_seg.lineIdx].pt3D); + _updateRoi3D(a_roi3D, scanLines[a_seg.endPtIdx][a_seg.lineIdx].pt3D); } } clusters.push_back(a_cluster);