13 auto* rootLayout =
new QVBoxLayout(
this);
14 rootLayout->setContentsMargins(0, 0, 0, 0);
15 rootLayout->setSpacing(0);
17 tabs =
new QTabWidget(
this);
18 rootLayout->addWidget(tabs);
20 setLayout(rootLayout);
25 if (!selectedObject)
return nullptr;
29QFormLayout* ThermalInspectorWidget::createTab(
const QString& title) {
30 auto* page =
new QWidget(tabs);
31 auto* layout =
new QFormLayout(page);
32 layout->setContentsMargins(6, 6, 6, 6);
33 layout->setSpacing(4);
34 tabs->addTab(page, title);
38void ThermalInspectorWidget::addThermalScalar(QFormLayout* target,
40 const ThermalGetter& get,
41 const ThermalSetter& set,
43 const ScalarInitializer& onInit) {
47 auto* body = getBody();
50 [
this, set](
double value) {
51 if (
auto* body = getBody()) {
60 target->addRow(row.getLabel(), row.getEditor());
61 rows.push_back(std::move(row));
64void ThermalInspectorWidget::createUiComponents() {
65 auto* state = createTab(
"State");
66 addThermalScalar(state,
"Temperature",
70 addThermalScalar(state,
"Heat Generation",
75 widget->setRange(-1.0e30, 1.0e30);
76 widget->setDecimals(3);
78 addThermalScalar(state,
"External Flux",
83 widget->setRange(-1.0e18, 1.0e18);
84 widget->setDecimals(3);
86 addThermalScalar(state,
"Entropy",
91 widget->setRange(-1.0e30, 1.0e30);
92 widget->setDecimals(3);
94 addThermalScalar(state,
"Reference Temp",
99 auto* material = createTab(
"Material");
100 addThermalScalar(material,
"Specific Heat",
104 addThermalScalar(material,
"Specific Heat Coeff",
109 widget->setRange(-1.0e3, 1.0e3);
110 widget->setDecimals(8);
112 addThermalScalar(material,
"Thermal Mass",
115 addThermalScalar(material,
"Density",
120 widget->setRange(0.0, 1.0e12);
121 widget->setDecimals(3);
123 addThermalScalar(material,
"Expansion Coeff",
128 widget->setRange(-1.0e3, 1.0e3);
129 widget->setDecimals(8);
132 auto* radiation = createTab(
"Radiation");
133 addThermalScalar(radiation,
"Emissivity",
136 addThermalScalar(radiation,
"Emissivity Coeff",
141 widget->setRange(-1.0e3, 1.0e3);
142 widget->setDecimals(8);
144 addThermalScalar(radiation,
"Absorptivity",
147 addThermalScalar(radiation,
"Absorptivity Coeff",
152 widget->setRange(-1.0e3, 1.0e3);
153 widget->setDecimals(8);
156 auto* transfer = createTab(
"Transfer");
157 addThermalScalar(transfer,
"Convection",
161 addThermalScalar(transfer,
"Conductivity",
165 addThermalScalar(transfer,
"Conductivity Coeff",
170 widget->setRange(-1.0e3, 1.0e3);
171 widget->setDecimals(8);
174 auto* phase = createTab(
"Phase");
175 addThermalScalar(phase,
"Melting Point",
179 addThermalScalar(phase,
"Latent Fusion",
184 widget->setRange(0.0, 1.0e12);
185 widget->setDecimals(3);
187 addThermalScalar(phase,
"Fusion",
192 widget->setRange(0.0, 1.0);
193 widget->setDecimals(4);
195 addThermalScalar(phase,
"Boiling Point",
199 addThermalScalar(phase,
"Latent Vaporization",
204 widget->setRange(0.0, 1.0e12);
205 widget->setDecimals(3);
207 addThermalScalar(phase,
"Vaporization",
212 widget->setRange(0.0, 1.0);
213 widget->setDecimals(4);
218 selectedObject = object;
221 this->setVisible(
true);
222 this->setEnabled(
true);
225 this->setVisible(
false);
230 selectedObject =
nullptr;
231 this->setVisible(
false);
236 this->setVisible(
false);
240 for (
auto& row : rows) {
float thermalMassFraction
float linearExpansionCoeff
float latentHeatVaporization
float vaporizationProgress
float specificHeatTempCoeff
float absorptivityTempCoeff
float conductivityTempCoeff
float emissivityTempCoeff
Abstract base class for inspector panel sections.
Physics::PhysicsBody * getPhysicsBody() const