Class SoGetPrimitiveCountAction

java.lang.Object
com.openinventor.inventor.Inventor
com.openinventor.inventor.actions.SoAction
com.openinventor.inventor.actions.SoGetPrimitiveCountAction

public class SoGetPrimitiveCountAction extends SoAction
Counts number of primitives in scene. This class counts the number of rendering primitives a scene would use to render. This can be used as an approximation of how long the scene would take to render. The primitives are divided into five categories: triangles, lines, points, text objects, and images.

After applying the action to a path or scene graph, the results can be obtained with the functions getTriangleCount(), getLineCount(), etc. The decimation value can be altered before applying, which is useful for finding the minimum and maximum number of primitives the scene requires (use LOWEST and HIGHEST).

3D Text, such as SoText3 can be counted as either text or triangles. The function setCount3DTextAsTriangles() will determine how these objects are counted.

Polygonal geometry nodes, for example SoIndexedFaceSet, are always counted as triangles even if the draw style (SoDrawStyle) is set to LINES or POINTS.

Some shapes, such as trimmed NURBS surfaces, can answer quicker if they are allowed to approximate how many primitives they will use instead of calculating an exact answer. If an exact answer is not required, passing true to setCanApproximate() will speed the action.

Elements
Sets: SoDecimationTypeElement, SoDecimationPercentageElement

EXAMPLE

 // Count triangles in scene graph
 SoGetPrimitiveCountAction gpca = new SoGetPrimitiveCountAction();
 gpca.apply( root );
 int numTris = gpca.getTriangleCount();

SoAction, SoLevelOfSimplification, SoOctreeOrdering, SoRenderList, SoValueOrdering

  • Constructor Details

    • SoGetPrimitiveCountAction

      public SoGetPrimitiveCountAction()
      Constructor.
  • Method Details

    • setDecimationValue

      public void setDecimationValue(SoDecimationTypeElement.Types type)
      Calls setDecimationValue(type, (float)1.0).
    • getLineCount

      public int getLineCount()
      Returns counted number of primitives (lines).
    • incNumPoints

      public void incNumPoints()
    • incNumLines

      public void incNumLines()
    • incNumTriangles

      public void incNumTriangles()
    • getPointCount

      public int getPointCount()
      Returns counted number of primitives (points).
    • incNumImage

      public void incNumImage()
    • setCanApproximate

      public void setCanApproximate(boolean onOff)
      Some shapes may be able to guess an approximate number of triangles without actually counting. In the interests of speed, and depending on how the results are used, a flag is available to allow shapes to approximate their count. The default is false.
    • getTriangleCount

      public int getTriangleCount()
      Returns counted number of primitives (triangles).
    • incNumText

      public void incNumText()
    • getDecimationType

      public SoDecimationTypeElement.Types getDecimationType()
      Gets decimation type.
    • enableElement

      public static void enableElement(Class<? extends Inventor> t, int stkIndex)
    • setDecimationValue

      public void setDecimationValue(SoDecimationTypeElement.Types type, float percentage)
      Sets decimation type and percentage. Percentage should be a number between 0.0 and 1.0 (1.0 is full complexity).

      Type is one of:

      SoDecimationTypeElement.LOWEST
      Lowest complexity possible for scene.

      SoDecimationTypeElement.HIGHEST
      Highest complexity possible for scene.

      SoDecimationTypeElement.AUTOMATIC
      Scene uses decimation percentage; LODs calculate range value and then adjust them with percentage.

      SoDecimationTypeElement.PERCENTAGE
      Scene uses decimation percentage; LODs use child based solely on decimation without looking at camera position.

    • addNumTriangles

      public void addNumTriangles(int num)
    • canApproximateCount

      public boolean canApproximateCount()
      Returns whether shapes are allowed to approximate their count.
    • is3DTextCountedAsTriangles

      public boolean is3DTextCountedAsTriangles()
      Returns how SoText3 should be counted: as a triangle-based shape (true) or as a text-based shape (false).
    • getDecimationPercentage

      public float getDecimationPercentage()
      Gets decimation percentage.
    • setCount3DTextAsTriangles

      public void setCount3DTextAsTriangles(boolean treatAsTris)
      SoText3 can be counted two ways: as a triangle-based shape or as a text-based shape. This routine specifies how SoText3 should be counted. The default is true (SoText3 adds to the triangle count, not the text count).
    • getImageCount

      public int getImageCount()
      Returns counted number of primitives (images).
    • addNumText

      public void addNumText(int num)
    • getTextCount

      public int getTextCount()
      Returns counted number of primitives (text).
    • addNumImage

      public void addNumImage(int num)
    • containsNonTriangleShapes

      public boolean containsNonTriangleShapes()
      Returns true if scene contains some primitives that are not triangles.
    • addNumLines

      public void addNumLines(int num)
    • containsNoPrimitives

      public boolean containsNoPrimitives()
      Returns true if scene contains no primitives of any kind.
    • addNumPoints

      public void addNumPoints(int num)