Created class DistanceSwitch and added length() in double precision to PowerScaledCoordinate

This commit is contained in:
Erik Broberg
2016-03-30 19:34:42 -04:00
parent 333e7886db
commit 9d45463e93
10 changed files with 187 additions and 9 deletions

View File

@@ -26,11 +26,13 @@ include(${OPENSPACE_CMAKE_EXT_DIR}/module_definition.cmake)
set(HEADER_FILES
${CMAKE_CURRENT_SOURCE_DIR}/rendering/planet.h
${CMAKE_CURRENT_SOURCE_DIR}/rendering/distanceswitch.h
)
source_group("Header Files" FILES ${HEADER_FILES})
set(SOURCE_FILES
${CMAKE_CURRENT_SOURCE_DIR}/rendering/planet.cpp
${CMAKE_CURRENT_SOURCE_DIR}/rendering/distanceswitch.cpp
)
source_group("Source Files" FILES ${SOURCE_FILES})

View File

@@ -24,7 +24,8 @@
#include <modules/planetbrowsing/planetbrowsingmodule.h>
#include <modules/planetbrowsing/rendering/Planet.h>
#include <modules/planetbrowsing/rendering/planet.h>
#include <modules/planetbrowsing/rendering/distanceswitch.h>
#include <openspace/rendering/renderable.h>
#include <openspace/util/factorymanager.h>
@@ -44,6 +45,7 @@ void PlanetBrowsingModule::internalInitialize() {
ghoul_assert(fRenderable, "Renderable factory was not created");
fRenderable->registerClass<Planet>("Planet");
fRenderable->registerClass<DistanceSwitch>("DistanceSwitch");
}
} // namespace openspace

View File

@@ -0,0 +1,84 @@
/*****************************************************************************************
* *
* OpenSpace *
* *
* Copyright (c) 2014-2016 *
* *
* Permission is hereby granted, free of charge, to any person obtaining a copy of this *
* software and associated documentation files (the "Software"), to deal in the Software *
* without restriction, including without limitation the rights to use, copy, modify, *
* merge, publish, distribute, sublicense, and/or sell copies of the Software, and to *
* permit persons to whom the Software is furnished to do so, subject to the following *
* conditions: *
* *
* The above copyright notice and this permission notice shall be included in all copies *
* or substantial portions of the Software. *
* *
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, *
* INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A *
* PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT *
* HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF *
* CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE *
* OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. *
****************************************************************************************/
// open space includes
#include <modules/planetbrowsing/rendering/distanceswitch.h>
namespace {
const std::string _loggerCat = "DistanceSwitch";
}
namespace openspace {
DistanceSwitch::DistanceSwitch(){
}
DistanceSwitch::~DistanceSwitch() {
}
bool DistanceSwitch::initialize() {
return true;
}
bool DistanceSwitch::deinitialize() {
return true;
}
bool DistanceSwitch::isReady() const {
return true;
}
void DistanceSwitch::render(const RenderData& data) {
pss pssDistanceToCamera = (data.camera.position() - data.position).length();
double distanceToCamera = pssDistanceToCamera.lengthd();
if (distanceToCamera > _maxDistances.back()) {
return;
}
// linear search through nodes to find which Renderable to render
for (int i = 0; i < _renderables.size(); ++i) {
if (distanceToCamera < _maxDistances[i]) {
_renderables[i]->render(data);
return;
}
}
}
void DistanceSwitch::update(const UpdateData& data) {
}
void DistanceSwitch::addSwitchValue(std::shared_ptr<Renderable> renderable, double maxDistance) {
ghoul_assert(maxDistance > _maxDistances.back(), "Renderables must be inserted in ascending order wrt distance");
_renderables.push_back(renderable);
_maxDistances.push_back(maxDistance);
}
} // namespace openspace

View File

@@ -0,0 +1,75 @@
/*****************************************************************************************
* *
* OpenSpace *
* *
* Copyright (c) 2014-2016 *
* *
* Permission is hereby granted, free of charge, to any person obtaining a copy of this *
* software and associated documentation files (the "Software"), to deal in the Software *
* without restriction, including without limitation the rights to use, copy, modify, *
* merge, publish, distribute, sublicense, and/or sell copies of the Software, and to *
* permit persons to whom the Software is furnished to do so, subject to the following *
* conditions: *
* *
* The above copyright notice and this permission notice shall be included in all copies *
* or substantial portions of the Software. *
* *
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, *
* INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A *
* PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT *
* HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF *
* CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE *
* OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. *
****************************************************************************************/
#ifndef __DDLODSWITCH_H__
#define __DDLODSWITCH_H__
// open space includes
#include <openspace/rendering/renderable.h>
#include <openspace/properties/stringproperty.h>
#include <openspace/util/updatestructures.h>
#include <openspace/util/powerscaledcoordinate.h>
#include <openspace/util/powerscaledscalar.h>
#include <vector>
namespace openspace {
/**
Selects a specific Renderable to be used for rendering, based on distance to the
camera
*/
class DistanceSwitch : public Renderable {
public:
DistanceSwitch();
~DistanceSwitch();
bool initialize() override;
bool deinitialize() override;
bool isReady() const override;
/**
Picks the first Renderable with the associated maxDistance greater than the
current distance to the camera
*/
void render(const RenderData& data) override;
void update(const UpdateData& data) override;
/**
Adds a new renderable (first argument) which may be rendered only if the distance
to the camera is less than maxDistance (second argument)
*/
void addSwitchValue(std::shared_ptr<Renderable> renderable, double maxDistance);
private:
std::vector<std::shared_ptr<Renderable>> _renderables;
std::vector <double> _distanceThresholds;
};
} // openspace
#endif //__DDLODSWITCH_H__

View File

@@ -33,8 +33,7 @@ namespace {
namespace openspace {
Planet::Planet(const ghoul::Dictionary& dictionary)
: Renderable(dictionary) {
Planet::Planet(const ghoul::Dictionary& dictionary){
std::string name;
bool success = dictionary.getValue(SceneGraphNode::KeyName, name);
@@ -61,10 +60,6 @@ bool Planet::isReady() const {
return true;
}
void Planet::render(const RenderData& data) {
}
void Planet::update(const UpdateData& data) {
}

View File

@@ -28,12 +28,16 @@
// open space includes
#include <openspace/rendering/renderable.h>
#include <modules/planetbrowsing/rendering/distanceswitch.h>
#include <modules/base/rendering/renderableplanet.h>
//#include <openspace/properties/stringproperty.h>
//#include <openspace/util/updatestructures.h>
namespace openspace {
class Planet : public Renderable {
class Planet : public DistanceSwitch {
public:
Planet(const ghoul::Dictionary& dictionary);
~Planet();
@@ -42,7 +46,6 @@ public:
bool deinitialize() override;
bool isReady() const override;
void render(const RenderData& data) override;
void update(const UpdateData& data) override;
private: