[osg-users] osg::LineSegment intersect with Box and Sphere inconsistency

Robert Osfield robert.osfield at gmail.com
Mon Apr 27 12:22:39 PDT 2015


Hi Wojtek,

I have decided I'd rather change the method name and break the build
rather than silently change the behaviour of method in a way that
could break end user code.  What I have gone for is:

--- include/osg/LineSegment     (revision 14855)
+++ include/osg/LineSegment     (working copy)
@@ -44,45 +44,48 @@

         inline bool valid() const { return _s.valid() && _e.valid()
&& _s!=_e; }

+
         /** return true if segment intersects BoundingBox. */
         bool intersect(const BoundingBox& bb) const;

-        /** return true if segment intersects BoundingBox
-          * and return the intersection ratios.
+        /** return true if segment intersects BoundingBox and
+          * set float ratios for the first and second intersections,
where the ratio is 0.0 at the segment start point, and 1.0 at the
segment end point.
         */
-        bool intersect(const BoundingBox& bb,float& r1,float& r2) const;
+        bool intersectAndComputeRatios(const BoundingBox& bb, float&
ratioFromStartToEnd1, float& ratioFromStartToEnd2) const;

-        /** return true if segment intersects BoundingBox
-          * and return the intersection ratios.
+        /** return true if segment intersects BoundingBox and
+          * set double ratios for the first and second intersections,
where the ratio is 0.0 at the segment start point, and 1.0 at the
segment end point.
         */
-        bool intersect(const BoundingBox& bb,double& r1,double& r2) const;
+        bool intersectAndComputeRatios(const BoundingBox& bb, double&
ratioFromStartToEnd1, double& ratioFromStartToEnd2) const;

+
         /** return true if segment intersects BoundingSphere. */
         bool intersect(const BoundingSphere& bs) const;

-        /** return true if segment intersects BoundingSphere and return the
-          * intersection ratio.
+        /** return true if segment intersects BoundingSphere and
+          * set float ratios for the first and second intersections,
where the ratio is 0.0 at the segment start point, and 1.0 at the
segment end point.
         */
-        bool intersect(const BoundingSphere& bs,float& r1,float& r2) const;
+        bool intersectAndComputeRatios(const BoundingSphere& bs,
float& ratioFromStartToEnd1, float& ratioFromStartToEnd2) const;

-        /** return true if segment intersects BoundingSphere and return the
-          * intersection ratio.
+        /** return true if segment intersects BoundingSphere and
+          * set double ratios for the first and second intersections,
where the ratio is 0.0 at the segment start point, and 1.0 at the
segment end point.
         */
-        bool intersect(const BoundingSphere& bs,double& r1,double& r2) const;
+        bool intersectAndComputeRatios(const BoundingSphere&
bs,double& ratioFromStartToEnd1, double& ratioFromStartToEnd2) const;

-        /** return true if segment intersects triangle
-          * and set ratio long segment.
+        /** return true if segment intersects triangle and
+          * set float ratios where the ratio is 0.0 at the segment
start point, and 1.0 at the segment end point.
         */
-        bool intersect(const Vec3f& v1,const Vec3f& v2,const Vec3f&
v3,float& r);
+        bool intersect(const Vec3f& v1,const Vec3f& v2,const Vec3f&
v3,float& ratioFromStartToEnd);

-        /** return true if segment intersects triangle
-          * and set ratio long segment.
+        /** return true if segment intersects triangle and
+          * set double ratios where the ratio is 0.0 at the segment
start point, and 1.0 at the segment end point.
         */
-        bool intersect(const Vec3d& v1,const Vec3d& v2,const Vec3d&
v3,double& r);
+        bool intersect(const Vec3d& v1,const Vec3d& v2,const Vec3d&
v3,double& ratioFromStartToEnd);

I hope this make sense.  This change is now checked into svn/trunk.

Cheers,
Robert.



More information about the osg-users mailing list