---
name: "SoNormalBundle"
section: "3"
platform: "linux"
package: "coin"
version: "1:4.0.10-1"
release: "Arch Linux 2026-11-01"
platforms: ["linux"]
url: "https://new.carta.tech/SoNormalBundle"
---

# SoNormalBundle(3)

The SoNormalBundle class simplifies normal handling.

## NAME

SoNormalBundle - The **SoNormalBundle** class simplifies normal handling.

## SYNOPSIS

\#include \<Inventor/bundles/SoNormalBundle.h\>

Inherits **SoBundle**.

### Public Member Functions

**SoNormalBundle** (**SoAction** \*action, SbBool forrendering)\
 **~SoNormalBundle** ()\
 SbBool **shouldGenerate** (int numneeded)\
 void **initGenerator** (int initnum=100)\
 void **beginPolygon** (void)\
 void **polygonVertex** (const **SbVec3f** &v)\
 void **endPolygon** (void)\
 void **triangle** (const **SbVec3f** &p1, const **SbVec3f** &p2, const **SbVec3f** &p3)\
 void **generate** (int startindex=0, SbBool addtostate=TRUE)\
 const **SbVec3f** \* **getGeneratedNormals** (void) const\
 int **getNumGeneratedNormals** (void) const\
 void **set** (int32\_t num, const **SbVec3f** \*normals)\
 const **SbVec3f** & **get** (int index) const\
 void **send** (int index) const\

### Public Attributes

**SoNormalGenerator** \* **generator**\

### Additional Inherited Members

Protected Member Functions inherited from **SoBundle** **SoBundle** (**SoAction** \*action)\
 **~SoBundle** ()\

Protected Attributes inherited from **SoBundle** **SoState** \* **state**\
 The state of the current action.

## Detailed Description

The **SoNormalBundle** class simplifies normal handling.

This class is currently not used in Coin but is provided for API compatibility.

## Constructor & Destructor Documentation

### SoNormalBundle::SoNormalBundle (SoAction \* action, SbBool forrendering)

Constructor.

### SoNormalBundle::~SoNormalBundle ()

Destructor.

## Member Function Documentation

### SbBool SoNormalBundle::shouldGenerate (int numneeded)

Returns FALSE if there are normals on the state. Otherwise **initGenerator()** is called with *numneeded* as argument, and TRUE is returned.

### void SoNormalBundle::initGenerator (int initnum = 100)

Initializes the normal generator. *initnum* is a hint that should contain the approximate number of normals to be generated.

### void SoNormalBundle::beginPolygon (void )

Start polygon specification. Call **polygonVertex()** for each vertex in the polygon, and then **endPolygon()** to close the polygon.

**See also**

**polygonVertex()**, **endPolygon()**

### void SoNormalBundle::polygonVertex (const SbVec3f & v)

Call for each vertex in a polygon.

**See also**

**beginPolygon()**, **endPolygon()**

### void SoNormalBundle::endPolygon (void )

Call to close a polygon.

**See also**

**beginPolygon()**, **polygonVertex()**

### void SoNormalBundle::triangle (const SbVec3f & p1, const SbVec3f & p2, const SbVec3f & p3)

Convenience method to specify a triangle. *p1*, *p2*, and *p3* are the triangles vertices.

### void SoNormalBundle::generate (int startindex = 0, SbBool addtostate = TRUE)

Generate normals for the shape. *startindex* should always be 0 (the **SoNonIndexedShape::startIndex** field is obsoleted). *addtostate* should be true if the generated normals should be pushed onto the current state.

### const SbVec3f \* SoNormalBundle::getGeneratedNormals (void ) const

Returns the number of generated normals.

### int SoNormalBundle::getNumGeneratedNormals (void ) const

Returns a pointer to the generated normals.

### void SoNormalBundle::set (int32\_t num, const SbVec3f \* normals)

Can be used by nodes that generate their own normals. The state will be updated with the new normals, and the state will be popped again when the **SoNormalBundle** destructor is called.

### const SbVec3f & SoNormalBundle::get (int index) const

Returns the *index'th* normal from the state.

### void SoNormalBundle::send (int index) const

Send the index'th normal to OpenGL.

## Author

Generated automatically by Doxygen for Coin from the source code.
