#ifndef _AlembicExport_MayaTransformWriter_h_
#define _AlembicExport_MayaTransformWriter_h_
#include "Foundation.h"
#include <Alembic/AbcGeom/OXform.h>
#include <Alembic/AbcGeom/XformOp.h>
#include "AttributesWriter.h"
struct AnimChan
{
double scale;
std::size_t opNum;
Alembic::Util::uint32_t channelNum;
};
class MayaTransformWriter
{
public:
MayaTransformWriter(Alembic::Abc::OObject & iParent,
MDagPath & iDag,
Alembic::Util::uint32_t iTimeIndex, const JobArgs & iArgs);
MayaTransformWriter(MayaTransformWriter & iParent,
MDagPath & iDag,
Alembic::Util::uint32_t iTimeIndex, const JobArgs & iArgs);
~MayaTransformWriter();
void write();
bool isAnimated() const;
Alembic::Abc::OObject getObject() {return mSchema.getObject();};
AttributesWriterPtr getAttrs() {return mAttrs;};
private:
Alembic::AbcGeom::OXformSchema mSchema;
AttributesWriterPtr mAttrs;
void pushTransformStack(
const MFnTransform & iTrans,
bool iForceStatic);
void pushTransformStack(
const MFnIkJoint & iTrans,
bool iForceStatic);
Alembic::AbcGeom::XformSample mSample;
std::vector < AnimChan > mAnimChanList;
size_t mJointOrientOpIndex[3];
size_t mRotateOpIndex[3];
size_t mRotateAxisOpIndex[3];
bool mFilterEulerRotations;
};
typedef Alembic::Util::shared_ptr < MayaTransformWriter >
MayaTransformWriterPtr;
#endif // _AlembicExport_MayaTransformWriter_h_