#ifndef DUST3D_ANIMAL_RIGGER_H #define DUST3D_ANIMAL_RIGGER_H #include #include #include #include "rigger.h" #include "meshsplitter.h" class AnimalRigger: public Rigger { Q_OBJECT public: AnimalRigger(const std::vector &verticesPositions, const std::set &inputTriangles, const std::vector, std::pair>> &triangleLinks); protected: bool validate() override; bool isCutOffSplitter(BoneMark boneMark) override; bool rig() override; BoneMark translateBoneMark(BoneMark boneMark) override; private: bool collectJointsForChain(int markIndex, std::vector &jointMarkIndices); static QString namingSpine(int spineOrder, bool hasTail); static QString namingConnector(const QString &spineName, const QString &chainName); static QString namingChain(const QString &baseName, SkeletonSide side, int orderInSide, int totalInSide, int jointOrder); static QString namingChainPrefix(const QString &baseName, SkeletonSide side, int orderInSide, int totalInSide); QVector3D findExtremPointFrom(const std::set &verticies, const QVector3D &from); float calculateSpineRadius(const std::vector &leftXs, const std::vector &rightXs, const std::vector &middleRadiusCollection); }; #endif