double UniGridApprox::CompMeshError() { Base::Builder3D log3d; MeshCore::MeshKernel mesh; BRepBuilderAPI_MakeFace Face(aAdaptorSurface.BSpline()); GeomAPI_ProjectPointOnSurf proj; best_fit::Tesselate_Face(Face.Face(), mesh, float(0.1)); cout << mesh.CountPoints() << endl; std::vector<Base::Vector3f> normals = best_fit::Comp_Normals(mesh); double tmp = 0.0, sqrdis; double errSum = 0.0; int c=0; m_err.clear(); m_err.resize(mesh.CountPoints(), 0.0); MeshCore::MeshFacetGrid aFacetGrid(m_Mesh); MeshCore::MeshAlgorithm malg(m_Mesh); MeshCore::MeshAlgorithm malg2(m_Mesh); MeshCore::MeshPointIterator p_it(mesh); Base::Vector3f projPoint, distVec, pnt; unsigned long facetIndex; for (p_it.Begin(); p_it.More(); p_it.Next()) { if (!malg.NearestFacetOnRay(*p_it, normals[p_it.Position()], aFacetGrid, projPoint, facetIndex)) // gridoptimiert { if (malg2.NearestFacetOnRay(*p_it, normals[p_it.Position()], projPoint, facetIndex)) { pnt.x = p_it->x; pnt.y = p_it->y; pnt.z = p_it->z; log3d.addSingleLine(pnt,projPoint); distVec = projPoint - pnt; sqrdis = distVec*distVec; } else { cout << "oops, "; continue; } } else { pnt.x = p_it->x; pnt.y = p_it->y; pnt.z = p_it->z; log3d.addSingleLine(pnt,projPoint); distVec = projPoint - pnt; sqrdis = distVec*distVec; } errSum += sqrt(sqrdis); ++c; if (sqrt(sqrdis) > tmp) { m_err[p_it.Position()] = sqrt(sqrdis); tmp = m_err[p_it.Position()]; } } log3d.saveToFile("c:/Error.iv"); return errSum/c; }