ReverseEngineering: implement mesh segmentation workflow

This commit is contained in:
wmayer
2020-03-03 16:46:34 +01:00
committed by Bernd Hahnebach
parent cfb176e08c
commit 5b8dc807e8
8 changed files with 603 additions and 8 deletions

View File

@@ -171,6 +171,21 @@ float PlaneSurfaceFit::GetDistanceToSurface(const Base::Vector3f& pnt) const
return fitter->GetDistanceToPlane(pnt);
}
Base::Vector3f PlaneSurfaceFit::Project(const Base::Vector3f& pt) const
{
Base::Vector3f prj(pt);
if (!fitter) {
prj.ProjectToPlane(basepoint, normal);
}
else {
Base::Vector3f base = fitter->GetBase();
Base::Vector3f norm = fitter->GetNormal();
prj.ProjectToPlane(base, norm);
}
return prj;
}
// --------------------------------------------------------
CylinderSurfaceFit::CylinderSurfaceFit()
@@ -257,6 +272,12 @@ float CylinderSurfaceFit::GetDistanceToSurface(const Base::Vector3f& pnt) const
return (dist - radius);
}
Base::Vector3f CylinderSurfaceFit::Project(const Base::Vector3f& pt) const
{
//TODO
return pt;
}
// --------------------------------------------------------
SphereSurfaceFit::SphereSurfaceFit()
@@ -332,6 +353,12 @@ float SphereSurfaceFit::GetDistanceToSurface(const Base::Vector3f& pnt) const
return (dist - radius);
}
Base::Vector3f SphereSurfaceFit::Project(const Base::Vector3f& pt) const
{
//TODO
return pt;
}
// --------------------------------------------------------
MeshDistanceGenericSurfaceFitSegment::MeshDistanceGenericSurfaceFitSegment(AbstractSurfaceFit* fit,
@@ -383,6 +410,17 @@ void MeshDistanceGenericSurfaceFitSegment::AddFacet(const MeshFacet& face)
fitter->AddTriangle(triangle);
}
std::vector<Base::Vector3f> MeshDistanceGenericSurfaceFitSegment::Project(const std::vector<Base::Vector3f>& pts) const
{
std::vector<Base::Vector3f> prj;
prj.reserve(pts.size());
for (const auto it : pts) {
prj.push_back(fitter->Project(it));
}
return prj;
}
// --------------------------------------------------------
bool MeshCurvaturePlanarSegment::TestFacet (const MeshFacet &rclFacet) const