42 public vcl::TrackBallViewerDrawer<DerivedRenderApp>
52 virtual void onDraw(
vcl::uint viewId)
override
58 ImGui::Begin(
"Meshes");
66 ImVec2(ImGui::GetContentRegionAvail().x, 260),
76 std::dynamic_pointer_cast<vcl::AbstractDrawableMesh>(
77 Base::mDrawList->at(mMeshIndex));
86 ImGui::Text(
"Render Mode:");
92 bool pbrMode = pbrSettings.pbrMode;
93 ImGui::SetNextItemWidth(80);
94 if (ImGui::BeginCombo(
99 (pbrMode &&
n == 1) || (!pbrMode &&
n == 0);
101 pbrSettings.pbrMode = (
n == 1);
104 ImGui::SetItemDefaultFocus();
109 ImGui::BeginDisabled(!pbrMode);
113 ImGui::Text(
"Exposure:");
115 float exposure = pbrSettings.exposure;
116 if (ImGui::SliderFloat(
123 pbrSettings.exposure = exposure;
126 ImGui::Text(
"Tone mapping:");
128 uint toneMapping = toUnderlying(pbrSettings.toneMapping);
131 PBRViewerSettings::TONE_MAPPING_STRINGS;
132 if (ImGui::BeginCombo(
135 toUnderlying(PBRViewerSettings::ToneMapping::COUNT);
137 bool isSelected = toneMapping ==
n;
138 if (ImGui::Selectable(
140 pbrSettings.toneMapping =
141 static_cast<PBRViewerSettings::ToneMapping
>(
n);
144 ImGui::SetItemDefaultFocus();
151 "Image Based Lighting",
153 return pbrSettings.imageBasedLighting;
156 pbrSettings.imageBasedLighting =
ibl;
161 "Render Background Panorama",
163 return pbrSettings.renderBackgroundPanorama;
166 pbrSettings.renderBackgroundPanorama =
renderBg;
169 ImGui::EndDisabled();
170 if (pbrSettings.pbrMode) {
171 Base::setPbrSettings(pbrSettings);
184 if (
button == MouseButton::RIGHT) {
185 this->readIdRequest(x, y, [&](
uint id) {
190 std::cout <<
"Selected ID: " <<
id << std::endl;
200 if (!Base::mDrawList || Base::mDrawList->empty()) {
201 ImGui::Text(
"No objects loaded");
208 ImGui::TableSetupColumn(
211 for (
auto& d : *(Base::mDrawList)) {
213 ImGui::TableNextRow();
217 ImGui::TableSetColumnIndex(0);
229 ImGui::TableSetColumnIndex(1);
232 bool isSelected = (mMeshIndex ==
meshId - 1);
233 if (ImGui::Selectable(
242 ImGui::BeginTooltip();
243 ImGui::Text(
"%s",
drawable.info().c_str());
252 static void drawMeshPointSettings(
258 ImGui::BeginDisabled(!settings.
canPoints(VISIBLE));
271 ImGui::Text(
"Shape:");
276 return settings.
isPoints(SHAPE_CIRCLE);
286 return settings.
isPoints(SHAPE_PIXEL);
294 ImGui::Text(
"Shading:");
296 ImGui::BeginDisabled(!settings.
canPoints(SHADING_VERT));
300 return settings.
isPoints(SHADING_VERT);
307 ImGui::EndDisabled();
311 return settings.
isPoints(SHADING_NONE);
319 ImGui::Text(
"Color:");
330 int idx = std::distance(
336 ImGui::SetNextItemWidth(-40);
339 const bool selected = (
n ==
idx);
343 ImGui::BeginDisabled(!settings.
canPoints(COLOR_VERTEX));
346 ImGui::EndDisabled();
349 ImGui::BeginDisabled(!settings.
canPoints(COLOR_MESH));
352 ImGui::EndDisabled();
358 default:
assert(
false);
break;
361 ImGui::SetItemDefaultFocus();
367 ImGui::BeginDisabled(!settings.
isPoints(COLOR_USER));
371 return settings.pointUserColor();
374 settings.setPointsUserColor(c);
377 ImGui::EndDisabled();
380 ImGui::Text(
"Size:");
383 ImGui::SetNextItemWidth(-10);
387 return settings.pointWidth();
390 settings.setPointsWidth(v);
395 ImGui::EndDisabled();
398 static void drawMeshSurfaceSettings(
404 ImGui::BeginDisabled(!settings.
canSurface(VISIBLE));
421 ImGui::Text(
"Shading:");
426 return settings.
isSurface(SHADING_SMOOTH);
455 toUnderlying(COUNT) - 4;
457 ImGui::Text(
"Color:");
460 "Vertex",
"Face",
"Mesh",
"PerVertexTex",
"PerWedgeTex",
"User"};
472 int idx = std::distance(
477 ImGui::SetNextItemWidth(-40);
480 const bool selected = (
n ==
idx);
484 ImGui::BeginDisabled(!settings.
canSurface(COLOR_VERTEX));
487 ImGui::EndDisabled();
490 ImGui::BeginDisabled(!settings.
canSurface(COLOR_FACE));
493 ImGui::EndDisabled();
496 ImGui::BeginDisabled(!settings.
canSurface(COLOR_MESH));
499 ImGui::EndDisabled();
502 ImGui::BeginDisabled(
506 ImGui::EndDisabled();
509 ImGui::BeginDisabled(!settings.
canSurface(COLOR_WEDGE_TEX));
512 ImGui::EndDisabled();
518 default:
assert(
false);
break;
521 ImGui::SetItemDefaultFocus();
527 ImGui::BeginDisabled(!settings.
isSurface(COLOR_USER));
531 return settings.surfaceUserColor();
534 settings.setSurfaceUserColor(c);
537 ImGui::EndDisabled();
539 ImGui::EndDisabled();
542 static void drawMeshWireframeSettings(
564 ImGui::Text(
"Shading:");
587 ImGui::Text(
"Color:");
597 int idx = std::distance(
602 ImGui::SetNextItemWidth(-40);
605 const bool selected = (
n ==
idx);
609 ImGui::BeginDisabled(!settings.
canWireframe(COLOR_VERTEX));
612 ImGui::EndDisabled();
615 ImGui::BeginDisabled(!settings.
canWireframe(COLOR_MESH));
618 ImGui::EndDisabled();
624 default:
assert(
false);
break;
627 ImGui::SetItemDefaultFocus();
633 ImGui::BeginDisabled(!settings.
isWireframe(COLOR_USER));
637 return settings.wireframeUserColor();
640 settings.setWireframeUserColor(c);
643 ImGui::EndDisabled();
646 ImGui::Text(
"Size:");
649 ImGui::SetNextItemWidth(-10);
653 return settings.wireframeWidth();
656 settings.setWireframeWidth(v);
661 ImGui::EndDisabled();
664 static void drawMeshEdgeSettings(
670 ImGui::BeginDisabled(!settings.
canEdges(VISIBLE));
676 return settings.
isEdges(VISIBLE);
684 (settings.
isEdges(SHADING_SMOOTH) + settings.
isEdges(SHADING_FLAT) +
685 settings.
isEdges(SHADING_NONE)) == 1);
686 ImGui::Text(
"Shading:");
688 ImGui::BeginDisabled(!settings.
canEdges(SHADING_SMOOTH));
692 return settings.
isEdges(SHADING_SMOOTH);
698 ImGui::EndDisabled();
700 ImGui::BeginDisabled(!settings.
canEdges(SHADING_FLAT));
704 return settings.
isEdges(SHADING_FLAT);
710 ImGui::EndDisabled();
712 ImGui::BeginDisabled(!settings.
canEdges(SHADING_NONE));
716 return settings.
isEdges(SHADING_NONE);
722 ImGui::EndDisabled();
725 ImGui::Text(
"Color:");
727 const char*
edgeColorNames[] = {
"Vertex",
"Edge",
"Mesh",
"User"};
729 settings.
isEdges(COLOR_VERTEX),
736 int idx = std::distance(
741 ImGui::SetNextItemWidth(-40);
744 const bool selected = (
n ==
idx);
748 ImGui::BeginDisabled(!settings.
canEdges(COLOR_VERTEX));
751 ImGui::EndDisabled();
754 ImGui::BeginDisabled(!settings.
canEdges(COLOR_EDGE));
757 ImGui::EndDisabled();
760 ImGui::BeginDisabled(!settings.
canEdges(COLOR_MESH));
763 ImGui::EndDisabled();
769 default:
assert(
false);
break;
772 ImGui::SetItemDefaultFocus();
778 ImGui::BeginDisabled(!settings.
isEdges(COLOR_USER));
782 return settings.edgesUserColor();
785 settings.setEdgesUserColor(c);
788 ImGui::EndDisabled();
791 ImGui::Text(
"Size:");
794 ImGui::SetNextItemWidth(-10);
798 return settings.edgesWidth();
801 settings.setEdgesWidth(v);
806 ImGui::EndDisabled();
815 const auto settings =
drawable.renderSettings();
823 ImGui::BeginTabItem(
"Points")) {
829 if (
newSettings.canSurface(MRI::Surface::VISIBLE)) {
830 if (ImGui::BeginTabItem(
"Surface")) {
834 if (ImGui::BeginTabItem(
"Wireframe")) {
842 ImGui::BeginTabItem(
"Edges")) {