From ff77c3e0d8aab5a9f61a1694c8af3f41bd027769 Mon Sep 17 00:00:00 2001 From: ericrius1 Date: Tue, 30 Jun 2015 18:38:40 -0700 Subject: [PATCH] added stroke width entity --- .../src/RenderableQuadEntityItem.cpp | 2 +- .../entities/src/EntityItemProperties.cpp | 3 ++ .../entities/src/EntityItemPropertiesMacros.h | 9 ++++- libraries/entities/src/QuadEntityItem.cpp | 16 +++++++-- libraries/entities/src/QuadEntityItem.h | 4 +++ libraries/networking/src/PacketHeaders.h | 1 + libraries/shared/src/RegisteredMetaTypes.cpp | 35 ++++++++++++++++++- libraries/shared/src/RegisteredMetaTypes.h | 5 +++ 8 files changed, 70 insertions(+), 5 deletions(-) diff --git a/libraries/entities-renderer/src/RenderableQuadEntityItem.cpp b/libraries/entities-renderer/src/RenderableQuadEntityItem.cpp index 45b4c23b92..e60be82770 100644 --- a/libraries/entities-renderer/src/RenderableQuadEntityItem.cpp +++ b/libraries/entities-renderer/src/RenderableQuadEntityItem.cpp @@ -72,7 +72,7 @@ int generateColor() { } void RenderableQuadEntityItem::updateGeometry() { - + QReadLocker lock(&_quadReadWriteLock); int compactColor = generateColor(); _numVertices = 0; _verticesBuffer.reset(new gpu::Buffer()); diff --git a/libraries/entities/src/EntityItemProperties.cpp b/libraries/entities/src/EntityItemProperties.cpp index 147e313768..13086a86b9 100644 --- a/libraries/entities/src/EntityItemProperties.cpp +++ b/libraries/entities/src/EntityItemProperties.cpp @@ -356,6 +356,7 @@ EntityPropertyFlags EntityItemProperties::getChangedProperties() const { CHECK_PROPERTY_CHANGE(PROP_DESCRIPTION, description); CHECK_PROPERTY_CHANGE(PROP_FACE_CAMERA, faceCamera); CHECK_PROPERTY_CHANGE(PROP_NORMALS, normals); + CHECK_PROPERTY_CHANGE(PROP_STROKE_WIDTHS, strokeWidths); changedProperties += _stage.getChangedProperties(); changedProperties += _atmosphere.getChangedProperties(); @@ -454,6 +455,7 @@ QScriptValue EntityItemProperties::copyToScriptValue(QScriptEngine* engine, bool COPY_PROPERTY_TO_QSCRIPTVALUE(description); COPY_PROPERTY_TO_QSCRIPTVALUE(faceCamera); COPY_PROPERTY_TO_QSCRIPTVALUE(normals); + COPY_PROPERTY_TO_QSCRIPTVALUE(strokeWidths); // Sitting properties support if (!skipDefaults) { @@ -568,6 +570,7 @@ void EntityItemProperties::copyFromScriptValue(const QScriptValue& object, bool COPY_PROPERTY_FROM_QSCRIPTVALUE(description, QString, setDescription); COPY_PROPERTY_FROM_QSCRIPTVALUE(faceCamera, bool, setFaceCamera); COPY_PROPERTY_FROM_QSCRIPTVALUE(normals, qVectorVec3, setNormals); + COPY_PROPERTY_FROM_QSCRIPTVALUE(strokeWidths,qVectorFloat, setStrokeWidths); if (!honorReadOnly) { // this is used by the json reader to set things that we don't want javascript to able to affect. diff --git a/libraries/entities/src/EntityItemPropertiesMacros.h b/libraries/entities/src/EntityItemPropertiesMacros.h index d4fcfa8cab..e48be1da8c 100644 --- a/libraries/entities/src/EntityItemPropertiesMacros.h +++ b/libraries/entities/src/EntityItemPropertiesMacros.h @@ -98,7 +98,8 @@ inline QScriptValue convertScriptValue(QScriptEngine* e, const QString& v) { ret inline QScriptValue convertScriptValue(QScriptEngine* e, const xColor& v) { return xColorToScriptValue(e, v); } inline QScriptValue convertScriptValue(QScriptEngine* e, const glm::quat& v) { return quatToScriptValue(e, v); } inline QScriptValue convertScriptValue(QScriptEngine* e, const QScriptValue& v) { return v; } -inline QScriptValue convertScriptValue(QScriptEngine* e, const QVector& v) {return qVectorVec3ToScriptValue(e, v); } +inline QScriptValue convertScriptValue(QScriptEngine* e, const QVector& v) {return qVectorVec3ToScriptValue(e, v); } +inline QScriptValue convertScriptValue(QScriptEngine* e, const QVector& v) { return qVectorFloatToScriptValue(e, v); } inline QScriptValue convertScriptValue(QScriptEngine* e, const QByteArray& v) { QByteArray b64 = v.toBase64(); @@ -134,6 +135,7 @@ inline QScriptValue convertScriptValue(QScriptEngine* e, const QByteArray& v) { typedef glm::vec3 glmVec3; typedef glm::quat glmQuat; typedef QVector qVectorVec3; +typedef QVector qVectorFloat; inline float float_convertFromScriptValue(const QScriptValue& v, bool& isValid) { return v.toVariant().toFloat(&isValid); } inline quint64 quint64_convertFromScriptValue(const QScriptValue& v, bool& isValid) { return v.toVariant().toULongLong(&isValid); } inline uint16_t uint16_t_convertFromScriptValue(const QScriptValue& v, bool& isValid) { return v.toVariant().toInt(&isValid); } @@ -177,6 +179,11 @@ inline glmVec3 glmVec3_convertFromScriptValue(const QScriptValue& v, bool& isVal return glm::vec3(0); } +inline qVectorFloat qVectorFloat_convertFromScriptValue(const QScriptValue& v, bool& isValid) { + isValid = true; + return qVectorFloatFromScriptValue(v); +} + inline qVectorVec3 qVectorVec3_convertFromScriptValue(const QScriptValue& v, bool& isValid) { isValid = true; return qVectorVec3FromScriptValue(v); diff --git a/libraries/entities/src/QuadEntityItem.cpp b/libraries/entities/src/QuadEntityItem.cpp index e0066f9b92..100d195212 100644 --- a/libraries/entities/src/QuadEntityItem.cpp +++ b/libraries/entities/src/QuadEntityItem.cpp @@ -36,7 +36,9 @@ EntityItem(entityItemID) , _lineWidth(DEFAULT_LINE_WIDTH), _pointsChanged(true), _points(QVector(0)), -_vertices(QVector(0)) +_vertices(QVector(0)), +_normals(QVector(0)), +_strokeWidths(QVector(0)) { _type = EntityTypes::Quad; _created = properties.getCreated(); @@ -55,6 +57,7 @@ EntityItemProperties QuadEntityItem::getProperties() const { COPY_ENTITY_PROPERTY_TO_PROPERTIES(lineWidth, getLineWidth); COPY_ENTITY_PROPERTY_TO_PROPERTIES(linePoints, getLinePoints); COPY_ENTITY_PROPERTY_TO_PROPERTIES(normals, getNormals); + COPY_ENTITY_PROPERTY_TO_PROPERTIES(strokeWidths, getStrokeWidths); properties._glowLevel = getGlowLevel(); @@ -72,6 +75,8 @@ bool QuadEntityItem::setProperties(const EntityItemProperties& properties) { SET_ENTITY_PROPERTY_FROM_PROPERTIES(lineWidth, setLineWidth); SET_ENTITY_PROPERTY_FROM_PROPERTIES(linePoints, setLinePoints); SET_ENTITY_PROPERTY_FROM_PROPERTIES(normals, setNormals); + SET_ENTITY_PROPERTY_FROM_PROPERTIES(strokeWidths, setStrokeWidths); + if (somethingChanged) { @@ -105,7 +110,12 @@ bool QuadEntityItem::appendPoint(const glm::vec3& point) { return true; } -bool QuadEntityItem::setNormals(const QVector &normals) { +bool QuadEntityItem::setStrokeWidths(const QVector& strokeWidths ) { + _strokeWidths = strokeWidths; + return true; +} + +bool QuadEntityItem::setNormals(const QVector& normals) { if (_points.size () < 2) { return false; } @@ -184,6 +194,7 @@ int QuadEntityItem::readEntitySubclassDataFromBuffer(const unsigned char* data, READ_ENTITY_PROPERTY(PROP_LINE_WIDTH, float, setLineWidth); READ_ENTITY_PROPERTY(PROP_LINE_POINTS, QVector, setLinePoints); READ_ENTITY_PROPERTY(PROP_NORMALS, QVector, setNormals); + READ_ENTITY_PROPERTY(PROP_STROKE_WIDTHS, QVector, setStrokeWidths); _quadReadWriteLock.unlock(); return bytesRead; @@ -214,6 +225,7 @@ void QuadEntityItem::appendSubclassData(OctreePacketData* packetData, EncodeBits APPEND_ENTITY_PROPERTY(PROP_LINE_WIDTH, getLineWidth()); APPEND_ENTITY_PROPERTY(PROP_LINE_POINTS, getLinePoints()); APPEND_ENTITY_PROPERTY(PROP_NORMALS, getNormals()); + APPEND_ENTITY_PROPERTY(PROP_STROKE_WIDTHS, getStrokeWidths()); } void QuadEntityItem::debugDump() const { diff --git a/libraries/entities/src/QuadEntityItem.h b/libraries/entities/src/QuadEntityItem.h index 341dbb9c2e..ae7cac4e52 100644 --- a/libraries/entities/src/QuadEntityItem.h +++ b/libraries/entities/src/QuadEntityItem.h @@ -61,6 +61,9 @@ class QuadEntityItem : public EntityItem { bool setNormals(const QVector& normals); const QVector& getNormals() const{ return _normals; } + bool setStrokeWidths(const QVector& strokeWidths); + const QVector& getStrokeWidths() const{ return _strokeWidths; } + virtual ShapeType getShapeType() const { return SHAPE_TYPE_LINE; } @@ -81,6 +84,7 @@ class QuadEntityItem : public EntityItem { QVector _points; QVector _vertices; QVector _normals; + QVector _strokeWidths; mutable QReadWriteLock _quadReadWriteLock; }; diff --git a/libraries/networking/src/PacketHeaders.h b/libraries/networking/src/PacketHeaders.h index 14f36a9b17..4e7ce261bc 100644 --- a/libraries/networking/src/PacketHeaders.h +++ b/libraries/networking/src/PacketHeaders.h @@ -187,5 +187,6 @@ const PacketVersion VERSION_ENTITIES_FACE_CAMERA = 30; const PacketVersion VERSION_ENTITIES_SCRIPT_TIMESTAMP = 31; const PacketVersion VERSION_ENTITIES_SCRIPT_TIMESTAMP_FIX = 32; const PacketVersion VERSION_ENTITIES_NORMALS = 33; +const PacketVersion VERSION_ENTITIES_STROKE_WIDTHS = 34; #endif // hifi_PacketHeaders_h diff --git a/libraries/shared/src/RegisteredMetaTypes.cpp b/libraries/shared/src/RegisteredMetaTypes.cpp index 62f2be0512..3674e09dae 100644 --- a/libraries/shared/src/RegisteredMetaTypes.cpp +++ b/libraries/shared/src/RegisteredMetaTypes.cpp @@ -33,6 +33,7 @@ void registerMetaTypes(QScriptEngine* engine) { qScriptRegisterMetaType(engine, vec4toScriptValue, vec4FromScriptValue); qScriptRegisterMetaType(engine, vec3toScriptValue, vec3FromScriptValue); qScriptRegisterMetaType(engine, qVectorVec3ToScriptValue, qVectorVec3FromScriptValue); + qScriptRegisterMetaType(engine, qVectorFloatToScriptValue, qVectorFloatFromScriptValue); qScriptRegisterMetaType(engine, vec2toScriptValue, vec2FromScriptValue); qScriptRegisterMetaType(engine, quatToScriptValue, quatFromScriptValue); qScriptRegisterMetaType(engine, qRectToScriptValue, qRectFromScriptValue); @@ -43,6 +44,7 @@ void registerMetaTypes(QScriptEngine* engine) { qScriptRegisterMetaType(engine, collisionToScriptValue, collisionFromScriptValue); qScriptRegisterMetaType(engine, quuidToScriptValue, quuidFromScriptValue); qScriptRegisterMetaType(engine, qSizeFToScriptValue, qSizeFFromScriptValue); + } QScriptValue vec4toScriptValue(QScriptEngine* engine, const glm::vec4& vec4) { @@ -79,7 +81,7 @@ void vec3FromScriptValue(const QScriptValue &object, glm::vec3 &vec3) { vec3.z = object.property("z").toVariant().toFloat(); } -QScriptValue qVectorVec3ToScriptValue(QScriptEngine* engine, const QVector& vector){ +QScriptValue qVectorVec3ToScriptValue(QScriptEngine* engine, const QVector& vector) { QScriptValue array = engine->newArray(); for (int i = 0; i < vector.size(); i++) { array.setProperty(i, vec3toScriptValue(engine, vector.at(i))); @@ -87,6 +89,37 @@ QScriptValue qVectorVec3ToScriptValue(QScriptEngine* engine, const QVector qVectorFloatFromScriptValue(const QScriptValue& array) { + QVector newVector; + int length = array.property("length").toInteger(); + for (int i = 0; i < length; i++) { + newVector << array.property(i).toVariant().toFloat(); + } + + return newVector; +} + +QScriptValue qVectorFloatToScriptValue(QScriptEngine* engine, const QVector& vector) { + QScriptValue array = engine->newArray(); + for (int i = 0; i < vector.size(); i++) { + float num = vector.at(i); + if(num != num) { + //if num is NaN don't convert it + return array; + } + array.setProperty(i, QScriptValue(num)); + } + return array; +} + +void qVectorFloatFromScriptValue(const QScriptValue& array, QVector& vector) { + int length = array.property("length").toInteger(); + + for (int i = 0; i < length; i++) { + vector << array.property(i).toVariant().toFloat(); + } +} +// QVector qVectorVec3FromScriptValue(const QScriptValue& array){ QVector newVector; int length = array.property("length").toInteger(); diff --git a/libraries/shared/src/RegisteredMetaTypes.h b/libraries/shared/src/RegisteredMetaTypes.h index f5f39cd3f6..31f1da8a40 100644 --- a/libraries/shared/src/RegisteredMetaTypes.h +++ b/libraries/shared/src/RegisteredMetaTypes.h @@ -29,6 +29,7 @@ Q_DECLARE_METATYPE(glm::vec2) Q_DECLARE_METATYPE(glm::quat) Q_DECLARE_METATYPE(xColor) Q_DECLARE_METATYPE(QVector) +Q_DECLARE_METATYPE(QVector) void registerMetaTypes(QScriptEngine* engine); @@ -60,6 +61,10 @@ QScriptValue qVectorVec3ToScriptValue(QScriptEngine* engine, const QVector& vector); QVector qVectorVec3FromScriptValue( const QScriptValue& array); +QScriptValue qVectorFloatToScriptValue(QScriptEngine* engine, const QVector& vector); +void qVectorFloatFromScriptValue(const QScriptValue& array, QVector& vector); +QVector qVectorFloatFromScriptValue(const QScriptValue& array); + class PickRay { public: PickRay() : origin(0.0f), direction(0.0f) { }