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/viewer_drawer.h>
39template<
typename DerivedRenderApp>
49 virtual void onDraw(
vcl::uint viewId)
override
55 ImGui::Begin(
"Meshes");
63 ImVec2(ImGui::GetContentRegionAvail().x, 260),
73 std::dynamic_pointer_cast<vcl::AbstractDrawableMesh>(
74 Base::mDrawList->at(mMeshIndex));
86 if (!Base::mDrawList || Base::mDrawList->empty()) {
87 ImGui::Text(
"No objects loaded");
94 ImGui::TableSetupColumn(
97 for (
auto& d : *(Base::mDrawList)) {
99 ImGui::TableNextRow();
103 ImGui::TableSetColumnIndex(0);
115 ImGui::TableSetColumnIndex(1);
118 bool isSelected = (mMeshIndex ==
meshId - 1);
119 if (ImGui::Selectable(
128 ImGui::BeginTooltip();
129 ImGui::Text(
"%s",
drawable.info().c_str());
138 static void drawMeshPointSettings(
144 ImGui::BeginDisabled(!settings.
canPoints(VISIBLE));
157 ImGui::Text(
"Shape:");
159 ImGui::BeginDisabled(
true);
167 ImGui::EndDisabled();
169 ImGui::BeginDisabled(
false);
177 ImGui::EndDisabled();
180 ImGui::Text(
"Shading:");
182 ImGui::BeginDisabled(!settings.
canPoints(SHADING_VERT));
186 return settings.
isPoints(SHADING_VERT);
193 ImGui::EndDisabled();
197 return settings.
isPoints(SHADING_NONE);
205 ImGui::Text(
"Color:");
216 int idx = std::distance(
222 ImGui::SetNextItemWidth(-40);
225 const bool selected = (
n ==
idx);
229 ImGui::BeginDisabled(!settings.
canPoints(COLOR_VERTEX));
232 ImGui::EndDisabled();
235 ImGui::BeginDisabled(!settings.
canPoints(COLOR_MESH));
238 ImGui::EndDisabled();
244 default:
assert(
false);
break;
247 ImGui::SetItemDefaultFocus();
253 ImGui::BeginDisabled(!settings.
isPoints(COLOR_USER));
257 return settings.pointUserColor();
260 settings.setPointsUserColor(c);
263 ImGui::EndDisabled();
266 ImGui::Text(
"Size:");
269 ImGui::SetNextItemWidth(-10);
273 return settings.pointWidth();
276 settings.setPointsWidth(v);
281 ImGui::EndDisabled();
284 static void drawMeshSurfaceSettings(
290 ImGui::BeginDisabled(!settings.
canSurface(VISIBLE));
307 ImGui::Text(
"Shading:");
312 return settings.
isSurface(SHADING_SMOOTH);
340 ImGui::Text(
"Color:");
343 "Vertex",
"Face",
"Mesh",
"PerVertexTex",
"PerWedgeTex",
"User"};
354 int idx = std::distance(
359 ImGui::SetNextItemWidth(-40);
362 const bool selected = (
n ==
idx);
366 ImGui::BeginDisabled(!settings.
canSurface(COLOR_VERTEX));
369 ImGui::EndDisabled();
372 ImGui::BeginDisabled(!settings.
canSurface(COLOR_FACE));
375 ImGui::EndDisabled();
378 ImGui::BeginDisabled(!settings.
canSurface(COLOR_MESH));
381 ImGui::EndDisabled();
384 ImGui::BeginDisabled(
388 ImGui::EndDisabled();
391 ImGui::BeginDisabled(!settings.
canSurface(COLOR_WEDGE_TEX));
394 ImGui::EndDisabled();
400 default:
assert(
false);
break;
403 ImGui::SetItemDefaultFocus();
409 ImGui::BeginDisabled(!settings.
isSurface(COLOR_USER));
413 return settings.surfaceUserColor();
416 settings.setSurfaceUserColor(c);
419 ImGui::EndDisabled();
421 ImGui::EndDisabled();
424 static void drawMeshWireframeSettings(
446 ImGui::Text(
"Shading:");
469 ImGui::Text(
"Color:");
479 int idx = std::distance(
484 ImGui::SetNextItemWidth(-40);
487 const bool selected = (
n ==
idx);
491 ImGui::BeginDisabled(!settings.
canWireframe(COLOR_VERTEX));
494 ImGui::EndDisabled();
497 ImGui::BeginDisabled(!settings.
canWireframe(COLOR_MESH));
500 ImGui::EndDisabled();
506 default:
assert(
false);
break;
509 ImGui::SetItemDefaultFocus();
515 ImGui::BeginDisabled(!settings.
isWireframe(COLOR_USER));
519 return settings.wireframeUserColor();
522 settings.setWireframeUserColor(c);
525 ImGui::EndDisabled();
527 ImGui::EndDisabled();
530 static void drawMeshEdgeSettings(
536 ImGui::BeginDisabled(!settings.
canEdges(VISIBLE));
542 return settings.
isEdges(VISIBLE);
550 (settings.
isEdges(SHADING_SMOOTH) + settings.
isEdges(SHADING_FLAT) +
551 settings.
isEdges(SHADING_NONE)) == 1);
552 ImGui::Text(
"Shading:");
557 return settings.
isEdges(SHADING_SMOOTH);
567 return settings.
isEdges(SHADING_FLAT);
576 return settings.
isEdges(SHADING_NONE);
584 ImGui::Text(
"Color:");
586 const char*
edgeColorNames[] = {
"Vertex",
"Edge",
"Mesh",
"User"};
588 settings.
isEdges(COLOR_VERTEX),
595 int idx = std::distance(
600 ImGui::SetNextItemWidth(-40);
603 const bool selected = (
n ==
idx);
607 ImGui::BeginDisabled(!settings.
canEdges(COLOR_VERTEX));
610 ImGui::EndDisabled();
613 ImGui::BeginDisabled(!settings.
canEdges(COLOR_EDGE));
616 ImGui::EndDisabled();
619 ImGui::BeginDisabled(!settings.
canEdges(COLOR_MESH));
622 ImGui::EndDisabled();
628 default:
assert(
false);
break;
631 ImGui::SetItemDefaultFocus();
635 ImGui::BeginDisabled(!settings.
isEdges(COLOR_USER));
639 return settings.edgesUserColor();
642 settings.setEdgesUserColor(c);
647 ImGui::EndDisabled();
656 const auto settings =
drawable.renderSettings();
664 ImGui::BeginTabItem(
"Points")) {
670 if (
newSettings.canSurface(MRI::Surface::VISIBLE)) {
671 if (ImGui::BeginTabItem(
"Surface")) {
675 if (ImGui::BeginTabItem(
"Wireframe")) {
683 ImGui::BeginTabItem(
"Edges")) {
Definition abstract_drawable_mesh.h:32
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:164
Surface
List of possible settings for the surface primitive.
Definition mesh_render_info.h:146
Edges
List of possible settings for the edges primitive.
Definition mesh_render_info.h:178
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:71
bool isPoints(MeshRenderInfo::Points p) const
Returns whether the given points option is set.
Definition mesh_render_settings.h:226
bool canWireframe(MeshRenderInfo::Wireframe w) const
Returns the capability of a given option for the wireframe primitive.
Definition mesh_render_settings.h:178
bool setSurface(MeshRenderInfo::Surface s, bool b=true)
Sets the given shading option of the surface.
Definition mesh_render_settings.h:459
bool setEdges(MeshRenderInfo::Edges e, bool b=true)
Sets the given shading option of the edges.
Definition mesh_render_settings.h:569
bool setPoints(MeshRenderInfo::Points p, bool b=true)
Sets the given shading option of the points.
Definition mesh_render_settings.h:398
bool canSurface(MeshRenderInfo::Surface s) const
Returns the capability of a given option for the surface primitive.
Definition mesh_render_settings.h:166
bool canPoints(MeshRenderInfo::Points p) const
Returns the capability of a given option for the points primitive.
Definition mesh_render_settings.h:154
bool canEdges(MeshRenderInfo::Edges e) const
Returns the capability of a given option for the edges primitive.
Definition mesh_render_settings.h:189
bool isSurface(MeshRenderInfo::Surface s) const
Returns whether the given surface option is set.
Definition mesh_render_settings.h:251
bool isWireframe(MeshRenderInfo::Wireframe w) const
Returns whether the given wireframe option is set.
Definition mesh_render_settings.h:271
bool setWireframe(MeshRenderInfo::Wireframe w, bool b=true)
Sets the given shading option of the wireframe.
Definition mesh_render_settings.h:508
bool isEdges(MeshRenderInfo::Edges e) const
Returns whether the given edges option is set.
Definition mesh_render_settings.h:296
A class representing a line segment in n-dimensional space. The class is parameterized by a PointConc...
Definition segment.h:43
Definition mesh_viewer_imgui_drawer.h:41