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 functionsetCount3DTextAsTriangles()
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
-
-
Nested Class Summary
-
Nested classes/interfaces inherited from class com.openinventor.inventor.actions.SoAction
SoAction.AppliedCodes, SoAction.DistribModes, SoAction.PathCodes, SoAction.PathIndices
-
Nested classes/interfaces inherited from class com.openinventor.inventor.Inventor
Inventor.ConstructorCommand
-
-
Field Summary
-
Fields inherited from class com.openinventor.inventor.Inventor
VERBOSE_LEVEL, ZeroHandle
-
-
Constructor Summary
Constructors Constructor Description SoGetPrimitiveCountAction()
Constructor.
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description void
addNumImage(int num)
void
addNumLines(int num)
void
addNumPoints(int num)
void
addNumText(int num)
void
addNumTriangles(int num)
boolean
canApproximateCount()
Returns whether shapes are allowed to approximate their count.boolean
containsNonTriangleShapes()
Returns true if scene contains some primitives that are not triangles.boolean
containsNoPrimitives()
Returns true if scene contains no primitives of any kind.static void
enableElement(java.lang.Class<? extends Inventor> t, int stkIndex)
float
getDecimationPercentage()
Gets decimation percentage.SoDecimationTypeElement.Types
getDecimationType()
Gets decimation type.int
getImageCount()
Returns counted number of primitives (images).int
getLineCount()
Returns counted number of primitives (lines).int
getPointCount()
Returns counted number of primitives (points).int
getTextCount()
Returns counted number of primitives (text).int
getTriangleCount()
Returns counted number of primitives (triangles).void
incNumImage()
void
incNumLines()
void
incNumPoints()
void
incNumText()
void
incNumTriangles()
boolean
is3DTextCountedAsTriangles()
Returns howSoText3
should be counted: as a triangle-based shape (true) or as a text-based shape (false).void
setCanApproximate(boolean onOff)
Some shapes may be able to guess an approximate number of triangles without actually counting.void
setCount3DTextAsTriangles(boolean treatAsTris)
SoText3
can be counted two ways: as a triangle-based shape or as a text-based shape.void
setDecimationValue(SoDecimationTypeElement.Types type)
Calls setDecimationValue(type, (float)1.0).void
setDecimationValue(SoDecimationTypeElement.Types type, float percentage)
Sets decimation type and percentage.-
Methods inherited from class com.openinventor.inventor.actions.SoAction
apply, apply, clearApplyResult, forwardTraversal, forwardTraversal, getContinueActionInBranchFlag, getCurPath, getDistribMode, getNodeAppliedTo, getOriginalPathListAppliedTo, getPathAppliedTo, getPathCode, getPathListAppliedTo, getPipeId, getSceneManager, getState, getWhatAppliedTo, hasTerminated, invalidateState, isBeingApplied, isLastPathListAppliedTo, isUsingAlternateRep, nullAction, postDelayedTraversal, preDelayedTraversal, resetContinueActionInBranchFlag, setPipeId, setSceneManager, setUpState, stopActionInBranch, traverse, useAlternateRep
-
Methods inherited from class com.openinventor.inventor.Inventor
dispose, getNativeResourceHandle
-
-
-
-
Method Detail
-
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(java.lang.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 howSoText3
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)
-
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)
-
-