12 #ifndef hifi_ModelEntityItem_h
13 #define hifi_ModelEntityItem_h
15 #include "EntityItem.h"
16 #include <JointData.h>
17 #include <ThreadSafeValueCache.h>
18 #include "AnimationPropertyGroup.h"
20 #include "BlendshapeConstants.h"
31 virtual EntityItemProperties getProperties(
const EntityPropertyFlags& desiredProperties,
bool allowEmptyDesiredProperties)
const override;
34 virtual EntityPropertyFlags getEntityProperties(EncodeBitstreamParams& params)
const override;
36 virtual void appendSubclassData(
OctreePacketData* packetData, EncodeBitstreamParams& params,
37 EntityTreeElementExtraEncodeDataPointer entityTreeElementExtraEncodeData,
38 EntityPropertyFlags& requestedProperties,
39 EntityPropertyFlags& propertyFlags,
40 EntityPropertyFlags& propertiesDidntFit,
42 OctreeElement::AppendState& appendState)
const override;
45 virtual int readEntitySubclassDataFromBuffer(
const unsigned char* data,
int bytesLeftToRead,
46 ReadBitstreamToTreeParams& args,
47 EntityPropertyFlags& propertyFlags,
bool overwriteLocalData,
48 bool& somethingChanged)
override;
51 virtual void update(
const quint64& now)
override;
52 bool needsToCallUpdate()
const override {
return isAnimatingSomething(); }
54 virtual void debugDump()
const override;
56 void setShapeType(ShapeType type)
override;
61 glm::u8vec3 getColor()
const;
62 void setColor(
const glm::u8vec3& value);
64 bool hasModel()
const;
65 virtual bool hasCompoundShapeURL()
const;
67 static const QString DEFAULT_MODEL_URL;
68 QString getModelURL()
const;
71 virtual void setScaledDimensions(
const glm::vec3& value)
override;
73 virtual const Transform getTransform(
bool& success,
int depth = 0)
const override;
74 virtual const Transform getTransformWithOnlyLocalRotation(
bool& success,
int depth = 0)
const override;
75 virtual const Transform getTransform()
const override;
77 static const QString DEFAULT_COMPOUND_SHAPE_URL;
78 QString getCompoundShapeURL()
const;
81 virtual void setModelURL(
const QString& url);
82 virtual void setCompoundShapeURL(
const QString& url);
85 AnimationPropertyGroup getAnimationProperties()
const;
86 bool hasAnimation()
const;
87 QString getAnimationURL()
const;
88 void setAnimationCurrentFrame(
float value);
89 float getAnimationCurrentFrame()
const;
90 bool getAnimationAllowTranslation()
const;
91 bool isAnimatingSomething()
const;
93 void setRelayParentJoints(
bool relayJoints);
94 bool getRelayParentJoints()
const;
96 void setGroupCulled(
bool value);
97 bool getGroupCulled()
const;
99 static const QString DEFAULT_TEXTURES;
100 const QString getTextures()
const;
101 void setTextures(
const QString& textures);
103 virtual void setJointRotations(
const QVector<glm::quat>& rotations);
104 virtual void setJointRotationsSet(
const QVector<bool>& rotationsSet);
105 virtual void setJointTranslations(
const QVector<glm::vec3>& translations);
106 virtual void setJointTranslationsSet(
const QVector<bool>& translationsSet);
108 virtual void setAnimationJointsData(
const QVector<EntityJointData>& jointsData);
110 QVector<glm::quat> getJointRotations()
const;
111 QVector<bool> getJointRotationsSet()
const;
112 QVector<glm::vec3> getJointTranslations()
const;
113 QVector<bool> getJointTranslationsSet()
const;
115 glm::vec3 getModelScale()
const;
116 void setModelScale(
const glm::vec3& modelScale);
118 QString getBlendshapeCoefficients()
const;
119 void setBlendshapeCoefficients(
const QString& blendshapeCoefficients);
120 bool blendshapesChanged()
const {
return _blendshapesChanged; }
121 QVector<float> getBlendshapeCoefficientVector();
123 bool getUseOriginalPivot()
const;
124 void setUseOriginalPivot(
bool useOriginalPivot);
127 void setAnimationSettings(
const QString& value);
128 bool applyNewAnimationProperties(AnimationPropertyGroup newProperties);
131 void resizeJointArrays(
int newSize);
139 ReadWriteLockable _jointDataLock;
141 bool _jointRotationsExplicitlySet {
false };
142 bool _jointTranslationsExplicitlySet{
false };
144 struct ModelJointData {
145 EntityJointData joint;
146 bool rotationDirty {
false };
147 bool translationDirty {
false };
150 QVector<ModelJointData> _localJointData;
151 int _lastKnownCurrentFrame{-1};
154 glm::vec3 _modelScale { 1.0f };
156 bool _relayParentJoints;
157 bool _groupCulled {
false };
158 QVariantMap _blendshapeCoefficientsMap;
159 bool _useOriginalPivot {
false };
161 ThreadSafeValueCache<QString> _compoundShapeURL;
163 AnimationPropertyGroup _animationProperties;
167 ShapeType _shapeType { SHAPE_TYPE_NONE };
170 uint64_t _lastAnimated{ 0 };
171 float _currentFrame{ -1.0f };
173 QVector<float> _blendshapeCoefficientsVector;
174 bool _blendshapesChanged {
false };
Definition: EntityItem.h:82
virtual glm::vec3 getScaledDimensions() const
Dimensions in meters (0.0 - TREE_SCALE)
Definition: EntityItem.cpp:1910
virtual ShapeType getShapeType() const
return preferred shape type (actual physical shape may differ)
Definition: EntityItem.h:390
Abstract ID for editing model items. Used in EntityItem JS API.
Definition: EntityItemID.h:28
Definition: EntityItemProperties.h:106
Handles packing of the data portion of PacketType_OCTREE_DATA messages.
Definition: OctreePacketData.h:93