Coin Logo http://www.sim.no
http://www.coin3d.org

Public Types | Public Member Functions | Static Public Member Functions | Public Attributes | Protected Member Functions

SoMarkerSet Class Reference

The SoMarkerSet class displays a set of 2D bitmap markers in 3D.This node uses the coordinates currently on the state (or in the vertexProperty field) in order. The numPoints field specifies the number of points in the set. More...

#include <Inventor/nodes/SoMarkerSet.h>

Inheritance diagram for SoMarkerSet:
SoPointSet SoNonIndexedShape SoVertexShape SoShape SoNode SoFieldContainer SoBase

List of all members.

Public Types

enum  MarkerType {
  NONE = -1, CROSS_5_5, PLUS_5_5, MINUS_5_5,
  SLASH_5_5, BACKSLASH_5_5, BAR_5_5, STAR_5_5,
  Y_5_5, LIGHTNING_5_5, WELL_5_5, CIRCLE_LINE_5_5,
  SQUARE_LINE_5_5, DIAMOND_LINE_5_5, TRIANGLE_LINE_5_5, RHOMBUS_LINE_5_5,
  HOURGLASS_LINE_5_5, SATELLITE_LINE_5_5, PINE_TREE_LINE_5_5, CAUTION_LINE_5_5,
  SHIP_LINE_5_5, CIRCLE_FILLED_5_5, SQUARE_FILLED_5_5, DIAMOND_FILLED_5_5,
  TRIANGLE_FILLED_5_5, RHOMBUS_FILLED_5_5, HOURGLASS_FILLED_5_5, SATELLITE_FILLED_5_5,
  PINE_TREE_FILLED_5_5, CAUTION_FILLED_5_5, SHIP_FILLED_5_5, CROSS_7_7,
  PLUS_7_7, MINUS_7_7, SLASH_7_7, BACKSLASH_7_7,
  BAR_7_7, STAR_7_7, Y_7_7, LIGHTNING_7_7,
  WELL_7_7, CIRCLE_LINE_7_7, SQUARE_LINE_7_7, DIAMOND_LINE_7_7,
  TRIANGLE_LINE_7_7, RHOMBUS_LINE_7_7, HOURGLASS_LINE_7_7, SATELLITE_LINE_7_7,
  PINE_TREE_LINE_7_7, CAUTION_LINE_7_7, SHIP_LINE_7_7, CIRCLE_FILLED_7_7,
  SQUARE_FILLED_7_7, DIAMOND_FILLED_7_7, TRIANGLE_FILLED_7_7, RHOMBUS_FILLED_7_7,
  HOURGLASS_FILLED_7_7, SATELLITE_FILLED_7_7, PINE_TREE_FILLED_7_7, CAUTION_FILLED_7_7,
  SHIP_FILLED_7_7, CROSS_9_9, PLUS_9_9, MINUS_9_9,
  SLASH_9_9, BACKSLASH_9_9, BAR_9_9, STAR_9_9,
  Y_9_9, LIGHTNING_9_9, WELL_9_9, CIRCLE_LINE_9_9,
  SQUARE_LINE_9_9, DIAMOND_LINE_9_9, TRIANGLE_LINE_9_9, RHOMBUS_LINE_9_9,
  HOURGLASS_LINE_9_9, SATELLITE_LINE_9_9, PINE_TREE_LINE_9_9, CAUTION_LINE_9_9,
  SHIP_LINE_9_9, CIRCLE_FILLED_9_9, SQUARE_FILLED_9_9, DIAMOND_FILLED_9_9,
  TRIANGLE_FILLED_9_9, RHOMBUS_FILLED_9_9, HOURGLASS_FILLED_9_9, SATELLITE_FILLED_9_9,
  PINE_TREE_FILLED_9_9, CAUTION_FILLED_9_9, SHIP_FILLED_9_9, NUM_MARKERS
}

Public Member Functions

 SoMarkerSet (void)
virtual void GLRender (SoGLRenderAction *action)
virtual void getPrimitiveCount (SoGetPrimitiveCountAction *action)

Static Public Member Functions

static void initClass (void)
static int getNumDefinedMarkers (void)
static void addMarker (int idx, const SbVec2s &size, const unsigned char *bytes, SbBool isLSBFirst=TRUE, SbBool isUpToDown=TRUE)
static SbBool getMarker (int idx, SbVec2s &size, const unsigned char *&bytes, SbBool &isLSBFirst)
static SbBool removeMarker (int idx)
static SbBool isMarkerBitSet (int idx, int bitNumber)

Public Attributes

SoMFInt32 markerIndex

Protected Member Functions

virtual ~SoMarkerSet ()

Detailed Description

The SoMarkerSet class displays a set of 2D bitmap markers in 3D.

This node uses the coordinates currently on the state (or in the vertexProperty field) in order. The numPoints field specifies the number of points in the set.

In addition to supplying the user with a set of standard markers to choose from, it is also possible to specify one's own bitmaps for markers.

This node class is an extension versus the original SGI Inventor v2.1 API. In addition to being a Coin extension, it is also present in TGS' Inventor implementation. (Note that TGS's implementation doesn't support the NONE markerIndex value.)

FILE FORMAT/DEFAULTS:

    MarkerSet {
        vertexProperty NULL
        startIndex 0
        numPoints -1
        markerIndex 0
    }
Since:
TGS Inventor 2.5
Coin 1.0

Member Enumeration Documentation

Defines the different standard markers.


Constructor & Destructor Documentation

SoMarkerSet::SoMarkerSet ( void  )

Constructor.

References markerIndex.

SoMarkerSet::~SoMarkerSet ( ) [protected, virtual]

Destructor.


Member Function Documentation

void SoMarkerSet::initClass ( void  ) [static]

Sets up initialization for data common to all instances of this class, like submitting necessary information to the Coin type system.

Reimplemented from SoPointSet.

References SbList< Type >::append().

void SoMarkerSet::GLRender ( SoGLRenderAction action) [virtual]
void SoMarkerSet::getPrimitiveCount ( SoGetPrimitiveCountAction action) [virtual]

Action method for the SoGetPrimitiveCountAction.

Calculates the number of triangle, line segment and point primitives for the node and adds these to the counters of the action.

Nodes influencing how geometry nodes calculates their primitive count also overrides this method to change the relevant state variables.

Reimplemented from SoPointSet.

References SoGetPrimitiveCountAction::addNumImage(), SoNode::getPrimitiveCount(), SoAction::getState(), SoVertexShape::getVertexData(), SoPointSet::numPoints, SoState::pop(), SoState::push(), SoShape::shouldPrimitiveCount(), SoNonIndexedShape::startIndex, and SoVertexShape::vertexProperty.

int SoMarkerSet::getNumDefinedMarkers ( void  ) [static]

Returns the number of defined markers.

References SbList< Type >::getLength().

void SoMarkerSet::addMarker ( int  idx,
const SbVec2s size,
const unsigned char *  bytes,
SbBool  isLSBFirst = TRUE,
SbBool  isUpToDown = TRUE 
) [static]

Replace the bitmap for the marker at idx with the representation given by size dimensions with the bitmap data at bytes. isLSBFirst and isUpToDown indicates how the bitmap data is ordered. Does nothing if markerIndex is NONE.

Here's a complete usage example which demonstrates how to set up a user-specified marker from a char-map. Note that the "multi-colored" pixmap data is converted to a monochrome bitmap before being passed to addMarker() because addMarker() supports only bitmaps.

  const int WIDTH = 18;
  const int HEIGHT = 19;
  const int BYTEWIDTH = (WIDTH + 7) / 2;

  const char coin_marker[WIDTH * HEIGHT + 1] = {
    ".+                "
    "+@.+              "
    " .@#.+            "
    " +$@##.+          "
    "  .%@&##.+        "
    "  +$@&&*##.+      "
    "   .%@&&*=##.+    "
    "   +$@&&&&=-##.+  "
    "    .%@&&&&&-;#&+ "
    "    +$@&&&&&&=#.  "
    "     .%@&&&&*#.   "
    "     +$@&&&&#.    "
    "      .%@&@%@#.   "
    "      +$%@%.$@#.  "
    "       .%%. .$@#. "
    "       +$.   .$>#."
    "        +     .$. "
    "               .  "
    "                  " };

  int byteidx = 0;
  unsigned char bitmapbytes[BYTEWIDTH * HEIGHT];
  for (int h = 0; h < HEIGHT; h++) {
    unsigned char bits = 0;
    for (int w = 0; w < WIDTH; w++) {
      if (coin_marker[(h * WIDTH) + w] != ' ') { bits |= (0x80 >> (w % 8)); }
      if ((((w + 1) % 8) == 0) || (w == WIDTH - 1)) {
        bitmapbytes[byteidx++] = bits;
        bits = 0;
      }
    }
  }

  int MYAPP_ARROW_IDX = SoMarkerSet::getNumDefinedMarkers(); // add at end
  SoMarkerSet::addMarker(MYAPP_ARROW_IDX, SbVec2s(WIDTH, HEIGHT),
                         bitmapbytes, FALSE, TRUE);

This will provide you with an index given by MYAPP_ARROW_IDX which can be used in SoMarkerSet::markerIndex to display the new marker.

References SbList< Type >::append(), and SbList< Type >::getLength().

SbBool SoMarkerSet::getMarker ( int  idx,
SbVec2s size,
const unsigned char *&  bytes,
SbBool &  isLSBFirst 
) [static]

Returns data for marker at idx in the size, bytes and isLSBFirst parameters.

If no marker is defined for given idx, or SoMarkerSet::markerIndex is NONE (not removable), FALSE is returned. If everything is OK, TRUE is returned.

References SbList< Type >::getLength().

SbBool SoMarkerSet::removeMarker ( int  idx) [static]

Removes marker at idx.

If no marker is defined for given idx, or SoMarkerSet::markerIndex is NONE (not removable), FALSE is returned. If everything is OK, TRUE is returned.

References SbList< Type >::getLength(), and SbList< Type >::remove().

SbBool SoMarkerSet::isMarkerBitSet ( int  idx,
int  bitNumber 
) [static]

Not supported in Coin. Should probably not have been part of the public Open Inventor API.


Member Data Documentation

Contains the set of index markers to display, defaults to 0 (CROSS_5_5). The special value NONE renders nothing for that marker.

Referenced by GLRender(), and SoMarkerSet().


The documentation for this class was generated from the following files:

Copyright © 1998-2007 by Systems in Motion AS. All rights reserved.

Generated on Mon Feb 28 2011 10:12:14 for Coin by Doxygen. 1.7.3