93{
94 ImGui::SeparatorText("Geometry Summary");
95 if (ImGui::BeginTable("##GeometrySummary", 5, table_flags)) {
96 ImGui::TableSetupColumn("##SensorColourColumn", ImGuiTableColumnFlags_WidthFixed);
97 ImGui::TableSetupColumn("Sensor", ImGuiTableColumnFlags_WidthFixed);
98 ImGui::TableSetupColumn("X Position", ImGuiTableColumnFlags_WidthStretch);
99 ImGui::TableSetupColumn("Y Position", ImGuiTableColumnFlags_WidthStretch);
100 ImGui::TableSetupColumn("Z Position", ImGuiTableColumnFlags_WidthStretch);
101 ImGui::TableHeadersRow();
102
103 std::size_t row_idx = 0;
104
105 for (const auto& sensor : active_project->observe_sensors()) {
106 ImGui::PushID(static_cast<int>(sensor.get_id()));
107
108 ImGui::TableNextRow();
109 ImGui::TableNextColumn();
110
111 const ImVec4 colour = ImGui::ColorConvertU32ToFloat4(sensor_colours[row_idx]);
112 std::array<float, 4> new_colour = {colour.x, colour.y, colour.z, colour.w};
113 if (ImGui::ColorEdit4(
"##colour", new_colour.
data(), ImGuiColorEditFlags_NoInputs)) {
114 app->notify(ModifySensorColourNotification(
115 active_project->get_id(),
116 sensor.get_id(),
117 {
118 .r = new_colour[0],
119 .g = new_colour[1],
120 .b = new_colour[2],
121 .a = new_colour[3],
122 }
123 ));
124
125 sensor_colours[row_idx] = IM_COL32(
126 static_cast<int>(new_colour[0] * 255.0f),
127 static_cast<int>(new_colour[1] * 255.0f),
128 static_cast<int>(new_colour[2] * 255.0f),
129 static_cast<int>(new_colour[3] * 255.0f)
130 );
131 }
132
133 ImGui::TableNextColumn();
135 ImGui::TextUnformatted(sensor.get_imgui_name());
136
137 Position new_position = sensor.position;
138 bool position_changed = false;
139
140 ImGui::TableNextColumn();
142 position_changed = ImGui::InputFloat("##x", &new_position.x, 0.01f, 1.0f);
143
144 ImGui::TableNextColumn();
146 position_changed = ImGui::InputFloat("##y", &new_position.y, 0.01f, 1.0f) || position_changed;
147
148 ImGui::TableNextColumn();
150 position_changed = ImGui::InputFloat("##z", &new_position.z, 0.01f, 1.0f) || position_changed;
151
152 ImGui::PopID();
153 ++row_idx;
154
155 if (position_changed)
156 app->notify(ModifySensorPositionNotification(active_project->get_id(), sensor.get_id(), new_position));
157 }
158
159 ImGui::EndTable();
160 }
161}