8 #ifndef __SIM_ObjectReader_h__
9 #define __SIM_ObjectReader_h__
34 virtual void getPositionTransform(
UT_Matrix4D &xform)
const = 0;
42 virtual const GU_Detail *getSimGdp()
const = 0;
80 static bool isPackedObject(
const SIM_Object *obj);
89 bool isPivotValid()
const;
90 bool isPositionValid()
const;
91 bool isOrientationValid()
const;
92 bool isVelocityValid()
const;
93 bool isAngularVelocityValid()
const;
94 bool isNameValid()
const;
122 void setAngularVelocity(
const UT_Vector3 &avel);
123 void setName(
const char *
name);
147 template <
typename ARRAY_T>
151 bool isValid()
const {
return myAttrib.isValid(); }
161 template <
typename ARRAY_T>
168 bool isValid()
const {
return myAttrib.isValid(); }
197 bool hasPositionData()
const;
201 void getCurrentWorldTransform(
UT_Matrix4D &xform)
const;
207 bool unpackBoundShapes(
GU_Detail &gdp)
const;
216 template <
typename T,
typename ARRAY_T>
218 getArrayAttribElement(
const BatchROHandleA<ARRAY_T> &handle,
223 template <
typename T,
typename ARRAY_T>
225 setArrayAttribElement(BatchRWHandleA<ARRAY_T> &handle,
229 #define IS_SCALAR SYS_IsArithmetic<T>::value || SYS_IsSame<T, UT_StringHolder>::value
230 #define ENABLE_IF_SCALAR typename SYS_EnableIf<IS_SCALAR>::type * = 0
231 #define ENABLE_IF_VECTOR typename SYS_DisableIf<IS_SCALAR>::type * = 0
233 template <
typename T>
236 template <
typename T>
239 template <
typename ATTRIB_T,
typename T>
242 std::copy(src, src + T::tuple_size, dest.data());
245 template <
typename ATTRIB_T,
typename T>
251 template <
typename T,
typename ATTRIB_T>
254 std::copy(src.data(), src.data() + T::tuple_size, dest);
257 template <
typename T,
typename ATTRIB_T>
264 #undef ENABLE_IF_SCALAR
265 #undef ENABLE_IF_VECTOR
274 BatchROHandleA<UT_Fpreal32Array> myPivot;
275 BatchROHandleA<UT_Fpreal32Array> myOrientation;
276 BatchROHandleA<UT_Fpreal32Array> myPosition;
279 template <
typename ARRAY_T>
284 myTupleSize(myAttrib.isValid() ? myAttrib->getTupleSize() : -1)
288 template <
typename ARRAY_T>
293 myTupleSize(myAttrib.isValid() ? myAttrib->getTupleSize() : -1)
297 template <
typename ARRAY_T>
303 myAttrib.set(myCacheOffset, myVals);
308 template <
typename ARRAY_T>
315 myAttrib.bind(gdp, owner, name, minsize);
316 myTupleSize = myAttrib.isValid() ? myAttrib->getTupleSize() : -1;
319 template <
typename T,
typename ARRAY_T>
343 if ((i + 1) * tuple_size > handle.
myVals.entries())
346 getValue(handle.
myVals.array() + i * tuple_size, elem);
351 template <
typename T,
typename ARRAY_T>
358 if (tuple_size != getTupleSize<T>())
372 handle.
myVals.setSize(n * tuple_size);
375 setValue(elem, handle.
myVals.array() + i * tuple_size);
Definition of a geometry attribute.
virtual void getPositionTransform(UT_Matrix4D &xform) const =0
const GU_Agent * getAgent() const
GA_Offset getPointOffset() const
virtual UT_Quaternion getOrientation() const =0
virtual UT_Vector3 getCentroid() const =0
bool GAisValid(GA_Size v)
exint getTransformId() const
const SIM_Object & getObject() const
Return the SIM_Object.
GA_Offset getPointOffset() const
GA_RWHandleT< ARRAY_T > myAttrib
Read-Write string handle.
static bool getArrayAttribElement(const BatchROHandleA< ARRAY_T > &handle, GA_Offset offset, exint i, T &elem)
GA_ROHandleT< ARRAY_T > myAttrib
#define GA_INVALID_OFFSET
BatchROHandleA(const GA_Attribute *attrib=nullptr)
static void setArrayAttribElement(BatchRWHandleA< ARRAY_T > &handle, GA_Offset offset, exint i, exint n, const T &elem)
const GU_PrimPacked * getPrimitive() const
virtual const GU_Detail * getSimGdp() const =0
Return the SIM_Object's geometry.
SIM_API void SIMcomputePositionTransform(const UT_Vector3 &pos, const UT_Vector3 &pivot, const UT_Quaternion &orient, UT_Matrix4D &xform)
SYS_FORCE_INLINE T get(GA_Offset off, int comp=0) const
virtual ~SIM_BaseObjectReader()
GLuint const GLchar * name
const SIM_Object & myObject
GA_API const UT_StringHolder orient
const GU_PrimPacked * getPrimPacked() const
BatchRWHandleA(GA_Attribute *attrib=nullptr)
GA_Offset getPointOffset() const
GA_API const UT_StringHolder pivot
void bind(GA_Detail *gdp, GA_AttributeOwner owner, const UT_StringRef &name, int minsize=1)
virtual GU_ConstDetailHandle getObjectGdp() const =0
Container class for all geometry.
Read-only handle for string attribute data.
#define UT_ASSERT_MSG(ZZ, MM)