---
name: "SoDirectionalLightDragger"
section: "3iv"
platform: "linux"
package: "inventor-doc"
version: "2.1.6+ds-2"
release: "Debian 13 (Trixie)"
platforms: ["linux"]
url: "https://new.carta.tech/SoDirectionalLightDragger/3iv"
---

# SoDirectionalLightDragger(3iv)

directional icon you rotate and translate by dragging with the mouse

## NAME

SoDirectionalLightDragger — directional icon you rotate and translate by dragging with the mouse

## INHERITS FROM

SoBase \> SoFieldContainer \> SoNode \> SoBaseKit \> SoInteractionKit \> SoDragger \> SoDirectionalLightDragger

## SYNOPSIS

**#include \<Inventor/draggers/SoDirectionalLightDragger.h\>**

Fields from class SoDirectionalLightDragger:

**SoSFRotation**	**rotation**\
 **SoSFVec3f**	**translation**

Fields from class SoDragger:

**SoSFBool**	**isActive**

Fields from class SoInteractionKit:

**SoSFEnum**	**renderCaching**\
 **SoSFEnum**	**boundingBoxCaching**\
 **SoSFEnum**	**renderCulling**\
 **SoSFEnum**	**pickCulling**

Parts from class SoBaseKit:

**(SoNodeKitListPart)**	**callbackList**

Methods from class SoDirectionalLightDragger:

	**SoDirectionalLightDragger()**\
 **static const SoNodekitCatalog \***\
 	**getClassNodekitCatalog() const**\
 **static SoType**	**getClassTypeId()**

Methods from class SoDragger:

**void**	**addStartCallback(SoDraggerCB \*f, void \*userData = NULL)**\
 **void**	**removeStartCallback(SoDraggerCB \*f, void \*userData = NULL)**\
 **void**	**addMotionCallback(SoDraggerCB \*f, void \*userData = NULL)**\
 **void**	**removeMotionCallback(SoDraggerCB \*f, void \*userData = NULL)**\
 **void**	**addFinishCallback(SoDraggerCB \*f, void \*userData = NULL)**\
 **void**	**removeFinishCallback(SoDraggerCB \*f, void \*userData = NULL)**\
 **void**	**addValueChangedCallback(SoDraggerCB \*f, void \*userData = NULL)**\
 **void**	**removeValueChangedCallback(SoDraggerCB \*f, void \*userData = NULL)**\
 **SbBool**	**enableValueChangedCallbacks()**\
 **void**	**setMinGesture(int pixels)**\
 **int**	**getMinGesture() const**\
 **static void**	**setMinScale(float newMinScale)**\
 **static float**	**getMinScale()**

Methods from class SoInteractionKit:

**virtual SbBool**	**setPartAsPath(const SbName &partName, SoPath \*surrogatePath )**

Methods from class SoBaseKit:

**virtual const SoNodekitCatalog \***\
 	**getNodekitCatalog() const**\
 **virtual SoNode \***	**getPart(const SbName &partName, SbBool makeIfNeeded)**\
 **SbString**	**getPartString(const SoBase \*part)**\
 **virtual SoNodeKitPath \***	**createPathToPart(const SbName &partName, SbBool makeIfNeeded, const SoPath \*pathToExtend = NULL)**\
 **virtual SbBool**	**setPart(const SbName &partName, SoNode \*newPart)**\
 **SbBool**	**set(char \*partName, char \*parameters)**\
 **SbBool**	**set(char \*nameValuePairs)**\
 **static SbBool**	**isSearchingChildren()**\
 **static void**	**setSearchingChildren(SbBool newVal)**

Methods from class SoNode:

**void**	**setOverride(SbBool state)**\
 **SbBool**	**isOverride() const**\
 **SoNode \***	**copy(SbBool copyConnections = FALSE) const**\
 **virtual SbBool**	**affectsState() const**\
 **static SoNode \***	**getByName(const SbName &name)**\
 **static int**	**getByName(const SbName &name, SoNodeList &list)**

Methods from class SoFieldContainer:

**void**	**setToDefaults()**\
 **SbBool**	**hasDefaultValues() const**\
 **SbBool**	**fieldsAreEqual(const SoFieldContainer \*fc) const**\
 **void**	**copyFieldValues(const SoFieldContainer \*fc, SbBool copyConnections = FALSE)**\
 **void**	**get(SbString &fieldDataString)**\
 **virtual int**	**getFields(SoFieldList &resultList) const**\
 **virtual SoField \***	**getField(const SbName &fieldName) const**\
 **SbBool**	**getFieldName(const SoField \*field, SbName &fieldName) const**\
 **SbBool**	**isNotifyEnabled() const**\
 **SbBool**	**enableNotify(SbBool flag)**

Methods from class SoBase:

**void**	**ref()**\
 **void**	**unref() const**\
 **void**	**unrefNoDelete() const**\
 **void**	**touch()**\
 **virtual SoType**	**getTypeId() const**\
 **SbBool**	**isOfType(SoType type) const**\
 **virtual void**	**setName(const SbName &name)**\
 **virtual SbName**	**getName() const**

Macros from class SoBaseKit:

**SO\_GET\_PART(kit, partName, partClass)**

**SO\_CHECK\_PART(kit, partName, partClass)**

## DESCRIPTION

**SoDirectionalLightDragger** is a composite dragger. It looks like a sun with a large arrow coming out of it. The arrow can be rotated about the sun by dragging with the mouse; its orientation is given by the **rotation** field. You can also drag the sun (and the arrow with it) through 3-space. The location is stored in the **translation** field.

The dragger uses an **SoRotateSphericalDragger** for changing the rotation. Instead of using the default spherical geometry, this dragger uses an arrow shape.

The sun is an **SoDragPointDragger**. Dragging it edits the **translation** field; conversely, if you change the **translation** field the sun will move to that new location, bringing the arrow with it. The sun looks and behaves just like the sun in an **SoPointLightDragger**, as does the **material** part. See the **SoPointLightDragger** man page for details.

*Remember:* This is *not* a light source! It just looks like one. If you want to move a light with this dragger, you can either:

\[a\] Use an **SoDirectionalLightManip**, which is subclassed from **SoLight**. It creates an **SoDirectionalLightDragger** and uses it as the interface to change the **direction** of its light source (see the **SoDirectionalLightManip** man page). The manipulator also edits the **material** part of this dragger to match the color of light the manipulator is producing. However, the directional light manipulator will ignore the **translation** field, because a directional light has no location or translation field. So in this case the translation dragger merely allows you to move the physical arrow to wherever you'd like it to be.

\[b\] Put an **SoTransform** under an **SoTransformSeparator**. Add the **SoDirectionalLight** as the next child. Use a field-to-field connection between the **rotation** fields of this dragger and the transform node to synchronize the light with this dragger.

\[c\] Use engines to connect the **rotation** field of this dragger to the **direction** field of an **SoDirectionalLight**. Use the **rotation** as input to an **SoComposeMatrix** engine. Then, use an **SoTransformVec3f** engine to apply that matrix to (0,0,-1), the default light direction.

You can change the parts in any instance of this dragger using **setPart()**. The default part geometries are defined as resources for this **SoDirectionalLightDragger** class. They are detailed in the Dragger Resources section of the online reference page for this class. You can make your program use different default resources for the parts by copying the file **/usr/share/data/draggerDefaults/directionalLightDragger.iv** into your own directory, editing the file, and then setting the environment variable **SO\_DRAGGER\_DIR** to be a path to that directory.

## FIELDS

**SoSFRotation**	**rotation**\
 Orientation of the rotating part (an arrow by default).

**SoSFVec3f**	**translation**\
 Position of the origin of the directional light dragger.

## METHODS

	**SoDirectionalLightDragger()**\
 Constructor.

**static const SoNodekitCatalog \***\
 	**getClassNodekitCatalog() const**\
 Returns an **SoNodekitCatalog** for this class

**static SoType**	**getClassTypeId()**\
 Returns type identifier for this class.

## CATALOG PARTS

| | | | |
| --- | --- | --- | --- |
| **All parts** |
|  |  |  | **NULL by** |
| **Part Name** | **Part Type** | **Default Type** | **Default** |
|  |
| callbackList | NodeKitListPart | -- | yes |
| material | Material | -- | yes |
| translatorRotInv | Rotation | -- | yes |
| translator | DragPointDragger | -- | yes |
| rotator | RotateSphericalDragger | -- | yes |
|  |

| | | |
| --- | --- | --- |
| **Extra information for list parts from above table** |
| **Part Name** | **Container Type** | **Permissible Types** |
|  |
| callbackList | Separator | Callback, EventCallback |
|  |

## DRAGGER RESOURCES

.in 0n+.5i Resource:	**directionalLightRotatorRotator**\
 .in 0n+.5i Part:	rotator.rotator\
 Appearance:	white arrow that goes through the sun\
 Description:	picking this begins rotation of the arrow about the sun-shape

.in 0n+.5i Resource:	**directionalLightRotatorRotatorActive**\
 .in 0n+.5i Part:	rotator.rotatorActive\
 Appearance:	yellow arrow that goes through the sun\
 Description:	displayed while the arrow is being rotated

.in 0n+.5i Resource:	**directionalLightRotatorFeedback**\
 .in 0n+.5i Part:	rotator.feedback\
 Appearance:	empty Separator\
 Description:	this disables display of the axes that a rotateSpherical dragger uses by default

.in 0n+.5i Resource:	**directionalLightRotatorFeedbackActive**\
 .in 0n+.5i Part:	rotator.feedbackActive\
 Appearance:	empty Separator\
 Description:	this disables display of the axes that a rotateSpherical dragger uses by default

.in 0n+.5i Resource:	**directionalLightOverallMaterial**\
 .in 0n+.5i Part:	material\
 Appearance:	white. half strength emissive, half strength diffuse\
 Description:	sets material for the sun shape when stationary. Resource for the moving sun, directionalLightTranslatorPlaneTranslatorActive, contains a yellow material for highlighting.

.in 0n+.5i Resource:	**directionalLightTranslatorPlaneTranslator**\
 .in 0n+.5i Parts:	translator.yzTranslator.translator\
\
 	translator.xzTranslator.translator\
\
 	translator.xyTranslator.translator\
 Appearance:	sun shape with no material\
 Description:	picking these parts initiates dragging by the yz, xz, and xy planar draggers respectively.

.in 0n+.5i Resource:	**directionalLightTranslatorPlaneTranslatorActive**\
 .in 0n+.5i Parts:	translator.yzTranslator.translatorActive\
\
 	translator.xzTranslator.translatorActive\
\
 	translator.xyTranslator.translatorActive\
 Appearance:	yellow sun shape\
 Description:	shown during planar dragging in the yz, xz, and xy planes respectively.

.in 0n+.5i Resource:	**directionalLightTranslatorLineTranslator**\
 .in 0n+.5i Parts:	translator.xTranslator.translator\
\
 	translator.yTranslator.translator\
\
 	translator.zTranslator.translator\
 Appearance:	white cylinder\
 Description:	picking these parts initiates dragging in the x, y, and z linear draggers respectively.

.in 0n+.5i Resource:	**directionalLightTranslatorLineTranslatorActive**\
 .in 0n+.5i Parts:	translator.xTranslator.translatorActive\
\
 	translator.yTranslator.translatorActive\
\
 	translator.zTranslator.translatorActive\
 Appearance:	yellow cylinder\
 Description:	shown during linear dragging in the x, y, and z directions respectively.

## FILE FORMAT/DEFAULTS

```
DirectionalLightDragger {
renderCaching	AUTO
boundingBoxCaching	AUTO
renderCulling	AUTO
pickCulling	AUTO
isActive	FALSE
translation	0 0 0
rotation	0 0 1  0
callbackList	NULL
material	<directionalLightOverallMaterial resource>
translatorRotInv	NULL
translator	DragPointDragger {
}
rotator	RotateSphericalDragger {
}
rotator.rotator	<directionalLightRotatorRotator resource>
rotator.rotatorActive	<directionalLightRotatorRotatorActive resource>
rotator.feedback	<directionalLightRotatorFeedback resource>
rotator.feedbackActive	<directionalLightRotatorFeedbackActive resource>
translator.yzTranslator.translator	<directionalLightTranslatorPlaneTranslator resource>
translator.xzTranslator.translator	<directionalLightTranslatorPlaneTranslator resource>
translator.xyTranslator.translator	<directionalLightTranslatorPlaneTranslator resource>
translator.yzTranslator.translatorActive	<directionalLightTranslatorPlaneTranslatorActive resource>
translator.xzTranslator.translatorActive	<directionalLightTranslatorPlaneTranslatorActive resource>
translator.xyTranslator.translatorActive	<directionalLightTranslatorPlaneTranslatorActive resource>
translator.xTranslator.translator	<directionalLightTranslatorLineTranslator resource>
translator.yTranslator.translator	<directionalLightTranslatorLineTranslator resource>
translator.zTranslator.translator	<directionalLightTranslatorLineTranslator resource>
translator.xTranslator.translatorActive	<directionalLightTranslatorLineTranslatorActive resource>
translator.yTranslator.translatorActive	<directionalLightTranslatorLineTranslatorActive resource>
translator.zTranslator.translatorActive	<directionalLightTranslatorLineTranslatorActive resource>
}
```

## SEE ALSO

**SoInteractionKit, SoDragger, SoCenterballDragger, SoDragPointDragger, SoHandleBoxDragger, SoJackDragger, SoPointLightDragger, SoRotateCylindricalDragger, SoRotateDiscDragger, SoRotateSphericalDragger, SoScale1Dragger,** **SoScale2Dragger, SoScale2UniformDragger, SoScaleUniformDragger, SoSpotLightDragger, SoTabBoxDragger, SoTabPlaneDragger, SoTrackballDragger, SoTransformBoxDragger, SoTransformerDragger, SoTranslate1Dragger,** **SoTranslate2Dragger**
