Visual Computing Library
Loading...
Searching...
No Matches
mesh_render_settings.h
1/*****************************************************************************
2 * VCLib *
3 * Visual Computing Library *
4 * *
5 * Copyright(C) 2021-2025 *
6 * Visual Computing Lab *
7 * ISTI - Italian National Research Council *
8 * *
9 * All rights reserved. *
10 * *
11 * This program is free software; you can redistribute it and/or modify *
12 * it under the terms of the Mozilla Public License Version 2.0 as published *
13 * by the Mozilla Foundation; either version 2 of the License, or *
14 * (at your option) any later version. *
15 * *
16 * This program is distributed in the hope that it will be useful, *
17 * but WITHOUT ANY WARRANTY; without even the implied warranty of *
18 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
19 * Mozilla Public License Version 2.0 *
20 * (https://www.mozilla.org/en-US/MPL/2.0/) for more details. *
21 ****************************************************************************/
22
23#ifndef VCL_RENDER_DRAWABLE_MESH_MESH_RENDER_SETTINGS_H
24#define VCL_RENDER_DRAWABLE_MESH_MESH_RENDER_SETTINGS_H
25
26#include "mesh_render_info.h"
27
28#include <vclib/mesh/requirements.h>
29#include <vclib/space/core/bit_set.h>
30#include <vclib/space/core/color.h>
31
32namespace vcl {
33
71{
72 using MRI = MeshRenderInfo;
73
74 MeshRenderInfo mCapability; // capabilities of the mesh
75 MeshRenderInfo mDrawMode; // current rendering settings
76
77 float mPointWidth = 3;
78 float mPointUserColor[4] = {1, 1, 0, 1}; // TODO: change to uint?
79 uint mSurfUserColor = 0xFF808080; // abgr
80 int mWrfWidth = 1;
81 float mWrfUserColor[4] = {0, 0, 0, 1}; // TODO: change to uint?
82 int mEdgesWidth = 1;
83 uint mEdgesUserColor = 0xFF000000; // abgr
84
85public:
94 MeshRenderSettings() = default;
95
105 template<MeshConcept MeshType>
106 MeshRenderSettings(const MeshType& m)
107 {
108 setRenderCapabilityFrom(m);
109 setDefaultSettingsFromCapability();
110 }
111
116 MeshRenderInfo drawMode() const { return mDrawMode; }
117
118 bool operator==(const MeshRenderSettings&) const = default;
119
120 bool operator!=(const MeshRenderSettings&) const = default;
121
122 // rendering option capabilities of the mesh
123
128 bool canBeVisible() const { return mCapability.visible(); }
129
141 template<MeshRenderInfo::Primitive PRIMITIVE, typename Enum>
142 bool can(Enum val) const
143 {
144 assert(val < Enum::COUNT);
145 return mCapability.settings<PRIMITIVE>()[toUnderlying(val)];
146 }
147
155 {
157 }
158
167 {
169 }
170
182
190 {
192 }
193
194 // rendering option getters
195
200 bool isVisible() const { return mDrawMode.visible(); }
201
213 template<MeshRenderInfo::Primitive PRIMITIVE, typename Enum>
214 bool is(Enum val) const
215 {
216 assert(val < Enum::COUNT);
217 return mDrawMode.settings<PRIMITIVE>()[toUnderlying(val)];
218 }
219
227 {
229 }
230
231 float pointWidth() const { return mPointWidth; }
232
233 vcl::Color pointUserColor() const
234 {
235 vcl::Color c;
236 c.setRedF(mPointUserColor[0]);
237 c.setGreenF(mPointUserColor[1]);
238 c.setBlueF(mPointUserColor[2]);
239 c.setAlphaF(mPointUserColor[3]);
240 return c;
241 }
242
243 const float* pointUserColorData() const { return mPointUserColor; }
244
252 {
254 }
255
256 vcl::Color surfaceUserColor() const
257 {
258 vcl::Color c;
259 c.setAbgr(mSurfUserColor);
260 return c;
261 }
262
263 const uint* surfaceUserColorData() const { return &mSurfUserColor; }
264
275
276 int wireframeWidth() const { return mWrfWidth; }
277
278 vcl::Color wireframeUserColor() const
279 {
280 vcl::Color c;
281 c.setRedF(mWrfUserColor[0]);
282 c.setGreenF(mWrfUserColor[1]);
283 c.setBlueF(mWrfUserColor[2]);
284 c.setAlphaF(mWrfUserColor[3]);
285 return c;
286 }
287
288 const float* wireframeUserColorData() const { return mWrfUserColor; }
289
297 {
299 }
300
301 int edgesWidth() const { return mEdgesWidth; }
302
303 vcl::Color edgesUserColor() const
304 {
305 vcl::Color c;
306 c.setAbgr(mEdgesUserColor);
307 return c;
308 }
309
310 const uint* edgesUserColorData() const { return &mEdgesUserColor; }
311
312 // rendering option setters
313
322 bool setVisibility(bool b)
323 {
324 if (canBeVisible()) {
325 mDrawMode.visible() = b;
326 return true;
327 }
328 else {
329 return false;
330 }
331 }
332
355 template<MeshRenderInfo::Primitive PRIMITIVE, typename Enum>
356 bool set(Enum val, bool b = true)
357 {
358 if (can<PRIMITIVE>(val)) { // if the capability allows it
359 // get the range of the mutual exclusive settings for val
360 auto rng = MRI::exclusiveRange<PRIMITIVE>(val);
361 // if there are no mutual exclusive settings
362 if (rng.first == rng.second) {
363 // the setting could be true or false
364 // e.g. VISIBLE
365 mDrawMode.settings<PRIMITIVE>()[rng.first] = b;
366 }
367 else {
368 // only one setting in the range can be true
369 // e.g. the range SHADING_*
370 for (auto i = rng.first; i <= rng.second; ++i) {
371 mDrawMode.settings<PRIMITIVE>()[i] = toUnderlying(val) == i;
372 }
373 }
374 return true;
375 }
376 else {
377 return false;
378 }
379 }
380
399 {
401 }
402
403 bool setPointsWidth(float width)
404 {
405 if (canPoints(MRI::Points::VISIBLE)) {
406 mPointWidth = width;
407 return true;
408 }
409 else {
410 return false;
411 }
412 }
413
414 bool setPointsUserColor(float r, float g, float b, float a = 1)
415 {
416 if (canPoints(MRI::Points::VISIBLE)) {
417 mPointUserColor[0] = r;
418 mPointUserColor[1] = g;
419 mPointUserColor[2] = b;
420 mPointUserColor[3] = a;
421 return true;
422 }
423 else {
424 return false;
425 }
426 }
427
428 bool setPointsUserColor(const vcl::Color& c)
429 {
430 if (canPoints(MRI::Points::VISIBLE)) {
431 mPointUserColor[0] = c.redF();
432 mPointUserColor[1] = c.greenF();
433 mPointUserColor[2] = c.blueF();
434 mPointUserColor[3] = c.alphaF();
435 return true;
436 }
437 else {
438 return false;
439 }
440 }
441
460 {
462 }
463
464 bool setSurfaceUserColor(float r, float g, float b, float a = 1)
465 {
466 if (canSurface(MRI::Surface::VISIBLE)) {
467 vcl::Color c;
468 c.setRedF(r);
469 c.setGreenF(g);
470 c.setBlueF(b);
471 c.setAlphaF(a);
472 mSurfUserColor = c.abgr();
473 return true;
474 }
475 else {
476 return false;
477 }
478 }
479
480 bool setSurfaceUserColor(const vcl::Color& c)
481 {
482 if (canSurface(MRI::Surface::VISIBLE)) {
483 mSurfUserColor = c.abgr();
484 return true;
485 }
486 else {
487 return false;
488 }
489 }
490
509 {
511 }
512
513 bool setWireframeUserColor(float r, float g, float b, float a = 1)
514 {
515 if (canWireframe(MRI::Wireframe::VISIBLE)) {
516 mWrfUserColor[0] = r;
517 mWrfUserColor[1] = g;
518 mWrfUserColor[2] = b;
519 mWrfUserColor[3] = a;
520 return true;
521 }
522 else {
523 return false;
524 }
525 }
526
527 bool setWireframeUserColor(const vcl::Color& c)
528 {
529 if (canWireframe(MRI::Wireframe::VISIBLE)) {
530 mWrfUserColor[0] = c.redF();
531 mWrfUserColor[1] = c.greenF();
532 mWrfUserColor[2] = c.blueF();
533 mWrfUserColor[3] = c.alphaF();
534 return true;
535 }
536 else {
537 return false;
538 }
539 }
540
541 bool setWireframeWidth(int width)
542 {
543 if (canWireframe(MRI::Wireframe::VISIBLE)) {
544 mWrfWidth = width;
545 return true;
546 }
547 else {
548 return false;
549 }
550 }
551
569 bool setEdges(MeshRenderInfo::Edges e, bool b = true)
570 {
571 return set<MRI::Primitive::EDGES>(e, b);
572 }
573
574 bool setEdgesUserColor(float r, float g, float b, float a = 1)
575 {
576 if (canEdges(MRI::Edges::VISIBLE)) {
577 vcl::Color c;
578 c.setRedF(r);
579 c.setGreenF(g);
580 c.setBlueF(b);
581 c.setAlphaF(a);
582 mEdgesUserColor = c.abgr();
583 return true;
584 }
585 else {
586 return false;
587 }
588 }
589
590 bool setEdgesUserColor(const vcl::Color& c)
591 {
592 if (canEdges(MRI::Edges::VISIBLE)) {
593 mEdgesUserColor = c.abgr();
594 return true;
595 }
596 else {
597 return false;
598 }
599 }
600
601 bool setEdgesWidth(int width)
602 {
603 if (canEdges(MRI::Edges::VISIBLE)) {
604 mEdgesWidth = width;
605 return true;
606 }
607 else {
608 return false;
609 }
610 }
611
612 template<MeshConcept MeshType>
613 void setRenderCapabilityFrom(const MeshType& m)
614 {
615 mCapability.reset();
616
617 if (m.vertexNumber() > 0) {
618 mCapability.visible() = true;
619
620 // -- Points --
621 setPointsCapability(MRI::Points::VISIBLE);
622 setPointsCapability(MRI::Points::SHAPE_PIXEL);
623 setPointsCapability(MRI::Points::SHAPE_CIRCLE);
624 setPointsCapability(MRI::Points::SHADING_NONE);
625 setPointsCapability(MRI::Points::COLOR_USER);
626
627 if constexpr (vcl::HasPerVertexNormal<MeshType>) {
628 if (vcl::isPerVertexNormalAvailable(m)) {
629 setPointsCapability(MRI::Points::SHADING_VERT);
630 }
631 }
632
633 if constexpr (vcl::HasPerVertexColor<MeshType>) {
634 if (vcl::isPerVertexColorAvailable(m)) {
635 setPointsCapability(MRI::Points::COLOR_VERTEX);
636 }
637 }
638
639 if constexpr (vcl::HasColor<MeshType>) {
640 setPointsCapability(MRI::Points::COLOR_MESH);
641 }
642
643 // -- Surface and Wireframe --
644 if constexpr (vcl::HasFaces<MeshType>) {
645 if (m.faceNumber() > 0) {
646 setSurfaceCapability(MRI::Surface::VISIBLE);
647 setSurfaceCapability(MRI::Surface::SHADING_NONE);
648 setSurfaceCapability(MRI::Surface::COLOR_USER);
649 setWireframeCapability(MRI::Wireframe::VISIBLE);
650 setWireframeCapability(MRI::Wireframe::SHADING_NONE);
651 setWireframeCapability(MRI::Wireframe::COLOR_USER);
652
653 if constexpr (vcl::HasColor<MeshType>) {
654 setSurfaceCapability(MRI::Surface::COLOR_MESH);
655 setWireframeCapability(MRI::Wireframe::COLOR_MESH);
656 }
657
658 if constexpr (vcl::HasPerFaceNormal<MeshType>) {
660 setSurfaceCapability(MRI::Surface::SHADING_FLAT);
661 }
662 }
663
664 if constexpr (vcl::HasPerVertexNormal<MeshType>) {
665 if (vcl::isPerVertexNormalAvailable(m)) {
666 setSurfaceCapability(MRI::Surface::SHADING_SMOOTH);
667 setWireframeCapability(
668 MRI::Wireframe::SHADING_VERT);
669 }
670 }
671
672 if constexpr (vcl::HasPerFaceColor<MeshType>) {
674 setSurfaceCapability(MRI::Surface::COLOR_FACE);
675 }
676
677 if constexpr (vcl::HasPerVertexColor<MeshType>) {
678 if (vcl::isPerVertexColorAvailable(m)) {
679 setSurfaceCapability(MRI::Surface::COLOR_VERTEX);
680 setWireframeCapability(
681 MRI::Wireframe::COLOR_VERTEX);
682 }
683 }
684
685 if constexpr (vcl::HasTexturePaths<MeshType>) {
687 if (vcl::isPerVertexTexCoordAvailable(m) &&
688 m.textureNumber() > 0)
689 setSurfaceCapability(
690 MRI::Surface::COLOR_VERTEX_TEX);
691 }
692
695 m.textureNumber() > 0)
696 setSurfaceCapability(
697 MRI::Surface::COLOR_WEDGE_TEX);
698 }
699 }
700 }
701 }
702
703 // -- Edges --
704 if constexpr (vcl::HasEdges<MeshType>) {
705 if (m.edgeNumber() > 0) {
706 setEdgesCapability(MRI::Edges::VISIBLE);
707 setEdgesCapability(MRI::Edges::SHADING_NONE);
708 setEdgesCapability(MRI::Edges::COLOR_USER);
709
710 if constexpr (vcl::HasColor<MeshType>) {
711 setEdgesCapability(MRI::Edges::COLOR_MESH);
712 }
713
714 if constexpr (vcl::HasPerVertexNormal<MeshType>) {
715 if (vcl::isPerVertexNormalAvailable(m)) {
716 setEdgesCapability(MRI::Edges::SHADING_SMOOTH);
717 }
718 }
719
720 if constexpr (vcl::HasPerEdgeNormal<MeshType>) {
722 setEdgesCapability(MRI::Edges::SHADING_FLAT);
723 }
724 }
725
726 if constexpr (vcl::HasPerEdgeColor<MeshType>) {
728 setEdgesCapability(MRI::Edges::COLOR_EDGE);
729 }
730
731 if constexpr (vcl::HasPerVertexColor<MeshType>) {
732 if (vcl::isPerVertexColorAvailable(m)) {
733 setEdgesCapability(MRI::Edges::COLOR_VERTEX);
734 }
735 }
736 }
737 }
738 }
739
740 // make sure that the previous draw mode satisfies the new capabilites
741 mDrawMode &= mCapability;
742 }
743
744 void setDefaultSettingsFromCapability()
745 {
746 mDrawMode.reset();
747
748 if (canBeVisible()) {
749 setVisibility(true);
750
751 setDefaultSurfaceSettingsFromCapability();
752 setDefaultWireframeSettingsFromCapability();
753 setDefaultPointSettingsFromCapability();
754 setDefaultEdgeSettingsFromCapability();
755 }
756 }
757
758private:
759 template<MeshRenderInfo::Primitive PRIMITIVE, typename Enum>
760 void setCapability(Enum val, bool b = true)
761 {
762 assert(val < Enum::COUNT);
763 mCapability.settings<PRIMITIVE>()[toUnderlying(val)] = b;
764 }
765
766 void setPointsCapability(MeshRenderInfo::Points p, bool b = true)
767 {
768 setCapability<MRI::Primitive::POINTS>(p, b);
769 }
770
771 void setSurfaceCapability(MeshRenderInfo::Surface s, bool b = true)
772 {
773 setCapability<MRI::Primitive::SURFACE>(s, b);
774 }
775
776 void setWireframeCapability(MeshRenderInfo::Wireframe w, bool b = true)
777 {
778 setCapability<MRI::Primitive::WIREFRAME>(w, b);
779 }
780
781 void setEdgesCapability(MeshRenderInfo::Edges e, bool b = true)
782 {
783 setCapability<MRI::Primitive::EDGES>(e, b);
784 }
785
786 void setDefaultPointSettingsFromCapability()
787 {
788 using enum MRI::Points;
789
790 mDrawMode.points().reset();
791
792 if (canPoints(VISIBLE)) {
793 if (!canSurface(MRI::Surface::VISIBLE))
794 setPoints(VISIBLE, true);
795 setPoints(SHADING_NONE);
796 if (canPoints(SHADING_VERT)) {
797 setPoints(SHADING_VERT);
798 }
799 if (canPoints(COLOR_VERTEX)) {
800 setPoints(COLOR_VERTEX);
801 }
802 else {
803 setPoints(COLOR_USER);
804 }
805 }
806 }
807
808 void setDefaultSurfaceSettingsFromCapability()
809 {
810 using enum MRI::Surface;
811
812 mDrawMode.surface().reset();
813
814 if (canSurface(VISIBLE)) {
815 setSurface(VISIBLE, true);
816 // shading
817 if (canSurface(SHADING_SMOOTH)) {
818 setSurface(SHADING_SMOOTH);
819 }
820 else if (canSurface(SHADING_FLAT)) {
821 setSurface(SHADING_FLAT);
822 }
823 else {
824 setSurface(SHADING_NONE);
825 }
826 // color
827 if (canSurface(COLOR_WEDGE_TEX)) {
828 setSurface(COLOR_WEDGE_TEX);
829 }
830 else if (canSurface(COLOR_VERTEX_TEX)) {
831 setSurface(COLOR_VERTEX_TEX);
832 }
833 else if (canSurface(COLOR_VERTEX)) {
834 setSurface(COLOR_VERTEX);
835 }
836 else if (canSurface(COLOR_FACE)) {
837 setSurface(COLOR_FACE);
838 }
839 // jump mesh color on purpose: it is always available on the mesh,
840 // but rarely used and it is likely to be set to 0 (black)
841 else {
842 setSurface(COLOR_USER);
843 }
844 }
845 }
846
847 void setDefaultWireframeSettingsFromCapability()
848 {
849 using enum MRI::Wireframe;
850
851 mDrawMode.wireframe().reset();
852
853 if (canWireframe(VISIBLE)) {
854 if (canWireframe(SHADING_VERT)) {
855 setWireframe(SHADING_VERT);
856 }
857 else {
858 setWireframe(SHADING_NONE);
859 }
860 // wireframe color (defaults to user defined)
861 setWireframe(COLOR_USER);
862 }
863 }
864
865 void setDefaultEdgeSettingsFromCapability()
866 {
867 using enum MRI::Edges;
868
869 mDrawMode.edges().reset();
870
871 if (canEdges(VISIBLE)) {
872 setEdges(VISIBLE, true);
873
874 if (canEdges(SHADING_SMOOTH)) {
875 setEdges(SHADING_SMOOTH);
876 }
877 else if (canEdges(SHADING_FLAT)) {
878 setEdges(SHADING_FLAT);
879 }
880 else {
881 setEdges(SHADING_NONE);
882 }
883
884 if (canEdges(COLOR_VERTEX)) {
885 setEdges(COLOR_VERTEX);
886 }
887 else if (canEdges(COLOR_EDGE)) {
888 setEdges(COLOR_EDGE);
889 }
890 else {
891 setEdges(COLOR_USER);
892 }
893 }
894 }
895};
896
897} // namespace vcl
898
899#endif // VCL_RENDER_DRAWABLE_MESH_MESH_RENDER_SETTINGS_H
The Color class represents a 32 bit color.
Definition color.h:48
float greenF() const
Returns the float green component of this color [0-1].
Definition color.h:207
float blueF() const
Returns the float blue component of this color [0-1].
Definition color.h:213
float alphaF() const
Returns the float alpha component of this color [0-1].
Definition color.h:219
void setRedF(float red)
Sets the red of this color [0-1].
Definition color.h:531
float redF() const
Returns the float red component of this color [0-1].
Definition color.h:201
void setAlphaF(float alpha)
Sets the alpha of this color [0-1].
Definition color.h:525
void setBlueF(float blue)
Sets the blue of this color [0-1].
Definition color.h:543
void setGreenF(float green)
Sets the green of this color [0-1].
Definition color.h:537
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
BitSet16 edges() const
Returns the settings for the edges primitive.
Definition mesh_render_info.h:265
BitSet16 surface() const
Returns the settings for the surface primitive.
Definition mesh_render_info.h:241
BitSet16 settings() const
Returns the settings for a given primitive.
Definition mesh_render_info.h:209
BitSet16 points() const
Returns the settings for the points primitive.
Definition mesh_render_info.h:229
Surface
List of possible settings for the surface primitive.
Definition mesh_render_info.h:146
bool visible() const
Returns the visibility status of the mesh.
Definition mesh_render_info.h:195
BitSet16 wireframe() const
Returns the settings for the wireframe primitive.
Definition mesh_render_info.h:253
void reset()
Resets all the settings of the mesh.
Definition mesh_render_info.h:276
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
MeshRenderSettings()=default
Construct a new MeshRenderSettings object with capabilities set to false.
bool isPoints(MeshRenderInfo::Points p) const
Returns whether the given points option is set.
Definition mesh_render_settings.h:226
bool can(Enum val) const
Returns the capability of a given option for the given primitive.
Definition mesh_render_settings.h:142
bool canWireframe(MeshRenderInfo::Wireframe w) const
Returns the capability of a given option for the wireframe primitive.
Definition mesh_render_settings.h:178
MeshRenderSettings(const MeshType &m)
Construct a new MeshRenderSettings object from a Mesh.
Definition mesh_render_settings.h:106
MeshRenderInfo drawMode() const
Returns the current draw mode as a MeshRenderInfo object.
Definition mesh_render_settings.h:116
bool isVisible() const
Returns whether the mesh is visible.
Definition mesh_render_settings.h:200
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 is(Enum val) const
Returns whether the given option for the given primitive is set.
Definition mesh_render_settings.h:214
bool set(Enum val, bool b=true)
Sets given the shading option of the given primitive.
Definition mesh_render_settings.h:356
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 setVisibility(bool b)
Sets the visibility of the mesh.
Definition mesh_render_settings.h:322
bool canPoints(MeshRenderInfo::Points p) const
Returns the capability of a given option for the points primitive.
Definition mesh_render_settings.h:154
bool canBeVisible() const
Returns whether the mesh can be visible.
Definition mesh_render_settings.h:128
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
Concept that is evaluated true if a Mesh has the Color component.
Definition per_mesh.h:69
HasEdges concepts is satisfied when at least one of its template types is (or inherits from) a vcl::m...
Definition edge_container.h:131
HasFaces concepts is satisfied when at least one of its template types is (or inherits from) a vcl::m...
Definition face_container.h:133
Concept that checks if a Mesh has the per Edge Color component.
Definition per_edge.h:97
Concept that checks if a Mesh has the per Edge Normal component.
Definition per_edge.h:142
Concept that checks if a Mesh has the per Face Color component.
Definition per_face.h:111
Concept that checks if a Mesh has the per Face Normal component.
Definition per_face.h:158
Concept that checks if a Mesh has the per Face WedgeTexCoords component.
Definition per_face.h:270
Concept that checks if a Mesh has the per Vertex Color component.
Definition per_vertex.h:98
Concept that checks if a Mesh has the per Vertex Normal component.
Definition per_vertex.h:128
Concept that checks if a Mesh has the per Vertex TexCoord component.
Definition per_vertex.h:174
Concept that checks if a Mesh has the TexturePaths component.
Definition per_mesh.h:112
bool isPerEdgeColorAvailable(const MeshType &m)
Returns true if the Color component is available (enabled) in the Edge element of the input mesh m.
Definition edge_requirements.h:214
bool isPerEdgeNormalAvailable(const MeshType &m)
Returns true if the Normal component is available (enabled) in the Edge element of the input mesh m.
Definition edge_requirements.h:330
bool isPerFaceWedgeTexCoordsAvailable(const MeshType &m)
Returns true if the WedgeTexCoords component is available (enabled) in the Face element of the input ...
Definition face_requirements.h:571
bool isPerFaceNormalAvailable(const MeshType &m)
Returns true if the Normal component is available (enabled) in the Face element of the input mesh m.
Definition face_requirements.h:330
bool isPerFaceColorAvailable(const MeshType &m)
Returns true if the Color component is available (enabled) in the Face element of the input mesh m.
Definition face_requirements.h:214