24 #ifndef __GUSD_INSTANCERWRAPPER_H__
25 #define __GUSD_INSTANCERWRAPPER_H__
48 bool isOverride =
false );
57 const UsdStagePtr& stage,
89 const char * viewportLod,
103 const char * viewportLod,
112 const UsdStagePtr& stage,
122 bool initUsdPrim(
const UsdStagePtr& stage,
127 const UsdStagePtr& stage,
130 void storePreOverlayData(
bool justProtoIndices,
const UsdTimeCode*
time);
132 void clearPreOverlayData();
134 void setTransformAttrsFromMatrices(
const UT_Matrix4D &worldToLocal,
143 bool convert_to_radians =
false)
const;
151 RelationshipIndexMap m_relationshipIndexMap;
155 std::vector<UT_Matrix4D> m_prototypeTransforms;
161 std::vector<TfToken> m_usdGeomTokens = {
UsdGeomTokens->protoIndices,
172 struct PreOverlayDataEntry {
173 std::map<UsdTimeCode, VtArray<T>> preOverlayDataMap;
176 PreOverlayDataEntry(
UsdAttribute usdAttr) : usdAttr(usdAttr) {}
178 PreOverlayDataEntry() {}
179 ~PreOverlayDataEntry() {}
180 PreOverlayDataEntry(PreOverlayDataEntry &&other) {
181 preOverlayDataMap = std::move(other.preOverlayDataMap);
182 usdAttr = other.usdAttr;
184 PreOverlayDataEntry&
operator=(PreOverlayDataEntry &&other) {
185 preOverlayDataMap = std::move(other.preOverlayDataMap);
186 usdAttr = other.usdAttr;
189 PreOverlayDataEntry(PreOverlayDataEntry
const& other){
190 preOverlayDataMap = other.preOverlayDataMap;
191 usdAttr = other.usdAttr;
197 if (usdAttr.Get(&dataArray, time)){
198 preOverlayDataMap[
time] = dataArray;
205 if (preOverlayDataMap.count(time) > 0) {
206 dataArray = preOverlayDataMap[
time];
207 if (dataArray.size() > ptNum) {
208 value = dataArray[ptNum];
212 usdAttr.Get(&dataArray, time);
213 if (dataArray.size() > ptNum) {
214 value = dataArray[ptNum];
224 typedef std::variant<PreOverlayDataEntry<int>,
225 PreOverlayDataEntry<GfVec3f>,
226 PreOverlayDataEntry<GfQuath>> dataEntry;
229 std::map<TfToken, dataEntry> m_preOverlayDataMap;
238 template <
typename T>
239 void operator()(
T& t)
const {
247 template <
typename T>
248 void operator()(
T t)
const {
249 t.preOverlayDataMap.
clear();
256 #endif // __GUSD_INSTANCERWRAPPER_H__
A GT_Primitive that wraps a USD Prim.
bool unpack(UT_Array< GU_DetailHandle > &details, const UT_StringRef &fileName, const SdfPath &primPath, const UT_Matrix4D *xform, fpreal frame, const char *viewportLod, GusdPurposeSet purposes, const GT_RefineParms &rparms) const override
bool refine(GT_Refine &refiner, const GT_RefineParms *parms=NULL) const override
GT_API const UT_StringHolder time
~GusdInstancerWrapper() override
#define PXR_NAMESPACE_OPEN_SCOPE
SYS_FORCE_INLINE void clear()
GLsizei const GLfloat * value
static GT_PrimitiveHandle defineForRead(const UsdGeomImageable &sourcePrim, UsdTimeCode time, GusdPurposeSet purposes)
GLsizei const GLchar *const * path
bool updateFromGTPrim(const GT_PrimitiveHandle &sourcePrim, const UT_Matrix4D &houXform, const GusdContext &ctxt, GusdSimpleXformCache &xformCache) override
bool isValid() const override
Return true if the underlying USD prim is valid.
UT_IntrusiveRefCounter & operator=(const UT_IntrusiveRefCounter &) noexcept
Assignment operator: Does not modify counter.
GT_PrimitiveHandle doSoftCopy() const override
const char * className() const override
bool redefine(const UsdStagePtr &stage, const SdfPath &path, const GusdContext &ctxt, const GT_PrimitiveHandle &sourcePrim) override
Create a new USD prim to match GT primitive.
GusdInstancerWrapper(const UsdStagePtr &stage, const SdfPath &path, const GusdContext &ctxt, bool isOverride=false)
int64 getMemoryUsage() const override
Processes primitives generated by refinement process.
GA_API const UT_StringHolder parms
USDGEOM_API TfStaticData< UsdGeomTokensType > UsdGeomTokens
const UsdGeomImageable getUsdPrim() const override
void enlargeBounds(UT_BoundingBox boxes[], int nsegments) const override
#define PXR_NAMESPACE_CLOSE_SCOPE
static GT_PrimitiveHandle defineForWrite(const GT_PrimitiveHandle &sourcePrim, const UsdStagePtr &stage, const SdfPath &path, const GusdContext &ctxt)
bool unpackInstances(UT_Array< GU_DetailHandle > &details, const UT_StringRef &fileName, const SdfPath &primPath, const UT_Matrix4D *xform, fpreal frame, const char *viewportLod, GusdPurposeSet purposes, const GT_RefineParms &rparms, const UT_Array< exint > *instance_indices) const
std::map< SdfPath, UT_Matrix4D > GusdSimpleXformCache
int getMotionSegments() const override