23#ifndef VCL_IMGUI_MESH_VIEWER_IMGUI_DRAWER_H
24#define VCL_IMGUI_MESH_VIEWER_IMGUI_DRAWER_H
26#include "imgui_helpers.h"
28#include <vclib/render/drawable/drawable_mesh.h>
29#include <vclib/render/drawers/trackball_viewer_drawer.h>
39template<
typename DerivedRenderApp>
41 public vcl::TrackBallViewerDrawer<DerivedRenderApp>
51 virtual void onDraw(
vcl::uint viewId)
override
57 ImGui::Begin(
"Meshes");
65 ImVec2(ImGui::GetContentRegionAvail().x, 260),
75 std::dynamic_pointer_cast<vcl::AbstractDrawableMesh>(
76 Base::mDrawList->at(mMeshIndex));
91 if (
button == MouseButton::RIGHT) {
92 this->readIdRequest(x, y, [&](
uint id) {
97 std::cout <<
"Selected ID: " <<
id << std::endl;
107 if (!Base::mDrawList || Base::mDrawList->empty()) {
108 ImGui::Text(
"No objects loaded");
115 ImGui::TableSetupColumn(
118 for (
auto& d : *(Base::mDrawList)) {
120 ImGui::TableNextRow();
124 ImGui::TableSetColumnIndex(0);
136 ImGui::TableSetColumnIndex(1);
139 bool isSelected = (mMeshIndex ==
meshId - 1);
140 if (ImGui::Selectable(
149 ImGui::BeginTooltip();
150 ImGui::Text(
"%s",
drawable.info().c_str());
159 static void drawMeshPointSettings(
165 ImGui::BeginDisabled(!settings.
canPoints(VISIBLE));
178 ImGui::Text(
"Shape:");
183 return settings.
isPoints(SHAPE_CIRCLE);
193 return settings.
isPoints(SHAPE_PIXEL);
201 ImGui::Text(
"Shading:");
203 ImGui::BeginDisabled(!settings.
canPoints(SHADING_VERT));
207 return settings.
isPoints(SHADING_VERT);
214 ImGui::EndDisabled();
218 return settings.
isPoints(SHADING_NONE);
226 ImGui::Text(
"Color:");
237 int idx = std::distance(
243 ImGui::SetNextItemWidth(-40);
246 const bool selected = (
n ==
idx);
250 ImGui::BeginDisabled(!settings.
canPoints(COLOR_VERTEX));
253 ImGui::EndDisabled();
256 ImGui::BeginDisabled(!settings.
canPoints(COLOR_MESH));
259 ImGui::EndDisabled();
265 default:
assert(
false);
break;
268 ImGui::SetItemDefaultFocus();
274 ImGui::BeginDisabled(!settings.
isPoints(COLOR_USER));
278 return settings.pointUserColor();
281 settings.setPointsUserColor(c);
284 ImGui::EndDisabled();
287 ImGui::Text(
"Size:");
290 ImGui::SetNextItemWidth(-10);
294 return settings.pointWidth();
297 settings.setPointsWidth(v);
302 ImGui::EndDisabled();
305 static void drawMeshSurfaceSettings(
311 ImGui::BeginDisabled(!settings.
canSurface(VISIBLE));
328 ImGui::Text(
"Shading:");
333 return settings.
isSurface(SHADING_SMOOTH);
361 ImGui::Text(
"Color:");
364 "Vertex",
"Face",
"Mesh",
"PerVertexTex",
"PerWedgeTex",
"User"};
375 int idx = std::distance(
380 ImGui::SetNextItemWidth(-40);
383 const bool selected = (
n ==
idx);
387 ImGui::BeginDisabled(!settings.
canSurface(COLOR_VERTEX));
390 ImGui::EndDisabled();
393 ImGui::BeginDisabled(!settings.
canSurface(COLOR_FACE));
396 ImGui::EndDisabled();
399 ImGui::BeginDisabled(!settings.
canSurface(COLOR_MESH));
402 ImGui::EndDisabled();
405 ImGui::BeginDisabled(
409 ImGui::EndDisabled();
412 ImGui::BeginDisabled(!settings.
canSurface(COLOR_WEDGE_TEX));
415 ImGui::EndDisabled();
421 default:
assert(
false);
break;
424 ImGui::SetItemDefaultFocus();
430 ImGui::BeginDisabled(!settings.
isSurface(COLOR_USER));
434 return settings.surfaceUserColor();
437 settings.setSurfaceUserColor(c);
440 ImGui::EndDisabled();
442 ImGui::EndDisabled();
445 static void drawMeshWireframeSettings(
467 ImGui::Text(
"Shading:");
490 ImGui::Text(
"Color:");
500 int idx = std::distance(
505 ImGui::SetNextItemWidth(-40);
508 const bool selected = (
n ==
idx);
512 ImGui::BeginDisabled(!settings.
canWireframe(COLOR_VERTEX));
515 ImGui::EndDisabled();
518 ImGui::BeginDisabled(!settings.
canWireframe(COLOR_MESH));
521 ImGui::EndDisabled();
527 default:
assert(
false);
break;
530 ImGui::SetItemDefaultFocus();
536 ImGui::BeginDisabled(!settings.
isWireframe(COLOR_USER));
540 return settings.wireframeUserColor();
543 settings.setWireframeUserColor(c);
546 ImGui::EndDisabled();
548 ImGui::EndDisabled();
551 static void drawMeshEdgeSettings(
557 ImGui::BeginDisabled(!settings.
canEdges(VISIBLE));
563 return settings.
isEdges(VISIBLE);
571 (settings.
isEdges(SHADING_SMOOTH) + settings.
isEdges(SHADING_FLAT) +
572 settings.
isEdges(SHADING_NONE)) == 1);
573 ImGui::Text(
"Shading:");
575 ImGui::BeginDisabled(!settings.
canEdges(SHADING_SMOOTH));
579 return settings.
isEdges(SHADING_SMOOTH);
585 ImGui::EndDisabled();
587 ImGui::BeginDisabled(!settings.
canEdges(SHADING_FLAT));
591 return settings.
isEdges(SHADING_FLAT);
597 ImGui::EndDisabled();
599 ImGui::BeginDisabled(!settings.
canEdges(SHADING_NONE));
603 return settings.
isEdges(SHADING_NONE);
609 ImGui::EndDisabled();
612 ImGui::Text(
"Color:");
614 const char*
edgeColorNames[] = {
"Vertex",
"Edge",
"Mesh",
"User"};
616 settings.
isEdges(COLOR_VERTEX),
623 int idx = std::distance(
628 ImGui::SetNextItemWidth(-40);
631 const bool selected = (
n ==
idx);
635 ImGui::BeginDisabled(!settings.
canEdges(COLOR_VERTEX));
638 ImGui::EndDisabled();
641 ImGui::BeginDisabled(!settings.
canEdges(COLOR_EDGE));
644 ImGui::EndDisabled();
647 ImGui::BeginDisabled(!settings.
canEdges(COLOR_MESH));
650 ImGui::EndDisabled();
656 default:
assert(
false);
break;
659 ImGui::SetItemDefaultFocus();
665 ImGui::BeginDisabled(!settings.
isEdges(COLOR_USER));
669 return settings.edgesUserColor();
672 settings.setEdgesUserColor(c);
675 ImGui::EndDisabled();
677 ImGui::EndDisabled();
686 const auto settings =
drawable.renderSettings();
694 ImGui::BeginTabItem(
"Points")) {
700 if (
newSettings.canSurface(MRI::Surface::VISIBLE)) {
701 if (ImGui::BeginTabItem(
"Surface")) {
705 if (ImGui::BeginTabItem(
"Wireframe")) {
713 ImGui::BeginTabItem(
"Edges")) {
The AbstractDrawableMesh class is the base class for all the drawable meshes in the VCLib render syst...
Definition abstract_drawable_mesh.h:41
A class representing a box in N-dimensional space.
Definition box.h:46
The Color class represents a 32 bit color.
Definition color.h:48
The MeshRenderInfo class is a collection of rendering settings for a Mesh.
Definition mesh_render_info.h:61
Wireframe
List of possible settings for the wireframe primitive.
Definition mesh_render_info.h:165
Surface
List of possible settings for the surface primitive.
Definition mesh_render_info.h:147
Edges
List of possible settings for the edges primitive.
Definition mesh_render_info.h:179
Points
List of possible settings for the points primitive.
Definition mesh_render_info.h:130
The MeshRenderSettings class allows an easy management of render settings of a Mesh....
Definition mesh_render_settings.h:70
bool isPoints(MeshRenderInfo::Points p) const
Returns whether the given points option is set.
Definition mesh_render_settings.h:225
bool canWireframe(MeshRenderInfo::Wireframe w) const
Returns the capability of a given option for the wireframe primitive.
Definition mesh_render_settings.h:177
bool setSurface(MeshRenderInfo::Surface s, bool b=true)
Sets the given shading option of the surface.
Definition mesh_render_settings.h:458
bool setEdges(MeshRenderInfo::Edges e, bool b=true)
Sets the given shading option of the edges.
Definition mesh_render_settings.h:568
bool setPoints(MeshRenderInfo::Points p, bool b=true)
Sets the given shading option of the points.
Definition mesh_render_settings.h:397
bool canSurface(MeshRenderInfo::Surface s) const
Returns the capability of a given option for the surface primitive.
Definition mesh_render_settings.h:165
bool canPoints(MeshRenderInfo::Points p) const
Returns the capability of a given option for the points primitive.
Definition mesh_render_settings.h:153
bool canEdges(MeshRenderInfo::Edges e) const
Returns the capability of a given option for the edges primitive.
Definition mesh_render_settings.h:188
bool isSurface(MeshRenderInfo::Surface s) const
Returns whether the given surface option is set.
Definition mesh_render_settings.h:250
bool isWireframe(MeshRenderInfo::Wireframe w) const
Returns whether the given wireframe option is set.
Definition mesh_render_settings.h:270
bool setWireframe(MeshRenderInfo::Wireframe w, bool b=true)
Sets the given shading option of the wireframe.
Definition mesh_render_settings.h:507
bool isEdges(MeshRenderInfo::Edges e) const
Returns whether the given edges option is set.
Definition mesh_render_settings.h:295
Definition mesh_viewer_imgui_drawer.h:42
constexpr uint UINT_NULL
The UINT_NULL value represent a null value of uint that is the maximum value that can be represented ...
Definition base.h:48