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

Container for a GU packed primitive. More...

#include <GT_GEOPrimPacked.h>

+ Inheritance diagram for GT_GEOPrimPacked:

Public Member Functions

 GT_GEOPrimPacked (const GU_ConstDetailHandle &prim_gdh, const GU_PrimPacked *prim, bool transformed=true, bool include_packed_attribs=false)
 
 GT_GEOPrimPacked (const GT_GEOPrimPacked &src)
 
 ~GT_GEOPrimPacked () override
 
bool refine (GT_Refine &refiner, const GT_RefineParms *parms=NULL) const override
 
void geometryAndTransform (const GT_RefineParms *parms, GT_PrimitiveHandle &result, GT_TransformHandle &xform) const
 
bool getViewportTransform (UT_Matrix4D &xform) const
 
virtual bool canInstance () const
 
virtual bool getInstanceKey (UT_Options &options) const
 
virtual GT_PrimitiveHandle getInstanceGeometry (const GT_RefineParms *parms, bool ignore_visibility=false) const
 
virtual GT_AttributeListHandle getInstanceAttributes () const
 
virtual GT_TransformHandle getInstanceTransform () const
 
GT_TransformHandle getFullTransform () const
 
const GU_PrimPackedgetPrim () const
 Accessor to the primitive. More...
 
const GU_PackedImplgetImplementation () const
 Accessor to the packed implementation. More...
 
virtual GU_ConstDetailHandle getPackedDetail () const
 
const char * className () const override
 
int getPrimitiveType () const override
 
void enlargeBounds (UT_BoundingBox boxes[], int nseg) const override
 
void enlargeRenderBounds (UT_BoundingBox boxes[], int nseg) const override
 
void getVelocityRange (UT_Vector3 &vmin, UT_Vector3 &vmax, const UT_StringRef &attribute_name) const override
 
int getMotionSegments () const override
 
int64 getMemoryUsage () const override
 
bool save (UT_JSONWriter &w) const override
 
const GT_ViewportRefineOptionsviewportRefineOptions () const override
 
GT_PrimitiveHandle doSoftCopy () const override
 
const GT_AttributeListHandlegetPointAttributes () const override
 
bool transformed () const
 
void setTransformed (bool f)
 
virtual void setViewportLOD (GEO_ViewportLOD, int)
 
virtual GEO_ViewportLOD getViewportLOD (int) const
 
- 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
 
virtual bool updateGeoPrim (const GU_ConstDetailHandle &dtl, const GT_RefineParms &parms)
 update any cached data for geometry and its attributes More...
 
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
getVertexAttributes () const
 
virtual const
GT_AttributeListHandle
getUniformAttributes () const
 
virtual const
GT_AttributeListHandle
getDetailAttributes () 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
 
virtual fpreal computePerimeter (int seg=0) const
 
virtual fpreal computeSurfaceArea (int seg=0) const
 
virtual fpreal computeVolume (const UT_Vector3 &ref_P, int seg=0) 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
 

Static Public Member Functions

static bool useViewportLOD (const GT_RefineParms *parms)
 
- 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)
 

Protected Member Functions

virtual bool copyPackedAttributesToGeometry () const
 
GT_PrimitiveHandle buildUntransformedFragment (const GU_ConstDetailHandle &fragment_gdh, const GA_Range &range) const
 
void createPointPrimIDs (bool include_packed_attribs)
 
void appendAttribute (const char *name, const GT_DataArrayHandle &attrib)
 
GT_PrimitiveHandle doHarden () const override
 Hardening a packed primitive will extract the full geometry. More...
 
void setDetailPrim (const GU_ConstDetailHandle &dh, const GU_PrimPacked *prim)
 
virtual GT_PrimitiveHandle getPointCloud (const GT_RefineParms *parms, bool &requires_transform) const
 
virtual GT_PrimitiveHandle getFullGeometry (const GT_RefineParms *parms, bool &requires_transform) const
 
virtual GT_PrimitiveHandle getBoxGeometry (const GT_RefineParms *parms) const
 
virtual GT_PrimitiveHandle getCentroidGeometry (const GT_RefineParms *parms) 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...
 

Detailed Description

Container for a GU packed primitive.

Examples:
packedsphere/GT_GEOPackedSphere.C.

Definition at line 21 of file GT_GEOPrimPacked.h.

Constructor & Destructor Documentation

GT_GEOPrimPacked::GT_GEOPrimPacked ( const GU_ConstDetailHandle prim_gdh,
const GU_PrimPacked prim,
bool  transformed = true,
bool  include_packed_attribs = false 
)
inline

Create a GT representation of the packed primitive prim. If transformed is true, the transform on the packed primitive will be used when refining. The prim_gdh is the detail handle for the detail containing the packed prim.

Definition at line 29 of file GT_GEOPrimPacked.h.

GT_GEOPrimPacked::GT_GEOPrimPacked ( const GT_GEOPrimPacked src)
inline

Definition at line 40 of file GT_GEOPrimPacked.h.

GT_GEOPrimPacked::~GT_GEOPrimPacked ( )
override

Member Function Documentation

void GT_GEOPrimPacked::appendAttribute ( const char *  name,
const GT_DataArrayHandle attrib 
)
protected
GT_PrimitiveHandle GT_GEOPrimPacked::buildUntransformedFragment ( const GU_ConstDetailHandle fragment_gdh,
const GA_Range range 
) const
protected

For fragments, the GU interface only provides a means of unpacking(), but not querying the fragment range. This convenience method will create geometry for a range of a gdp without unpacking. The fragment_gdh is a detail representing the geometry of the fragment.

virtual bool GT_GEOPrimPacked::canInstance ( ) const
virtual

Test whether instancing of the underlying geometry can be done Returns false by default. If you return true, you must implement

Reimplemented in GABC_NAMESPACE::GABC_PackedAlembic.

const char* GT_GEOPrimPacked::className ( ) const
overridevirtual

GT_Primitive interface

Implements GT_Primitive.

virtual bool GT_GEOPrimPacked::copyPackedAttributesToGeometry ( ) const
protectedvirtual

When extracting geometry for a single primitive, the base class may automatically copy some attributes from the packed primitive to the GT instance. If you've written a custom handler which is able to instance geometry (i.e. share the geometry through a GT_PrimInstance), this will do the wrong thing, since the shader attributes will be copied to the geometry (rather than being able to change on a per-instance basis). So, you must override this method to indicate that you're handling the packed attributes yourself.

The default is to copy the attributes, if you're handling them yourself, return false.

void GT_GEOPrimPacked::createPointPrimIDs ( bool  include_packed_attribs)
protected
GT_PrimitiveHandle GT_GEOPrimPacked::doHarden ( ) const
overrideprotectedvirtual

Hardening a packed primitive will extract the full geometry.

Reimplemented from GT_Primitive.

GT_PrimitiveHandle GT_GEOPrimPacked::doSoftCopy ( ) const
inlineoverridevirtual

GT_Primitive interface

Implements GT_Primitive.

Definition at line 69 of file GT_GEOPrimPacked.h.

void GT_GEOPrimPacked::enlargeBounds ( UT_BoundingBox  boxes[],
int  nseg 
) const
overridevirtual

GT_Primitive interface

Implements GT_Primitive.

void GT_GEOPrimPacked::enlargeRenderBounds ( UT_BoundingBox  boxes[],
int  nseg 
) const
overridevirtual

GT_Primitive interface

Reimplemented from GT_Primitive.

void GT_GEOPrimPacked::geometryAndTransform ( const GT_RefineParms parms,
GT_PrimitiveHandle result,
GT_TransformHandle xform 
) const

Get the full, un-transformed geometry.

Note
Some packed primitives will always create "deformed" geometry.
virtual GT_PrimitiveHandle GT_GEOPrimPacked::getBoxGeometry ( const GT_RefineParms parms) const
protectedvirtual

Sub-classes may want to override these methods which currently just call the bounding box method and create transformed geometry based on the bounds. The box & centroid should be untransformed.

Reimplemented in GABC_NAMESPACE::GABC_PackedAlembic.

virtual GT_PrimitiveHandle GT_GEOPrimPacked::getCentroidGeometry ( const GT_RefineParms parms) const
protectedvirtual

Sub-classes may want to override these methods which currently just call the bounding box method and create transformed geometry based on the bounds. The box & centroid should be untransformed.

Reimplemented in GABC_NAMESPACE::GABC_PackedAlembic.

virtual GT_PrimitiveHandle GT_GEOPrimPacked::getFullGeometry ( const GT_RefineParms parms,
bool &  requires_transform 
) const
protectedvirtual

Sub-classes may want to override these methods which currently just call getPackedDetail() and unpack() to access the geometry. These methods should return the "untransformed" primitives.

Warning
It is important to ensure that the primitive attributes refer to the GU_PrimPacked primitive, vertex, point. For example, in GT_GEODetailList, you'd want to set the primitive id otherwise you'll get crashes in the viewport as it tries to dereference the points/vertices in the base detail (not the packed detail).

If requires_transform is false if the point cloud is in the primitive's transformed space (the same as unpacking). If it's true the packed transform will be applied to the resulting primitive (without modifying the returned geometry). require_transform will be true by default, so it doesn't have to be written in most cases.

Reimplemented in GABC_NAMESPACE::GABC_PackedAlembic.

GT_TransformHandle GT_GEOPrimPacked::getFullTransform ( ) const

Returns either the primitive transform or the instance transform, depending on whether canInstance() returns true.

const GU_PackedImpl* GT_GEOPrimPacked::getImplementation ( ) const
inline

Accessor to the packed implementation.

Definition at line 164 of file GT_GEOPrimPacked.h.

virtual GT_AttributeListHandle GT_GEOPrimPacked::getInstanceAttributes ( ) const
virtual

When instancing, this method extracts the attributes on the packed primitive and returns them as a GT_AttributeList. The default method scoops up all attributes on the primitive (point, vertex, primitive & detail).

virtual GT_PrimitiveHandle GT_GEOPrimPacked::getInstanceGeometry ( const GT_RefineParms parms,
bool  ignore_visibility = false 
) const
virtual

Return the geometry the geometry for instancing. This may be different than getFullGeometry() in that

  • The geometry should not be transformed
  • The packed primitive attributes should not be included in the geometry This allows multiple instances to share the geometry unmodified The default method returns a NULL ptr.

Reimplemented in GABC_NAMESPACE::GABC_PackedAlembic.

virtual bool GT_GEOPrimPacked::getInstanceKey ( UT_Options options) const
virtual

If "instancing" is supported by the packed primitive, this method should return true. The options that define the packed primitive should be stored in the UT_Options. Primitives which have matching UT_Options can be considered to be shared.

Reimplemented in GABC_NAMESPACE::GABC_PackedAlembic.

virtual GT_TransformHandle GT_GEOPrimPacked::getInstanceTransform ( ) const
virtual

Return the transform handle for this particular instance. This method should return the transform required to transform the instance geometry to the space of this instance. The default method returns an identity transform.

Reimplemented in GABC_NAMESPACE::GABC_PackedAlembic.

int64 GT_GEOPrimPacked::getMemoryUsage ( ) const
overridevirtual

GT_Primitive interface

Implements GT_Primitive.

int GT_GEOPrimPacked::getMotionSegments ( ) const
overridevirtual

GT_Primitive interface

Implements GT_Primitive.

virtual GU_ConstDetailHandle GT_GEOPrimPacked::getPackedDetail ( ) const
virtual

The default implementation of getPackedDetail() is

It's called by getPointCloud() and getFullGeometry() to allow for sharing of geometry.

const GT_AttributeListHandle& GT_GEOPrimPacked::getPointAttributes ( ) const
inlineoverridevirtual

GT_Primitive interface

Reimplemented from GT_Primitive.

Definition at line 72 of file GT_GEOPrimPacked.h.

virtual GT_PrimitiveHandle GT_GEOPrimPacked::getPointCloud ( const GT_RefineParms parms,
bool &  requires_transform 
) const
protectedvirtual

Sub-classes may want to override these methods which currently just call getPackedDetail() and unpack() to access the geometry. These methods should return the "untransformed" primitives.

Warning
It is important to ensure that the primitive attributes refer to the GU_PrimPacked primitive, vertex, point. For example, in GT_GEODetailList, you'd want to set the primitive id otherwise you'll get crashes in the viewport as it tries to dereference the points/vertices in the base detail (not the packed detail).

If requires_transform is false if the point cloud is in the primitive's transformed space (the same as unpacking). If it's true the packed transform will be applied to the resulting primitive (without modifying the returned geometry). require_transform will be true by default, so it doesn't have to be written in most cases.

Reimplemented in GABC_NAMESPACE::GABC_PackedAlembic.

const GU_PrimPacked* GT_GEOPrimPacked::getPrim ( ) const
inline

Accessor to the primitive.

Definition at line 162 of file GT_GEOPrimPacked.h.

int GT_GEOPrimPacked::getPrimitiveType ( ) const
inlineoverridevirtual

GT_Primitive interface

Reimplemented from GT_Primitive.

Reimplemented in GT_PackedAlembic.

Definition at line 53 of file GT_GEOPrimPacked.h.

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

GT_Primitive interface

Reimplemented from GT_Primitive.

virtual GEO_ViewportLOD GT_GEOPrimPacked::getViewportLOD ( int  ) const
inlinevirtual

Set or query the viewport LOD - full, points, bbox, centroid, hidden.

Definition at line 96 of file GT_GEOPrimPacked.h.

bool GT_GEOPrimPacked::getViewportTransform ( UT_Matrix4D xform) const

For the viewport: grab the packed transform if not identity and return true. This transform does not include the GT primitive transform, only the packed transform.

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

The default refine method will process primitives, providing a bounding box, point cloud, etc. based on the viewport LOD stored on the primitive.

Reimplemented from GT_Primitive.

bool GT_GEOPrimPacked::save ( UT_JSONWriter w) const
overridevirtual

GT_Primitive interface

Reimplemented from GT_Primitive.

void GT_GEOPrimPacked::setDetailPrim ( const GU_ConstDetailHandle dh,
const GU_PrimPacked prim 
)
inlineprotected

Definition at line 234 of file GT_GEOPrimPacked.h.

void GT_GEOPrimPacked::setTransformed ( bool  f)
inline

Normally, the primitive will pick up the transform from the GU primitive implementation and use this in the GT representation. However, when doing instancing of shared geometry, the transforms will be picked up by the instance object, and so should be ignored on the base primitive.

Definition at line 89 of file GT_GEOPrimPacked.h.

virtual void GT_GEOPrimPacked::setViewportLOD ( GEO_ViewportLOD  ,
int   
)
inlinevirtual

Set or query the viewport LOD - full, points, bbox, centroid, hidden.

Definition at line 94 of file GT_GEOPrimPacked.h.

bool GT_GEOPrimPacked::transformed ( ) const
inline

Normally, the primitive will pick up the transform from the GU primitive implementation and use this in the GT representation. However, when doing instancing of shared geometry, the transforms will be picked up by the instance object, and so should be ignored on the base primitive.

Definition at line 88 of file GT_GEOPrimPacked.h.

static bool GT_GEOPrimPacked::useViewportLOD ( const GT_RefineParms parms)
static

Test whether a packed primitive should use the viewport LOD setting or not. There are at least two factors in this determination:

  • Whether the GT_RefineParms::getPackedViewportLOD() is true
  • Whether the LOD is being overriden using GT_RefineParms::getOverridePackedViewportLOD()
const GT_ViewportRefineOptions& GT_GEOPrimPacked::viewportRefineOptions ( ) const
overridevirtual

GT_Primitive interface

Reimplemented from GT_Primitive.


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