This commit is contained in:
杰仔 2026-04-11 00:06:40 +08:00
commit 69b029bae7

View File

@ -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<std::vector< SVzNL2DPoint>> clusters; //只记录位置
std::vector<SVzNL3DRangeD> 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);