From 8237674092dd22fe4485faf6fe3c198b02b530ff Mon Sep 17 00:00:00 2001 From: Nicholas Sharp Date: Tue, 24 Dec 2024 16:33:38 -0500 Subject: [PATCH] templated texture options for scalars too --- include/polyscope/surface_scalar_quantity.h | 8 +++++--- src/surface_scalar_quantity.cpp | 9 ++++++--- 2 files changed, 11 insertions(+), 6 deletions(-) diff --git a/include/polyscope/surface_scalar_quantity.h b/include/polyscope/surface_scalar_quantity.h index 3d73c8eb..80260f11 100644 --- a/include/polyscope/surface_scalar_quantity.h +++ b/include/polyscope/surface_scalar_quantity.h @@ -10,6 +10,7 @@ #include "polyscope/render/engine.h" #include "polyscope/scalar_quantity.h" #include "polyscope/surface_mesh.h" +#include "polyscope/texture_map_quantity.h" namespace polyscope { @@ -25,6 +26,7 @@ class SurfaceScalarQuantity : public SurfaceMeshQuantity, public ScalarQuantity< virtual void draw() override; virtual void buildCustomUI() override; + virtual void buildSurfaceScalarOptionsUI() {}; virtual std::string niceName() override; virtual void refresh() override; @@ -117,20 +119,20 @@ class SurfaceCornerScalarQuantity : public SurfaceScalarQuantity { // ========== Texture Scalar ========== // ======================================================== -class SurfaceTextureScalarQuantity : public SurfaceScalarQuantity { +class SurfaceTextureScalarQuantity : public SurfaceScalarQuantity, + public TextureMapQuantity { public: SurfaceTextureScalarQuantity(std::string name, SurfaceMesh& mesh_, SurfaceParameterizationQuantity& param_, size_t dimX, size_t dimY, const std::vector& values_, ImageOrigin origin_, DataType dataType_ = DataType::STANDARD); virtual void createProgram() override; + virtual void buildSurfaceScalarOptionsUI() override; virtual std::shared_ptr getAttributeBuffer() override; protected: SurfaceParameterizationQuantity& param; - size_t dimX, dimY; - ImageOrigin imageOrigin; }; } // namespace polyscope diff --git a/src/surface_scalar_quantity.cpp b/src/surface_scalar_quantity.cpp index 86ace35e..cad35b79 100644 --- a/src/surface_scalar_quantity.cpp +++ b/src/surface_scalar_quantity.cpp @@ -41,6 +41,7 @@ void SurfaceScalarQuantity::buildCustomUI() { if (ImGui::BeginPopup("OptionsPopup")) { buildScalarOptionsUI(); + buildSurfaceScalarOptionsUI(); ImGui::EndPopup(); } @@ -293,8 +294,8 @@ SurfaceTextureScalarQuantity::SurfaceTextureScalarQuantity(std::string name, Sur SurfaceParameterizationQuantity& param_, size_t dimX_, size_t dimY_, const std::vector& values_, ImageOrigin origin_, DataType dataType_) - : SurfaceScalarQuantity(name, mesh_, "vertex", values_, dataType_), param(param_), dimX(dimX_), dimY(dimY_), - imageOrigin(origin_) { + : SurfaceScalarQuantity(name, mesh_, "vertex", values_, dataType_), + TextureMapQuantity(*this, dimX_, dimY_, origin_), param(param_) { values.setTextureSize(dimX, dimY); values.ensureHostBufferPopulated(); hist.buildHistogram(values.data); @@ -334,9 +335,11 @@ void SurfaceTextureScalarQuantity::createProgram() { render::engine->setMaterial(*program, parent.getMaterial()); program->setTextureFromColormap("t_colormap", cMap.get()); - values.getRenderTextureBuffer()->setFilterMode(FilterMode::Linear); + values.getRenderTextureBuffer()->setFilterMode(filterMode.get()); } +void SurfaceTextureScalarQuantity::buildSurfaceScalarOptionsUI() { buildTextureMapOptionsUI(); } + std::shared_ptr SurfaceTextureScalarQuantity::getAttributeBuffer() { exception("unsupported operation -- cannot get attribute buffer for texture scalar quantity [" + this->name + "]"); return std::shared_ptr(nullptr);