---
name: "SoSelectOne"
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/SoSelectOne"
---

# SoSelectOne(3)

The SoSelectOne class is used to select one value from a set of values.

## NAME

SoSelectOne - The **SoSelectOne** class is used to select one value from a set of values.

## SYNOPSIS

\#include \<Inventor/engines/SoSelectOne.h\>

Inherits **SoEngine**.

### Public Member Functions

virtual **SoType** **getTypeId** (void) const\
 Returns the type identification of an object derived from a class inheriting **SoBase**. This is used for runtime type checking and *downward"*casting. virtual const **SoFieldData** \* **getFieldData** (void) const\
 virtual const **SoEngineOutputData** \* **getOutputData** (void) const\
 **SoSelectOne** (**SoType** inputtype)\

Public Member Functions inherited from **SoEngine** void **evaluateWrapper** (void)\
 virtual int **getOutputs** (**SoEngineOutputList** &l) const\
 **SoEngineOutput** \* **getOutput** (const **SbName** &outputname) const\
 SbBool **getOutputName** (const **SoEngineOutput** \*output, **SbName** &outputname) const\
 SbBool **isNotifying** (void) const\
 virtual void **notify** (**SoNotList** \*nl)\
 **SoEngine** \* **copy** (void) const\
 virtual **SoFieldContainer** \* **copyThroughConnection** (void) const\
 SbBool **shouldCopy** (void) const\

Public Member Functions inherited from **SoFieldContainer** void **setToDefaults** (void)\
 SbBool **hasDefaultValues** (void) const\
 SbBool **fieldsAreEqual** (const **SoFieldContainer** \*container) const\
 void **copyFieldValues** (const **SoFieldContainer** \*container, SbBool copyconnections=FALSE)\
 SbBool **set** (const char \*const fielddata)\
 void **get** (**SbString** &fielddata)\
 virtual int **getFields** (**SoFieldList** &l) const\
 virtual int **getAllFields** (**SoFieldList** &l) const\
 virtual **SoField** \* **getField** (const **SbName** &name) const\
 virtual **SoField** \* **getEventIn** (const **SbName** &name) const\
 virtual **SoField** \* **getEventOut** (const **SbName** &name) const\
 SbBool **getFieldName** (const **SoField** \*const field, **SbName** &name) const\
 SbBool **enableNotify** (const SbBool flag)\
 SbBool **isNotifyEnabled** (void) const\
 SbBool **set** (const char \*fielddata, **SoInput** \*input)\
 void **get** (**SbString** &fielddata, **SoOutput** \*out)\
 virtual SbBool **validateNewFieldValue** (**SoField** \*field, void \*newval)\
 virtual void **addWriteReference** (**SoOutput** \*out, SbBool isfromfield=FALSE)\
 SbBool **getIsBuiltIn** (void) const\
 virtual void **getFieldsMemorySize** (size\_t &managed, size\_t &unmanaged) const\
 void **setUserData** (void \*userdata) const\
 void \* **getUserData** (void) const\

Public Member Functions inherited from **SoBase** void **ref** (void) const\
 void **unref** (void) const\
 void **unrefNoDelete** (void) const\
 int32\_t **getRefCount** (void) const\
 void **touch** (void)\
 SbBool **isOfType** (**SoType** type) const\
 Returns TRUE if the type of this object is either of the same type or inherited from *type*.  virtual **SbName** **getName** (void) const\
 virtual void **setName** (const **SbName** &newname)\
 virtual void **startNotify** (void)\
 void **addAuditor** (void \*const auditor, const **SoNotRec::Type** type)\
 void **removeAuditor** (void \*const auditor, const **SoNotRec::Type** type)\
 const **SoAuditorList** & **getAuditors** (void) const\
 SbBool **shouldWrite** (void)\
 void **assertAlive** (void) const\

### Static Public Member Functions

static **SoType** **getClassTypeId** (void)\
 static void \* **createInstance** (void)\
 static void **initClass** (void)\
 Sets up initialization for data common to all instances of this class, like submitting necessary information to the Coin type system.

Static Public Member Functions inherited from **SoEngine** static void **initClass** (void)\
 Sets up initialization for data common to all instances of this class, like submitting necessary information to the Coin type system.     static void **initClasses** (void)\
 static **SoType** **getClassTypeId** (void)\
 This static method returns the **SoType** object associated with objects of this class.     static **SoEngine** \* **getByName** (const **SbName** &name)\
 static int **getByName** (const **SbName** &name, **SoEngineList** &el)\

Static Public Member Functions inherited from **SoFieldContainer** static void **initClass** (void)\
 Sets up initialization for data common to all instances of this class, like submitting necessary information to the Coin type system.     static **SoType** **getClassTypeId** (void)\
 This static method returns the **SoType** object associated with objects of this class.     static void **cleanupClass** (void)\
 static void **initCopyDict** (void)\
 static void **addCopy** (const **SoFieldContainer** \*orig, const **SoFieldContainer** \*copy)\
 static **SoFieldContainer** \* **checkCopy** (const **SoFieldContainer** \*orig)\
 static **SoFieldContainer** \* **findCopy** (const **SoFieldContainer** \*orig, const SbBool copyconnections)\
 static void **copyDone** (void)\

Static Public Member Functions inherited from **SoBase** static void **initClass** (void)\
 Sets up initialization for data common to all instances of this class, like submitting necessary information to the Coin type system.  static **SoType** **getClassTypeId** (void)\
 This static method returns the **SoType** object associated with objects of this class.  static void **addName** (**SoBase** \*const base, const char \*const name)\
 static void **removeName** (**SoBase** \*const base, const char \*const name)\
 static void **incrementCurrentWriteCounter** (void)\
 static void **decrementCurrentWriteCounter** (void)\
 static **SoBase** \* **getNamedBase** (const **SbName** &name, **SoType** type)\
 static int **getNamedBases** (const **SbName** &name, **SoBaseList** &baselist, **SoType** type)\
 static SbBool **read** (**SoInput** \*input, **SoBase** \*&base, **SoType** expectedtype)\
 static void **setInstancePrefix** (const **SbString** &c)\
 static void **setTraceRefs** (SbBool trace)\
 static SbBool **getTraceRefs** (void)\
 static SbBool **connectRoute** (**SoInput** \*input, const **SbName** &fromnodename, const **SbName** &fromfieldname, const **SbName** &tonodename, const **SbName** &tofieldname)\
 static SbBool **readRoute** (**SoInput** \*input)\

### Public Attributes

**SoSFInt32** **index**\
 **SoMField** \* **input**\
 **SoEngineOutput** \* **output**\

### Static Protected Member Functions

static const **SoFieldData** \*\* **getInputDataPtr** (void)\
 static const **SoEngineOutputData** \*\* **getOutputDataPtr** (void)\

Static Protected Member Functions inherited from **SoEngine** static const **SoFieldData** \*\* **getInputDataPtr** (void)\
 static const **SoEngineOutputData** \*\* **getOutputDataPtr** (void)\

Static Protected Member Functions inherited from **SoBase** static uint32\_t **getCurrentWriteCounter** (void)\
 static void **staticDataLock** (void)\
 static void **staticDataUnlock** (void)\

### Additional Inherited Members

Protected Types inherited from **SoBase** enum **BaseFlags** { **IS\_ENGINE** = 0x01, **IS\_GROUP** = 0x02 }\

Protected Member Functions inherited from **SoEngine** **SoEngine** (void)\
 virtual **~SoEngine** (void)\
 virtual void **inputChanged** (**SoField** \*which)\
 void **writeOutputTypes** (**SoOutput** \*out)\

Protected Member Functions inherited from **SoFieldContainer** **SoFieldContainer** (void)\
 virtual **~SoFieldContainer** ()\

Protected Member Functions inherited from **SoBase** **SoBase** (void)\
 virtual **~SoBase** ()\
 SbBool **hasMultipleWriteRefs** (void) const\
 SbBool **writeHeader** (**SoOutput** \*out, SbBool isgroup, SbBool isengine) const\
 void **writeFooter** (**SoOutput** \*out) const\
 virtual const char \* **getFileFormatName** (void) const\
 virtual **SoNotRec** **createNotRec** (void)\

Protected Attributes inherited from **SoFieldContainer** SbBool **isBuiltIn**\

## Detailed Description

The **SoSelectOne** class is used to select one value from a set of values.

The output field will be the index'th value of the input multivalue field.

Note that this engine's output field deviates a little from the "standard" output mechanism of the majority of engine classes: the **SoSelectOne::output** is not a permanent **SoEngineOutput** instance, but a *pointer* to a **SoEngineOutput** instance. The reason for this is that it is necessary to allocate the output field dynamically to make it match what the **SoSelectOne::input** is connected to since the type of the **SoSelectOne::output** always should be the same as the type of the **SoSelectOne::input**.

The file format for this field is a bit special. Note the leading type specification, which is not necessary for most other field types:

```
SelectOne {
  type <multivaluefieldtype>
  [...fields...]
}
```

## Constructor & Destructor Documentation

### SoSelectOne::SoSelectOne (SoType inputtype)

Constructor. Sets the type of the input field. The input field must be of type **SoMField**.

## Member Function Documentation

### virtual SoType SoSelectOne::getTypeId (void ) const \[virtual\]

Returns the type identification of an object derived from a class inheriting **SoBase**. This is used for runtime type checking and "downward" casting. Usage example:

```
void foo(SoNode * node)
{
  if (node->getTypeId() == SoFile::getClassTypeId()) {
    SoFile * filenode = (SoFile *)node;  // safe downward cast, knows the type
  }
}
```

For application programmers wanting to extend the library with new nodes, engines, nodekits, draggers or others: this method needs to be overridden in *all* subclasses. This is typically done as part of setting up the full type system for extension classes, which is usually accomplished by using the predefined macros available through for instance **Inventor/nodes/SoSubNode.h** (SO\_NODE\_INIT\_CLASS and SO\_NODE\_CONSTRUCTOR for node classes), **Inventor/engines/SoSubEngine.h** (for engine classes) and so on.

For more information on writing Coin extensions, see the class documentation of the top level superclasses for the various class groups.

Implements **SoBase**.

### virtual const SoFieldData \* SoSelectOne::getFieldData (void ) const \[virtual\]

Returns a pointer to the class-wide field data storage object for this instance. If no fields are present, returns NULL.

Reimplemented from **SoFieldContainer**.

### virtual const SoEngineOutputData \* SoSelectOne::getOutputData (void ) const \[virtual\]

*This API member is considered internal to the library, as it is not likely to be of interest to the application programmer.*\

Implements **SoEngine**.

## Member Data Documentation

### SoSFInt32 SoSelectOne::index

Index of the value from the input field which will be put on the output.

### SoMField\* SoSelectOne::input

The multivalue input field which we will select a single value from for our output.

### SoEngineOutput\* SoSelectOne::output

(**SoSField**) This is the singlevalue field output containing the index'th value of **SoSelectOne::input**.

The type of the field will of course match the type of the input field, i.e. if **SoSelectOne::input** is an **SoMFFloat**, **SoSelectOne::output** will be an **SoSFFloat** etc.

## Author

Generated automatically by Doxygen for Coin from the source code.
