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

A mesh of curves. More...

#include <GT_PrimCurveMesh.h>

+ Inheritance diagram for GT_PrimCurveMesh:

Public Member Functions

 GT_PrimCurveMesh ()
 Default constructor. More...
 
 GT_PrimCurveMesh (const GT_PrimCurveMesh &src)
 Copy c-tor. More...
 
 GT_PrimCurveMesh (const GT_PrimCurveMesh &src, const GT_AttributeListHandle &vattrib, const GT_AttributeListHandle &uattrib, const GT_AttributeListHandle &dattrib)
 
 GT_PrimCurveMesh (const GT_PrimCurveMesh &src, GT_Basis basis, const GT_CountArray &counts, const GT_AttributeListHandle &vattrib, const GT_AttributeListHandle &uattrib, const GT_AttributeListHandle &dattrib, bool wrap, const GT_FaceSetMapPtr &fsets, bool closed=false, bool use_breakpoints=false, GT_Parameterization breakpoint_parameterization=GT_PARAMETERIZATION_CHORD)
 
 GT_PrimCurveMesh (GT_Basis basis, const GT_DataArrayHandle &vtx_counts, const GT_AttributeListHandle &vertex, const GT_AttributeListHandle &uniform, const GT_AttributeListHandle &detail, bool wrap, GT_IndexingMode indexing=GT_INDEXING_QUICK, bool closed=false, bool use_breakpoints=false, GT_Parameterization breakpoint_parameterization=GT_PARAMETERIZATION_CHORD)
 Useful constructor. More...
 
 GT_PrimCurveMesh (const GT_PrimCurve &curve)
 Construct a curve mesh from a single GT_PrimCurve. More...
 
 ~GT_PrimCurveMesh () override
 Destructor. More...
 
const char * className () const override
 
bool save (UT_JSONWriter &w) const override
 
void init (GT_Basis basis, const GT_DataArrayHandle &vtx_counts, const GT_AttributeListHandle &vertex, const GT_AttributeListHandle &uniform, const GT_AttributeListHandle &detail, bool wrap, GT_IndexingMode indexing=GT_INDEXING_QUICK, bool closed=false, bool use_breakpoint_size=false, GT_Parameterization breakpoint_parameterization=GT_PARAMETERIZATION_CHORD)
 
bool setKnots (const GT_DataArrayHandle &knots)
 
GT_Size getCurveCount () const
 Return the number of faces in the mesh. More...
 
GT_PrimitiveHandle getCurve (GT_Offset i) const
 Return a pointer to the individual face. More...
 
GT_PrimitiveHandle refineToLinear (const GT_RefineParms *parms=NULL, fpreal lod_scale=-1) const
 Refine to linear curves. More...
 
GT_PrimitiveHandle removeDegenerate () const
 Remove degenerate curves from the meseh. More...
 
GT_PrimitiveHandle expandUniformVarying () const
 
GT_PrimitiveHandle pinCurves () const
 
GT_PrimitiveHandle unpinCurves () const
 
int getOrder (GT_Offset curve) const
 Return the order for a given curve. More...
 
bool isUniformOrder () const
 Check to see whether all curves have the same order. More...
 
int uniformOrder () const
 
const GT_DataArrayHandlevaryingOrders () const
 Return the varying orders (may be NULL) More...
 
GT_PrimitiveHandle doHarden () const override
 Harden all attributes so there are no dangling dependencies. More...
 
GT_PrimitiveHandle doSoftCopy () const override
 
GT_PrimitiveHandle doAttributeMerge (const GT_Primitive &src, const UT_StringMMPattern *vertex, const UT_StringMMPattern *point, const UT_StringMMPattern *uniform, const UT_StringMMPattern *detail) const override
 The virtual implementation of attribute merging. More...
 
GT_Offset getVertexOffset (GT_Offset face) const
 Return the offset into the vertex list for the given face. More...
 
GT_Size getVertexCount (GT_Offset face) const
 Return the length of the vertex list for the given face. More...
 
const GT_DataArrayHandle getCurveCounts (GT_IndexingMode mode=GT_INDEXING_QUICK) const
 
fpreal computePerimeter (int seg) const override
 GEO/GU support to compute perimeter of curve. More...
 
void enlargeBounds (UT_BoundingBox boxes[], int nseg) const override
 
void enlargeRenderBounds (UT_BoundingBox b[], int n) const override
 
int getPrimitiveType () const override
 
bool refine (GT_Refine &refiner, const GT_RefineParms *parms) const override
 
int getMotionSegments () const override
 
int64 getMemoryUsage () const override
 
const GT_ViewportRefineOptionsviewportRefineOptions () const override
 
bool setBasis (GT_Basis basis, int order=4)
 
bool setBasis (GT_Basis basis, const GT_DataArrayHandle &order)
 
bool setOrder (int order)
 
bool setOrder (const GT_DataArrayHandle &order)
 
GT_Basis getBasis () const
 
const GT_CountArraygetCurveCountArray () const
 
const GT_AttributeListHandlegetVertex () const
 
const GT_AttributeListHandlegetUniform () const
 
const GT_AttributeListHandlegetDetail () const
 
bool getWrap () const
 
bool getClosed () const
 
bool getUseBreakpoints () const
 
GT_Parameterization getBreakpointsParameterization () const
 
const GT_DataArrayHandle knots () const
 
GT_Offset knotOffset (GT_Offset curve) const
 
const GT_FaceSetMapPtrfaceSetMap () const
 
void setFaceSetMap (const GT_FaceSetMapPtr &v)
 
void addFaceSet (const char *name, const GT_FaceSetPtr &set)
 
const GT_AttributeListHandlegetVertexAttributes () const override
 
const GT_AttributeListHandlegetUniformAttributes () const override
 
const GT_AttributeListHandlegetDetailAttributes () const override
 
- Public Member Functions inherited from GT_Primitive
 GT_Primitive ()
 
 GT_Primitive (const GT_Primitive &src)
 
virtual ~GT_Primitive ()
 
virtual bool getUniqueID (int64 &id) const
 
virtual void getVelocityRange (UT_Vector3 &min, UT_Vector3 &max, const UT_StringRef &attribute_name=GA_Names::v) 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
 
bool enlargeWidth (UT_BoundingBox boxes[], int nsegments, fpreal defwidth=-1) const
 
virtual const
GT_AttributeListHandle
getPointAttributes () 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 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
 

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)
 
- 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

A mesh of curves.

Examples:
RAY/RAY_DemoGT.C.

Definition at line 25 of file GT_PrimCurveMesh.h.

Constructor & Destructor Documentation

GT_PrimCurveMesh::GT_PrimCurveMesh ( )

Default constructor.

GT_PrimCurveMesh::GT_PrimCurveMesh ( const GT_PrimCurveMesh src)
inline

Copy c-tor.

Definition at line 31 of file GT_PrimCurveMesh.h.

GT_PrimCurveMesh::GT_PrimCurveMesh ( const GT_PrimCurveMesh src,
const GT_AttributeListHandle vattrib,
const GT_AttributeListHandle uattrib,
const GT_AttributeListHandle dattrib 
)
inline

Definition at line 50 of file GT_PrimCurveMesh.h.

GT_PrimCurveMesh::GT_PrimCurveMesh ( const GT_PrimCurveMesh src,
GT_Basis  basis,
const GT_CountArray counts,
const GT_AttributeListHandle vattrib,
const GT_AttributeListHandle uattrib,
const GT_AttributeListHandle dattrib,
bool  wrap,
const GT_FaceSetMapPtr fsets,
bool  closed = false,
bool  use_breakpoints = false,
GT_Parameterization  breakpoint_parameterization = GT_PARAMETERIZATION_CHORD 
)
inline

Definition at line 72 of file GT_PrimCurveMesh.h.

GT_PrimCurveMesh::GT_PrimCurveMesh ( GT_Basis  basis,
const GT_DataArrayHandle vtx_counts,
const GT_AttributeListHandle vertex,
const GT_AttributeListHandle uniform,
const GT_AttributeListHandle detail,
bool  wrap,
GT_IndexingMode  indexing = GT_INDEXING_QUICK,
bool  closed = false,
bool  use_breakpoints = false,
GT_Parameterization  breakpoint_parameterization = GT_PARAMETERIZATION_CHORD 
)
inline

Useful constructor.

Definition at line 99 of file GT_PrimCurveMesh.h.

GT_PrimCurveMesh::GT_PrimCurveMesh ( const GT_PrimCurve curve)

Construct a curve mesh from a single GT_PrimCurve.

GT_PrimCurveMesh::~GT_PrimCurveMesh ( )
override

Destructor.

Member Function Documentation

void GT_PrimCurveMesh::addFaceSet ( const char *  name,
const GT_FaceSetPtr set 
)

Access to the face sets (curve sets)

const char* GT_PrimCurveMesh::className ( ) const
inlineoverridevirtual

Implements GT_Primitive.

Reimplemented in GT_PrimSubdivisionCurves.

Definition at line 125 of file GT_PrimCurveMesh.h.

fpreal GT_PrimCurveMesh::computePerimeter ( int  seg) const
overridevirtual

GEO/GU support to compute perimeter of curve.

Reimplemented from GT_Primitive.

GT_PrimitiveHandle GT_PrimCurveMesh::doAttributeMerge ( const GT_Primitive src,
const UT_StringMMPattern vertex,
const UT_StringMMPattern point,
const UT_StringMMPattern uniform,
const UT_StringMMPattern detail 
) const
overridevirtual

The virtual implementation of attribute merging.

Reimplemented from GT_Primitive.

GT_PrimitiveHandle GT_PrimCurveMesh::doHarden ( ) const
overridevirtual

Harden all attributes so there are no dangling dependencies.

Reimplemented from GT_Primitive.

GT_PrimitiveHandle GT_PrimCurveMesh::doSoftCopy ( ) const
inlineoverridevirtual

Create a copy of the primitive, referencing all the source data This can return a NULL pointer, but it would be better to implement it properly.

Implements GT_Primitive.

Definition at line 285 of file GT_PrimCurveMesh.h.

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

Methods defined on GT_Primitive

Implements GT_Primitive.

void GT_PrimCurveMesh::enlargeRenderBounds ( UT_BoundingBox  b[],
int  n 
) const
overridevirtual

Methods defined on GT_Primitive

Reimplemented from GT_Primitive.

GT_PrimitiveHandle GT_PrimCurveMesh::expandUniformVarying ( ) const

In some systems (Alembic, Usd), curve data can have a "varying" storage specification. This stores data per curve span rather than per vertex. This method will convert any varying or uniform storage arrays to per-vertex data.

const GT_FaceSetMapPtr& GT_PrimCurveMesh::faceSetMap ( ) const
inline

Access to the face sets (curve sets)

Definition at line 298 of file GT_PrimCurveMesh.h.

GT_Basis GT_PrimCurveMesh::getBasis ( ) const
inline

Accessors

Definition at line 241 of file GT_PrimCurveMesh.h.

GT_Parameterization GT_PrimCurveMesh::getBreakpointsParameterization ( ) const
inline

Accessors

Definition at line 257 of file GT_PrimCurveMesh.h.

bool GT_PrimCurveMesh::getClosed ( ) const
inline

Accessors

Definition at line 253 of file GT_PrimCurveMesh.h.

GT_PrimitiveHandle GT_PrimCurveMesh::getCurve ( GT_Offset  i) const

Return a pointer to the individual face.

GT_Size GT_PrimCurveMesh::getCurveCount ( ) const

Return the number of faces in the mesh.

const GT_CountArray& GT_PrimCurveMesh::getCurveCountArray ( ) const
inline

Accessors

Definition at line 243 of file GT_PrimCurveMesh.h.

const GT_DataArrayHandle GT_PrimCurveMesh::getCurveCounts ( GT_IndexingMode  mode = GT_INDEXING_QUICK) const

Return an array containing the face counts per-face

Warning
This is expensive and will create a separate numeric array
const GT_AttributeListHandle& GT_PrimCurveMesh::getDetail ( ) const
inline

Accessors

Definition at line 249 of file GT_PrimCurveMesh.h.

const GT_AttributeListHandle& GT_PrimCurveMesh::getDetailAttributes ( ) const
inlineoverridevirtual

Access attributes

Reimplemented from GT_Primitive.

Definition at line 311 of file GT_PrimCurveMesh.h.

int64 GT_PrimCurveMesh::getMemoryUsage ( ) const
overridevirtual

Methods defined on GT_Primitive

Implements GT_Primitive.

int GT_PrimCurveMesh::getMotionSegments ( ) const
overridevirtual

Methods defined on GT_Primitive

Implements GT_Primitive.

int GT_PrimCurveMesh::getOrder ( GT_Offset  curve) const
inline

Return the order for a given curve.

Definition at line 268 of file GT_PrimCurveMesh.h.

int GT_PrimCurveMesh::getPrimitiveType ( ) const
overridevirtual

Methods defined on GT_Primitive

Reimplemented from GT_Primitive.

Reimplemented in GT_PrimSubdivisionCurves.

const GT_AttributeListHandle& GT_PrimCurveMesh::getUniform ( ) const
inline

Accessors

Definition at line 247 of file GT_PrimCurveMesh.h.

const GT_AttributeListHandle& GT_PrimCurveMesh::getUniformAttributes ( ) const
inlineoverridevirtual

Access attributes

Reimplemented from GT_Primitive.

Definition at line 309 of file GT_PrimCurveMesh.h.

bool GT_PrimCurveMesh::getUseBreakpoints ( ) const
inline

Accessors

Definition at line 255 of file GT_PrimCurveMesh.h.

const GT_AttributeListHandle& GT_PrimCurveMesh::getVertex ( ) const
inline

Accessors

Definition at line 245 of file GT_PrimCurveMesh.h.

const GT_AttributeListHandle& GT_PrimCurveMesh::getVertexAttributes ( ) const
inlineoverridevirtual

Access attributes

Reimplemented from GT_Primitive.

Definition at line 307 of file GT_PrimCurveMesh.h.

GT_Size GT_PrimCurveMesh::getVertexCount ( GT_Offset  face) const
inline

Return the length of the vertex list for the given face.

Definition at line 319 of file GT_PrimCurveMesh.h.

GT_Offset GT_PrimCurveMesh::getVertexOffset ( GT_Offset  face) const
inline

Return the offset into the vertex list for the given face.

Definition at line 316 of file GT_PrimCurveMesh.h.

bool GT_PrimCurveMesh::getWrap ( ) const
inline

Accessors

Definition at line 251 of file GT_PrimCurveMesh.h.

void GT_PrimCurveMesh::init ( GT_Basis  basis,
const GT_DataArrayHandle vtx_counts,
const GT_AttributeListHandle vertex,
const GT_AttributeListHandle uniform,
const GT_AttributeListHandle detail,
bool  wrap,
GT_IndexingMode  indexing = GT_INDEXING_QUICK,
bool  closed = false,
bool  use_breakpoint_size = false,
GT_Parameterization  breakpoint_parameterization = GT_PARAMETERIZATION_CHORD 
)

Initialize the mesh

  • vtx_counts
    An integer array, representing the number of vertices in each curve. The length of the array determines the number of curves in the mesh.
  • vertex
    Unique data per vertex. The length of these attribute arrays should be the sum of the vertex_counts array.
  • uniform
    Attribute per curve. There should be one entry for each entry in the vtx_counts array.
  • indexing
    What type of indexing is required
bool GT_PrimCurveMesh::isUniformOrder ( ) const
inline

Check to see whether all curves have the same order.

Definition at line 274 of file GT_PrimCurveMesh.h.

GT_Offset GT_PrimCurveMesh::knotOffset ( GT_Offset  curve) const
inline

Accessors

Definition at line 261 of file GT_PrimCurveMesh.h.

const GT_DataArrayHandle GT_PrimCurveMesh::knots ( ) const
inline

Accessors

Definition at line 260 of file GT_PrimCurveMesh.h.

GT_PrimitiveHandle GT_PrimCurveMesh::pinCurves ( ) const

Pin curves. This is only valid when the basis is one of:

  • GT_BASIS_BSPLINE
  • GT_BASIS_CATMULLROM If the basis is invalid an empty primitive handle is returned.

Pinning curves will add an extra vertex at the beginning and end of each curve, such that:

P[-1] = 2*P[0] - P[1]
P[n] = 2*P[n-1] - P[n-2]
bool GT_PrimCurveMesh::refine ( GT_Refine refiner,
const GT_RefineParms parms 
) const
overridevirtual

Methods defined on GT_Primitive

Reimplemented from GT_Primitive.

Reimplemented in GT_PrimSubdivisionCurves.

GT_PrimitiveHandle GT_PrimCurveMesh::refineToLinear ( const GT_RefineParms parms = NULL,
fpreal  lod_scale = -1 
) const

Refine to linear curves.

GT_PrimitiveHandle GT_PrimCurveMesh::removeDegenerate ( ) const

Remove degenerate curves from the meseh.

bool GT_PrimCurveMesh::save ( UT_JSONWriter w) const
overridevirtual

Save the primitive to a JSON stream. The default method does nothing and returns false.

Reimplemented from GT_Primitive.

bool GT_PrimCurveMesh::setBasis ( GT_Basis  basis,
int  order = 4 
)

Set the basis & order for the curves Basis Type Min Order Max Order GT_BASIS_LINEAR 2 2 GT_BASIS_BEZIER 2 31 GT_BASIS_BSPLINE 2 arbitrary GT_BASIS_CATMULLROM 4 4 GT_BASIS_HERMITE 4 4 GT_BASIS_POWER 2 arbitrary

Note
Changing the order will clear the knot vector (if one exists)
bool GT_PrimCurveMesh::setBasis ( GT_Basis  basis,
const GT_DataArrayHandle order 
)

Set the basis & order for the curves Basis Type Min Order Max Order GT_BASIS_LINEAR 2 2 GT_BASIS_BEZIER 2 31 GT_BASIS_BSPLINE 2 arbitrary GT_BASIS_CATMULLROM 4 4 GT_BASIS_HERMITE 4 4 GT_BASIS_POWER 2 arbitrary

Note
Changing the order will clear the knot vector (if one exists)
void GT_PrimCurveMesh::setFaceSetMap ( const GT_FaceSetMapPtr v)
inline

Access to the face sets (curve sets)

Definition at line 299 of file GT_PrimCurveMesh.h.

bool GT_PrimCurveMesh::setKnots ( const GT_DataArrayHandle knots)

Set knot vector. Some conditions must be met for this to work properly.

  • The basis must be GT_BASIS_BSPLINE
  • The storage for the knots must be floating point
  • The curve will have periodicity turned off. To create a periodic curve, you must duplicate the first (order-1) vertices and adjust the knot vector so the knot spacing for the last order knots matches the spacing for the first order knots.
  • The length of the knot vector must be
    sum(getVertexCount(i)) + sum(getOrder(i))
    That is, the length of the knot vector for each curve must be the number of vertices in the curve plus its order.

    Note
    In Houdini curves, the first vertex is implicitly duplicated for periodic NURBS curves. This is not the case for GT, where the first vertex must be explicitly duplicated.
bool GT_PrimCurveMesh::setOrder ( int  order)
inline

Set the curve order

Definition at line 198 of file GT_PrimCurveMesh.h.

bool GT_PrimCurveMesh::setOrder ( const GT_DataArrayHandle order)
inline

Set the curve order

Definition at line 200 of file GT_PrimCurveMesh.h.

int GT_PrimCurveMesh::uniformOrder ( ) const
inline

Return the order for all curves. If the curves have varying orders, the uniform order will be less than zero.

Definition at line 278 of file GT_PrimCurveMesh.h.

GT_PrimitiveHandle GT_PrimCurveMesh::unpinCurves ( ) const

Unpin curves. This method will fail if the curve mesh has an invalid basis or if any curves don't have enough vertices.

const GT_DataArrayHandle& GT_PrimCurveMesh::varyingOrders ( ) const
inline

Return the varying orders (may be NULL)

Definition at line 281 of file GT_PrimCurveMesh.h.

const GT_ViewportRefineOptions& GT_PrimCurveMesh::viewportRefineOptions ( ) const
overridevirtual

Methods defined on GT_Primitive

Reimplemented from GT_Primitive.


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