24 #ifndef __GUSD_INSTANCERWRAPPER_H__
25 #define __GUSD_INSTANCERWRAPPER_H__
48 bool isOverride =
false );
57 const UsdStagePtr& stage,
89 const char * viewportLod,
97 const UsdStagePtr& stage,
107 bool initUsdPrim(
const UsdStagePtr& stage,
112 const UsdStagePtr& stage,
115 void storePreOverlayData(
bool justProtoIndices,
const UsdTimeCode*
time);
117 void clearPreOverlayData();
119 void setTransformAttrsFromMatrices(
const UT_Matrix4D &worldToLocal,
127 bool convert_to_radians =
false)
const;
135 RelationshipIndexMap m_relationshipIndexMap;
139 std::vector<UT_Matrix4D> m_prototypeTransforms;
145 std::vector<TfToken> m_usdGeomTokens = {
UsdGeomTokens->protoIndices,
156 struct PreOverlayDataEntry {
157 std::map<UsdTimeCode, VtArray<T>> preOverlayDataMap;
160 PreOverlayDataEntry(
UsdAttribute usdAttr) : usdAttr(usdAttr) {}
162 PreOverlayDataEntry() {}
163 ~PreOverlayDataEntry() {}
164 PreOverlayDataEntry(PreOverlayDataEntry &&other) {
165 preOverlayDataMap = std::move(other.preOverlayDataMap);
166 usdAttr = other.usdAttr;
168 PreOverlayDataEntry&
operator=(PreOverlayDataEntry &&other) {
169 preOverlayDataMap = std::move(other.preOverlayDataMap);
170 usdAttr = other.usdAttr;
173 PreOverlayDataEntry(PreOverlayDataEntry
const& other){
174 preOverlayDataMap = other.preOverlayDataMap;
175 usdAttr = other.usdAttr;
181 if (usdAttr.Get(&dataArray, time)){
182 preOverlayDataMap[
time] = dataArray;
189 if (preOverlayDataMap.count(time) > 0) {
190 dataArray = preOverlayDataMap[
time];
191 if (dataArray.size() > ptNum) {
192 value = dataArray[ptNum];
196 usdAttr.Get(&dataArray, time);
197 if (dataArray.size() > ptNum) {
198 value = dataArray[ptNum];
208 typedef BOOST_NS::variant<PreOverlayDataEntry<int>,
209 PreOverlayDataEntry<GfVec3f>,
210 PreOverlayDataEntry<GfQuath>> dataEntry;
213 std::map<TfToken, dataEntry> m_preOverlayDataMap;
216 struct StoreAtTime :
public BOOST_NS::static_visitor<>
222 template <
typename T>
223 void operator()(
T& t)
const {
229 struct ClearData :
public BOOST_NS::static_visitor<>
231 template <
typename T>
232 void operator()(
T t)
const {
233 t.preOverlayDataMap.
clear();
240 #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
SYS_FORCE_INLINE void clear()
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.
USDGEOM_API TfStaticData< UsdGeomTokensType > UsdGeomTokens
PXR_NAMESPACE_CLOSE_SCOPE PXR_NAMESPACE_OPEN_SCOPE
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)
std::map< SdfPath, UT_Matrix4D > GusdSimpleXformCache
int getMotionSegments() const override