From dbec1aad0c682b098afb38b2820cdb055c9d869f Mon Sep 17 00:00:00 2001 From: ericrius1 Date: Fri, 19 Jun 2015 18:54:28 -0700 Subject: [PATCH] line entity points are now local to entity position. Changed paint script to reflect this --- .../src/RenderableLineEntityItem.cpp | 6 ++--- libraries/entities/src/EntityItemProperties.h | 2 ++ .../entities/src/EntityScriptingInterface.cpp | 10 +++++++ .../entities/src/EntityScriptingInterface.h | 1 + libraries/entities/src/LineEntityItem.cpp | 27 ++++++++++++++----- libraries/entities/src/LineEntityItem.h | 2 ++ 6 files changed, 38 insertions(+), 10 deletions(-) diff --git a/libraries/entities-renderer/src/RenderableLineEntityItem.cpp b/libraries/entities-renderer/src/RenderableLineEntityItem.cpp index 65407c74e7..4b94992d59 100644 --- a/libraries/entities-renderer/src/RenderableLineEntityItem.cpp +++ b/libraries/entities-renderer/src/RenderableLineEntityItem.cpp @@ -43,9 +43,9 @@ void RenderableLineEntityItem::render(RenderArgs* args) { Q_ASSERT(args->_batch); gpu::Batch& batch = *args->_batch; - // TODO: Figure out clean , efficient way to do relative line positioning. For now we'll just use absolute positioning. - //batch.setModelTransform(getTransformToCenter()); - batch.setModelTransform(Transform()); + Transform transform = Transform(); + transform.setTranslation(getPosition()); + batch.setModelTransform(transform); batch._glLineWidth(getLineWidth()); if (getLinePoints().size() > 1) { diff --git a/libraries/entities/src/EntityItemProperties.h b/libraries/entities/src/EntityItemProperties.h index 068bc98f7e..5f33da52f8 100644 --- a/libraries/entities/src/EntityItemProperties.h +++ b/libraries/entities/src/EntityItemProperties.h @@ -197,6 +197,8 @@ public: QString getSimulatorIDAsString() const { return _simulatorID.toString().mid(1,36).toUpper(); } void setVoxelDataDirty() { _voxelDataChanged = true; } + + void setLinePointsDirty() {_linePointsChanged = true; } void setCreated(QDateTime& v); diff --git a/libraries/entities/src/EntityScriptingInterface.cpp b/libraries/entities/src/EntityScriptingInterface.cpp index 69b31468d2..c9f7378bc8 100644 --- a/libraries/entities/src/EntityScriptingInterface.cpp +++ b/libraries/entities/src/EntityScriptingInterface.cpp @@ -471,8 +471,10 @@ bool EntityScriptingInterface::setPoints(QUuid entityID, std::functiongetProperties(); _entityTree->unlock(); + properties.setLinePointsDirty(); properties.setLastEdited(now); + queueEntityMessage(PacketTypeEntityEdit, entityID, properties); return success; } @@ -502,6 +504,14 @@ bool EntityScriptingInterface::setAllPoints(QUuid entityID, const QVector bool + { + return lineEntity.appendPoint(point); + }); + +} + bool EntityScriptingInterface::actionWorker(const QUuid& entityID, std::function actor) { diff --git a/libraries/entities/src/EntityScriptingInterface.h b/libraries/entities/src/EntityScriptingInterface.h index 17183264b9..12c8688816 100644 --- a/libraries/entities/src/EntityScriptingInterface.h +++ b/libraries/entities/src/EntityScriptingInterface.h @@ -124,6 +124,7 @@ public slots: Q_INVOKABLE bool setAllVoxels(QUuid entityID, int value); Q_INVOKABLE bool setAllPoints(QUuid entityID, const QVector& points); + Q_INVOKABLE bool appendPoint(QUuid entityID, const glm::vec3& point); Q_INVOKABLE void dumpTree() const; diff --git a/libraries/entities/src/LineEntityItem.cpp b/libraries/entities/src/LineEntityItem.cpp index 0686f64a89..fccf57c7c7 100644 --- a/libraries/entities/src/LineEntityItem.cpp +++ b/libraries/entities/src/LineEntityItem.cpp @@ -23,6 +23,7 @@ const float LineEntityItem::DEFAULT_LINE_WIDTH = 2.0f; +const int LineEntityItem::MAX_POINTS_PER_LINE = 70; EntityItemPointer LineEntityItem::factory(const EntityItemID& entityID, const EntityItemProperties& properties) { @@ -85,18 +86,30 @@ bool LineEntityItem::setProperties(const EntityItemProperties& properties) { return somethingChanged; } +bool LineEntityItem::appendPoint(const glm::vec3& point) { + if (_points.size() > MAX_POINTS_PER_LINE - 1) { + qDebug() << "MAX POINTS REACHED!"; + return false; + } + glm::vec3 halfBox = getDimensions() * 0.5f; + if ( (point.x < - halfBox.x || point.x > halfBox.x) || (point.y < -halfBox.y || point.y > halfBox.y) || (point.z < - halfBox.z || point.z > halfBox.z) ) { + qDebug() << "Point is outside entity's bounding box"; + return false; + } + _points << point; + _pointsChanged = true; + return true; +} + bool LineEntityItem::setLinePoints(const QVector& points) { + if (points.size() > MAX_POINTS_PER_LINE) { + return false; + } for (int i = 0; i < points.size(); i++) { glm::vec3 point = points.at(i); - // Make sure all of our points are valid numbers. - // Must be greater than 0 because vector component is set to 0 if it is invalid data. Also should never be greater than TREE_SCALE - if ( (point.x <= 0 || point.x >= TREE_SCALE) || (point.y <= 0 || point.y >= TREE_SCALE) || (point.z <= 0 || point.z >= TREE_SCALE) ) { - qDebug() << "Point is outside domain bounds"; - return false; - } glm::vec3 pos = getPosition(); glm::vec3 halfBox = getDimensions() * 0.5f; - if ( (point.x < pos.x - halfBox.x || point.x > pos.x + halfBox.x) || (point.y < pos.y - halfBox.y || point.y > pos.y + halfBox.y) || (point.z < pos.z - halfBox.z || point.z > pos.z + halfBox.z) ) { + if ( (point.x < - halfBox.x || point.x > halfBox.x) || (point.y < -halfBox.y || point.y > halfBox.y) || (point.z < - halfBox.z || point.z > halfBox.z) ) { qDebug() << "Point is outside entity's bounding box"; return false; } diff --git a/libraries/entities/src/LineEntityItem.h b/libraries/entities/src/LineEntityItem.h index 0918dd2d06..6d0f00ef04 100644 --- a/libraries/entities/src/LineEntityItem.h +++ b/libraries/entities/src/LineEntityItem.h @@ -55,6 +55,7 @@ class LineEntityItem : public EntityItem { float getLineWidth() const{ return _lineWidth; } bool setLinePoints(const QVector& points); + bool appendPoint(const glm::vec3& point); const QVector& getLinePoints() const{ return _points; } @@ -68,6 +69,7 @@ class LineEntityItem : public EntityItem { virtual void debugDump() const; static const float DEFAULT_LINE_WIDTH; + static const int MAX_POINTS_PER_LINE; protected: rgbColor _color;