41 public vcl::TrackBallViewerDrawer<DerivedRenderApp>
51 virtual void onDraw(
vcl::uint viewId)
override
57 ImGui::Begin(
"Meshes");
65 ImVec2(ImGui::GetContentRegionAvail().x, 260),
74 ImGui::Text(
"Render Mode:");
77 bool pbrMode = Base::isPBREnabled();
78 ImGui::SetNextItemWidth(80);
79 if (ImGui::BeginCombo(
83 bool isSelected = (pbrMode &&
n == 1) || (!pbrMode &&
n == 0);
88 ImGui::SetItemDefaultFocus();
96 std::dynamic_pointer_cast<vcl::AbstractDrawableMesh>(
97 Base::mDrawList->at(mMeshIndex));
112 if (
button == MouseButton::RIGHT) {
113 this->readIdRequest(x, y, [&](
uint id) {
118 std::cout <<
"Selected ID: " <<
id << std::endl;
128 if (!Base::mDrawList || Base::mDrawList->empty()) {
129 ImGui::Text(
"No objects loaded");
136 ImGui::TableSetupColumn(
139 for (
auto& d : *(Base::mDrawList)) {
141 ImGui::TableNextRow();
145 ImGui::TableSetColumnIndex(0);
157 ImGui::TableSetColumnIndex(1);
160 bool isSelected = (mMeshIndex ==
meshId - 1);
161 if (ImGui::Selectable(
170 ImGui::BeginTooltip();
171 ImGui::Text(
"%s",
drawable.info().c_str());
180 static void drawMeshPointSettings(
186 ImGui::BeginDisabled(!settings.
canPoints(VISIBLE));
199 ImGui::Text(
"Shape:");
204 return settings.
isPoints(SHAPE_CIRCLE);
214 return settings.
isPoints(SHAPE_PIXEL);
222 ImGui::Text(
"Shading:");
224 ImGui::BeginDisabled(!settings.
canPoints(SHADING_VERT));
228 return settings.
isPoints(SHADING_VERT);
235 ImGui::EndDisabled();
239 return settings.
isPoints(SHADING_NONE);
247 ImGui::Text(
"Color:");
258 int idx = std::distance(
264 ImGui::SetNextItemWidth(-40);
267 const bool selected = (
n ==
idx);
271 ImGui::BeginDisabled(!settings.
canPoints(COLOR_VERTEX));
274 ImGui::EndDisabled();
277 ImGui::BeginDisabled(!settings.
canPoints(COLOR_MESH));
280 ImGui::EndDisabled();
286 default:
assert(
false);
break;
289 ImGui::SetItemDefaultFocus();
295 ImGui::BeginDisabled(!settings.
isPoints(COLOR_USER));
299 return settings.pointUserColor();
302 settings.setPointsUserColor(c);
305 ImGui::EndDisabled();
308 ImGui::Text(
"Size:");
311 ImGui::SetNextItemWidth(-10);
315 return settings.pointWidth();
318 settings.setPointsWidth(v);
323 ImGui::EndDisabled();
326 static void drawMeshSurfaceSettings(
332 ImGui::BeginDisabled(!settings.
canSurface(VISIBLE));
349 ImGui::Text(
"Shading:");
354 return settings.
isSurface(SHADING_SMOOTH);
383 toUnderlying(COUNT) - 4;
385 ImGui::Text(
"Color:");
388 "Vertex",
"Face",
"Mesh",
"PerVertexTex",
"PerWedgeTex",
"User"};
400 int idx = std::distance(
405 ImGui::SetNextItemWidth(-40);
408 const bool selected = (
n ==
idx);
412 ImGui::BeginDisabled(!settings.
canSurface(COLOR_VERTEX));
415 ImGui::EndDisabled();
418 ImGui::BeginDisabled(!settings.
canSurface(COLOR_FACE));
421 ImGui::EndDisabled();
424 ImGui::BeginDisabled(!settings.
canSurface(COLOR_MESH));
427 ImGui::EndDisabled();
430 ImGui::BeginDisabled(
434 ImGui::EndDisabled();
437 ImGui::BeginDisabled(!settings.
canSurface(COLOR_WEDGE_TEX));
440 ImGui::EndDisabled();
446 default:
assert(
false);
break;
449 ImGui::SetItemDefaultFocus();
455 ImGui::BeginDisabled(!settings.
isSurface(COLOR_USER));
459 return settings.surfaceUserColor();
462 settings.setSurfaceUserColor(c);
465 ImGui::EndDisabled();
467 ImGui::EndDisabled();
470 static void drawMeshWireframeSettings(
492 ImGui::Text(
"Shading:");
515 ImGui::Text(
"Color:");
525 int idx = std::distance(
530 ImGui::SetNextItemWidth(-40);
533 const bool selected = (
n ==
idx);
537 ImGui::BeginDisabled(!settings.
canWireframe(COLOR_VERTEX));
540 ImGui::EndDisabled();
543 ImGui::BeginDisabled(!settings.
canWireframe(COLOR_MESH));
546 ImGui::EndDisabled();
552 default:
assert(
false);
break;
555 ImGui::SetItemDefaultFocus();
561 ImGui::BeginDisabled(!settings.
isWireframe(COLOR_USER));
565 return settings.wireframeUserColor();
568 settings.setWireframeUserColor(c);
571 ImGui::EndDisabled();
574 ImGui::Text(
"Size:");
577 ImGui::SetNextItemWidth(-10);
581 return settings.wireframeWidth();
584 settings.setWireframeWidth(v);
589 ImGui::EndDisabled();
592 static void drawMeshEdgeSettings(
598 ImGui::BeginDisabled(!settings.
canEdges(VISIBLE));
604 return settings.
isEdges(VISIBLE);
612 (settings.
isEdges(SHADING_SMOOTH) + settings.
isEdges(SHADING_FLAT) +
613 settings.
isEdges(SHADING_NONE)) == 1);
614 ImGui::Text(
"Shading:");
616 ImGui::BeginDisabled(!settings.
canEdges(SHADING_SMOOTH));
620 return settings.
isEdges(SHADING_SMOOTH);
626 ImGui::EndDisabled();
628 ImGui::BeginDisabled(!settings.
canEdges(SHADING_FLAT));
632 return settings.
isEdges(SHADING_FLAT);
638 ImGui::EndDisabled();
640 ImGui::BeginDisabled(!settings.
canEdges(SHADING_NONE));
644 return settings.
isEdges(SHADING_NONE);
650 ImGui::EndDisabled();
653 ImGui::Text(
"Color:");
655 const char*
edgeColorNames[] = {
"Vertex",
"Edge",
"Mesh",
"User"};
657 settings.
isEdges(COLOR_VERTEX),
664 int idx = std::distance(
669 ImGui::SetNextItemWidth(-40);
672 const bool selected = (
n ==
idx);
676 ImGui::BeginDisabled(!settings.
canEdges(COLOR_VERTEX));
679 ImGui::EndDisabled();
682 ImGui::BeginDisabled(!settings.
canEdges(COLOR_EDGE));
685 ImGui::EndDisabled();
688 ImGui::BeginDisabled(!settings.
canEdges(COLOR_MESH));
691 ImGui::EndDisabled();
697 default:
assert(
false);
break;
700 ImGui::SetItemDefaultFocus();
706 ImGui::BeginDisabled(!settings.
isEdges(COLOR_USER));
710 return settings.edgesUserColor();
713 settings.setEdgesUserColor(c);
716 ImGui::EndDisabled();
719 ImGui::Text(
"Size:");
722 ImGui::SetNextItemWidth(-10);
726 return settings.edgesWidth();
729 settings.setEdgesWidth(v);
734 ImGui::EndDisabled();
743 const auto settings =
drawable.renderSettings();
751 ImGui::BeginTabItem(
"Points")) {
757 if (
newSettings.canSurface(MRI::Surface::VISIBLE)) {
758 if (ImGui::BeginTabItem(
"Surface")) {
762 if (ImGui::BeginTabItem(
"Wireframe")) {
770 ImGui::BeginTabItem(
"Edges")) {