12 #ifndef hifi_PolyVoxEntityItem_h
13 #define hifi_PolyVoxEntityItem_h
15 #include "EntityItem.h"
26 virtual EntityItemProperties getProperties(
const EntityPropertyFlags& desiredProperties,
bool allowEmptyDesiredProperties)
const override;
29 virtual EntityPropertyFlags getEntityProperties(EncodeBitstreamParams& params)
const override;
31 virtual void appendSubclassData(
OctreePacketData* packetData, EncodeBitstreamParams& params,
32 EntityTreeElementExtraEncodeDataPointer modelTreeElementExtraEncodeData,
33 EntityPropertyFlags& requestedProperties,
34 EntityPropertyFlags& propertyFlags,
35 EntityPropertyFlags& propertiesDidntFit,
37 OctreeElement::AppendState& appendState)
const override;
39 virtual int readEntitySubclassDataFromBuffer(
const unsigned char* data,
int bytesLeftToRead,
40 ReadBitstreamToTreeParams& args,
41 EntityPropertyFlags& propertyFlags,
bool overwriteLocalData,
42 bool& somethingChanged)
override;
45 virtual bool supportsDetailedIntersection()
const override {
return true; }
46 virtual bool findDetailedRayIntersection(
const glm::vec3& origin,
const glm::vec3& direction,
47 const glm::vec3& viewFrustumPos, OctreeElementPointer& element,
float& distance,
48 BoxFace& face, glm::vec3& surfaceNormal,
49 QVariantMap& extraInfo,
bool precisionPicking)
const override {
return false; }
50 virtual bool findDetailedParabolaIntersection(
const glm::vec3& origin,
const glm::vec3& velocity,
51 const glm::vec3& acceleration,
const glm::vec3& viewFrustumPos, OctreeElementPointer& element,
52 float& parabolicDistance, BoxFace& face, glm::vec3& surfaceNormal,
53 QVariantMap& extraInfo,
bool precisionPicking)
const override {
return false; }
55 virtual void debugDump()
const override;
57 virtual void setVoxelVolumeSize(
const glm::vec3& voxelVolumeSize);
58 virtual glm::vec3 getVoxelVolumeSize()
const;
60 virtual void setVoxelData(
const QByteArray& voxelData);
61 virtual QByteArray getVoxelData()
const;
63 virtual int getOnCount()
const {
return 0; }
84 enum PolyVoxSurfaceStyle {
85 SURFACE_MARCHING_CUBES,
88 SURFACE_EDGED_MARCHING_CUBES
90 static bool isEdged(PolyVoxSurfaceStyle surfaceStyle);
93 virtual void setVoxelSurfaceStyle(PolyVoxSurfaceStyle voxelSurfaceStyle) { _voxelSurfaceStyle = voxelSurfaceStyle; }
95 void setVoxelSurfaceStyle(uint16_t voxelSurfaceStyle) { setVoxelSurfaceStyle((PolyVoxSurfaceStyle) voxelSurfaceStyle); }
96 virtual PolyVoxSurfaceStyle getVoxelSurfaceStyle()
const {
return _voxelSurfaceStyle; }
98 static const glm::vec3 DEFAULT_VOXEL_VOLUME_SIZE;
99 static const float MAX_VOXEL_DIMENSION;
101 static const QByteArray DEFAULT_VOXEL_DATA;
102 static const PolyVoxSurfaceStyle DEFAULT_VOXEL_SURFACE_STYLE;
104 glm::vec3 voxelCoordsToWorldCoords(
const glm::vec3& voxelCoords)
const;
105 glm::vec3 worldCoordsToVoxelCoords(
const glm::vec3& worldCoords)
const;
106 glm::vec3 voxelCoordsToLocalCoords(
const glm::vec3& voxelCoords)
const;
107 glm::vec3 localCoordsToVoxelCoords(
const glm::vec3& localCoords)
const;
110 virtual bool setSphereInVolume(
const vec3& center,
float radius, uint8_t toValue) {
return false; }
111 virtual bool setVoxelInVolume(
const vec3& position, uint8_t toValue) {
return false; }
113 virtual bool setSphere(
const vec3& center,
float radius, uint8_t toValue) {
return false; }
114 virtual bool setCapsule(
const vec3& startWorldCoords,
const vec3& endWorldCoords,
115 float radiusWorldCoords, uint8_t toValue) {
return false; }
116 virtual bool setAll(uint8_t toValue) {
return false; }
117 virtual bool setCuboid(
const vec3& lowPosition,
const vec3& cuboidSize,
int value) {
return false; }
119 virtual uint8_t getVoxel(
int x,
int y,
int z)
const final {
return getVoxel({ x, y, z }); }
120 virtual bool setVoxel(
int x,
int y,
int z, uint8_t toValue)
final{
return setVoxel({ x, y, z }, toValue); }
122 virtual uint8_t getVoxel(
const ivec3& v)
const {
return 0; }
123 virtual bool setVoxel(
const ivec3& v, uint8_t toValue) {
return false; }
125 static QByteArray makeEmptyVoxelData(quint16 voxelXSize = 16, quint16 voxelYSize = 16, quint16 voxelZSize = 16);
127 static const QString DEFAULT_X_TEXTURE_URL;
128 void setXTextureURL(
const QString& xTextureURL);
129 QString getXTextureURL()
const;
131 static const QString DEFAULT_Y_TEXTURE_URL;
132 void setYTextureURL(
const QString& yTextureURL);
133 QString getYTextureURL()
const;
135 static const QString DEFAULT_Z_TEXTURE_URL;
136 void setZTextureURL(
const QString& zTextureURL);
137 QString getZTextureURL()
const;
139 virtual void setXNNeighborID(
const EntityItemID& xNNeighborID);
140 void setXNNeighborID(
const QString& xNNeighborID);
142 virtual void setYNNeighborID(
const EntityItemID& yNNeighborID);
143 void setYNNeighborID(
const QString& yNNeighborID);
145 virtual void setZNNeighborID(
const EntityItemID& zNNeighborID);
146 void setZNNeighborID(
const QString& zNNeighborID);
149 std::array<EntityItemID, 3> getNNeigborIDs()
const;
152 virtual void setXPNeighborID(
const EntityItemID& xPNeighborID);
153 void setXPNeighborID(
const QString& xPNeighborID);
155 virtual void setYPNeighborID(
const EntityItemID& yPNeighborID);
156 void setYPNeighborID(
const QString& yPNeighborID);
158 virtual void setZPNeighborID(
const EntityItemID& zPNeighborID);
159 void setZPNeighborID(
const QString& zPNeighborID);
162 std::array<EntityItemID, 3> getPNeigborIDs()
const;
164 glm::vec3 getSurfacePositionAdjustment()
const;
168 bool isEdged()
const;
170 glm::mat4 voxelToWorldMatrix(
bool includeBillboard =
false)
const;
171 glm::mat4 worldToVoxelMatrix(
bool includeBillboard =
false)
const;
172 glm::mat4 voxelToLocalMatrix()
const;
173 glm::mat4 localToVoxelMatrix()
const;
176 void setVoxelDataDirty(
bool value) { withWriteLock([&] { _voxelDataDirty = value; }); }
178 glm::vec3 _voxelVolumeSize { DEFAULT_VOXEL_VOLUME_SIZE };
180 QByteArray _voxelData { DEFAULT_VOXEL_DATA };
181 bool _voxelDataDirty {
true };
183 PolyVoxSurfaceStyle _voxelSurfaceStyle { DEFAULT_VOXEL_SURFACE_STYLE };
185 QString _xTextureURL { DEFAULT_X_TEXTURE_URL };
186 QString _yTextureURL { DEFAULT_Y_TEXTURE_URL };
187 QString _zTextureURL { DEFAULT_Z_TEXTURE_URL };
Definition: EntityItem.h:82
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