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

A mesh of polygons. More...

#include <GT_PrimPolygonMesh.h>

+ Inheritance diagram for GT_PrimPolygonMesh:

Public Member Functions

 GT_PrimPolygonMesh ()
 Default constructor. More...
 
 GT_PrimPolygonMesh (const GT_DataArrayHandle &vtx_counts, const GT_DataArrayHandle &vtx_indices, const GT_AttributeListHandle &shared, const GT_AttributeListHandle &vertex, const GT_AttributeListHandle &uniform, const GT_AttributeListHandle &detail, GT_IndexingMode indexing=GT_INDEXING_QUICK, GT_Size min_vertex_count=0, GT_Size max_vertex_count=0)
 Useful constructor. More...
 
 GT_PrimPolygonMesh (const GT_CountArray &vtx_counts, const GT_DataArrayHandle &vtx_indices, const GT_AttributeListHandle &shared, const GT_AttributeListHandle &vertex, const GT_AttributeListHandle &uniform, const GT_AttributeListHandle &detail)
 
 GT_PrimPolygonMesh (const GT_PrimPolygonMesh &pmesh, const GT_AttributeListHandle &shared, const GT_AttributeListHandle &vertex, const GT_AttributeListHandle &uniform, const GT_AttributeListHandle &detail)
 
 GT_PrimPolygonMesh (const GT_PrimPolygonMesh &pmesh, const GT_DataArrayHandle &vtx_indices, const GT_AttributeListHandle &shared)
 
 GT_PrimPolygonMesh (const GT_PrimPolygonMesh &pmesh)
 Copy c-tor. More...
 
 GT_PrimPolygonMesh (const GT_PrimPolygon &poly)
 Construct a polygon mesh from a GT_PrimPolygon. More...
 
const char * className () const override
 
bool save (UT_JSONWriter &w) const override
 
GT_Size getFaceCount () const
 Return the number of faces in the mesh. More...
 
GT_PrimitiveHandle getFace (GT_Offset i) const
 Return a pointer to the individual face. More...
 
GT_Size getVertexCount () const
 Return the number of vertices. More...
 
GT_Size getPointCount () const
 Return the number of points. 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 getPoint (GT_Offset face, GT_Offset v) const
 Return the point index for a given face and vertex. 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...
 
void getEdgePoints (GT_Offset face, GT_Offset vertex, GT_Offset &p0, GT_Offset &p1) const
 
bool isConvexed () const
 Returns true if this mesh has been convexed. More...
 
void setConvexed (bool c)
 Set the convex flag on the mesh. More...
 
GT_DataArrayHandle getFaceCounts (GT_IndexingMode indexing=GT_INDEXING_QUICK) const
 Return an array containing the face counts per-face. More...
 
const GT_DataArrayHandle getUsedPointList (GT_IndexingMode idx=GT_INDEXING_QUICK) const
 
GT_PrimitiveHandle convex (int max_points_per_poly=3, bool keep_degenerate=false, bool allow_interrupt=true, bool allow_indirect_flattening=false, const UT_Set< int > *holes=nullptr) const
 
GT_PrimitiveHandle adoptConvexing (const GT_DataArrayHandle &verts, const GT_DataArrayHandle &uniform_indexing, const GT_DataArrayHandle &vertex_indexing, const GT_DataArrayHandle &vert_info, const GT_DataArrayHandle &prim_info) const
 
void getConvexArrays (GT_DataArrayHandle &verts, GT_DataArrayHandle &uniform_indexing, GT_DataArrayHandle &vertex_indexing, GT_DataArrayHandle &vert_info, GT_DataArrayHandle &prim_info) const
 
GT_PrimitiveHandle removeUnusedPoints (const int32 *idx=NULL) const
 
GT_PrimPolygonMeshcreatePointNormalsIfMissing (const UT_StringRef &P=GA_Names::P, bool normalize=true, bool *error=nullptr) const
 Create point normals on a new mesh if no normals are found. If no point or vertex normals are found, generate point normals from P and return a new mesh. If normals are found, return NULL. More...
 
GT_PrimPolygonMeshcreateVertexNormalsIfMissing (const UT_StringRef &P=GA_Names::P, fpreal cuspangledegrees=GT_DEFAULT_ADJUSTED_CUSP_ANGLE, bool normalize=true, bool *error=nullptr) const
 
GT_PrimPolygonMeshcreateTangentsIfMissing (bool *error=nullptr)
 
bool createFastTangents (GT_DataArrayHandle *tanu_h, GT_DataArrayHandle *tanv_h) const
 
bool splitMesh (GT_Size polygon_limit, UT_Array< GT_PrimitiveHandle > &split_meshes, bool remove_unused_points=true) const
 Divide a mesh into smaller meshes if it exceeds the poly_limit. If this mesh has more than polygon_limit polygons, this will split the mesh into multiple sub-meshes, attempting to keep them all roughly the same number of polygons. If this mesh has fewer than polygon_limit polygons, it will return false and not add any meshes to split_meshes. If remove_unused_points is true, each submesh will have unused points removed. More...
 
bool partitionByMaterial (const GT_DataArrayHandle &mat_id, UT_Array< GT_PrimitiveHandle > &sub_meshes, GT_Size polygon_limit=SYS_INT32_MAX) const
 
bool updateGeoPrim (const GU_ConstDetailHandle &dtl, const GT_RefineParms &refine) override
 update any cached data for geometry and its attributes More...
 
void enlargeBounds (UT_BoundingBox boxes[], int nsegments) 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
 
void init (const GT_DataArrayHandle &vtx_counts, const GT_DataArrayHandle &vtx_indices, const GT_AttributeListHandle &shared, const GT_AttributeListHandle &vertex, const GT_AttributeListHandle &uniform, const GT_AttributeListHandle &detail, GT_IndexingMode indexing=GT_INDEXING_QUICK, GT_Size min_vertex_count=0, GT_Size max_vertex_count=0)
 
void init (const GT_CountArray &vtx_counts, const GT_DataArrayHandle &vtx_indices, const GT_AttributeListHandle &shared, const GT_AttributeListHandle &vertex, const GT_AttributeListHandle &uniform, const GT_AttributeListHandle &detail)
 
GT_Size getMinVertexCount () const
 
GT_Size getMaxVertexCount () const
 
const GT_DataArrayHandlegetVertexList () const override
 
const GT_CountArraygetFaceCountArray () const
 
const GT_AttributeListHandlegetShared () const
 
const GT_AttributeListHandlegetVertex () const
 
const GT_AttributeListHandlegetUniform () const
 
const GT_AttributeListHandlegetDetail () const
 
const GT_FaceSetMapPtrfaceSetMap () const
 
void setFaceSetMap (const GT_FaceSetMapPtr &v)
 
void addFaceSet (const UT_StringHolder &name, const GT_FaceSetPtr &set)
 
const GT_AttributeListHandlegetVertexAttributes () const override
 
const GT_AttributeListHandlegetPointAttributes () const override
 
const GT_AttributeListHandlegetUniformAttributes () const override
 
const GT_AttributeListHandlegetDetailAttributes () const override
 
bool faceNormals (UT_Vector3 *N, int segment=0, const UT_StringRef &P=GA_Names::P) const
 
bool faceNormals (UT_Vector3D *N64, int segment=0, const UT_StringRef &P=GA_Names::P) const
 
bool faceNormals (fpreal16 *N16, int segment=0, const UT_StringRef &P=GA_Names::P) const
 
GT_DataArrayHandle faceNormals (int segment=0, const UT_StringRef &P=GA_Names::P, GT_Storage store=GT_STORE_REAL32) const
 
bool pointNormals (UT_Vector3T< fpreal16 > *N, GT_Size npts, int segment=0, const UT_StringRef &P=GA_Names::P, bool normalize=true, const fpreal32 *pntdata=NULL) const
 
bool pointNormals (UT_Vector3 *N, GT_Size npts, int segment=0, const UT_StringRef &P=GA_Names::P, bool normalize=true, const fpreal32 *pntdata=NULL) const
 
bool pointNormals (UT_Vector3D *N, GT_Size npts, int segment=0, const UT_StringRef &P=GA_Names::P, bool normalize=true, const fpreal32 *pntdata=NULL) const
 
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 override
 
bool vertexNormals (UT_Vector3T< fpreal16 > *N, GT_Size npts, int segment=0, const UT_StringRef &P=GA_Names::P, fpreal maxangledegrees=GT_DEFAULT_ADJUSTED_CUSP_ANGLE, bool normalize=true) const
 
bool vertexNormals (UT_Vector3 *N, GT_Size npts, int segment=0, const UT_StringRef &P=GA_Names::P, fpreal maxangledegrees=GT_DEFAULT_ADJUSTED_CUSP_ANGLE, bool normalize=true) const
 
bool vertexNormals (UT_Vector3D *N, GT_Size npts, int segment=0, const UT_StringRef &P=GA_Names::P, fpreal maxangledegrees=GT_DEFAULT_ADJUSTED_CUSP_ANGLE, bool normalize=true) const
 
virtual GT_DataArrayHandle createVertexNormals (int segment=0, const UT_StringRef &P=GA_Names::P, fpreal maxangledegrees=GT_DEFAULT_ADJUSTED_CUSP_ANGLE, bool normalize=true, GT_Storage store=GT_STORE_REAL32) const
 
fpreal computePerimeter (int seg) const override
 
fpreal computeSurfaceArea (int seg) const override
 
fpreal computeVolume (const UT_Vector3 &ref_P, int seg) 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 enlargeRenderBounds (UT_BoundingBox boxes[], int nsegments) 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
 
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
 
virtual const
GT_ViewportRefineOptions
viewportRefineOptions () 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
 
const GT_AttributeListHandlegetAttributeList (GT_Owner owner) 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 hardenAttributes ()
 
virtual GT_PrimPolygonMeshclone (const GT_DataArrayHandle &vtx_counts, const GT_DataArrayHandle &vtx_indices, const GT_AttributeListHandle &shared, const GT_AttributeListHandle &vertex, const GT_AttributeListHandle &uniform, const GT_AttributeListHandle &detail, GT_IndexingMode indexing=GT_INDEXING_QUICK, GT_Size min_vertex_count=0, GT_Size max_vertex_count=0) const
 
virtual GT_PrimPolygonMeshclone (const GT_CountArray &vtx_counts, const GT_DataArrayHandle &vtx_indices, const GT_AttributeListHandle &shared, const GT_AttributeListHandle &vertex, const GT_AttributeListHandle &uniform, const GT_AttributeListHandle &detail) const
 
virtual GT_PrimPolygonMeshclone (const GT_AttributeListHandle &shared, const GT_AttributeListHandle &vertex, const GT_AttributeListHandle &uniform, const GT_AttributeListHandle &detail) const
 
virtual GT_PrimPolygonMeshclone (const GT_DataArrayHandle &vtx_indices, const GT_AttributeListHandle &shared) 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_AttributeListHandle myShared
 
GT_AttributeListHandle myVertex
 
GT_AttributeListHandle myUniform
 
GT_AttributeListHandle myDetail
 

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 mesh of polygons.

Examples:
GUI/GUI_PolygonNormalShade.C, and tetprim/GT_PrimTetra.C.

Definition at line 35 of file GT_PrimPolygonMesh.h.

Constructor & Destructor Documentation

GT_PrimPolygonMesh::GT_PrimPolygonMesh ( )
inline

Default constructor.

Definition at line 39 of file GT_PrimPolygonMesh.h.

GT_PrimPolygonMesh::GT_PrimPolygonMesh ( const GT_DataArrayHandle vtx_counts,
const GT_DataArrayHandle vtx_indices,
const GT_AttributeListHandle shared,
const GT_AttributeListHandle vertex,
const GT_AttributeListHandle uniform,
const GT_AttributeListHandle detail,
GT_IndexingMode  indexing = GT_INDEXING_QUICK,
GT_Size  min_vertex_count = 0,
GT_Size  max_vertex_count = 0 
)
inline

Useful constructor.

Definition at line 46 of file GT_PrimPolygonMesh.h.

GT_PrimPolygonMesh::GT_PrimPolygonMesh ( const GT_CountArray vtx_counts,
const GT_DataArrayHandle vtx_indices,
const GT_AttributeListHandle shared,
const GT_AttributeListHandle vertex,
const GT_AttributeListHandle uniform,
const GT_AttributeListHandle detail 
)
inline

Definition at line 63 of file GT_PrimPolygonMesh.h.

GT_PrimPolygonMesh::GT_PrimPolygonMesh ( const GT_PrimPolygonMesh pmesh,
const GT_AttributeListHandle shared,
const GT_AttributeListHandle vertex,
const GT_AttributeListHandle uniform,
const GT_AttributeListHandle detail 
)

Copy the topology information from the source pmesh, but use different attribute lists.

GT_PrimPolygonMesh::GT_PrimPolygonMesh ( const GT_PrimPolygonMesh pmesh,
const GT_DataArrayHandle vtx_indices,
const GT_AttributeListHandle shared 
)

Create a new polygon mesh with re-mapped vertices (used by removeUnusedPoints).

Since the polygon faces are remapped you'll have to pass in a new face set map.

GT_PrimPolygonMesh::GT_PrimPolygonMesh ( const GT_PrimPolygonMesh pmesh)

Copy c-tor.

GT_PrimPolygonMesh::GT_PrimPolygonMesh ( const GT_PrimPolygon poly)

Construct a polygon mesh from a GT_PrimPolygon.

Member Function Documentation

void GT_PrimPolygonMesh::addFaceSet ( const UT_StringHolder name,
const GT_FaceSetPtr set 
)

Access to the face sets

GT_PrimitiveHandle GT_PrimPolygonMesh::adoptConvexing ( const GT_DataArrayHandle verts,
const GT_DataArrayHandle uniform_indexing,
const GT_DataArrayHandle vertex_indexing,
const GT_DataArrayHandle vert_info,
const GT_DataArrayHandle prim_info 
) const

Using the indirect arrays and vertex list from a convexed mesh, convex this mesh (assumes topology is the same).

const char* GT_PrimPolygonMesh::className ( ) const
inlineoverridevirtual

Implements GT_Primitive.

Reimplemented in GT_PrimSubdivisionMesh.

Definition at line 99 of file GT_PrimPolygonMesh.h.

virtual GT_PrimPolygonMesh* GT_PrimPolygonMesh::clone ( const GT_DataArrayHandle vtx_counts,
const GT_DataArrayHandle vtx_indices,
const GT_AttributeListHandle shared,
const GT_AttributeListHandle vertex,
const GT_AttributeListHandle uniform,
const GT_AttributeListHandle detail,
GT_IndexingMode  indexing = GT_INDEXING_QUICK,
GT_Size  min_vertex_count = 0,
GT_Size  max_vertex_count = 0 
) const
inlineprotectedvirtual

Reimplemented in GT_PrimSubdivisionMesh.

Definition at line 431 of file GT_PrimPolygonMesh.h.

virtual GT_PrimPolygonMesh* GT_PrimPolygonMesh::clone ( const GT_CountArray vtx_counts,
const GT_DataArrayHandle vtx_indices,
const GT_AttributeListHandle shared,
const GT_AttributeListHandle vertex,
const GT_AttributeListHandle uniform,
const GT_AttributeListHandle detail 
) const
inlineprotectedvirtual

Reimplemented in GT_PrimSubdivisionMesh.

Definition at line 445 of file GT_PrimPolygonMesh.h.

virtual GT_PrimPolygonMesh* GT_PrimPolygonMesh::clone ( const GT_AttributeListHandle shared,
const GT_AttributeListHandle vertex,
const GT_AttributeListHandle uniform,
const GT_AttributeListHandle detail 
) const
inlineprotectedvirtual

Reimplemented in GT_PrimSubdivisionMesh.

Definition at line 455 of file GT_PrimPolygonMesh.h.

virtual GT_PrimPolygonMesh* GT_PrimPolygonMesh::clone ( const GT_DataArrayHandle vtx_indices,
const GT_AttributeListHandle shared 
) const
inlineprotectedvirtual

Reimplemented in GT_PrimSubdivisionMesh.

Definition at line 462 of file GT_PrimPolygonMesh.h.

fpreal GT_PrimPolygonMesh::computePerimeter ( int  seg) const
overridevirtual

Methods for GEO/GU support.

Reimplemented from GT_Primitive.

fpreal GT_PrimPolygonMesh::computeSurfaceArea ( int  seg) const
overridevirtual

Methods for GEO/GU support.

Reimplemented from GT_Primitive.

fpreal GT_PrimPolygonMesh::computeVolume ( const UT_Vector3 ref_P,
int  seg 
) const
overridevirtual

Methods for GEO/GU support.

Reimplemented from GT_Primitive.

GT_PrimitiveHandle GT_PrimPolygonMesh::convex ( int  max_points_per_poly = 3,
bool  keep_degenerate = false,
bool  allow_interrupt = true,
bool  allow_indirect_flattening = false,
const UT_Set< int > *  holes = nullptr 
) const

Ensure all polygons in the mesh are convex

If the holes set is passed in, then the faces in that set will be excluded from the convexed result.

bool GT_PrimPolygonMesh::createFastTangents ( GT_DataArrayHandle tanu_h,
GT_DataArrayHandle tanv_h 
) const

Create quick tangents (not MikkT) for fast viewer tangent generation. Tangents are not created in this mesh. NOTE: Not working very well yet.

GT_DataArrayHandle GT_PrimPolygonMesh::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
overridevirtual

Compute shared normals. This will use the shared attribute named P to compute the normals for each shared point.

Reimplemented from GT_Primitive.

GT_PrimPolygonMesh* GT_PrimPolygonMesh::createPointNormalsIfMissing ( const UT_StringRef P = GA_Names::P,
bool  normalize = true,
bool *  error = nullptr 
) const

Create point normals on a new mesh if no normals are found. If no point or vertex normals are found, generate point normals from P and return a new mesh. If normals are found, return NULL.

If the segement is less than 0, normals for all segments will be computed (if required)

GT_PrimPolygonMesh* GT_PrimPolygonMesh::createTangentsIfMissing ( bool *  error = nullptr)

Create point normals and MikkT tangents on a new mesh if not found. If either normals or tangents are not found, return a new mesh with both generated. If both exist, return NULL.

virtual GT_DataArrayHandle GT_PrimPolygonMesh::createVertexNormals ( int  segment = 0,
const UT_StringRef P = GA_Names::P,
fpreal  maxangledegrees = GT_DEFAULT_ADJUSTED_CUSP_ANGLE,
bool  normalize = true,
GT_Storage  store = GT_STORE_REAL32 
) const
virtual

Compute vertex normals. This will use the shared attribute named P to compute the normals for each vertex.

GT_PrimPolygonMesh* GT_PrimPolygonMesh::createVertexNormalsIfMissing ( const UT_StringRef P = GA_Names::P,
fpreal  cuspangledegrees = GT_DEFAULT_ADJUSTED_CUSP_ANGLE,
bool  normalize = true,
bool *  error = nullptr 
) const
GT_PrimitiveHandle GT_PrimPolygonMesh::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.

Reimplemented in GT_PrimSubdivisionMesh.

GT_PrimitiveHandle GT_PrimPolygonMesh::doHarden ( ) const
overridevirtual

Harden all attributes so there are no dangling dependencies.

Reimplemented from GT_Primitive.

Reimplemented in GT_PrimSubdivisionMesh.

GT_PrimitiveHandle GT_PrimPolygonMesh::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.

Reimplemented in GT_PrimSubdivisionMesh.

Definition at line 204 of file GT_PrimPolygonMesh.h.

void GT_PrimPolygonMesh::enlargeBounds ( UT_BoundingBox  boxes[],
int  nsegments 
) const
overridevirtual

Methods defined on GT_Primitive

Implements GT_Primitive.

bool GT_PrimPolygonMesh::faceNormals ( UT_Vector3 N,
int  segment = 0,
const UT_StringRef P = GA_Names::P 
) const

Compute face normals. This will use the shared attribute named P to compute the normals for each face. fpreal16 must have the proper vector length

bool GT_PrimPolygonMesh::faceNormals ( UT_Vector3D N64,
int  segment = 0,
const UT_StringRef P = GA_Names::P 
) const

Compute face normals. This will use the shared attribute named P to compute the normals for each face. fpreal16 must have the proper vector length

bool GT_PrimPolygonMesh::faceNormals ( fpreal16 N16,
int  segment = 0,
const UT_StringRef P = GA_Names::P 
) const

Compute face normals. This will use the shared attribute named P to compute the normals for each face. fpreal16 must have the proper vector length

GT_DataArrayHandle GT_PrimPolygonMesh::faceNormals ( int  segment = 0,
const UT_StringRef P = GA_Names::P,
GT_Storage  store = GT_STORE_REAL32 
) const

Compute face normals. This will use the shared attribute named P to compute the normals for each face. fpreal16 must have the proper vector length

const GT_FaceSetMapPtr& GT_PrimPolygonMesh::faceSetMap ( ) const
inline

Access to the face sets

Definition at line 195 of file GT_PrimPolygonMesh.h.

void GT_PrimPolygonMesh::getConvexArrays ( GT_DataArrayHandle verts,
GT_DataArrayHandle uniform_indexing,
GT_DataArrayHandle vertex_indexing,
GT_DataArrayHandle vert_info,
GT_DataArrayHandle prim_info 
) const

Fetches the convexed arrays from the mesh, to be used by adoptConvexing on a different mesh with the same topology.

const GT_AttributeListHandle& GT_PrimPolygonMesh::getDetail ( ) const
inline

Accessor

Definition at line 189 of file GT_PrimPolygonMesh.h.

const GT_AttributeListHandle& GT_PrimPolygonMesh::getDetailAttributes ( ) const
inlineoverridevirtual

Access attributes

Reimplemented from GT_Primitive.

Definition at line 224 of file GT_PrimPolygonMesh.h.

void GT_PrimPolygonMesh::getEdgePoints ( GT_Offset  face,
GT_Offset  vertex,
GT_Offset p0,
GT_Offset p1 
) const

For a given face, find the shared point numbers for the given vertex and the next vertex (i.e. the edge starting from the given vertex).

GT_PrimitiveHandle GT_PrimPolygonMesh::getFace ( GT_Offset  i) const

Return a pointer to the individual face.

GT_Size GT_PrimPolygonMesh::getFaceCount ( ) const

Return the number of faces in the mesh.

const GT_CountArray& GT_PrimPolygonMesh::getFaceCountArray ( ) const
inline

Accessor

Definition at line 177 of file GT_PrimPolygonMesh.h.

GT_DataArrayHandle GT_PrimPolygonMesh::getFaceCounts ( GT_IndexingMode  indexing = GT_INDEXING_QUICK) const

Return an array containing the face counts per-face.

GT_Size GT_PrimPolygonMesh::getMaxVertexCount ( ) const
inline

Query the minimum/maximum number of vertices per face

Definition at line 170 of file GT_PrimPolygonMesh.h.

int64 GT_PrimPolygonMesh::getMemoryUsage ( ) const
overridevirtual

Methods defined on GT_Primitive

Implements GT_Primitive.

Reimplemented in GT_PrimSubdivisionMesh.

GT_Size GT_PrimPolygonMesh::getMinVertexCount ( ) const
inline

Query the minimum/maximum number of vertices per face

Definition at line 169 of file GT_PrimPolygonMesh.h.

int GT_PrimPolygonMesh::getMotionSegments ( ) const
overridevirtual

Methods defined on GT_Primitive

Implements GT_Primitive.

GT_Offset GT_PrimPolygonMesh::getPoint ( GT_Offset  face,
GT_Offset  v 
) const

Return the point index for a given face and vertex.

const GT_AttributeListHandle& GT_PrimPolygonMesh::getPointAttributes ( ) const
inlineoverridevirtual

Access attributes

Reimplemented from GT_Primitive.

Definition at line 220 of file GT_PrimPolygonMesh.h.

GT_Size GT_PrimPolygonMesh::getPointCount ( ) const
inline

Return the number of points.

Definition at line 162 of file GT_PrimPolygonMesh.h.

int GT_PrimPolygonMesh::getPrimitiveType ( ) const
overridevirtual

Methods defined on GT_Primitive

Reimplemented from GT_Primitive.

Reimplemented in GT_PrimSubdivisionMesh.

const GT_AttributeListHandle& GT_PrimPolygonMesh::getShared ( ) const
inline

Accessor

Definition at line 183 of file GT_PrimPolygonMesh.h.

const GT_AttributeListHandle& GT_PrimPolygonMesh::getUniform ( ) const
inline

Accessor

Definition at line 187 of file GT_PrimPolygonMesh.h.

const GT_AttributeListHandle& GT_PrimPolygonMesh::getUniformAttributes ( ) const
inlineoverridevirtual

Access attributes

Reimplemented from GT_Primitive.

Definition at line 222 of file GT_PrimPolygonMesh.h.

const GT_DataArrayHandle GT_PrimPolygonMesh::getUsedPointList ( GT_IndexingMode  idx = GT_INDEXING_QUICK) const

The polygon mesh may have shared points which aren't used. That is, there may be elements in the shared element list which aren't referenced by any vertex. This method will build a list of indices for all the used points.

The list returned will be monotonically ascending.

const GT_AttributeListHandle& GT_PrimPolygonMesh::getVertex ( ) const
inline

Accessor

Definition at line 185 of file GT_PrimPolygonMesh.h.

const GT_AttributeListHandle& GT_PrimPolygonMesh::getVertexAttributes ( ) const
inlineoverridevirtual

Access attributes

Reimplemented from GT_Primitive.

Definition at line 218 of file GT_PrimPolygonMesh.h.

GT_Size GT_PrimPolygonMesh::getVertexCount ( ) const
inline

Return the number of vertices.

Definition at line 157 of file GT_PrimPolygonMesh.h.

GT_Size GT_PrimPolygonMesh::getVertexCount ( GT_Offset  face) const
inline

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

Definition at line 235 of file GT_PrimPolygonMesh.h.

const GT_DataArrayHandle& GT_PrimPolygonMesh::getVertexList ( ) const
inlineoverridevirtual

Accessor

Reimplemented from GT_Primitive.

Definition at line 175 of file GT_PrimPolygonMesh.h.

GT_Offset GT_PrimPolygonMesh::getVertexOffset ( GT_Offset  face) const
inline

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

Definition at line 232 of file GT_PrimPolygonMesh.h.

void GT_PrimPolygonMesh::hardenAttributes ( )
protected
void GT_PrimPolygonMesh::init ( const GT_DataArrayHandle vtx_counts,
const GT_DataArrayHandle vtx_indices,
const GT_AttributeListHandle shared,
const GT_AttributeListHandle vertex,
const GT_AttributeListHandle uniform,
const GT_AttributeListHandle detail,
GT_IndexingMode  indexing = GT_INDEXING_QUICK,
GT_Size  min_vertex_count = 0,
GT_Size  max_vertex_count = 0 
)

Initialize the mesh

  • vtx_counts
    An integer array, representing the number of vertices in each face. The length of the array determines the number of faces in the mesh.
  • vtx_indices
    An array of vertex references. There is an entry for every vertex in every face. These indices refer to the shared attribute data.
  • shared
    Shared attribute data. This data is referenced by the vertex arrays.
  • vertex
    Unique data per vertex. The length of these attribute arrays should be the same as the length of the vtx_indices array.
  • uniform
    Attribute per face. There should be one entry for each entry in the vtx_counts array.
  • detail
    Constant attribute for all faces. vtx_counts array.
  • indexing
    What type of indexing is required
void GT_PrimPolygonMesh::init ( const GT_CountArray vtx_counts,
const GT_DataArrayHandle vtx_indices,
const GT_AttributeListHandle shared,
const GT_AttributeListHandle vertex,
const GT_AttributeListHandle uniform,
const GT_AttributeListHandle detail 
)

Initialize the mesh

  • vtx_counts
    An integer array, representing the number of vertices in each face. The length of the array determines the number of faces in the mesh.
  • vtx_indices
    An array of vertex references. There is an entry for every vertex in every face. These indices refer to the shared attribute data.
  • shared
    Shared attribute data. This data is referenced by the vertex arrays.
  • vertex
    Unique data per vertex. The length of these attribute arrays should be the same as the length of the vtx_indices array.
  • uniform
    Attribute per face. There should be one entry for each entry in the vtx_counts array.
  • detail
    Constant attribute for all faces. vtx_counts array.
  • indexing
    What type of indexing is required
bool GT_PrimPolygonMesh::isConvexed ( ) const
inline

Returns true if this mesh has been convexed.

Definition at line 243 of file GT_PrimPolygonMesh.h.

bool GT_PrimPolygonMesh::partitionByMaterial ( const GT_DataArrayHandle mat_id,
UT_Array< GT_PrimitiveHandle > &  sub_meshes,
GT_Size  polygon_limit = SYS_INT32_MAX 
) const

Partition a mesh into submeshes by the shop_materialpath attribute, each with exact one material in a detail shop_materialpath attribute. Returns false if shop_materialpath doesn't exist, isn't a uniform attrib, or has only 1 material.

bool GT_PrimPolygonMesh::pointNormals ( UT_Vector3T< fpreal16 > *  N,
GT_Size  npts,
int  segment = 0,
const UT_StringRef P = GA_Names::P,
bool  normalize = true,
const fpreal32 pntdata = NULL 
) const

Compute shared normals. This will use the shared attribute named P to compute the normals for each shared point.

bool GT_PrimPolygonMesh::pointNormals ( UT_Vector3 N,
GT_Size  npts,
int  segment = 0,
const UT_StringRef P = GA_Names::P,
bool  normalize = true,
const fpreal32 pntdata = NULL 
) const

Compute shared normals. This will use the shared attribute named P to compute the normals for each shared point.

bool GT_PrimPolygonMesh::pointNormals ( UT_Vector3D N,
GT_Size  npts,
int  segment = 0,
const UT_StringRef P = GA_Names::P,
bool  normalize = true,
const fpreal32 pntdata = NULL 
) const

Compute shared normals. This will use the shared attribute named P to compute the normals for each shared point.

bool GT_PrimPolygonMesh::refine ( GT_Refine refiner,
const GT_RefineParms parms 
) const
overridevirtual

Methods defined on GT_Primitive

Reimplemented from GT_Primitive.

Reimplemented in GT_PrimSubdivisionMesh.

GT_PrimitiveHandle GT_PrimPolygonMesh::removeUnusedPoints ( const int32 idx = NULL) const

Remove unused points. This will collapse the varying point arrays, leaving only the points referenced by the vertices.

bool GT_PrimPolygonMesh::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.

Reimplemented in GT_PrimSubdivisionMesh.

void GT_PrimPolygonMesh::setConvexed ( bool  c)
inline

Set the convex flag on the mesh.

Definition at line 246 of file GT_PrimPolygonMesh.h.

void GT_PrimPolygonMesh::setFaceSetMap ( const GT_FaceSetMapPtr v)
inline

Access to the face sets

Definition at line 196 of file GT_PrimPolygonMesh.h.

bool GT_PrimPolygonMesh::splitMesh ( GT_Size  polygon_limit,
UT_Array< GT_PrimitiveHandle > &  split_meshes,
bool  remove_unused_points = true 
) const

Divide a mesh into smaller meshes if it exceeds the poly_limit. If this mesh has more than polygon_limit polygons, this will split the mesh into multiple sub-meshes, attempting to keep them all roughly the same number of polygons. If this mesh has fewer than polygon_limit polygons, it will return false and not add any meshes to split_meshes. If remove_unused_points is true, each submesh will have unused points removed.

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

update any cached data for geometry and its attributes

Reimplemented from GT_Primitive.

bool GT_PrimPolygonMesh::vertexNormals ( UT_Vector3T< fpreal16 > *  N,
GT_Size  npts,
int  segment = 0,
const UT_StringRef P = GA_Names::P,
fpreal  maxangledegrees = GT_DEFAULT_ADJUSTED_CUSP_ANGLE,
bool  normalize = true 
) const

Compute vertex normals. This will use the shared attribute named P to compute the normals for each vertex.

bool GT_PrimPolygonMesh::vertexNormals ( UT_Vector3 N,
GT_Size  npts,
int  segment = 0,
const UT_StringRef P = GA_Names::P,
fpreal  maxangledegrees = GT_DEFAULT_ADJUSTED_CUSP_ANGLE,
bool  normalize = true 
) const

Compute vertex normals. This will use the shared attribute named P to compute the normals for each vertex.

bool GT_PrimPolygonMesh::vertexNormals ( UT_Vector3D N,
GT_Size  npts,
int  segment = 0,
const UT_StringRef P = GA_Names::P,
fpreal  maxangledegrees = GT_DEFAULT_ADJUSTED_CUSP_ANGLE,
bool  normalize = true 
) const

Compute vertex normals. This will use the shared attribute named P to compute the normals for each vertex.

Member Data Documentation

GT_AttributeListHandle GT_PrimPolygonMesh::myDetail
protected

Definition at line 471 of file GT_PrimPolygonMesh.h.

GT_AttributeListHandle GT_PrimPolygonMesh::myShared
protected

Definition at line 468 of file GT_PrimPolygonMesh.h.

GT_AttributeListHandle GT_PrimPolygonMesh::myUniform
protected

Definition at line 470 of file GT_PrimPolygonMesh.h.

GT_AttributeListHandle GT_PrimPolygonMesh::myVertex
protected

Definition at line 469 of file GT_PrimPolygonMesh.h.


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