Core Scene Graph Data Structures in C++


IndexedFaceSet

Only pointers to IndexedFaceSet nodes and IndexedLineSet nodes are allowed as values for the geometry field of a Shape node. In the VRML'97 Standard the IndexedFaceSet node is defined as follows:

IndexedFaceSet {
  SFNode	color           NULL	
  SFNode	coord           NULL	
  SFNode	normal          NULL	
  SFNode	texCoord        NULL	
  SFBool	ccw             TRUE
  MFInt32	colorIndex      []		# [-1,)
  SFBool	colorPerVertex  TRUE		
  SFBool	convex          TRUE		
  MFInt32	coordIndex      []		# [-1,)
  SFFloat	creaseAngle	0		# [ 0,)
  MFInt32	normalIndex	[]		# [-1,)
  SFBool	normalPerVertex TRUE		
  SFBool	solid           TRUE		
  MFInt32	texCoordIndex   []		# [-1,)
}

In the DGP2023 implementation the IndexedFaceSet C++ class has the following private interface.

class IndexedFaceSet : public Node {
  public:
                        IndexedFaceSet();
                       ~IndexedFaceSet();
    void                clear();
    bool&               getCcw();
    bool&               getConvex();
    float&              getCreaseangle();
    bool&               getSolid();
    bool&               getNormalPerVertex();
    bool&               getColorPerVertex();
    vector<float>&      getCoord();
    vector<int>&        getCoordIndex();
    vector<float>&      getNormal();
    vector<int>&        getNormalIndex();
    vector<float>&      getColor();
    vector<int>&        getColorIndex();
    vector<float>&      getTexCoord();
    vector<int>&        getTexCoordIndex();
    bool                isTriangleMesh();
    int                 getNumberOfFaces();
    int                 getNumberOfCorners();
    int                 getNumberOfCoord();
    int                 getNumberOfNormal();
    int                 getNumberOfColor();
    int                 getNumberOfTexCoord();
    void                setNormalPerVertex(bool value);
    void                setColorPerVertex(bool value);
    static const string stringBinding(Binding b);
    Binding             getCoordBinding();
    Binding             getNormalBinding();
    Binding             getColorBinding();
    Binding             getTexCoordBinding();
    virtual bool        isIndexedFaceSet() const;
    virtual string      getType()          const;
};
  enum IndexedFaceSet::Binding {
    PB_NONE = 0,
    PB_PER_VERTEX,
    PB_PER_FACE,
    PB_PER_FACE_INDEXED,
    PB_PER_CORNER
  };