diff --git a/src/osgUtil/LineSegmentIntersector.cpp b/src/osgUtil/LineSegmentIntersector.cpp index 65b61c8be..c9607266b 100644 --- a/src/osgUtil/LineSegmentIntersector.cpp +++ b/src/osgUtil/LineSegmentIntersector.cpp @@ -28,7 +28,7 @@ using namespace osgUtil; namespace LineSegmentIntersectorUtils { -struct Settings : public osg::Referenced +struct Settings { Settings() : _lineSegIntersector(0), @@ -46,7 +46,7 @@ struct Settings : public osg::Referenced template struct IntersectFunctor { - osg::ref_ptr _settings; + Settings* _settings; unsigned int _primitiveIndex; Vec3 _start; @@ -518,16 +518,16 @@ void LineSegmentIntersector::intersect(osgUtil::IntersectionVisitor& iv, osg::Dr { if (reachedLimit()) return; - osg::ref_ptr settings = new LineSegmentIntersectorUtils::Settings; - settings->_lineSegIntersector = this; - settings->_iv = &iv; - settings->_drawable = drawable; - settings->_limitOneIntersection = (_intersectionLimit == LIMIT_ONE_PER_DRAWABLE || _intersectionLimit == LIMIT_ONE); + LineSegmentIntersectorUtils::Settings settings; + settings._lineSegIntersector = this; + settings._iv = &iv; + settings._drawable = drawable; + settings._limitOneIntersection = (_intersectionLimit == LIMIT_ONE_PER_DRAWABLE || _intersectionLimit == LIMIT_ONE); osg::Geometry* geometry = drawable->asGeometry(); if (geometry) { - settings->_vertices = dynamic_cast(geometry->getVertexArray()); + settings._vertices = dynamic_cast(geometry->getVertexArray()); } osg::KdTree* kdTree = iv.getUseKdTreeWhenAvailable() ? dynamic_cast(drawable->getShape()) : 0; @@ -535,7 +535,7 @@ void LineSegmentIntersector::intersect(osgUtil::IntersectionVisitor& iv, osg::Dr if (getPrecisionHint()==USE_DOUBLE_CALCULATIONS) { osg::TemplatePrimitiveFunctor > intersector; - intersector.set(s,e, settings.get()); + intersector.set(s,e, &settings); if (kdTree) kdTree->intersect(intersector, kdTree->getNode(0)); else drawable->accept(intersector); @@ -543,7 +543,7 @@ void LineSegmentIntersector::intersect(osgUtil::IntersectionVisitor& iv, osg::Dr else { osg::TemplatePrimitiveFunctor > intersector; - intersector.set(s,e, settings.get()); + intersector.set(s,e, &settings); if (kdTree) kdTree->intersect(intersector, kdTree->getNode(0)); else drawable->accept(intersector);