11 #ifndef __GA_MergeOptions__
12 #define __GA_MergeOptions__
26 template <
typename T>
class UT_Array;
111 TYPE_DEFAULT = TYPE_KEEP_DEST
126 STORAGE_DEFAULT = STORAGE_USE_BEST
142 TUPLE_SIZE_DEFAULT = TUPLE_SIZE_USE_BEST
166 MERGE_DEFAULT = MERGE_OPTIMAL
169 #define IMPL_ENUM(TYPE, DEF) \
170 TYPE get##TYPE() const { \
171 if (my##TYPE[GA_ATTRIB_OWNER_N] >= 0) \
172 return my##TYPE[GA_ATTRIB_OWNER_N]; \
175 TYPE get##TYPE(GA_AttributeOwner owner) const { \
176 if (my##TYPE[owner] >= 0) return my##TYPE[owner]; \
177 return get##TYPE(); \
179 void set##TYPE(TYPE v) { my##TYPE[GA_ATTRIB_OWNER_N] = v; } \
180 void set##TYPE(TYPE v, GA_AttributeOwner owner) { \
181 my##TYPE[owner] = v; \
185 IMPL_ENUM(StorageStrategy, STORAGE_DEFAULT)
186 IMPL_ENUM(TupleSizeStrategy, TUPLE_SIZE_DEFAULT)
196 return getSourcePointRange();
198 return getSourcePrimitiveRange();
211 { myGroupMerge[
type] = state; }
216 myGroupMerge[i] = state;
220 {
return myGroupMerge[
type]; }
222 { myInternalGroupMerge[
type] = state; }
227 myInternalGroupMerge[i] = state;
231 {
return myInternalGroupMerge[
type]; }
246 {
return myPointRange.
getRTI()
247 ? &myPointRange : (
const GA_Range *)NULL; }
249 {
return myPrimitiveRange.
getRTI()
250 ? &myPrimitiveRange : (
const GA_Range *)NULL; }
253 { myPrimitiveRange =
range; }
255 { myPointRange =
range; }
264 {
return myPrimitiveMap; }
273 {
return myPointRedirect; }
318 myMergeCount =
SYSmax(1, nmerges);
319 if (myMergeCount > 1)
320 myForceInterleaved =
true;
339 {
return myAttributeDataIdStrategy; }
341 { myAttributeDataIdStrategy =
s; }
349 {
return myReuseStrategy; }
351 { myReuseStrategy = reuse; }
369 bool myForceInterleaved;
370 bool myMergeThreaded;
371 bool myMergeComputeMissingNormals;
372 bool myMergeAllPoints;
373 bool myMergePointsAtHead;
374 bool myMergePrimitivesAtHead;
void setMergePointsAtHead(bool v)
Only process exact matches on types.
UT_Array< GA_Primitive * > * getPrimitiveMap() const
Specify when and how to reuse an existing attribute.
Disallow mis-matched storage.
void setMergeThreaded(bool v)
const GA_Range * getSourcePrimitiveRange() const
void setMergeAllPoints(bool v)
void setSourcePointRange(const GA_Range &range)
void setMergePrimitivesAtHead(bool v)
void setMergeComputeMissingNormals(bool v)
void setMergeCount(GA_Size nmerges)
GA_DataIdStrategy getAttributeDataIdStrategy() const
exint GA_Size
Defines the bit width for index and offset types in GA.
Keep destination storage (casting source)
Use storage with greatest precision.
A range of elements in an index-map.
Change destination attribute to match source.
Class used to create a map of source points during merging.
void setReuseStrategy(const GA_ReuseStrategy &reuse)
}
const GA_ReuseStrategy & getReuseStrategy() const
Use the largest tuple size.
GLint GLint GLsizei GLint GLenum GLenum type
bool getMergeGroups(GA_GroupType type) const
bool mergePointsAtHead() const
GA_GBPointRedirectArray * getPointRedirect() const
bool mergeAllPoints() const
void setSourcePrimitiveRange(const GA_Range &range)
void setForceInterleaved(bool v)
#define IMPL_ENUM(TYPE, DEF)
const GA_Range * getSourceRange(GA_AttributeOwner owner)
const GA_Range * getSourcePointRange() const
const GA_RangeTypeInterface * getRTI() const
Accessor for RTI.
bool mergeComputeMissingNormals() const
Use the destination tuple size.
bool mergeThreaded() const
bool mergePrimitivesAtHead() const
void setAttributeDataIdStrategy(GA_DataIdStrategy s)
void setMergeGroups(GA_GroupType type, bool state)
bool forceInterleaved() const
void setMergeInternalGroups(GA_GroupType type, bool state)
GA_GroupType
An ordinal enum for the different types of groups in GA.
Disallow mis-matched tuple sizes.
Change destination to match source.
Keep destination unchanged if possible.
Change destination to match storage.
Provide options when performing a merge operation.
Container class for all geometry.
bool getMergeInternalGroups(GA_GroupType type) const
void setAllMergeInternalGroups(bool state)
GA_Size mergeCount() const
void setAllMergeGroups(bool state)