Click or drag to resize
SoDataSensor Class

Abstract base class for sensors attached to parts of a scene.

Inheritance Hierarchy

Namespace: OIV.Inventor.Sensors
Assembly: OIV.Inventor (in OIV.Inventor.dll) Version: 2024.2.0.0 (2024.2.0)
Syntax
public class SoDataSensor : SoDelayQueueSensor

The SoDataSensor type exposes the following members.

Methods
  NameDescription
Public methodEquals
Determines whether the specified Object is equal to the current Object.
(Inherited from Object.)
Public methodGetHashCode
Overrides GetHashCode().
(Inherited from SoNetBase.)
Public methodGetPriority

Gets the priority of the sensor.

(Inherited from SoDelayQueueSensor.)
Public methodGetTriggerChild

If this is a priority 0 data sensor, and a change to a group node's children caused this sensor to be triggered (getTriggerType returns GROUP_ADD_CHILD, GROUP_INSERT_CHILD, or GROUP_REPLACE_CHILD), returns the node that was added to the group, and NULL in all other cases.

Public methodGetTriggerChildIndex

If this is a priority 0 data sensor, and a change to a group node's children caused this sensor to be triggered (getTriggerType returns GROUP_ADD_CHILD, GROUP_INSERT_CHILD, or GROUP_REPLACE_CHILD), returns the index of the node that was added or removed, and -1 in all other cases.

Public methodGetTriggerFastEditInfo

Returns true if the triggered changes come from a field or node that was below a Separator with a fastEditPolicy field with a value different than OFF.

Public methodGetTriggerFastEditInfoFlag

Queries the flag that indicates whether the trigger path fastEdit info (see OIV.Inventor.Sensors.SoDataSensor.GetTriggerFastEditInfo()) is available to delegates.

Public methodGetTriggerField

If this is a priority 0 data sensor, returns the field that was modified that caused this sensor to trigger.

Public methodGetTriggerMFieldNumValues

If this is a priority 0 data sensor, and a change in the data values of a multiple field (e.g., OIV.Inventor.Fields.SoMFVec3f) caused this sensor to be triggered, returns the size of the range of the potentially changed values.

Public methodGetTriggerMFieldStartIndex

If this is a priority 0 data sensor, and a change in the data values of a multiple field (e.g., OIV.Inventor.Fields.SoMFVec3f) caused this sensor to be triggered, returns the first index of the range of the potentially changed values.

Public methodGetTriggerNode

If this is a priority 0 data sensor, returns the node that was modified that caused this sensor to trigger.

Public methodGetTriggerPath

If this is a priority 0 data sensor, returns a path to the node that caused this sensor to trigger.

Public methodGetTriggerPathFlag

Queries the flag that indicates whether the trigger path (see OIV.Inventor.Sensors.SoDataSensor.GetTriggerPath()) is available to delegates.

Public methodGetTriggerType

If this is a priority 0 data sensor, returns the type of change that occurred.

Public methodGetType
Gets the Type of the current instance.
(Inherited from Object.)
Public methodIsIdleOnly
(Inherited from SoDelayQueueSensor.)
Public methodIsScheduled

Returns true if this sensor has been scheduled and is waiting in a sensor queue to be triggered.

(Inherited from SoSensor.)
Public methodSchedule
(Inherited from SoSensor.)
Public methodSetPriority

Sets the priority of the sensor.

(Inherited from SoDelayQueueSensor.)
Public methodSetTriggerFastEditInfoFlag

Sets the flag that indicates whether the trigger path fastEdit info (see OIV.Inventor.Sensors.SoDataSensor.GetTriggerFastEditInfo()) is available to delegatemethods.

Public methodSetTriggerPathFlag

Sets the flag that indicates whether the trigger path (see OIV.Inventor.Sensors.SoDataSensor.GetTriggerPath()) is available to delegatemethods.

Public methodToString
Returns a string that represents the current object.
(Inherited from Object.)
Public methodUnschedule
(Inherited from SoSensor.)
Top
Properties
  NameDescription
Public propertyAction

(Inherited from SoSensor.)
Public propertyDeleteCallback

Sets a callback that will be called when the object the sensor is sensing is deleted.

Top
Remarks

Data sensors detect changes to scene graph objects (paths, nodes, or fields) and trigger their delegatewhen the object changes. The Open Inventor viewer classes, for example, attach an OIV.Inventor.Sensors.SoNodeSensor to the root of the application's scene graph in order to know when any part of the scene graph has been modified and a redraw is needed.

Data sensors provide methods that can be called in the delegateto determine exactly which node or field caused the sensor to be triggered. However these methods only return valid information if the sensor priority was explicitly set to zero (default is 100). Depending on the type of attached object, there are multiple possible triggers and only some of the get trigger info methods will return useful information.

Priority zero data sensors are triggered immediately after the change. Normal priority sensors are not triggered until the next time the "delay queue" is processed. Normally this happens when the viewer / renderArea is not rendering and there are no input events to be processed.

A data sensor will be triggered if its Schedule()method is called. But the trigger node, trigger field, etc. queries will return null. Generally this method is only useful for "at some future time" sensors like OIV.Inventor.Sensors.SoIdleSensor or OIV.Inventor.Sensors.SoAlarmSensor.

Data sensors provide a delete delegatethat is called just before the object the data sensor is attached to is destroyed. The delegateshould not attempt to modify the object in any way.

EXAMPLE

Create a node sensor to detect when the camera has been modified.

SoCamera camera = viewer.GetCamera();
SoNodeSensor nodeSensor = new SoNodeSensor();
nodeSensor.Action         = nodeChangedCB;
nodeSensor.DeleteCallback = nodeDestroyedCB;
nodeSensor.SetPriority( 0 );
nodeSensor.Attach( camera );

Delegatecalled when the object is modified.

public void nodeChangedCB( SoSensor sensor )
{
   SoNodeSensor nodeSensor = (SoNodeSensor)sensor;
   SoNode node = nodeSensor.GetAttachedNode();
   Console.WriteLine("Node Changed: {0}", node.GetType().Name);
   if (nodeSensor.GetPriority() == 0)
   {
       SoField field = nodeSensor.GetTriggerField();
       String fieldName;
       node.GetFieldName( field, out fieldName );
       Console.WriteLine( "     Field: {0}", fieldName );
   }
}

public void nodeDestroyedCB(SoSensor sensor)
{
   SoNodeSensor nodeSensor = (SoNodeSensor)sensor;
   SoNode node = nodeSensor.GetAttachedNode();
   Console.WriteLine("Node Destroyed: {0}", node.GetType().Name);
}

See Also