Class SoIndexedMarkerSet
- java.lang.Object
-
- com.openinventor.inventor.Inventor
-
- com.openinventor.inventor.misc.SoBase
-
- com.openinventor.inventor.fields.SoFieldContainer
-
- com.openinventor.inventor.nodes.SoNode
-
- com.openinventor.inventor.nodes.SoShape
-
- com.openinventor.inventor.nodes.SoVertexShape
-
- com.openinventor.inventor.nodes.SoIndexedShape
-
- com.openinventor.inventor.nodes.SoIndexedPointSet
-
- com.openinventor.inventor.nodes.SoIndexedMarkerSet
-
- All Implemented Interfaces:
SafeDisposable
public class SoIndexedMarkerSet extends SoIndexedPointSet
Extension of IndexedPointSet that draws a small bitmap (symbol) at each 3D location. This class draws a marker (small image) at each of a set of points located at the coordinates specified by thevertexProperty
field (fromSoVertexShape
) or the current inherited 3D coordinates. For best performance, thevertexProperty
field is recommended. The coordinate of each marker is specified by thecoordIndex
field which indexes into the list of coordinates. The number of markers is the number of values in the coordIndex field.You specify the marker to be drawn at each point using the field
markerIndex
, which indexes into the global list of marker definitions. There is a set of pre-defined markers already in the global list. You can add your own marker definitions to this list using theaddMarker
functions. Marker definitions in the global list can be used by anySoMarkerSet
orSoIndexedMarkerSet
node. You can specify fewer index values than the number of markers to be drawn (the number of coordinates). In this case the node will cycle through the provided index values as many times as necessary. If all the markers in the set will use the same definition it is only necessary to set the first value in markerIndex.You can specify a scale factor (> 0) for each marker using the field
markerScale
. You can specify fewer scale values than the number of markers to be drawn, but in this case the "missing" values are assumed to be 1. You can also specify a scale factor to be applied to every marker in the set using the fieldmarkerGlobalScale
. This scale factor is applied in addition to the individual scale factor (if any).A marker is an image defined by a bitmap and optional color values. If no color values are given then image pixels corresponding to "1" bits are drawn using the current material color (see
SoMaterial
) and pixels corresponding to "0" bits are not drawn (whatever is behind the marker shows through). If color values are given then each pixel in the image is assigned an RGBA value.The coordinates of the markers are transformed by the current cumulative transformation.
Lighting is not applied to markers (i.e., they are rendered with light model BASE_COLOR) unless the application explicitly sets normal vectors using
SoVertexProperty
orSoNormal
.Automatic simplification (by skipping points) is controlled by the
SoComplexity
field value. Only values < 0.5 have any effect.Note that custom markers defined with addMarker are not automatically saved in the Open Inventor file when an
SoWriteAction
is applied to the scene graph (and therefore are not defined if the scene graph is reloaded). To save marker definitions in an Open Inventor file use theSoMarker
node.Depending on the current material and normal binding values, the materials and normals for the vertices may be accessed in order or indexed. If they are indexed, the materialIndex and normalIndex fields are used. Treatment of the current material and normal binding is as follows: PER_PART, PER_FACE, and PER_VERTEX bindings bind one material or normal to each point. The default material binding is OVERALL. The default normal binding is PER_VERTEX.
Limitations:
- Since Open Inventor 9.3, markers are rendered using a high performance shader implementation by default. However the shader implementation requires support for the OpenGL geometry shader (GL_ARB_geometry_shader4) and texture array (GL_EXT_texture_array) features (or the equivalent extensions). If necessary markers will still be rendered, but using the previous drawPixels() implementation which is slower.
SoIndexedMarkerSet
does not cast or receive shadows (seeSoShadowGroup
).
Shape Antialiasing type is
SoShape.POINTS
.The following markers are defined by default:
File format/default:
IndexedMarkerSet {
markerIndex
0 markerScale
1 markerGlobalScale
1 vertexProperty
NULL coordIndex
0 materialIndex
-1 normalIndex
-1 Action behavior:
SoGLRenderAction
Draws bitmaps based on the current coordinates.SoGetPrimitiveCountAction
Increments the image count by 1 for each marker in the marker set.
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description static class
SoIndexedMarkerSet.MarkerTypes
Marker type.-
Nested classes/interfaces inherited from class com.openinventor.inventor.nodes.SoShape
SoShape.ShapeTypes
-
Nested classes/interfaces inherited from class com.openinventor.inventor.nodes.SoNode
SoNode.RenderModes
-
Nested classes/interfaces inherited from class com.openinventor.inventor.Inventor
Inventor.ConstructorCommand
-
-
Field Summary
Fields Modifier and Type Field Description SoSFFloat
markerGlobalScale
Specifies a global scale factor applied to all markers.SoMFInt32
markerIndex
Specifies the marker index (type of marker) for each marker.SoMFFloat
markerScale
Specifies the scale factor applied to each marker.-
Fields inherited from class com.openinventor.inventor.nodes.SoIndexedShape
coordIndex, materialIndex, normalIndex, tangentIndex, textureCoordIndex
-
Fields inherited from class com.openinventor.inventor.nodes.SoVertexShape
vertexProperty
-
Fields inherited from class com.openinventor.inventor.nodes.SoShape
boundingBoxIgnoring
-
Fields inherited from class com.openinventor.inventor.Inventor
VERBOSE_LEVEL, ZeroHandle
-
-
Constructor Summary
Constructors Constructor Description SoIndexedMarkerSet()
Constructor.
-
Method Summary
All Methods Static Methods Concrete Methods Modifier and Type Method Description static void
addMarker(int markerIndex, SoMarker marker)
Add a new marker with index markerIndex using an existing marker definition.static void
addMarker(int markerIndex, SbVec2s size, byte[] bytes)
Calls addMarker(markerIndex, size, bytes, true, true).static void
addMarker(int markerIndex, SbVec2s size, byte[] bytes, boolean isLSBFirst)
Calls addMarker(markerIndex, size, bytes, isLSBFirst, true).static void
addMarker(int markerIndex, SbVec2s size, byte[] bytes, boolean isLSBFirst, boolean isUpToDown)
Add a new marker with index markerIndex .static void
addMarker(int markerIndex, SbVec2s size, byte[] bytes, int[] orderedRGBA)
Calls addMarker(markerIndex, size, bytes, orderedRGBA, true, true).static void
addMarker(int markerIndex, SbVec2s size, byte[] bytes, int[] orderedRGBA, boolean isLSBFirst)
Calls addMarker(markerIndex, size, bytes, orderedRGBA, isLSBFirst, true).static void
addMarker(int markerIndex, SbVec2s size, byte[] bytes, int[] orderedRGBA, boolean isLSBFirst, boolean isUpToDown)
Add a new colored marker with index markerIndex .static SoMarker
getMarker(int markerIndex)
Retrieve the definition of the marker with index markerIndex .static int
getNumDefinedMarkers()
Return the number of defined markers.static boolean
removeMarker(int markerIndex)
Remove the marker with index markerIndex .-
Methods inherited from class com.openinventor.inventor.nodes.SoVertexShape
getNormalCache, getTangentCache
-
Methods inherited from class com.openinventor.inventor.nodes.SoShape
getShapeType, isPrimitiveRestartAvailable, isPrimitiveRestartAvailable
-
Methods inherited from class com.openinventor.inventor.nodes.SoNode
affectsState, callback, copy, copy, distribute, doAction, getAlternateRep, getBoundingBox, getByName, getMatrix, getPrimitiveCount, getRenderEngineMode, getRenderUnitID, GLRender, GLRenderBelowPath, GLRenderInPath, GLRenderOffPath, grabEventsCleanup, grabEventsSetup, handleEvent, isBoundingBoxIgnoring, isOverride, pick, rayPick, search, setOverride, touch, write
-
Methods inherited from class com.openinventor.inventor.fields.SoFieldContainer
copyFieldValues, copyFieldValues, enableNotify, fieldsAreEqual, get, getAllFields, getEventIn, getEventOut, getField, getFieldName, hasDefaultValues, isNotifyEnabled, set, setToDefaults
-
Methods inherited from class com.openinventor.inventor.misc.SoBase
dispose, getName, isDisposable, isSynchronizable, setName, setSynchronizable
-
Methods inherited from class com.openinventor.inventor.Inventor
getNativeResourceHandle
-
-
-
-
Field Detail
-
markerIndex
public final SoMFInt32 markerIndex
Specifies the marker index (type of marker) for each marker. Default is 0. Predefined markers are in enumMarkerType
. You can specify fewer index values than the number of markers to be drawn (the number of coordinates). In this case the node will cycle through the provided index values as many times as necessary. For example, if all the markers in the set will use the same definition it is only necessary to set the first value in markerIndex.
-
markerScale
public final SoMFFloat markerScale
Specifies the scale factor applied to each marker. Default is 1. You can specify fewer scale values than the number of markers to be drawn. In this case the "missing" values are looped from the first scale value each necessary time. You can also specify a scale factor to be applied to every marker in the set using the fieldmarkerGlobalScale
.Supported only when using shader implementation.
- Since:
- Open Inventor 9.3
-
markerGlobalScale
public final SoSFFloat markerGlobalScale
Specifies a global scale factor applied to all markers. Default is 1. This scale factor is applied in addition to the individual scale factor (markerScale).Supported only when using shader implementation.
- Since:
- Open Inventor 9.3
-
-
Method Detail
-
addMarker
public static void addMarker(int markerIndex, SbVec2s size, byte[] bytes, int[] orderedRGBA)
Calls addMarker(markerIndex, size, bytes, orderedRGBA, true, true).
-
addMarker
public static void addMarker(int markerIndex, SbVec2s size, byte[] bytes, int[] orderedRGBA, boolean isLSBFirst)
Calls addMarker(markerIndex, size, bytes, orderedRGBA, isLSBFirst, true).
-
addMarker
public static void addMarker(int markerIndex, SbVec2s size, byte[] bytes)
Calls addMarker(markerIndex, size, bytes, true, true).
-
addMarker
public static void addMarker(int markerIndex, SbVec2s size, byte[] bytes, boolean isLSBFirst)
Calls addMarker(markerIndex, size, bytes, isLSBFirst, true).
-
addMarker
public static void addMarker(int markerIndex, SbVec2s size, byte[] bytes, boolean isLSBFirst, boolean isUpToDown)
Add a new marker with index markerIndex . If the marker exists, it is replaced. size is the size of the marker in pixels. bytes is the marker bitmap. The bitmap is arranged row by row from left to right and top to bottom (according to the parameter isUpToDown ). Each byte in the bitmap corresponds to eight pixels. Open Inventor makes a copy of the bitmap.isLSBFirst : If true, bits are ordered within a byte from least significant to most significant; otherwise the first bit in each byte is the most significant one.
isUpToDown : If true, marker bitmap is described from top to bottom (bytes[0] is the left top corner of the bitmap), otherwise from bottom to top (bytes[0] is the bottom left corner).
-
addMarker
public static void addMarker(int markerIndex, SbVec2s size, byte[] bytes, int[] orderedRGBA, boolean isLSBFirst, boolean isUpToDown)
Add a new colored marker with index markerIndex . If the marker exists, it is replaced. size is the size of the marker in pixels. bytes is the marker bitmap. orderedRGBA is an array of per-pixel color values to apply to the marker. The bitmap is arranged row by row from left to right and top to bottom (according to the parameter isUpToDown ). Each byte in the bitmap corresponds to eight pixels. Each value in orderedRGBA corresponds to one pixel. Open Inventor makes a copy of the bitmap and color values.isLSBFirst : If true, bits are ordered within a byte from least significant to most significant; otherwise the first bit in each byte is the most significant one. 8 isUpToDown : If true, marker bitmap and color array are described from top to bottom (bytes[0] is the left top corner of the bitmap), otherwise from bottom to top (bytes[0] is the bottom left corner).
-
getNumDefinedMarkers
public static int getNumDefinedMarkers()
Return the number of defined markers.
-
getMarker
public static SoMarker getMarker(int markerIndex)
Retrieve the definition of the marker with index markerIndex . Returns NULL if the marker does not exist.
-
removeMarker
public static boolean removeMarker(int markerIndex)
Remove the marker with index markerIndex . Returns true if the marker was successfully removed, false otherwise.
-
addMarker
public static void addMarker(int markerIndex, SoMarker marker)
Add a new marker with index markerIndex using an existing marker definition. If the marker exists, it is replaced.
-
-