mirror of
https://github.com/overte-org/overte.git
synced 2025-08-14 16:29:40 +02:00
added clone functionality to Overlays:
Overlays.cloneOverlay(OverlayID)
This commit is contained in:
parent
7e36c51edc
commit
709ad84933
36 changed files with 181 additions and 14 deletions
|
@ -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());
|
||||
}
|
||||
|
|
|
@ -54,6 +54,7 @@ public:
|
|||
}
|
||||
|
||||
protected:
|
||||
virtual void writeToClone(Base3DOverlay* clone);
|
||||
void drawDashedLine(const glm::vec3& start, const glm::vec3& end);
|
||||
|
||||
glm::vec3 _position;
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -102,3 +102,9 @@ void Cube3DOverlay::render(RenderArgs* args) {
|
|||
delete glower;
|
||||
}
|
||||
}
|
||||
|
||||
Cube3DOverlay* Cube3DOverlay::createClone() {
|
||||
Cube3DOverlay* clone = new Cube3DOverlay();
|
||||
writeToClone(clone);
|
||||
return clone;
|
||||
}
|
||||
|
|
|
@ -20,6 +20,8 @@ public:
|
|||
Cube3DOverlay();
|
||||
~Cube3DOverlay();
|
||||
virtual void render(RenderArgs* args);
|
||||
|
||||
virtual Cube3DOverlay* createClone();
|
||||
};
|
||||
|
||||
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
|
|
@ -29,7 +29,11 @@ public:
|
|||
|
||||
virtual void setProperties(const QScriptValue& properties);
|
||||
|
||||
virtual Line3DOverlay* createClone();
|
||||
|
||||
protected:
|
||||
virtual void writeToClone(Line3DOverlay* clone);
|
||||
|
||||
glm::vec3 _end;
|
||||
};
|
||||
|
||||
|
|
|
@ -48,3 +48,9 @@ void LocalModelsOverlay::render(RenderArgs* args) {
|
|||
|
||||
}
|
||||
}
|
||||
|
||||
LocalModelsOverlay* LocalModelsOverlay::createClone() {
|
||||
LocalModelsOverlay* clone = new LocalModelsOverlay(Application::getInstance()->getEntityClipboardRenderer());
|
||||
writeToClone(clone);
|
||||
return clone;
|
||||
}
|
||||
|
|
|
@ -25,6 +25,8 @@ public:
|
|||
virtual void update(float deltatime);
|
||||
virtual void render(RenderArgs* args);
|
||||
|
||||
virtual LocalModelsOverlay* createClone();
|
||||
|
||||
private:
|
||||
EntityTreeRenderer* _entityTreeRenderer;
|
||||
};
|
||||
|
|
|
@ -103,3 +103,8 @@ void LocalVoxelsOverlay::setProperties(const QScriptValue &properties) {
|
|||
}
|
||||
}
|
||||
|
||||
LocalVoxelsOverlay* LocalVoxelsOverlay::createClone() {
|
||||
LocalVoxelsOverlay* clone = new LocalVoxelsOverlay();
|
||||
writeToClone(clone);
|
||||
return clone;
|
||||
}
|
||||
|
|
|
@ -39,6 +39,7 @@ public:
|
|||
|
||||
virtual void setProperties(const QScriptValue& properties);
|
||||
|
||||
virtual LocalVoxelsOverlay* createClone();
|
||||
private:
|
||||
static QMap<QString, WeakVoxelSystemPointer> _voxelSystemMap; // treeName/voxelSystem
|
||||
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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());
|
||||
}
|
||||
|
|
|
@ -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
|
||||
};
|
||||
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -102,3 +102,7 @@ bool Planar3DOverlay::findRayIntersection(const glm::vec3& origin, const glm::ve
|
|||
}
|
||||
return intersects;
|
||||
}
|
||||
|
||||
void Planar3DOverlay::writeToClone(Planar3DOverlay* clone) {
|
||||
Base3DOverlay::writeToClone(clone);
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
};
|
||||
|
||||
|
|
|
@ -106,9 +106,8 @@ void Rectangle3DOverlay::setProperties(const QScriptValue &properties) {
|
|||
Planar3DOverlay::setProperties(properties);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
Rectangle3DOverlay* Rectangle3DOverlay::createClone() {
|
||||
Rectangle3DOverlay* clone = new Rectangle3DOverlay();
|
||||
writeToClone(clone);
|
||||
return clone;
|
||||
}
|
||||
|
|
|
@ -21,6 +21,8 @@ public:
|
|||
~Rectangle3DOverlay();
|
||||
virtual void render(RenderArgs* args);
|
||||
virtual void setProperties(const QScriptValue& properties);
|
||||
|
||||
virtual Rectangle3DOverlay* createClone();
|
||||
};
|
||||
|
||||
|
||||
|
|
|
@ -70,3 +70,9 @@ void Sphere3DOverlay::render(RenderArgs* args) {
|
|||
}
|
||||
|
||||
}
|
||||
|
||||
Sphere3DOverlay* Sphere3DOverlay::createClone() {
|
||||
Sphere3DOverlay* clone = new Sphere3DOverlay();
|
||||
writeToClone(clone);
|
||||
return clone;
|
||||
}
|
||||
|
|
|
@ -20,6 +20,8 @@ public:
|
|||
Sphere3DOverlay();
|
||||
~Sphere3DOverlay();
|
||||
virtual void render(RenderArgs* args);
|
||||
|
||||
virtual Sphere3DOverlay* createClone();
|
||||
};
|
||||
|
||||
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -108,3 +108,7 @@ bool Volume3DOverlay::findRayIntersection(const glm::vec3& origin, const glm::ve
|
|||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
void Volume3DOverlay::writeToClone(Volume3DOverlay* clone) {
|
||||
Base3DOverlay::writeToClone(clone);
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
};
|
||||
|
||||
|
|
Loading…
Reference in a new issue