#include <mesh.h>
This object is used to manage a roughly spatially coherent partitioning of the mesh.
It will be a child node of a Mesh node in the scene. There will be at most one MeshPartitioning for a given instance of the Mesh class. This is a partitioning of base faces only. It is implied that all faces subdivided from a base face are in the same partition as that base face.
Repartitioning can be achieved by calling the appropriate API, and faces can be moved between partitions using the SetFacePartition api. While the repartitioning may take some time, setting the partition ID of a face will be order 1 almost all of the time, and potentially order n a very small fraction of the time.
Partition IDs (unsigned ints) can be queried in order 1 time. They will be numbered sequentially from 0 through n-1 for n partitions.
faces within a partition can be enmerated in order n. (order 1 per face)
If you add faces to a mesh they will by default be in the "invalid" partition (ID 0xffffffff)
This class is not thread safe on write accesses. It should be safe for reads.
Public Types | |
enum | QualityHint { eNone = 0, eFastest, eGood, eBest } |
Public Types inherited from Node | |
enum | DiagnosticLevel { dgnLevel1, dgnLevel2, dgnLevel3 } |
Indicates the level of validity checking that is performed in CheckValidity() More... | |
Public Member Functions | |
bool | IsCurrentPartitioningFaceBased () const |
MeshPartitioning () | |
Ctor for the MeshPartitioning node. More... | |
~MeshPartitioning () | |
void | Clear () |
Deallocate all memory – destroys and deletes the partitioning. More... | |
virtual void | OnLinked (const TreeNode *pOldParent) |
Sets up a mesh partitioning using the current default hint. More... | |
void | RePartition (QualityHint hint=eGood) |
Recompute the partitioning of this mesh with the specified quality. More... | |
void | RecomputePartitionAABB (unsigned int pIdx) |
recompute the bounding box of a specified partition More... | |
void | RecomputePartitionAABBs (void) |
recompute the bounding box of all the partitions More... | |
const AxisAlignedBoundingBox & | GetTotalAABB () const |
get the bounding box of this partitioning. More... | |
const AxisAlignedBoundingBox & | GetPartitionAABB (unsigned int pIdx) const |
returns the bounding box of a partition. More... | |
unsigned int | GetPartitionMinFaceID (unsigned int pIdx) const |
Get the minimum face ID in a specified partition. If empty, will return 0xffffffff. More... | |
unsigned int | GetPartitionMaxFaceID (unsigned int pIdx) const |
Get the maximum face ID in a partition. If empty, return 0. More... | |
bool | IsPartitionCloseToPoint (unsigned int pIdx, const Vector &pt, float dist) const |
returns true if a specified point is within a given (non empty) partition, or within a specified distance of the partition. More... | |
QualityHint | GetCurrentPartitioningQuality () const |
Return the current partitioning quality for this partitioning node. More... | |
void | Consolidate (bool force) |
order n reconsolidation of the storage used for partitioning. More... | |
void | Serialize (Stream &s) |
Load or store from the specified stream. More... | |
bool | IsPartitionDirty (unsigned int pIdx) const |
returns true if the partition has been changed since the HWRenderer has built the VBOs for this partition. More... | |
void | SetPartitionDirty (unsigned int pIdx) |
called by the HWRenderer to set the dirty flag to clean once it has built the VBOs for the specified partitions. More... | |
bool | AnyPartitionsDirty () |
returns true if any of the partitions are dirty. More... | |
void | ContentChanged (void) |
Call this method after modifying the partitioning. More... | |
void | SetFaceCount (unsigned int faceCount, bool noOvergrowth=false) |
Set the face count. More... | |
unsigned int | GetFaceCount () const |
return the count of faces in the partitioning. More... | |
unsigned int | GetPartitionCount () const |
Returns the number of partitions. Partition ids are 0 through PartitionCount-1 inclusive. More... | |
unsigned int | GetPartitionFaceCount (unsigned int pIdx) const |
Return the number of faces to enumerate in the specified partition Note some faces may be INVALID_ID – these should be skipped... More... | |
unsigned int | GetPartitionFace (unsigned int pIdx, unsigned int fIdx) const |
Return the specified face id in the specified partition Note some faces may be INVALID_ID – these should be skipped... More... | |
unsigned int | GetPartitionBlindInt (unsigned int pIdx) const |
Read Accessor for blind data (32 bit uint) on each partition. More... | |
void | SetPartitionBlindInt (unsigned int pIdx, unsigned int ii) |
Write Accessor for blind data (32 bit uint) on each partition. More... | |
unsigned int | GetPartitionVersion (unsigned int pIdx) const |
Returns the version number of the specified partition. More... | |
unsigned int | GetFacePartition (unsigned int faceID) const |
return the Partition id of a specified face. Can be INVALID_ID if it's not in a partition. More... | |
unsigned int | GetFacePartitionIndex (unsigned int faceID) const |
return the index within it's partition partition of a given face ID. More... | |
void | AddFaceToPartition (unsigned int faceID, unsigned int partitionID) |
Adds or moves a face to a partition. More... | |
unsigned int | GetPartitionID (unsigned int faceID) const |
Returns the partition ID given a face ID. More... | |
void | DebugLog () |
void | SetBlindIntsAsColors () |
virtual void | CheckValidity (Node::DiagnosticLevel iLevel=dgnLevel2) const |
See the documentation for Node::CheckValidity. More... | |
Public Member Functions inherited from TreeNode | |
TreeNode (void) | |
~TreeNode (void) | |
virtual void | AddChild (TreeNode *pChild, bool bFirst=false) const |
Adds a node/subtree to the list of children. The added node will be removed from the current parent if it has one. More... | |
virtual void | RemoveChild (TreeNode *pChild) const |
Removes a node/subtree from the list of children. More... | |
virtual TreeNode * | FirstChild (void) const |
Returns the first node from the child list. More... | |
virtual TreeNode * | Parent (void) const |
Returns the parent node. More... | |
virtual TreeNode * | NextSibling (void) const |
Returns the next linked node with the same parent. More... | |
virtual TreeNode * | PrevSibling (void) const |
Returns the previous linked node with the same parent. More... | |
virtual void | MoveChild (TreeNode *pChild, TreeNode *pAfter) |
Moves the child after the given node in order. More... | |
virtual TreeNode * | ChildByClass (const ClassDesc *pClass, bool bAutoCreate=true) const |
Returns the first child with the specified type. When the bAutoCreate parameter is true and such a child does not exists, it creates it with the preferred descedant type. More... | |
template<typename type > | |
type * | ChildByClass (bool bAutoCreate=true) const |
Same as above, a most confortable version. More... | |
virtual TreeNode * | ChildByClass (const ClassDesc *pClass, unsigned int iIndex=0) const |
Returns the first child with the specified type, or returns zero if no child found. More... | |
template<typename type > | |
type * | ChildByClass (unsigned int iIndex=0) const |
Same as above, a most confortable version. More... | |
virtual void | DeleteChildByClass (const ClassDesc *pClass) |
Deletes all child which is derived from a specific class. More... | |
virtual QString | Info (void) const |
Returns descriptive information about the node. More... | |
virtual bool | Visible (void) const |
Returns if the node is visible. Should be overridden in derived classes. More... | |
virtual void | SetVisible (bool b) |
Sets the node visibility Should be overridden in derived classes. More... | |
virtual bool | Locked (void) const |
Returns if the node is locked. Should be overridden in derived classes. More... | |
virtual void | SetLocked (bool b) |
Sets the locking of the node. Should be overridden in derived classes. More... | |
virtual bool | HiddenFromUI (void) const |
Returns true if the node cannot be seen from UI. More... | |
virtual void | SetHiddenFromUI (bool b) |
Sets visibility in UI. More... | |
QString | UniqueChildName (const TreeNode *pChild, const QString &sPrefix="") const |
Finds a node name that is unique among the children of this node. More... | |
virtual void | SetStringID (const QString &sName) |
This method does the same thing as Node::SetStringID, except it ensures the name is unique among this node's siblings. More... | |
virtual void | CopyTo (Node *pNode) const |
Public Member Functions inherited from Node | |
Node (const QString &sStringID="", const QString &sDisplayName="") | |
Standard constructor. More... | |
virtual | ~Node (void) |
virtual void | Initialize (void) |
void | LoadTemplate (const QString &sFileName="", bool bStartEvent=false) |
Use an external XML file to initialize the attributes. More... | |
void | SaveTemplate (const QString &sFileName="", bool bSaveOnlyVisible=false) |
Save current attributes as an XML template. More... | |
unsigned int | Version (void) const |
Returns the current version of the node. This number increases when the content of the node changed (when ContentChanged() called). More... | |
void | SetVersion (unsigned int iVersion) |
Sets the current version number for the node. More... | |
unsigned int | ReferenceCount (void) const |
Returns the number of pointers referencing this node. More... | |
Attribute * | ReferencePointer (unsigned int iIndex) const |
Returns the address of an attribute which refers to this node. The type of the attribute is always aptr. More... | |
Node * | ReferenceNode (unsigned int iIndex) const |
Returns the address of a node referencing this node. More... | |
virtual QString | Name (const ClassDesc *pClass=0) const |
Deprecated. More... | |
virtual void | SetName (const QString &sName) |
Deprecated. More... | |
virtual QString | StringID (const ClassDesc *pClass=0) const |
Returns the string id of the node. More... | |
virtual QString | DisplayName (void) const |
Returns the display name of the node. More... | |
virtual void | SetDisplayName (const QString &sDisplayName) |
Sets the display name of the node. More... | |
virtual QString | HelpID (void) const |
Returns the help entry id of the node. Can be overwritten in derived classes. More... | |
virtual void | SetHelpID (const QString &sHelpID) |
Sets the help entry id of the node. More... | |
void | Annex (Node *pSource, const QString &sCategory="") |
Relink all the attributes of the source node to this one. More... | |
bool | IsKindOf (const ClassDesc *pClass) const |
Returns true if this node is derived from the pClass class. More... | |
void | ContentChanged (void) const |
This function must be called if the content of the node is changed. More... | |
virtual Node * | Duplicate (void) const |
virtual void | OnNodeEvent (const Attribute &cAttribute, NodeEventType cType) |
This function is called if an event occurs with any of the attributes of the node. More... | |
virtual void | OnEvent (const EventGate &cEvent) |
This function is called when a generic event occurs. See EventGate class. More... | |
void | RequestDeferredEvent (Attribute &cAttribute) |
Request for a deferred event, which will occur only in the main loop. More... | |
unsigned int | AttributeCount (void) const |
Returns the number of attributes owned by the node. More... | |
Attribute * | AttributeByIndex (int iIndex) const |
Returns a specified attribute (or 0 if iIndex is greater than the number of attributes). More... | |
Attribute * | AttributeByName (const QString &sName) const |
Returns a specified attribute by its name. Returns 0 if the attribute not found. More... | |
Attribute * | AttributeByID (const QString &sID) const |
Returns a specified attribute by its ID. Returns 0 if the attribute not found. More... | |
void | SetAttributeValue (const QString &sAttributeID, const QString &sNewValue) |
Set the value of an attribute from a string. More... | |
QString | AttributeValue (const QString &sAttributeID) const |
Returns the current value of an attribute as a string. More... | |
void | LogAttributes (void) const |
Write all attributes into the log file. More... | |
virtual QWidget * | CreatePropertiesWindow (QWidget *pParent) |
Create a window which displays the attributes of the node. Can be overriden to provide a custom interface. More... | |
Attribute * | AddAttribute (Attribute::AttributeType type, const QString &id) |
Allows SDK users to add attributes at runtime. More... | |
Node * | Next (void) const |
Returns the next node in the chain. Used to enumerate the current nodes. See also First(). More... | |
int | ID (void) const |
Returns an ID for the node. The ID is unique in the whole application life. More... | |
bool | SetID (int iID) |
Set ID for the node. More... | |
Static Public Member Functions | |
static void | SetBaseMeshMode (bool b=true) |
sets a static mode to use the base mesh or the current subdiv level of the mesh. More... | |
static bool | IsInBaseMeshMode () |
static void | SetFaceMode (bool b=true) |
sets a static mode to use either face indices or vertex indices to perform partitioning. More... | |
static bool | IsInFaceMode () |
static void | SetDefaultQuality (QualityHint hint) |
Set the default quality hint. More... | |
static QualityHint | GetDefaultQuality () |
Query the default quality hint. More... | |
static unsigned int | GetDefaultPartitionCount () |
Query the default partition count. More... | |
static void | SetDefaultPartitionCount (unsigned int pc) |
Set the default partition count. More... | |
Static Public Member Functions inherited from Node | |
static void | StartHashing () |
This is called once in main once static ctors are done. More... | |
static Node * | First (void) |
This function will return the first node in the memory. Used to enumerate all the current nodes. See also Next(). More... | |
static Node * | ByID (int iID) |
Returns the node with the specified ID, or zero if such a node does not exists. More... | |
static Node * | ByName (const QString &sClass, const QString &sName) |
Search for a node with the name sName. More... | |
Additional Inherited Members | |
Public Attributes inherited from TreeNode | |
DECLARE_CLASS | |
Public Attributes inherited from Node | |
AttributeThisPointer | m_pThis |
DECLARE_CLASS | |
enum QualityHint |
Enumerator | |
---|---|
eNone | |
eFastest | |
eGood | |
eBest |
MeshPartitioning | ( | ) |
Ctor for the MeshPartitioning node.
|
inline |
|
inlinestatic |
|
inlinestatic |
|
inlinestatic |
sets a static mode to use either face indices or vertex indices to perform partitioning.
When in vertex mode, all the FaceIDs stored in this class are Vertex ids instead. this mode affects the following repartition calls These two modes are referred to as Face mode or Point mode. Partition bounding boxes are currently only computed in Point mode.
Definition at line 1774 of file mesh.h.
|
inlinestatic |
|
inline |
|
inlinestatic |
|
inlinestatic |
|
inlinestatic |
void Clear | ( | ) |
Deallocate all memory – destroys and deletes the partitioning.
void RePartition | ( | QualityHint | hint = eGood | ) |
Recompute the partitioning of this mesh with the specified quality.
(always uses the base subdiv level for partitioning!) Specifying eNone will delete the current partitioning.
recompute the bounding box of a specified partition
|
inline |
|
inline |
returns true if a specified point is within a given (non empty) partition, or within a specified distance of the partition.
If the tolerance distance is 0, this fcn will only return true if the point is within the partitions bounding box. Only use this in point mode, not face mode of partitioning.
|
inline |
void Consolidate | ( | bool | force | ) |
order n reconsolidation of the storage used for partitioning.
if force is true it will reconsolidate to 0 wastage, otherwise it will tolerate up to 5% wastage in any one partition.
Load or store from the specified stream.
Reimplemented from TreeNode.
|
inline |
|
inline |
returns true if any of the partitions are dirty.
Definition at line 1875 of file mesh.h.
Call this method after modifying the partitioning.
It will update the version numbers of each modified partition.
Definition at line 1885 of file mesh.h.
Set the face count.
New faces will be in the invalid partition. noOvergrowth set to true will potentially use less memory, but can be much slower.
|
inline |
return the count of faces in the partitioning.
Should match the number of faces in the mesh that owns this instance.
Definition at line 1903 of file mesh.h.
|
inline |
Returns the number of partitions. Partition ids are 0 through PartitionCount-1 inclusive.
Definition at line 1906 of file mesh.h.
Return the number of faces to enumerate in the specified partition Note some faces may be INVALID_ID – these should be skipped...
To avoid all of these you can call Consolidate(true);
Definition at line 1911 of file mesh.h.
return the Partition id of a specified face. Can be INVALID_ID if it's not in a partition.
Definition at line 1934 of file mesh.h.
return the index within it's partition partition of a given face ID.
Can be INVALID_ID if it's not in a partition.
Definition at line 1939 of file mesh.h.
Adds or moves a face to a partition.
If a face is already in a partitoin it is removed and put in the specified partition. If the face or target partition does not esist it silently does nothing. If the face is not in a partition (implicitly in the invalid partition), it will be removed form the invalid partition and put in the specified partition A face can be removed from a partition and placed in the invalid partition with this API. This will run in order 1 time almost all the time.
Returns the partition ID given a face ID.
Definition at line 1951 of file mesh.h.
void DebugLog | ( | ) |
void SetBlindIntsAsColors | ( | ) |
|
virtual |
See the documentation for Node::CheckValidity.
Reimplemented from TreeNode.