mirror of
https://thingvellir.net/git/overte
synced 2025-03-27 23:52:03 +01:00
Fix instantiating abstract class when creating visual pick result for pointers
This commit is contained in:
parent
5dbebd4aae
commit
eca31e7a99
8 changed files with 22 additions and 1 deletions
|
@ -35,6 +35,11 @@ void LaserPointer::editRenderStatePath(const std::string& state, const QVariant&
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
PickResultPointer LaserPointer::getPickResultCopy(const PickResultPointer& pickResult) const {
|
||||||
|
auto rayPickResult = std::static_pointer_cast<RayPickResult>(pickResult);
|
||||||
|
return std::make_shared<RayPickResult>(*rayPickResult.get());
|
||||||
|
}
|
||||||
|
|
||||||
QVariantMap LaserPointer::toVariantMap() const {
|
QVariantMap LaserPointer::toVariantMap() const {
|
||||||
QVariantMap qVariantMap;
|
QVariantMap qVariantMap;
|
||||||
|
|
||||||
|
|
|
@ -47,6 +47,8 @@ public:
|
||||||
static std::shared_ptr<StartEndRenderState> buildRenderState(const QVariantMap& propMap);
|
static std::shared_ptr<StartEndRenderState> buildRenderState(const QVariantMap& propMap);
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
PickResultPointer getPickResultCopy(const PickResultPointer& pickResult) const override;
|
||||||
|
|
||||||
void editRenderStatePath(const std::string& state, const QVariant& pathProps) override;
|
void editRenderStatePath(const std::string& state, const QVariant& pathProps) override;
|
||||||
|
|
||||||
glm::vec3 getPickOrigin(const PickResultPointer& pickResult) const override;
|
glm::vec3 getPickOrigin(const PickResultPointer& pickResult) const override;
|
||||||
|
|
|
@ -30,6 +30,11 @@ ParabolaPointer::ParabolaPointer(const QVariant& rayProps, const RenderStateMap&
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
PickResultPointer ParabolaPointer::getPickResultCopy(const PickResultPointer& pickResult) const {
|
||||||
|
auto stylusPickResult = std::static_pointer_cast<ParabolaPickResult>(pickResult);
|
||||||
|
return std::make_shared<ParabolaPickResult>(*stylusPickResult.get());
|
||||||
|
}
|
||||||
|
|
||||||
void ParabolaPointer::editRenderStatePath(const std::string& state, const QVariant& pathProps) {
|
void ParabolaPointer::editRenderStatePath(const std::string& state, const QVariant& pathProps) {
|
||||||
auto renderState = std::static_pointer_cast<RenderState>(_renderStates[state]);
|
auto renderState = std::static_pointer_cast<RenderState>(_renderStates[state]);
|
||||||
if (renderState) {
|
if (renderState) {
|
||||||
|
|
|
@ -102,6 +102,8 @@ public:
|
||||||
static std::shared_ptr<StartEndRenderState> buildRenderState(const QVariantMap& propMap);
|
static std::shared_ptr<StartEndRenderState> buildRenderState(const QVariantMap& propMap);
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
virtual PickResultPointer getPickResultCopy(const PickResultPointer& pickResult) const override;
|
||||||
|
|
||||||
void editRenderStatePath(const std::string& state, const QVariant& pathProps) override;
|
void editRenderStatePath(const std::string& state, const QVariant& pathProps) override;
|
||||||
|
|
||||||
glm::vec3 getPickOrigin(const PickResultPointer& pickResult) const override;
|
glm::vec3 getPickOrigin(const PickResultPointer& pickResult) const override;
|
||||||
|
|
|
@ -147,6 +147,11 @@ bool StylusPointer::shouldTrigger(const PickResultPointer& pickResult) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
PickResultPointer StylusPointer::getPickResultCopy(const PickResultPointer& pickResult) const {
|
||||||
|
auto stylusPickResult = std::static_pointer_cast<StylusPickResult>(pickResult);
|
||||||
|
return std::make_shared<StylusPickResult>(*stylusPickResult.get());
|
||||||
|
}
|
||||||
|
|
||||||
Pointer::PickedObject StylusPointer::getHoveredObject(const PickResultPointer& pickResult) {
|
Pointer::PickedObject StylusPointer::getHoveredObject(const PickResultPointer& pickResult) {
|
||||||
auto stylusPickResult = std::static_pointer_cast<const StylusPickResult>(pickResult);
|
auto stylusPickResult = std::static_pointer_cast<const StylusPickResult>(pickResult);
|
||||||
if (!stylusPickResult) {
|
if (!stylusPickResult) {
|
||||||
|
|
|
@ -42,6 +42,7 @@ protected:
|
||||||
Buttons getPressedButtons(const PickResultPointer& pickResult) override;
|
Buttons getPressedButtons(const PickResultPointer& pickResult) override;
|
||||||
bool shouldHover(const PickResultPointer& pickResult) override;
|
bool shouldHover(const PickResultPointer& pickResult) override;
|
||||||
bool shouldTrigger(const PickResultPointer& pickResult) override;
|
bool shouldTrigger(const PickResultPointer& pickResult) override;
|
||||||
|
virtual PickResultPointer getPickResultCopy(const PickResultPointer& pickResult) const override;
|
||||||
|
|
||||||
PointerEvent buildPointerEvent(const PickedObject& target, const PickResultPointer& pickResult, const std::string& button = "", bool hover = true) override;
|
PointerEvent buildPointerEvent(const PickedObject& target, const PickResultPointer& pickResult, const std::string& button = "", bool hover = true) override;
|
||||||
|
|
||||||
|
|
|
@ -69,7 +69,7 @@ void Pointer::update(unsigned int pointerID) {
|
||||||
withReadLock([&] {
|
withReadLock([&] {
|
||||||
auto pickResult = getPrevPickResult();
|
auto pickResult = getPrevPickResult();
|
||||||
// Pointer needs its own PickResult object so it doesn't modify the cached pick result
|
// Pointer needs its own PickResult object so it doesn't modify the cached pick result
|
||||||
auto visualPickResult = getVisualPickResult(std::make_shared<PickResult>(*pickResult.get()));
|
auto visualPickResult = getVisualPickResult(getPickResultCopy(pickResult));
|
||||||
updateVisuals(visualPickResult);
|
updateVisuals(visualPickResult);
|
||||||
generatePointerEvents(pointerID, visualPickResult);
|
generatePointerEvents(pointerID, visualPickResult);
|
||||||
});
|
});
|
||||||
|
|
|
@ -91,6 +91,7 @@ protected:
|
||||||
|
|
||||||
virtual bool shouldHover(const PickResultPointer& pickResult) { return true; }
|
virtual bool shouldHover(const PickResultPointer& pickResult) { return true; }
|
||||||
virtual bool shouldTrigger(const PickResultPointer& pickResult) { return true; }
|
virtual bool shouldTrigger(const PickResultPointer& pickResult) { return true; }
|
||||||
|
virtual PickResultPointer getPickResultCopy(const PickResultPointer& pickResult) const = 0;
|
||||||
virtual PickResultPointer getVisualPickResult(const PickResultPointer& pickResult) { return pickResult; };
|
virtual PickResultPointer getVisualPickResult(const PickResultPointer& pickResult) { return pickResult; };
|
||||||
|
|
||||||
static const float POINTER_MOVE_DELAY;
|
static const float POINTER_MOVE_DELAY;
|
||||||
|
|
Loading…
Reference in a new issue