ReUseX
0.0.5
3D Point Cloud Processing for Building Reuse
Toggle main menu visibility
Loading...
Searching...
No Matches
Solidifier.hpp
Go to the documentation of this file.
1
// SPDX-FileCopyrightText: 2025 Povl Filip Sonne-Frederiksen
2
//
3
// SPDX-License-Identifier: GPL-3.0-or-later
4
5
#pragma once
6
#include "reusex/reconstruction/CellComplex.hpp"
7
8
#include <functional>
9
#include <memory>
10
#include <optional>
11
#include <set>
12
#include <string>
13
#include <unordered_map>
14
#include <utility>
15
#include <vector>
16
17
namespace
reusex::geometry
{
18
25
enum class
SolveStatus
{
26
not_solved
,
27
optimal
,
28
feasible
,
29
infeasible
,
30
unbounded
,
31
time_limit
,
32
iteration_limit
,
33
numerical_error
,
34
error
35
};
36
38
const
char
*
to_string
(
SolveStatus
status);
39
48
enum class
SolverChoice
{
automatic
,
cuopt
,
highs
};
49
52
SolverChoice
parse_solver_choice
(
const
std::string &s);
53
54
struct
SolidifierOptions
{
58
double
time_limit_seconds
= 120.0;
59
61
double
alpha
= 0.04;
62
64
double
mip_gap
= -1.0;
65
72
bool
sectioned
=
true
;
73
77
size_t
sectioned_threshold
= 2000;
78
80
SolverChoice
solver
=
SolverChoice::automatic
;
81
};
82
85
struct
SectionSolveStats
{
86
int
section
= -1;
87
size_t
cells
= 0;
88
size_t
variables
= 0;
89
size_t
constraints
= 0;
90
double
seconds
= 0.0;
91
SolveStatus
status
=
SolveStatus::not_solved
;
92
bool
used_highs_fallback
=
false
;
93
};
94
101
class
Solidifier
{
102
public
:
103
using
Fd
=
CellComplex::Vertex
;
104
using
Cd
=
CellComplex::Vertex
;
105
106
Solidifier
() =
delete
;
107
explicit
Solidifier
(std::shared_ptr<const CellComplex> cc,
108
SolidifierOptions
options =
SolidifierOptions
{});
109
~Solidifier
();
110
111
// Delete copy (contains unique_ptr to incomplete type)
112
Solidifier
(
const
Solidifier
&) =
delete
;
113
Solidifier
&
operator=
(
const
Solidifier
&) =
delete
;
114
115
// Delete move (simpler, could be implemented if needed)
116
Solidifier
(
Solidifier
&&) =
delete
;
117
Solidifier
&
operator=
(
Solidifier
&&) =
delete
;
118
124
std::optional<std::pair<std::unordered_map<Cd, int>,
125
std::unordered_map<Cd, std::set<int>>>>
126
solve
();
127
134
SolveStatus
last_solve_status
()
const
;
135
142
const
std::vector<SectionSolveStats> &
section_stats
()
const
;
143
149
std::pair<Eigen::MatrixXd, Eigen::MatrixXi>
150
toMesh
(std::function<
bool
(
const
Cd
)> filter);
151
152
protected
:
153
// Internal accessor for implementations in separate compilation units
154
std::shared_ptr<const CellComplex>
get_cell_complex
()
const
;
155
156
private
:
157
class
Impl;
158
std::unique_ptr<Impl> pimpl_;
159
};
160
161
}
// namespace reusex::geometry
reusex::geometry::CellComplex::Vertex
boost::graph_traits< Graph >::vertex_descriptor Vertex
Definition
CellComplex.hpp:70
reusex::geometry::Solidifier::Solidifier
Solidifier(Solidifier &&)=delete
reusex::geometry::Solidifier::last_solve_status
SolveStatus last_solve_status() const
Status of the most recent solve() call.
reusex::geometry::Solidifier::toMesh
std::pair< Eigen::MatrixXd, Eigen::MatrixXi > toMesh(std::function< bool(const Cd)> filter)
Convert solved cell complex to mesh.
reusex::geometry::Solidifier::Solidifier
Solidifier()=delete
reusex::geometry::Solidifier::operator=
Solidifier & operator=(Solidifier &&)=delete
reusex::geometry::Solidifier::Solidifier
Solidifier(const Solidifier &)=delete
reusex::geometry::Solidifier::Fd
CellComplex::Vertex Fd
Definition
Solidifier.hpp:103
reusex::geometry::Solidifier::Cd
CellComplex::Vertex Cd
Definition
Solidifier.hpp:104
reusex::geometry::Solidifier::get_cell_complex
std::shared_ptr< const CellComplex > get_cell_complex() const
reusex::geometry::Solidifier::Solidifier
Solidifier(std::shared_ptr< const CellComplex > cc, SolidifierOptions options=SolidifierOptions{})
reusex::geometry::Solidifier::solve
std::optional< std::pair< std::unordered_map< Cd, int >, std::unordered_map< Cd, std::set< int > > > > solve()
Solve the MIP problem for room segmentation.
reusex::geometry::Solidifier::operator=
Solidifier & operator=(const Solidifier &)=delete
reusex::geometry::Solidifier::section_stats
const std::vector< SectionSolveStats > & section_stats() const
Per-section solve diagnostics from the most recent solve().
reusex::geometry::Solidifier::~Solidifier
~Solidifier()
reusex::geometry
Definition
visual_observer.hpp:33
reusex::geometry::to_string
std::string_view to_string(ComponentType type)
reusex::geometry::SolverChoice
SolverChoice
Which MIP backend the Solidifier should use for each (sub)problem.
Definition
Solidifier.hpp:48
reusex::geometry::SolverChoice::automatic
@ automatic
Definition
Solidifier.hpp:48
reusex::geometry::SolverChoice::cuopt
@ cuopt
Definition
Solidifier.hpp:48
reusex::geometry::SolverChoice::highs
@ highs
Definition
Solidifier.hpp:48
reusex::geometry::SolveStatus
SolveStatus
Backend-agnostic classification of the last MIP solve outcome.
Definition
Solidifier.hpp:25
reusex::geometry::SolveStatus::not_solved
@ not_solved
Definition
Solidifier.hpp:26
reusex::geometry::SolveStatus::feasible
@ feasible
Definition
Solidifier.hpp:28
reusex::geometry::SolveStatus::optimal
@ optimal
Definition
Solidifier.hpp:27
reusex::geometry::SolveStatus::numerical_error
@ numerical_error
Definition
Solidifier.hpp:33
reusex::geometry::SolveStatus::iteration_limit
@ iteration_limit
Definition
Solidifier.hpp:32
reusex::geometry::SolveStatus::time_limit
@ time_limit
Definition
Solidifier.hpp:31
reusex::geometry::SolveStatus::infeasible
@ infeasible
Definition
Solidifier.hpp:29
reusex::geometry::SolveStatus::unbounded
@ unbounded
Definition
Solidifier.hpp:30
reusex::geometry::parse_solver_choice
SolverChoice parse_solver_choice(const std::string &s)
Parse a –solver CLI string ("auto"/"cuopt"/"highs") into a SolverChoice.
reusex::error
void error(fmt::format_string< Args... > format, Args &&...args)
Definition
logging.hpp:100
reusex::geometry::SectionSolveStats
Per-section solve diagnostics (issue #226).
Definition
Solidifier.hpp:85
reusex::geometry::SectionSolveStats::section
int section
Section (storey) index.
Definition
Solidifier.hpp:86
reusex::geometry::SectionSolveStats::variables
size_t variables
MIP variables created.
Definition
Solidifier.hpp:88
reusex::geometry::SectionSolveStats::cells
size_t cells
Cells in this section's subproblem.
Definition
Solidifier.hpp:87
reusex::geometry::SectionSolveStats::used_highs_fallback
bool used_highs_fallback
True if HiGHS retried after primary.
Definition
Solidifier.hpp:92
reusex::geometry::SectionSolveStats::constraints
size_t constraints
MIP constraints created.
Definition
Solidifier.hpp:89
reusex::geometry::SectionSolveStats::status
SolveStatus status
Outcome.
Definition
Solidifier.hpp:91
reusex::geometry::SectionSolveStats::seconds
double seconds
Wall-clock solve time.
Definition
Solidifier.hpp:90
reusex::geometry::SolidifierOptions
Definition
Solidifier.hpp:54
reusex::geometry::SolidifierOptions::time_limit_seconds
double time_limit_seconds
Wall-clock time limit for the MIP solve, in seconds.
Definition
Solidifier.hpp:58
reusex::geometry::SolidifierOptions::alpha
double alpha
Weight on the wall/complexity term of the objective (was hardcoded).
Definition
Solidifier.hpp:61
reusex::geometry::SolidifierOptions::sectioned
bool sectioned
Solve the MIP per horizontal section (storey) instead of monolithically, when the arrangement has mor...
Definition
Solidifier.hpp:72
reusex::geometry::SolidifierOptions::solver
SolverChoice solver
Solver backend selection + fallback policy (issue #226).
Definition
Solidifier.hpp:80
reusex::geometry::SolidifierOptions::mip_gap
double mip_gap
Relative MIP gap tolerance. Negative => use the solver default.
Definition
Solidifier.hpp:64
reusex::geometry::SolidifierOptions::sectioned_threshold
size_t sectioned_threshold
Only take the sectioned path when the monolithic problem would have at least this many cells.
Definition
Solidifier.hpp:77
libs
reusex
include
reconstruction
Solidifier.hpp
Generated by
1.17.0