HDK
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
GT_PrimInstance Class Reference

#include <GT_PrimInstance.h>

+ Inheritance diagram for GT_PrimInstance:

Classes

class  ExtractTransformEntry
 

Public Types

typedef UT_Array
< ExtractTransformEntry
ExtractTransformCache
 

Public Member Functions

 GT_PrimInstance ()
 
 GT_PrimInstance (const GT_PrimitiveHandle &geometry, const GT_TransformArrayHandle &transforms, const GT_GEOOffsetList &packed_prim_offsets=GT_GEOOffsetList(), const GT_AttributeListHandle &uniform=GT_AttributeListHandle(), const GT_AttributeListHandle &detail=GT_AttributeListHandle(), const GT_GEODetailListHandle &source=GT_GEODetailListHandle())
 
 GT_PrimInstance (const GT_PrimInstance &src)
 
 ~GT_PrimInstance () override
 
bool isValid () const
 Check valid. More...
 
GT_Size entries () const
 Return number of instances. More...
 
const GT_PrimitiveHandlegeometry () const
 Return geometry to be instanced. More...
 
const GT_TransformArrayHandletransforms () const
 Return transforms for instances. More...
 
GT_TransformArrayHandletransforms ()
 Non-const transform access (for appending new transforms). More...
 
const GT_AttributeListHandleuniform () const
 Return uniform attributes. More...
 
const GT_AttributeListHandledetail () const
 Return detail attributes. More...
 
const GT_GEOOffsetListpackedPrimOffsets () const
 
GT_TransformArrayHandle combinedTransforms () const
 
bool refineToInstances (GT_Refine &refiner, const GT_RefineParms *parms) const
 
bool flattenInstances (GT_Refine &refiner, const GT_RefineParms *parms) const
 
GT_PrimitiveHandle expandInstanceTransforms () const
 
virtual bool isSimplePrimitive (int primitive_type) const
 
bool updateGeoPrim (const GU_ConstDetailHandle &dtl, const GT_RefineParms &refine) override
 update any cached data for geometry and its attributes More...
 
bool extractTransforms (const GU_ConstDetailHandle &dtl, UT_Matrix4DArray &transforms, ExtractTransformCache &cache) const
 
const char * className () const override
 
int getPrimitiveType () const override
 
void enlargeBounds (UT_BoundingBox boxes[], int nsegs) const override
 
void enlargeRenderBounds (UT_BoundingBox boxes[], int nsegs) const override
 
void getVelocityRange (UT_Vector3 &vmin, UT_Vector3 &vmax, const UT_StringRef &attribute_name) const override
 
bool refine (GT_Refine &refiner, const GT_RefineParms *parms=NULL) const override
 
int getMotionSegments () const override
 
int64 getMemoryUsage () const override
 
bool save (UT_JSONWriter &w) const override
 
fpreal computePerimeter (int seg=0) const override
 
fpreal computeSurfaceArea (int seg=0) const override
 
fpreal computeVolume (const UT_Vector3 &ref_P, int seg=0) const override
 
GT_PrimitiveHandle doHarden () const override
 
GT_PrimitiveHandle doSoftCopy () const override
 
const GT_ViewportRefineOptionsviewportRefineOptions () const override
 
const GT_AttributeListHandlegetUniformAttributes () const override
 
const GT_AttributeListHandlegetDetailAttributes () const override
 
const GT_GEODetailListHandlesourceGeometry () const
 
void setSourceGeometry (const GT_GEODetailListHandle &g)
 
- Public Member Functions inherited from GT_Primitive
 GT_Primitive ()
 
 GT_Primitive (const GT_Primitive &src)
 
virtual ~GT_Primitive ()
 
virtual bool getUniqueID (int64 &id) const
 
const GT_TransformHandlegetPrimitiveTransform () const
 
void setPrimitiveTransform (const GT_TransformHandle &x)
 Set the transform for a the primitive. More...
 
GT_PrimitiveHandle clone () const
 
virtual bool hasDataArray (const UT_StringRef &name, GT_Owner owner_scope[], int num_owners, GT_Storage *storage=NULL, GT_Size *tuple_size=NULL) const
 
void setStaticGeometry (bool static_geo)
 Return true if the primitive represents geometry at frame 'fr'. More...
 
bool isStaticGeometry () const
 
bool isFrameInfoAvailable () const
 
bool getDataIdHash (int64 &hash, int segment=0, bool cache_data_id=false) const
 
virtual bool getTopologyVersion (int64 &version) const
 Returns the topology version for the primitive. More...
 
GT_DataArrayHandle findAttribute (const UT_StringRef &name, GT_Owner &owner, int segment) const
 
void dumpAttributeLists (const char *label, bool data_too) const
 print out all attribute lists More...
 
void dumpPrimitive () const
 
bool saveAttributeLists (UT_JSONWriter &w) const
 
GT_PrimitiveHandle harden () const
 
GT_PrimitiveHandle copyTransformed (const GT_TransformHandle &x, bool force=false) const
 
void refineCopyTransformFrom (const GT_Primitive &src)
 
GT_PrimitiveHandle attributeMerge (const GT_Primitive &src, const UT_StringMMPattern *vertex_pattern, const UT_StringMMPattern *point_pattern, const UT_StringMMPattern *uniform_pattern, const UT_StringMMPattern *detail_pattern) const
 
virtual GT_PrimitiveHandle doAttributeMerge (const GT_Primitive &src, const UT_StringMMPattern *vertex, const UT_StringMMPattern *point, const UT_StringMMPattern *uniform, const UT_StringMMPattern *detail) const
 The virtual implementation of attribute merging. More...
 
bool enlargeWidth (UT_BoundingBox boxes[], int nsegments, fpreal defwidth=-1) const
 
virtual const
GT_AttributeListHandle
getPointAttributes () const
 
virtual const
GT_AttributeListHandle
getVertexAttributes () const
 
const GT_AttributeListHandlegetAttributeList (GT_Owner owner) const
 
virtual const GT_DataArrayHandlegetVertexList () const
 
virtual GT_DataArrayHandle createPointNormals (int segment=0, const UT_StringRef &P=GA_Names::P, bool normalize=true, const fpreal32 *pntdata=NULL, GT_Storage store=GT_STORE_REAL32) const
 
- Public Member Functions inherited from UT_IntrusiveRefCounter< GT_Primitive >
SYS_FORCE_INLINE UT_IntrusiveRefCounter () noexcept
 Default constructor: Sets counter to 0. More...
 
SYS_FORCE_INLINE UT_IntrusiveRefCounter (const UT_IntrusiveRefCounter &) noexcept
 Copy constructor: Sets counter to 0. More...
 
UT_IntrusiveRefCounteroperator= (const UT_IntrusiveRefCounter &) noexcept
 Assignment operator: Does not modify counter. More...
 
SYS_FORCE_INLINE uint32 use_count () const noexcept
 Return current counter. More...
 
SYS_FORCE_INLINE bool conditionalAddRef () noexcept
 

Protected Member Functions

void doEnlargeBounds (UT_BoundingBox boxes[], int nsegs, bool forrender) const
 
- Protected Member Functions inherited from GT_Primitive
void enlargeP (UT_BoundingBox &box, const GT_AttributeListHandle &list, int segment) const
 
void enlargeP (UT_BoundingBox &B, const GT_DataArrayHandle &P) const
 Convenience method to enlarge a bounding box given a position attribute. More...
 
void enlargePw (UT_BoundingBox &B, const GT_DataArrayHandle &P) const
 
- Protected Member Functions inherited from UT_IntrusiveRefCounter< GT_Primitive >
SYS_FORCE_INLINE ~UT_IntrusiveRefCounter ()
 Destructor: Only derived classes can destruct this. More...
 

Protected Attributes

GT_PrimitiveHandle myGeometry
 
GT_TransformArrayHandle myTransforms
 
GT_GEOOffsetList myPackedPrimOffsets
 
GT_AttributeListHandle myUniform
 
GT_AttributeListHandle myDetail
 
GT_GEODetailListHandle mySourceGeometry
 
UT_Lock myLock
 

Additional Inherited Members

- Static Public Member Functions inherited from GT_Primitive
static int createPrimitiveTypeId ()
 
static GT_AttributeListHandle mergeAttributeLists (bool &changed, const GT_AttributeListHandle &src, const GT_AttributeListHandle &merge, const UT_StringMMPattern *pattern, const UT_StringMMPattern *alternate=NULL)
 
static bool computeVelocityRange (UT_Vector3 &vmin, UT_Vector3 &vmax, const GT_DataArrayHandle &v)
 
static GT_PrimitiveHandle refineDetail (const GU_ConstDetailHandle &detail, const GT_RefineParms *parms)
 
static GT_PrimitiveHandle refinePrimitive (const GT_PrimitiveHandle &primh, const GT_RefineParms *parms)
 
static voidoperator new (size_t size)
 
static voidoperator new (size_t size, void *p)
 
static void operator delete (void *p, size_t size)
 

Detailed Description

A primitive which instances another primitive

The instance primitive can have attribute lists:

  • detail: one for the whole primitive
  • uniform: one per instance The instance primitive does not pass these down when it refines.
Examples:
packedsphere/GT_GEOPackedSphere.C.

Definition at line 28 of file GT_PrimInstance.h.

Member Typedef Documentation

Constructor & Destructor Documentation

GT_PrimInstance::GT_PrimInstance ( )
GT_PrimInstance::GT_PrimInstance ( const GT_PrimitiveHandle geometry,
const GT_TransformArrayHandle transforms,
const GT_GEOOffsetList packed_prim_offsets = GT_GEOOffsetList(),
const GT_AttributeListHandle uniform = GT_AttributeListHandle(),
const GT_AttributeListHandle detail = GT_AttributeListHandle(),
const GT_GEODetailListHandle source = GT_GEODetailListHandle() 
)
GT_PrimInstance::GT_PrimInstance ( const GT_PrimInstance src)
GT_PrimInstance::~GT_PrimInstance ( )
override

Member Function Documentation

const char* GT_PrimInstance::className ( ) const
overridevirtual

Interface from GT_Primitive

Implements GT_Primitive.

Reimplemented in GT_PrimPackedDetail.

GT_TransformArrayHandle GT_PrimInstance::combinedTransforms ( ) const

Return the transforms for instances, but combined with the transform for the primitive itself.

fpreal GT_PrimInstance::computePerimeter ( int  seg = 0) const
overridevirtual

Interface from GT_Primitive

Reimplemented from GT_Primitive.

fpreal GT_PrimInstance::computeSurfaceArea ( int  seg = 0) const
overridevirtual

Interface from GT_Primitive

Reimplemented from GT_Primitive.

fpreal GT_PrimInstance::computeVolume ( const UT_Vector3 ref_P,
int  seg = 0 
) const
overridevirtual

Interface from GT_Primitive

Reimplemented from GT_Primitive.

const GT_AttributeListHandle& GT_PrimInstance::detail ( ) const
inline

Return detail attributes.

Definition at line 95 of file GT_PrimInstance.h.

void GT_PrimInstance::doEnlargeBounds ( UT_BoundingBox  boxes[],
int  nsegs,
bool  forrender 
) const
protected
GT_PrimitiveHandle GT_PrimInstance::doHarden ( ) const
overridevirtual

Interface from GT_Primitive

Reimplemented from GT_Primitive.

Reimplemented in GT_PrimPackedDetail.

GT_PrimitiveHandle GT_PrimInstance::doSoftCopy ( ) const
overridevirtual

Interface from GT_Primitive

Implements GT_Primitive.

Reimplemented in GT_PrimPackedDetail.

void GT_PrimInstance::enlargeBounds ( UT_BoundingBox  boxes[],
int  nsegs 
) const
inlineoverridevirtual

Interface from GT_Primitive

Implements GT_Primitive.

Definition at line 45 of file GT_PrimInstance.h.

void GT_PrimInstance::enlargeRenderBounds ( UT_BoundingBox  boxes[],
int  nsegs 
) const
inlineoverridevirtual

Interface from GT_Primitive

Reimplemented from GT_Primitive.

Definition at line 48 of file GT_PrimInstance.h.

GT_Size GT_PrimInstance::entries ( ) const
inline

Return number of instances.

Definition at line 78 of file GT_PrimInstance.h.

GT_PrimitiveHandle GT_PrimInstance::expandInstanceTransforms ( ) const

If the geometry contained by this instance primitive is an instance primitive itself this method will expand the instances, by permuting the transform arrays, creating a single flattened array of transforms.

bool GT_PrimInstance::extractTransforms ( const GU_ConstDetailHandle dtl,
UT_Matrix4DArray transforms,
ExtractTransformCache cache 
) const

Same code as updateGeoPrim but extracts the transforms to flat arrays instead of GT_TransformArray. It uses a cache of extracted prim offsets and the cache is rebuilt only if it is empty. : Returned transforms : cache pointers to primitives, prim types and prim offset

bool GT_PrimInstance::flattenInstances ( GT_Refine refiner,
const GT_RefineParms parms 
) const

Refine to individual pieces of geometry. This will create transformed copies of the geometry for each transform in the instance primitive

const GT_PrimitiveHandle& GT_PrimInstance::geometry ( ) const
inline

Return geometry to be instanced.

Definition at line 82 of file GT_PrimInstance.h.

const GT_AttributeListHandle& GT_PrimInstance::getDetailAttributes ( ) const
inlineoverridevirtual

Interface from GT_Primitive

Reimplemented from GT_Primitive.

Definition at line 69 of file GT_PrimInstance.h.

int64 GT_PrimInstance::getMemoryUsage ( ) const
overridevirtual

Interface from GT_Primitive

Implements GT_Primitive.

Reimplemented in GT_PrimPackedDetail.

int GT_PrimInstance::getMotionSegments ( ) const
overridevirtual

Interface from GT_Primitive

Implements GT_Primitive.

int GT_PrimInstance::getPrimitiveType ( ) const
overridevirtual

Interface from GT_Primitive

Reimplemented from GT_Primitive.

const GT_AttributeListHandle& GT_PrimInstance::getUniformAttributes ( ) const
inlineoverridevirtual

Interface from GT_Primitive

Reimplemented from GT_Primitive.

Definition at line 67 of file GT_PrimInstance.h.

void GT_PrimInstance::getVelocityRange ( UT_Vector3 vmin,
UT_Vector3 vmax,
const UT_StringRef attribute_name 
) const
overridevirtual

Interface from GT_Primitive

Reimplemented from GT_Primitive.

virtual bool GT_PrimInstance::isSimplePrimitive ( int  primitive_type) const
virtual

When the generic refine method is called, if the primitive is a "simple" primitive, flattenInstances() will be called instead of refineToInstances().

Default method considers the following to be "simple"

  • GT_PRIM_POLYGON_MESH
  • GT_PRIM_POLYGON
  • GT_PRIM_SUBDIVISION_MESH
  • GT_PRIM_CURVE_MESH
  • GT_PRIM_CURVE
  • GT_PRIM_POINT_MESH
  • GT_PRIM_NUPATCH
  • GT_PRIM_CIRCLE
  • GT_PRIM_SPHERE
  • GT_PRIM_TUBE
  • GT_PRIM_HYPERBOLOID
  • GT_PRIM_CIRCLE_MESH
  • GT_PRIM_SPHERE_MESH
  • GT_PRIM_TUBE_MESH
  • GT_PRIM_HYPERBOLOID_MESH
bool GT_PrimInstance::isValid ( ) const
inline

Check valid.

Definition at line 74 of file GT_PrimInstance.h.

const GT_GEOOffsetList& GT_PrimInstance::packedPrimOffsets ( ) const
inline

Definition at line 98 of file GT_PrimInstance.h.

bool GT_PrimInstance::refine ( GT_Refine refiner,
const GT_RefineParms parms = NULL 
) const
overridevirtual

Interface from GT_Primitive

Reimplemented from GT_Primitive.

bool GT_PrimInstance::refineToInstances ( GT_Refine refiner,
const GT_RefineParms parms 
) const

Refine geometry to create new instance primitives for each refined primitive. For example, if you refine an instance primitive containing a GT_PrimPolygonMesh, the poly mesh will be refined to create individual polygons. Each of these will be added to the refiner contained in an instance primitive.

bool GT_PrimInstance::save ( UT_JSONWriter w) const
overridevirtual

Interface from GT_Primitive

Reimplemented from GT_Primitive.

Reimplemented in GT_PrimPackedDetail.

void GT_PrimInstance::setSourceGeometry ( const GT_GEODetailListHandle g)
inline

If the geometry being instanced comes from a GU_Detail, then the source geometry should be set to point to this geometry. This lets viewport decorations be rendered properly.

Definition at line 149 of file GT_PrimInstance.h.

const GT_GEODetailListHandle& GT_PrimInstance::sourceGeometry ( ) const
inline

If the geometry being instanced comes from a GU_Detail, then the source geometry should be set to point to this geometry. This lets viewport decorations be rendered properly.

Definition at line 147 of file GT_PrimInstance.h.

const GT_TransformArrayHandle& GT_PrimInstance::transforms ( ) const
inline

Return transforms for instances.

Definition at line 86 of file GT_PrimInstance.h.

GT_TransformArrayHandle& GT_PrimInstance::transforms ( )
inline

Non-const transform access (for appending new transforms).

Definition at line 89 of file GT_PrimInstance.h.

const GT_AttributeListHandle& GT_PrimInstance::uniform ( ) const
inline

Return uniform attributes.

Definition at line 92 of file GT_PrimInstance.h.

bool GT_PrimInstance::updateGeoPrim ( const GU_ConstDetailHandle dtl,
const GT_RefineParms parms 
)
overridevirtual

update any cached data for geometry and its attributes

Reimplemented from GT_Primitive.

const GT_ViewportRefineOptions& GT_PrimInstance::viewportRefineOptions ( ) const
overridevirtual

Interface from GT_Primitive

Reimplemented from GT_Primitive.

Member Data Documentation

GT_AttributeListHandle GT_PrimInstance::myDetail
protected

Definition at line 187 of file GT_PrimInstance.h.

GT_PrimitiveHandle GT_PrimInstance::myGeometry
protected

Definition at line 183 of file GT_PrimInstance.h.

UT_Lock GT_PrimInstance::myLock
protected

Definition at line 189 of file GT_PrimInstance.h.

GT_GEOOffsetList GT_PrimInstance::myPackedPrimOffsets
protected

Definition at line 185 of file GT_PrimInstance.h.

GT_GEODetailListHandle GT_PrimInstance::mySourceGeometry
protected

Definition at line 188 of file GT_PrimInstance.h.

GT_TransformArrayHandle GT_PrimInstance::myTransforms
protected

Definition at line 184 of file GT_PrimInstance.h.

GT_AttributeListHandle GT_PrimInstance::myUniform
protected

Definition at line 186 of file GT_PrimInstance.h.


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