From b7514f1e7d1ef5fcf875eb5d862ebaa9dfb30901 Mon Sep 17 00:00:00 2001 From: jerryzeng Date: Fri, 10 Apr 2026 23:58:27 +0800 Subject: [PATCH] =?UTF-8?q?workpieceHolePositioning=20version=201.4.3=20:?= =?UTF-8?q?=20=E5=AF=B91.3.0=E6=8B=93=E6=99=AE=E5=8F=91=E5=AD=94=E5=AE=9A?= =?UTF-8?q?=E4=BD=8D=E4=B8=AD=E8=B0=83=E5=B9=B3Bug=E8=BF=9B=E8=A1=8C?= =?UTF-8?q?=E4=BA=86=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sourceCode/workpieceHolePositioning.cpp | 29 +++++++++++++++++-------- 1 file changed, 20 insertions(+), 9 deletions(-) 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);