diff --git a/include/openspace/data/dataloader.h b/include/openspace/data/dataloader.h index 73ca6a0e07..22101bb691 100644 --- a/include/openspace/data/dataloader.h +++ b/include/openspace/data/dataloader.h @@ -71,6 +71,8 @@ struct Dataset { /// the dataset float maxPositionComponent = 0.f; + bool isEmpty() const; + int index(std::string_view variableName) const; bool normalizeVariable(std::string_view variableName); glm::vec2 findValueRange(int variableIndex) const; diff --git a/modules/base/rendering/pointcloud/renderablepointcloud.cpp b/modules/base/rendering/pointcloud/renderablepointcloud.cpp index a360b3f91b..bd83bc3044 100644 --- a/modules/base/rendering/pointcloud/renderablepointcloud.cpp +++ b/modules/base/rendering/pointcloud/renderablepointcloud.cpp @@ -1072,12 +1072,12 @@ std::vector RenderablePointCloud::createDataSlice() { } // Colors - if (_hasColorMapFile) { + if (_hasColorMapFile && colorParamIndex > -1) { result.push_back(e.data[colorParamIndex]); } // Size data - if (_hasDatavarSize) { + if (_hasDatavarSize && sizeParamIndex > -1) { // @TODO: Consider more detailed control over the scaling. Currently the value // is multiplied with the value as is. Should have similar mapping properties // as the color mapping diff --git a/src/data/dataloader.cpp b/src/data/dataloader.cpp index bc7fb74543..7234aaa613 100644 --- a/src/data/dataloader.cpp +++ b/src/data/dataloader.cpp @@ -623,6 +623,10 @@ ColorMap loadFileWithCache(std::filesystem::path path) } // namespace color +bool Dataset::isEmpty() const { + return variables.empty() || entries.empty(); +} + int Dataset::index(std::string_view variableName) const { for (const Dataset::Variable& v : variables) { if (v.name == variableName) { diff --git a/src/rendering/colormappingcomponent.cpp b/src/rendering/colormappingcomponent.cpp index c2ce901d4a..ddac7f80dd 100644 --- a/src/rendering/colormappingcomponent.cpp +++ b/src/rendering/colormappingcomponent.cpp @@ -428,6 +428,10 @@ glm::vec4 ColorMappingComponent::colorFromColorMap(float valueToColorFrom) const } void ColorMappingComponent::initializeParameterData(const dataloader::Dataset& dataset) { + if (dataset.isEmpty()) { + return; + } + // Initialize empty ranges based on values in the dataset for (const properties::OptionProperty::Option& option : dataColumn.options()) { int optionIndex = option.value;