diff --git a/examples/osgintersection/osgintersection.cpp b/examples/osgintersection/osgintersection.cpp index 334b3baf3..1bf4b39c3 100644 --- a/examples/osgintersection/osgintersection.cpp +++ b/examples/osgintersection/osgintersection.cpp @@ -141,6 +141,18 @@ int main(int argc, char **argv) osg::Timer_t endTick = osg::Timer::instance()->tick(); std::cout<<"Completed in "<delta_s(startTick,endTick)<first<<" "<second< +#include + #include #include @@ -19,6 +21,47 @@ using namespace osgSim; +namespace ElevationSliceUtils +{ + +struct DistanceHeightXYZ +{ + + DistanceHeightXYZ(): + distance(0.0), + height(0.0) {} + + DistanceHeightXYZ(double d, double h, const osg::Vec3d& pos): + distance(d), + height(h), + position(pos) {} + + double distance; + double height; + osg::Vec3d position; + + bool operator < ( const DistanceHeightXYZ& rhs) const + { + // small distance values first + if (distance < rhs.distance) return true; + if (distance > rhs.distance) return false; + + // greatest heights first + if (height > rhs.height) return true; + if (height < rhs.height) return false; + + return false; + } + + bool equal_distance(const DistanceHeightXYZ& rhs, double epsilon=1e-6) const + { + return osg::absolute(rhs.distance - distance) <= epsilon; + } + +}; + +} + ElevationSlice::ElevationSlice() { setDatabaseCacheReadCallback(new DatabaseCacheReadCallback); @@ -94,20 +137,117 @@ void ElevationSlice::computeIntersections(osg::Node* scene) scene->accept(_intersectionVisitor); osgUtil::PlaneIntersector::Intersections& intersections = intersector->getIntersections(); - osg::notify(osg::NOTICE)<getIntersections()="<<&(intersector->getIntersections())<_polyline; new_intersection.nodePath = iv.getNodePath(); new_intersection.drawable = drawable;