|
1 | 1 | #include "hydra_visualizer/adapters/mesh_color.h" |
2 | 2 |
|
3 | 3 | #include <config_utilities/config.h> |
| 4 | +#include <config_utilities/types/eigen_matrix.h> |
| 5 | +#include <config_utilities/validation.h> |
4 | 6 |
|
5 | 7 | #include "hydra_visualizer/color/color_parsing.h" |
6 | 8 |
|
7 | 9 | namespace hydra { |
| 10 | +namespace { |
| 11 | + |
| 12 | +static const auto splt_reg = |
| 13 | + config::RegistrationWithConfig<MeshColoring, |
| 14 | + SplitMeshColoring, |
| 15 | + SplitMeshColoring::Config>("SplitMeshColoring"); |
| 16 | + |
| 17 | +} |
8 | 18 |
|
9 | 19 | using spark_dsg::Color; |
10 | 20 | using spark_dsg::Mesh; |
@@ -124,6 +134,35 @@ void SeenDurationMeshColoring::setMaxDuration(spark_dsg::Mesh::Timestamp max) { |
124 | 134 | max_ = max; |
125 | 135 | } |
126 | 136 |
|
| 137 | +void declare_config(SplitMeshColoring::Config& config) { |
| 138 | + using namespace config; |
| 139 | + name("SplitMeshColoring::Config"); |
| 140 | + config.coloring.setOptional(); |
| 141 | + field(config.coloring, "coloring"); |
| 142 | + field(config.normal, "normal"); |
| 143 | + field(config.origin, "origin"); |
| 144 | + field(config.default_color, "default_color"); |
| 145 | +} |
| 146 | + |
| 147 | +SplitMeshColoring::SplitMeshColoring(const Config& config) |
| 148 | + : config(config::checkValid(config)), coloring_(config.coloring.create()) {} |
| 149 | + |
| 150 | +void SplitMeshColoring::setMesh(const Mesh& mesh) { |
| 151 | + if (coloring_) { |
| 152 | + coloring_->setMesh(mesh); |
| 153 | + } |
| 154 | +} |
| 155 | + |
| 156 | +Color SplitMeshColoring::getVertexColor(const Mesh& mesh, size_t i) const { |
| 157 | + const auto& pos = mesh.pos(i); |
| 158 | + const auto dist = config.normal.dot(pos - config.origin); |
| 159 | + if (dist >= 0.0f && coloring_) { |
| 160 | + return coloring_->getVertexColor(mesh, i); |
| 161 | + } |
| 162 | + |
| 163 | + return mesh.has_colors ? mesh.color(i) : config.default_color; |
| 164 | +} |
| 165 | + |
127 | 166 | MeshColorAdapter::MeshColorAdapter(const Mesh& mesh, MeshColoring::ConstPtr coloring) |
128 | 167 | : mesh(mesh), coloring_(std::move(coloring)) { |
129 | 168 | if (coloring_) { |
|
0 commit comments