diff --git a/vcg/space/intersection3.h b/vcg/space/intersection3.h index 5a9d32e9..e1edbb55 100644 --- a/vcg/space/intersection3.h +++ b/vcg/space/intersection3.h @@ -670,7 +670,7 @@ bool IntersectionSegmentTriangle( const vcg::Segment3 & seg, const Point3 & vert0, const Point3 & vert1, const Point3 & vert2, - ScalarType & a ,ScalarType & b, ScalarType & dist) + ScalarType & a ,ScalarType & b) { //control intersection of bounding boxes vcg::Box3 bb0,bb1; @@ -688,12 +688,14 @@ bool IntersectionSegmentTriangle( const vcg::Segment3 & seg, //first set both directions of ray vcg::Line3 line; vcg::Point3 dir; + ScalarType lenght=seg.Length(); dir=(seg.P1()-seg.P0()); dir.Normalize(); line.Set(seg.P0(),dir); - if(IntersectionLineTriangle(line,vert0,vert1,vert2,dist,a,b)) - return (dist>=0 && dist<=1.0); - return false; + ScalarType orig_dist; + if(IntersectionLineTriangle(line,vert0,vert1,vert2,orig_dist,a,b)) + return (orig_dist<=lenght); + return false; } /** * Compute the intersection between a segment and a triangle. @@ -702,9 +704,9 @@ bool IntersectionSegmentTriangle( const vcg::Segment3 & seg, template bool IntersectionSegmentTriangle( const vcg::Segment3 & seg, const TriangleType &t, - typename TriangleType::ScalarType & a ,typename TriangleType::ScalarType & b, typename TriangleType::ScalarType & dist) + typename TriangleType::ScalarType & a ,typename TriangleType::ScalarType & b) { - return IntersectionSegmentTriangle(seg,t.P(0),t.P(1),t.P(2),a,b,dist); + return IntersectionSegmentTriangle(seg,t.P(0),t.P(1),t.P(2),a,b); } template