From 4e71e285357454ace3aaa1f39f26f92ec6fdee53 Mon Sep 17 00:00:00 2001 From: nico Date: Tue, 14 Mar 2017 12:55:57 +0100 Subject: [PATCH] added PolygonPointDistance and PolygonBox functions --- vcg/space/polygon3.h | 52 +++++++++++++++++++++++++++++++++++--------- 1 file changed, 42 insertions(+), 10 deletions(-) diff --git a/vcg/space/polygon3.h b/vcg/space/polygon3.h index 1016b03f..3d293eb8 100644 --- a/vcg/space/polygon3.h +++ b/vcg/space/polygon3.h @@ -28,6 +28,7 @@ #include #include #include +#include namespace vcg { @@ -425,13 +426,13 @@ void GetPolyTemplatePos(const PolygonType &F, dirX.Normalize(); dirY.Normalize(); dirZ.Normalize(); -// CoordType dirXN=dirX;dirXN.Normalize(); -// CoordType dirYN=dirY;dirYN.Normalize(); -// CoordType dirZN=dirZ;dirZN.Normalize(); + // CoordType dirXN=dirX;dirXN.Normalize(); + // CoordType dirYN=dirY;dirYN.Normalize(); + // CoordType dirZN=dirZ;dirZN.Normalize(); -// dirX=dirX*0.8+dirXN*0.2; -// dirY=dirY*0.8+dirYN*0.2; -// dirZ=dirZ*0.8+dirZN*0.2; + // dirX=dirX*0.8+dirXN*0.2; + // dirY=dirY*0.8+dirYN*0.2; + // dirZ=dirZ*0.8+dirZN*0.2; } ///set the Rotation matrix @@ -456,10 +457,10 @@ void GetPolyTemplatePos(const PolygonType &F, ScalarType AreaTemplate=Area(TemplatePos); ScalarType AreaUniform=Area(UniformPos); -// if (TargetArea>0) -// { -// AreaUniform*=(AreaUniform/TargetArea); -// } + // if (TargetArea>0) + // { + // AreaUniform*=(AreaUniform/TargetArea); + // } ScalarType Scale=sqrt(AreaTemplate/AreaUniform); @@ -530,5 +531,36 @@ typename PolygonType::ScalarType PolyAspectRatio(const PolygonType &F, return(diff); } + +template +typename PolygonType::ScalarType PolygonPointDistance(const PolygonType &F, + const vcg::Point3 &pos) +{ + typedef typename PolygonType::ScalarType ScalarType; + typedef typename PolygonType::CoordType CoordType; + + ScalarType minD=std::numeric_limits::max(); + CoordType bary=vcg::PolyBarycenter(F); + for (size_t j=0;j T(F.cP0(j),F.cP1(j),bary); + ScalarType dist; + CoordType closest; + vcg::TrianglePointDistance(T,pos,dist,closest); + if (dist>minD)continue; + minD=dist; + } + return minD; +} + +template +vcg::Box3 PolygonBox(const PolygonType &F) +{ + typedef typename PolygonType::ScalarType ScalarType; + vcg::Box3 bb; + for (size_t j=0;jP()); + return bb; +} } #endif // POLYGON_H