This file is indexed.

/usr/include/osgEarth/PrimitiveIntersector is in libosgearth-dev 2.9.0+dfsg-1.

This file is owned by root:root, with mode 0o644.

The actual contents of the file can be viewed below.

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
/* -*-c++-*- */
/* osgEarth - Dynamic map generation toolkit for OpenSceneGraph
 * Copyright 2016 Pelican Mapping
 * http://osgearth.org
 *
 * osgEarth is free software; you can redistribute it and/or modify
 * it under the terms of the GNU Lesser General Public License as published by
 * the Free Software Foundation; either version 2 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public License
 * along with this program.  If not, see <http://www.gnu.org/licenses/>
 */

#ifndef OSGEARTH_PRIMITIVE_INTERSECTOR_H
#define OSGEARTH_PRIMITIVE_INTERSECTOR_H 1

#include <osgUtil/IntersectionVisitor>
#include <osgEarth/Common>

namespace osgEarth
{

/** Concrete class for implementing line intersections with the scene graph.
  * To be used in conjunction with IntersectionVisitor. */
class OSGEARTH_EXPORT PrimitiveIntersector : public osgUtil::Intersector
{
public:

    /** Convenience constructor for supporting picking in WINDOW, or PROJECTION coordinates
      * In WINDOW coordinates creates a start value of (x,y,0) and end value of (x,y,1).
      * In PROJECTION coordinates (clip space cube) creates a start value of (x,y,-1) and end value of (x,y,1).*/
    PrimitiveIntersector(CoordinateFrame cf, double x, double y, double thickness);

    /** Constructor for initializing with full start and end vectors. */
    PrimitiveIntersector(CoordinateFrame cf, const osg::Vec3d& start, const osg::Vec3d& end, double thickness, bool overlayIgnore=false);

    struct Intersection
    {
        Intersection():
            ratio(-1.0),
            primitiveIndex(0) {}

        Intersection(const Intersection &rhs);

        bool operator < (const Intersection& rhs) const { return ratio < rhs.ratio; }

        typedef std::vector<unsigned int>   IndexList;
        typedef std::vector<double>         RatioList;

        double                          ratio;
        osg::NodePath                   nodePath;
        osg::ref_ptr<osg::Drawable>     drawable;
        osg::ref_ptr<osg::RefMatrix>    matrix;
        osg::Vec3d                      localIntersectionPoint;
        osg::Vec3d                       localIntersectionNormal;
        IndexList                       indexList;
        RatioList                       ratioList;
        unsigned int                    primitiveIndex;

        const osg::Vec3d& getLocalIntersectPoint() const { return localIntersectionPoint; }
        osg::Vec3d getWorldIntersectPoint() const { return matrix.valid() ? localIntersectionPoint * (*matrix) : localIntersectionPoint; }

        const osg::Vec3d& getLocalIntersectNormal() const { return localIntersectionNormal; }
        osg::Vec3d getWorldIntersectNormal() const { return matrix.valid() ? osg::Matrix::transform3x3(osg::Matrix::inverse(*matrix),localIntersectionNormal) : localIntersectionNormal; }
    };

    typedef std::multiset<Intersection> Intersections;

    inline void insertIntersection(const Intersection& intersection) { getIntersections().insert(intersection); }

    inline Intersections& getIntersections() { return _parent ? _parent->_intersections : _intersections; }

    inline Intersection getFirstIntersection() { Intersections& intersections = getIntersections(); return intersections.empty() ? Intersection() : *(intersections.begin()); }

    inline void setStart(const osg::Vec3d& start) { _start = start; }
    inline const osg::Vec3d& getStart() const { return _start; }

    inline void setEnd(const osg::Vec3d& end) { _end = end; }
    inline const osg::Vec3d& getEnd() const { return _end; }

    void setThickness(double thickness);
    inline double getThickness() const { return _thicknessVal; }

    inline bool getOverlayIgnore() const { return _overlayIgnore; }

public:

    virtual Intersector* clone(osgUtil::IntersectionVisitor& iv);

    virtual bool enter(const osg::Node& node);

    virtual void leave();

    virtual void intersect(osgUtil::IntersectionVisitor& iv, osg::Drawable* drawable);

    virtual void reset();

    virtual bool containsIntersections() { return !getIntersections().empty(); }

protected:

    // Internal constructor used for clone request
    PrimitiveIntersector();

    bool intersects(const osg::BoundingSphere& bs);
    bool intersectAndClip(osg::Vec3d& s, osg::Vec3d& e,const osg::BoundingBox& bb);

    unsigned int findPrimitiveIndex(osg::Drawable* drawable, unsigned int index);

    PrimitiveIntersector* _parent;

    osg::Vec3d  _start;
    osg::Vec3d  _end;
    osg::Vec3d  _thickness;
    double _thicknessVal;
    bool _overlayIgnore;

    Intersections _intersections;

};

} // namespace osgEarth

#endif //OSGEARTH_PRIMITIVE_INTERSECTOR_H