added clone functionality to Overlays:

Overlays.cloneOverlay(OverlayID)
This commit is contained in:
Thijs Wenker 2014-11-05 23:44:59 +01:00
parent 7e36c51edc
commit 709ad84933
36 changed files with 181 additions and 14 deletions

View file

@ -155,5 +155,12 @@ void Base3DOverlay::drawDashedLine(const glm::vec3& start, const glm::vec3& end)
}
void Base3DOverlay::writeToClone(Base3DOverlay* clone) {
Overlay::writeToClone(clone);
clone->setPosition(getPosition());
clone->setLineWidth(getLineWidth());
clone->setIsSolid(getIsSolid());
clone->setIsDashedLine(getIsDashedLine());
clone->setRotation(getRotation());
clone->setIgnoreRayIntersection(getIgnoreRayIntersection());
}

View file

@ -54,6 +54,7 @@ public:
}
protected:
virtual void writeToClone(Base3DOverlay* clone);
void drawDashedLine(const glm::vec3& start, const glm::vec3& end);
glm::vec3 _position;

View file

@ -198,3 +198,17 @@ bool BillboardOverlay::findRayIntersection(const glm::vec3& origin, const glm::v
return false;
}
BillboardOverlay* BillboardOverlay::createClone() {
BillboardOverlay* clone = new BillboardOverlay();
writeToClone(clone);
return clone;
}
void BillboardOverlay::writeToClone(BillboardOverlay* clone) {
Base3DOverlay::writeToClone(clone);
clone->setScale(_scale);
clone->setIsFacingAvatar(_isFacingAvatar);
clone->setClipFromSource(_fromImage);
clone->_url = _url;
clone->_billboard = QByteArray::QByteArray(_billboard);
}

View file

@ -35,10 +35,14 @@ public:
virtual bool findRayIntersection(const glm::vec3& origin, const glm::vec3& direction, float& distance, BoxFace& face) const;
virtual BillboardOverlay* createClone();
private slots:
void replyFinished();
private:
virtual void writeToClone(BillboardOverlay* clone);
void setBillboardURL(const QString& url);
QString _url;

View file

@ -319,9 +319,12 @@ bool Circle3DOverlay::findRayIntersection(const glm::vec3& origin,
return intersects;
}
Circle3DOverlay* Circle3DOverlay::createClone() {
Circle3DOverlay* clone = new Circle3DOverlay();
writeToClone(clone);
return clone;
}
void Circle3DOverlay::writeToClone(Circle3DOverlay* clone) {
Planar3DOverlay::writeToClone(clone);
}

View file

@ -47,8 +47,12 @@ public:
void setMinorTickMarksColor(const xColor& value) { _minorTickMarksColor = value; }
virtual bool findRayIntersection(const glm::vec3& origin, const glm::vec3& direction, float& distance, BoxFace& face) const;
virtual Circle3DOverlay* createClone();
protected:
virtual void writeToClone(Circle3DOverlay* clone);
float _startAt;
float _endAt;
float _outerRadius;

View file

@ -102,3 +102,9 @@ void Cube3DOverlay::render(RenderArgs* args) {
delete glower;
}
}
Cube3DOverlay* Cube3DOverlay::createClone() {
Cube3DOverlay* clone = new Cube3DOverlay();
writeToClone(clone);
return clone;
}

View file

@ -20,6 +20,8 @@ public:
Cube3DOverlay();
~Cube3DOverlay();
virtual void render(RenderArgs* args);
virtual Cube3DOverlay* createClone();
};

View file

@ -151,4 +151,15 @@ void ImageOverlay::setProperties(const QScriptValue& properties) {
}
}
ImageOverlay* ImageOverlay::createClone() {
ImageOverlay* clone = new ImageOverlay();
writeToClone(clone);
return clone;
}
void ImageOverlay::writeToClone(ImageOverlay* clone) {
Overlay2D::writeToClone(clone);
clone->_imageURL = _imageURL;
clone->_textureImage = _textureImage;
clone->_renderImage = _renderImage;
}

View file

@ -45,10 +45,13 @@ public:
void setImageURL(const QUrl& url);
virtual void setProperties(const QScriptValue& properties);
virtual ImageOverlay* createClone();
private slots:
void replyFinished(); // we actually want to hide this...
private:
virtual void writeToClone(ImageOverlay* clone);
QUrl _imageURL;
QImage _textureImage;

View file

@ -79,3 +79,14 @@ void Line3DOverlay::setProperties(const QScriptValue& properties) {
}
}
}
Line3DOverlay* Line3DOverlay::createClone() {
Line3DOverlay* clone = new Line3DOverlay();
writeToClone(clone);
return clone;
}
void Line3DOverlay::writeToClone(Line3DOverlay* clone) {
Base3DOverlay::writeToClone(clone);
}

View file

@ -29,7 +29,11 @@ public:
virtual void setProperties(const QScriptValue& properties);
virtual Line3DOverlay* createClone();
protected:
virtual void writeToClone(Line3DOverlay* clone);
glm::vec3 _end;
};

View file

@ -48,3 +48,9 @@ void LocalModelsOverlay::render(RenderArgs* args) {
}
}
LocalModelsOverlay* LocalModelsOverlay::createClone() {
LocalModelsOverlay* clone = new LocalModelsOverlay(Application::getInstance()->getEntityClipboardRenderer());
writeToClone(clone);
return clone;
}

View file

@ -25,6 +25,8 @@ public:
virtual void update(float deltatime);
virtual void render(RenderArgs* args);
virtual LocalModelsOverlay* createClone();
private:
EntityTreeRenderer* _entityTreeRenderer;
};

View file

@ -103,3 +103,8 @@ void LocalVoxelsOverlay::setProperties(const QScriptValue &properties) {
}
}
LocalVoxelsOverlay* LocalVoxelsOverlay::createClone() {
LocalVoxelsOverlay* clone = new LocalVoxelsOverlay();
writeToClone(clone);
return clone;
}

View file

@ -39,6 +39,7 @@ public:
virtual void setProperties(const QScriptValue& properties);
virtual LocalVoxelsOverlay* createClone();
private:
static QMap<QString, WeakVoxelSystemPointer> _voxelSystemMap; // treeName/voxelSystem

View file

@ -135,4 +135,8 @@ bool ModelOverlay::findRayIntersectionExtraInfo(const glm::vec3& origin, const g
return _model.findRayIntersectionAgainstSubMeshes(origin, direction, distance, face, extraInfo);
}
ModelOverlay* ModelOverlay::createClone() {
ModelOverlay* clone = new ModelOverlay();
writeToClone(clone);
return clone;
}

View file

@ -28,6 +28,8 @@ public:
virtual bool findRayIntersectionExtraInfo(const glm::vec3& origin, const glm::vec3& direction,
float& distance, BoxFace& face, QString& extraInfo) const;
virtual ModelOverlay* createClone();
private:
Model _model;

View file

@ -173,3 +173,19 @@ float Overlay::updatePulse() {
return _pulse;
}
void Overlay::writeToClone(Overlay* clone) {
clone->setAlpha(getAlpha());
clone->setAlphaPulse(getAlphaPulse());
clone->setAnchor(getAnchor());
clone->setColor(getColor());
clone->setColorPulse(getColorPulse());
clone->setGlowLevel(getGlowLevel());
clone->setGlowLevelPulse(getGlowLevelPulse());
clone->setPulseDirection(getPulseDirection());
clone->setPulseMax(getPulseMax());
clone->setPulseMin(getPulseMin());
clone->setPulsePeriod(getPulsePeriod());
clone->setVisible(getVisible());
clone->_isLoaded = _isLoaded;
}

View file

@ -77,8 +77,10 @@ public:
void setAlphaPulse(float value) { _alphaPulse = value; }
virtual void setProperties(const QScriptValue& properties);
virtual Overlay* createClone() = 0;
protected:
virtual void writeToClone(Overlay* clone);
float updatePulse();
QGLWidget* _parent;

View file

@ -64,3 +64,8 @@ void Overlay2D::setProperties(const QScriptValue& properties) {
//qDebug() << "set bounds to " << getBounds();
}
}
void Overlay2D::writeToClone(Overlay2D* clone) {
Overlay::writeToClone(clone);
clone->setBounds(getBounds());
}

View file

@ -49,6 +49,7 @@ public:
virtual void setProperties(const QScriptValue& properties);
protected:
virtual void writeToClone(Overlay2D* clone);
QRect _bounds; // where on the screen to draw
};

View file

@ -190,6 +190,16 @@ unsigned int Overlays::addOverlay(Overlay* overlay) {
return thisID;
}
unsigned int Overlays::cloneOverlay(unsigned int id) {
Overlay* thisOverlay = NULL;
if (_overlays2D.contains(id)) {
thisOverlay = _overlays2D[id];
} else if (_overlays3D.contains(id)) {
thisOverlay = _overlays3D[id];
}
return addOverlay(thisOverlay->createClone());
}
bool Overlays::editOverlay(unsigned int id, const QScriptValue& properties) {
Overlay* thisOverlay = NULL;
QWriteLocker lock(&_lock);

View file

@ -49,6 +49,9 @@ public slots:
/// adds an overlay that's already been created
unsigned int addOverlay(Overlay* overlay);
/// clones an existing overlay
unsigned int cloneOverlay(unsigned int id);
/// edits an overlay updating only the included properties, will return the identified OverlayID in case of
/// successful edit, if the input id is for an unknown overlay this function will have no effect
bool editOverlay(unsigned int id, const QScriptValue& properties);

View file

@ -102,3 +102,7 @@ bool Planar3DOverlay::findRayIntersection(const glm::vec3& origin, const glm::ve
}
return intersects;
}
void Planar3DOverlay::writeToClone(Planar3DOverlay* clone) {
Base3DOverlay::writeToClone(clone);
}

View file

@ -40,6 +40,7 @@ public:
virtual bool findRayIntersection(const glm::vec3& origin, const glm::vec3& direction, float& distance, BoxFace& face) const;
protected:
virtual void writeToClone(Planar3DOverlay* clone);
glm::vec2 _dimensions;
};

View file

@ -106,9 +106,8 @@ void Rectangle3DOverlay::setProperties(const QScriptValue &properties) {
Planar3DOverlay::setProperties(properties);
}
Rectangle3DOverlay* Rectangle3DOverlay::createClone() {
Rectangle3DOverlay* clone = new Rectangle3DOverlay();
writeToClone(clone);
return clone;
}

View file

@ -21,6 +21,8 @@ public:
~Rectangle3DOverlay();
virtual void render(RenderArgs* args);
virtual void setProperties(const QScriptValue& properties);
virtual Rectangle3DOverlay* createClone();
};

View file

@ -70,3 +70,9 @@ void Sphere3DOverlay::render(RenderArgs* args) {
}
}
Sphere3DOverlay* Sphere3DOverlay::createClone() {
Sphere3DOverlay* clone = new Sphere3DOverlay();
writeToClone(clone);
return clone;
}

View file

@ -20,6 +20,8 @@ public:
Sphere3DOverlay();
~Sphere3DOverlay();
virtual void render(RenderArgs* args);
virtual Sphere3DOverlay* createClone();
};

View file

@ -179,4 +179,12 @@ void Text3DOverlay::setProperties(const QScriptValue& properties) {
}
Text3DOverlay* Text3DOverlay::createClone() {
Text3DOverlay* clone = new Text3DOverlay();
writeToClone(clone);
return clone;
}
void Text3DOverlay::writeToClone(Text3DOverlay* clone) {
Planar3DOverlay::writeToClone(clone);
}

View file

@ -48,7 +48,10 @@ public:
virtual void setProperties(const QScriptValue& properties);
virtual Text3DOverlay* createClone();
private:
virtual void writeToClone(Text3DOverlay* clone);
void enableClipPlane(GLenum plane, float x, float y, float z, float w);
QString _text;

View file

@ -125,4 +125,12 @@ void TextOverlay::setProperties(const QScriptValue& properties) {
}
}
TextOverlay* TextOverlay::createClone() {
TextOverlay* clone = new TextOverlay();
writeToClone(clone);
return clone;
}
void TextOverlay::writeToClone(TextOverlay* clone) {
Overlay2D::writeToClone(clone);
}

View file

@ -52,8 +52,10 @@ public:
void setFontSize(int fontSize) { _fontSize = fontSize; }
virtual void setProperties(const QScriptValue& properties);
virtual TextOverlay* createClone();
private:
virtual void writeToClone(TextOverlay* clone);
QString _text;
xColor _backgroundColor;

View file

@ -108,3 +108,7 @@ bool Volume3DOverlay::findRayIntersection(const glm::vec3& origin, const glm::ve
}
return false;
}
void Volume3DOverlay::writeToClone(Volume3DOverlay* clone) {
Base3DOverlay::writeToClone(clone);
}

View file

@ -42,6 +42,7 @@ public:
virtual bool findRayIntersection(const glm::vec3& origin, const glm::vec3& direction, float& distance, BoxFace& face) const;
protected:
virtual void writeToClone(Volume3DOverlay* clone);
glm::vec3 _dimensions;
};