23#ifndef VCL_SPACE_COMPLEX_MESH_INFO_H
24#define VCL_SPACE_COMPLEX_MESH_INFO_H
26#include <vclib/base.h>
27#include <vclib/mesh.h>
82 enum class MeshType { TRIANGLE_MESH, QUAD_MESH, POLYGON_MESH, UNKNOWN };
91 enum Element { VERTEX, FACE, EDGE, MESH, NUM_ELEMENTS };
130 std::bitset<NUM_ELEMENTS> mElements = {
false};
133 std::array<std::bitset<NUM_COMPONENTS>, NUM_ELEMENTS> mPerElemComponents = {
137 Eigen::Matrix<DataType, NUM_ELEMENTS, NUM_COMPONENTS>
138 mPerElemComponentsType;
141 std::array<std::vector<CustomComponent>, NUM_ELEMENTS>
142 mPerElemCustomComponents;
154 MeshInfo() { mPerElemComponentsType.fill(PrimitiveType::NONE); }
165 template<MeshConcept Mesh>
169 setPerVertexPosition(
173 if (isPerVertexNormalAvailable(
m)) {
177 typename Mesh::VertexType::NormalType::ScalarType>());
181 if (isPerVertexColorAvailable(
m)) {
182 setPerVertexColor(
true, PrimitiveType::UCHAR);
186 if (isPerVertexQualityAvailable(
m)) {
192 if (isPerVertexTexCoordAvailable(
m)) {
193 setPerVertexTexCoord(
196 typename Mesh::VertexType::TexCoordType::ScalarType>());
200 if (isPerVertexMaterialIndexAvailable(
m)) {
201 setPerVertexMaterialIndex(
true, PrimitiveType::UINT);
205 auto names =
m.perVertexCustomComponentNames();
206 for (
auto& name :
names) {
208 if (
dt != PrimitiveType::NONE) {
209 addPerVertexCustomComponent(name,
dt);
216 setPerFaceVertexReferences();
231 typename Mesh::FaceType::NormalType::ScalarType>());
236 setPerFaceColor(
true, PrimitiveType::UCHAR);
247 setPerFaceWedgeTexCoords(
249 getType<
typename Mesh::FaceType::WedgeTexCoordType::
255 setPerFaceMaterialIndex(
true, PrimitiveType::UINT);
259 auto names =
m.perFaceCustomComponentNames();
260 for (
auto& name :
names) {
262 if (
dt != PrimitiveType::NONE) {
263 addPerFaceCustomComponent(name,
dt);
271 setPerEdgeVertexReferences();
278 if (
m.materialsNumber() > 0) {
293 for (
auto& comp : mPerElemComponents)
295 mPerElemComponentsType.fill(PrimitiveType::NONE);
297 for (
auto& v : mPerElemCustomComponents)
300 mType = MeshType::UNKNOWN;
307 bool isEmpty()
const {
return !mElements.any(); }
309 MeshType meshType()
const {
return mType; }
311 bool isUnkownMesh()
const {
return mType == MeshType::UNKNOWN; }
325 bool isQuadMesh()
const {
return mType == MeshType::QUAD_MESH; }
340 bool hasElement(
Element el)
const {
return mElements[
el]; }
344 return mPerElemComponents[el][comp];
359 return hasPerElementComponent(VERTEX, POSITION);
368 return hasPerElementComponent(VERTEX, NORMAL);
377 return hasPerElementComponent(VERTEX, COLOR);
386 return hasPerElementComponent(VERTEX, QUALITY);
395 return hasPerElementComponent(VERTEX, TEXCOORD);
404 return hasPerElementComponent(VERTEX, MATERIAL_INDEX);
413 return hasPerElementComponent(VERTEX, CUSTOM_COMPONENTS);
428 return hasPerElementComponent(FACE, VREFS);
431 bool hasPerFaceNormal()
const
433 return hasPerElementComponent(FACE, NORMAL);
436 bool hasPerFaceColor()
const {
return hasPerElementComponent(FACE, COLOR); }
438 bool hasPerFaceQuality()
const
440 return hasPerElementComponent(FACE, QUALITY);
443 bool hasPerFaceWedgeTexCoords()
const
445 return hasPerElementComponent(FACE, WEDGE_TEXCOORDS);
454 return hasPerElementComponent(FACE, MATERIAL_INDEX);
457 bool hasPerFaceCustomComponents()
const
459 return hasPerElementComponent(FACE, CUSTOM_COMPONENTS);
468 bool hasPerEdgeVertexReferences()
const
470 return hasPerElementComponent(EDGE, VREFS);
473 bool hasPerEdgeColor()
const {
return hasPerElementComponent(EDGE, COLOR); }
475 bool hasPerEdgeNormal()
const
477 return hasPerElementComponent(EDGE, NORMAL);
480 bool hasPerEdgeQuality()
const
482 return hasPerElementComponent(EDGE, QUALITY);
485 bool hasPerEdgeCustomComponents()
const
487 return hasPerElementComponent(EDGE, CUSTOM_COMPONENTS);
490 bool hasMaterials()
const
492 return hasPerElementComponent(MESH, MATERIALS);
502 void updateMeshType(uint faceSize)
504 if (mType == MeshType::UNKNOWN) {
507 else if (faceSize == 4)
512 else if (mType == MeshType::TRIANGLE_MESH && faceSize != 3) {
515 else if (mType == MeshType::QUAD_MESH && faceSize != 4) {
520 void setUnknownMesh() { mType = MeshType::UNKNOWN; }
522 void setTriangleMesh() { mType = MeshType::TRIANGLE_MESH; }
524 void setQuadMesh() { mType = MeshType::QUAD_MESH; }
526 void setPolygonMesh() { mType = MeshType::POLYGON_MESH; }
528 void setMeshType(
MeshType t) { mType = t; }
530 void setElement(
Element el,
bool b =
true) { mElements[el] = b; }
535 mPerElemComponents[el][c] = b;
537 mPerElemComponentsType(el, c) = t;
540 void setVertices(
bool b =
true) { setElement(VERTEX, b); }
542 void setPerVertexPosition(
bool b =
true,
DataType t = PrimitiveType::DOUBLE)
544 setPerElementComponent(VERTEX, POSITION, b, t);
547 void setPerVertexNormal(
bool b =
true,
DataType t = PrimitiveType::FLOAT)
549 setPerElementComponent(VERTEX, NORMAL, b, t);
552 void setPerVertexColor(
bool b =
true,
DataType t = PrimitiveType::UCHAR)
554 setPerElementComponent(VERTEX, COLOR, b, t);
557 void setPerVertexQuality(
bool b =
true,
DataType t = PrimitiveType::DOUBLE)
559 setPerElementComponent(VERTEX, QUALITY, b, t);
562 void setPerVertexTexCoord(
bool b =
true,
DataType t = PrimitiveType::FLOAT)
564 setPerElementComponent(VERTEX, TEXCOORD, b, t);
567 void setPerVertexMaterialIndex(
571 setPerElementComponent(VERTEX, MATERIAL_INDEX, b, t);
574 void setPerVertexCustomComponents(
bool b =
true)
576 setPerElementComponent(
577 VERTEX, CUSTOM_COMPONENTS, b, PrimitiveType::NONE);
580 void setFaces(
bool b =
true) { setElement(FACE, b); }
582 void setPerFaceVertexReferences(
bool b =
true)
584 setPerElementComponent(FACE, VREFS, b, PrimitiveType::NONE);
587 void setPerFaceNormal(
bool b =
true,
DataType t = PrimitiveType::FLOAT)
589 setPerElementComponent(FACE, NORMAL, b, t);
592 void setPerFaceColor(
bool b =
true,
DataType t = PrimitiveType::UCHAR)
594 setPerElementComponent(FACE, COLOR, b, t);
597 void setPerFaceQuality(
bool b =
true,
DataType t = PrimitiveType::DOUBLE)
599 setPerElementComponent(FACE, QUALITY, b, t);
602 void setPerFaceWedgeTexCoords(
606 setPerElementComponent(FACE, WEDGE_TEXCOORDS, b, t);
609 void setPerFaceMaterialIndex(
613 setPerElementComponent(FACE, MATERIAL_INDEX, b, t);
616 void setPerFaceCustomComponents(
bool b =
true)
618 setPerElementComponent(FACE, CUSTOM_COMPONENTS, b, PrimitiveType::NONE);
621 void setEdges(
bool b =
true) { setElement(EDGE, b); }
623 void setPerEdgeVertexReferences(
bool b =
true)
625 setPerElementComponent(EDGE, VREFS, b, PrimitiveType::NONE);
628 void setPerEdgeColor(
bool b =
true,
DataType t = PrimitiveType::UCHAR)
630 setPerElementComponent(EDGE, COLOR, b, t);
633 void setPerEdgeNormal(
bool b =
true,
DataType t = PrimitiveType::FLOAT)
635 setPerElementComponent(EDGE, NORMAL, b, t);
638 void setPerEdgeQuality(
bool b =
true,
DataType t = PrimitiveType::DOUBLE)
640 setPerElementComponent(EDGE, QUALITY, b, t);
643 void setPerEdgeCustomComponents(
bool b =
true)
645 setPerElementComponent(EDGE, CUSTOM_COMPONENTS, b, PrimitiveType::NONE);
648 void setMaterials(
bool b =
true)
650 setPerElementComponent(MESH, MATERIALS, b, PrimitiveType::NONE);
653 void addPerElementCustomComponent(
655 const std::string& name,
658 setPerElementComponent(
659 el, CUSTOM_COMPONENTS,
true, PrimitiveType::NONE);
660 mPerElemCustomComponents[el].emplace_back(name, t);
663 void clearPerElementCustomComponents(
Element el)
665 setPerElementComponent(
666 el, CUSTOM_COMPONENTS,
false, PrimitiveType::NONE);
667 mPerElemCustomComponents[el].clear();
670 void addPerVertexCustomComponent(
const std::string& name,
DataType t)
672 addPerElementCustomComponent(VERTEX, name, t);
675 void clearPerVertexCustomComponents()
677 clearPerElementCustomComponents(VERTEX);
680 void addPerFaceCustomComponent(
const std::string& name,
DataType t)
682 addPerElementCustomComponent(FACE, name, t);
685 void clearPerFaceCustomComponents()
687 clearPerElementCustomComponents(FACE);
690 void addPerEdgeCustomComponent(
const std::string& name,
DataType t)
692 addPerElementCustomComponent(EDGE, name, t);
695 void clearPerEdgeCustomComponents()
697 clearPerElementCustomComponents(EDGE);
707 return mPerElemComponentsType(el, comp);
710 DataType perVertexPositionType()
const
712 return perElementComponentType(VERTEX, POSITION);
715 DataType perVertexNormalType()
const
717 return perElementComponentType(VERTEX, NORMAL);
722 return perElementComponentType(VERTEX, COLOR);
725 DataType perVertexQualityType()
const
727 return perElementComponentType(VERTEX, QUALITY);
730 DataType perVertexTexCoordType()
const
732 return perElementComponentType(VERTEX, TEXCOORD);
735 DataType perVertexMaterialIndexType()
const
737 return perElementComponentType(VERTEX, MATERIAL_INDEX);
742 return perElementComponentType(FACE, NORMAL);
747 return perElementComponentType(FACE, COLOR);
752 return perElementComponentType(FACE, QUALITY);
755 DataType perFaceWedgeTexCoordsType()
const
757 return perElementComponentType(FACE, WEDGE_TEXCOORDS);
760 DataType perFaceMaterialIndexType()
const
762 return perElementComponentType(FACE, MATERIAL_INDEX);
767 return perElementComponentType(EDGE, NORMAL);
772 return perElementComponentType(EDGE, COLOR);
777 return perElementComponentType(EDGE, QUALITY);
780 const std::vector<CustomComponent>& perElementCustomComponents(
783 return mPerElemCustomComponents[el];
786 const std::vector<CustomComponent>& perVertexCustomComponents()
const
788 return mPerElemCustomComponents[VERTEX];
791 const std::vector<CustomComponent>& perFaceCustomComponents()
const
793 return mPerElemCustomComponents[FACE];
796 const std::vector<CustomComponent>& perEdgeCustomComponents()
const
798 return mPerElemCustomComponents[EDGE];
815 for (
uint i = 0;
i < NUM_ELEMENTS; ++
i) {
816 res.mElements[
i] = mElements[
i] && info.mElements[
i];
817 for (
uint j = 0;
j < NUM_COMPONENTS; ++
j) {
818 res.mPerElemComponents[
i][
j] =
819 mPerElemComponents[
i][
j] && info.mPerElemComponents[
i][
j];
821 if (
res.mPerElemComponents[
i][
j]) {
822 res.mPerElemComponentsType(
i,
j) =
823 mPerElemComponentsType(
i,
j);
828 if (mType == info.mType) {
831 res.mPerElemCustomComponents = mPerElemCustomComponents;
848 if constexpr (std::is_same_v<T, char>)
849 return PrimitiveType::CHAR;
850 if constexpr (std::is_same_v<T, unsigned char>)
851 return PrimitiveType::UCHAR;
852 if constexpr (std::is_same_v<T, short>)
853 return PrimitiveType::SHORT;
854 if constexpr (std::is_same_v<T, unsigned short>)
855 return PrimitiveType::USHORT;
856 if constexpr (std::is_same_v<T, int>)
857 return PrimitiveType::INT;
858 if constexpr (std::is_same_v<T, uint>)
859 return PrimitiveType::UINT;
860 if constexpr (std::is_integral_v<T>)
861 return PrimitiveType::INT;
862 if constexpr (std::is_same_v<T, float>)
863 return PrimitiveType::FLOAT;
864 if constexpr (std::is_same_v<T, double>)
865 return PrimitiveType::DOUBLE;
866 if constexpr (std::is_floating_point_v<T>)
867 return PrimitiveType::FLOAT;
868 return PrimitiveType::NONE;
873 if (
ti ==
typeid(
char))
874 return PrimitiveType::CHAR;
875 if (
ti ==
typeid(
unsigned char))
876 return PrimitiveType::UCHAR;
877 if (
ti ==
typeid(
short))
878 return PrimitiveType::SHORT;
879 if (
ti ==
typeid(
unsigned short))
880 return PrimitiveType::USHORT;
881 if (
ti ==
typeid(
int))
882 return PrimitiveType::INT;
883 if (
ti ==
typeid(uint))
884 return PrimitiveType::UINT;
885 if (
ti ==
typeid(
float))
886 return PrimitiveType::FLOAT;
887 if (
ti ==
typeid(
double))
888 return PrimitiveType::DOUBLE;
889 return PrimitiveType::NONE;
893template<u
int ELEM_ID, MeshConcept MeshType>
894void addPerElementCustomComponent(
896 const MeshInfo::CustomComponent& cc)
899 case PrimitiveType::CHAR:
900 m.template addPerElementCustomComponent<ELEM_ID, char>(cc.name);
902 case PrimitiveType::UCHAR:
903 m.template addPerElementCustomComponent<ELEM_ID, unsigned char>(
906 case PrimitiveType::SHORT:
907 m.template addPerElementCustomComponent<ELEM_ID, short>(cc.name);
909 case PrimitiveType::USHORT:
910 m.template addPerElementCustomComponent<ELEM_ID, unsigned short>(
913 case PrimitiveType::INT:
914 m.template addPerElementCustomComponent<ELEM_ID, int>(cc.name);
916 case PrimitiveType::UINT:
917 m.template addPerElementCustomComponent<ELEM_ID, uint>(cc.name);
919 case PrimitiveType::FLOAT:
920 m.template addPerElementCustomComponent<ELEM_ID, float>(cc.name);
922 case PrimitiveType::DOUBLE:
923 m.template addPerElementCustomComponent<ELEM_ID, double>(cc.name);
929template<MeshConcept MeshType>
930void addPerVertexCustomComponent(
932 const MeshInfo::CustomComponent& cc)
934 addPerElementCustomComponent<ElemId::VERTEX>(m, cc);
937template<FaceMeshConcept MeshType>
938void addPerFaceCustomComponent(MeshType& m,
const MeshInfo::CustomComponent& cc)
940 addPerElementCustomComponent<ElemId::FACE>(m, cc);
943template<EdgeMeshConcept MeshType>
944void addPerEdgeCustomComponent(MeshType& m,
const MeshInfo::CustomComponent& cc)
946 addPerElementCustomComponent<ElemId::EDGE>(m, cc);
962template<MeshConcept MeshType>
963void enableOptionalComponentsFromInfo(MeshInfo& info, MeshType& m)
965 if (info.hasVertices()) {
966 if (info.hasPerVertexColor()) {
967 if (!enableIfPerVertexColorOptional(m)) {
968 info.setPerVertexColor(
false);
971 if (info.hasPerVertexNormal()) {
972 if (!enableIfPerVertexNormalOptional(m)) {
973 info.setPerVertexNormal(
false);
976 if (info.hasPerVertexQuality()) {
977 if (!enableIfPerVertexQualityOptional(m)) {
978 info.setPerVertexQuality(
false);
981 if (info.hasPerVertexTexCoord()) {
982 if (!enableIfPerVertexTexCoordOptional(m)) {
983 info.setPerVertexTexCoord(
false);
986 if (info.hasPerVertexMaterialIndex()) {
987 if (!enableIfPerVertexMaterialIndexOptional(m)) {
988 info.setPerVertexMaterialIndex(
false);
991 if (info.hasPerVertexCustomComponents()) {
992 if constexpr (HasPerVertexCustomComponents<MeshType>) {
993 for (
const auto& cc : info.perVertexCustomComponents()) {
994 addPerVertexCustomComponent(m, cc);
998 info.clearPerVertexCustomComponents();
1003 info.setVertices(
false);
1006 if constexpr (HasFaces<MeshType>) {
1007 if (info.hasFaces()) {
1008 if (info.hasPerFaceColor()) {
1010 info.setPerFaceColor(
false);
1013 if (info.hasPerFaceNormal()) {
1015 info.setPerFaceNormal(
false);
1018 if (info.hasPerFaceQuality()) {
1020 info.setPerFaceQuality(
false);
1023 if (info.hasPerFaceWedgeTexCoords()) {
1025 info.setPerFaceWedgeTexCoords(
false);
1028 if (info.hasPerFaceMaterialIndex()) {
1030 info.setPerFaceMaterialIndex(
false);
1033 if (info.hasPerFaceCustomComponents()) {
1034 if constexpr (HasPerFaceCustomComponents<MeshType>) {
1035 for (
const auto& cc : info.perFaceCustomComponents()) {
1036 addPerFaceCustomComponent(m, cc);
1040 info.clearPerFaceCustomComponents();
1045 info.setFaces(
false);
1049 info.setFaces(
false);
1052 if constexpr (HasEdges<MeshType>) {
1053 if (info.hasEdges()) {
1054 if (info.hasPerEdgeColor()) {
1056 info.setPerEdgeColor(
false);
1059 if (info.hasPerEdgeNormal()) {
1061 info.setPerEdgeNormal(
false);
1064 if (info.hasPerEdgeQuality()) {
1066 info.setPerEdgeQuality(
false);
1069 if (info.hasPerEdgeCustomComponents()) {
1070 if constexpr (HasPerEdgeCustomComponents<MeshType>) {
1071 for (
const auto& cc : info.perEdgeCustomComponents()) {
1072 addPerEdgeCustomComponent(m, cc);
1076 info.clearPerEdgeCustomComponents();
1081 info.setEdges(
false);
1085 info.setEdges(
false);
A class representing a box in N-dimensional space.
Definition box.h:46
The Element class.
Definition element.h:75
A simple class that allows to store which elements and their components have been imported/loaded or ...
Definition mesh_info.h:76
MeshInfo intersect(const MeshInfo &info) const
Returns a MeshInfo object that is the intersection between this and info.
Definition mesh_info.h:812
bool hasPerVertexMaterialIndex() const
Returns true if the current object has Vertex Material Index.
Definition mesh_info.h:402
bool hasPerVertexColor() const
Returns true if the current object has Vertex Colors.
Definition mesh_info.h:375
static DataType getType()
Given the template T, returns the corresponding enum DataType value of T.
Definition mesh_info.h:846
bool isEmpty() const
Returns whether the current MeshInfo object is empty, i.e., it has no Elements set.
Definition mesh_info.h:307
bool hasPerVertexNormal() const
Returns true if the current object has Vertex Normals.
Definition mesh_info.h:366
Component
Enum used to describe the type of Components that each Element can have.
Definition mesh_info.h:97
bool isTriangleMesh() const
Returns true if the current object has Mesh type set to MeshType::TRIANGLE_MESH.
Definition mesh_info.h:318
void clear()
Clears the MeshInfo object.
Definition mesh_info.h:290
bool hasPerVertexTexCoord() const
Returns true if the current object has Vertex Texture Coordinates.
Definition mesh_info.h:393
bool isQuadMesh() const
Returns true if the current object has Mesh type set to MeshType::QUAD_MESH.
Definition mesh_info.h:325
bool hasVertices() const
Returns true if the current object has Vertex Elements.
Definition mesh_info.h:351
bool hasPerVertexCustomComponents() const
Returns true if the current object has Vertex Custom Components.
Definition mesh_info.h:411
bool isPolygonMesh() const
Returns true if the current object has Mesh type set to MeshType::POLYGON_MESH.
Definition mesh_info.h:332
PrimitiveType DataType
Enum used to describe the type of Data stored in a component.
Definition mesh_info.h:114
bool hasFaces() const
Returns true if the current object has Face Elements.
Definition mesh_info.h:420
bool hasEdges() const
Returns true if the current object has Edge Elements.
Definition mesh_info.h:466
Element
Enum used to describe the type of Elements that can be found in a file.
Definition mesh_info.h:91
bool hasPerFaceVertexReferences() const
Returns true if the current object has per Face Vertex References.
Definition mesh_info.h:426
MeshInfo()
Default constructor.
Definition mesh_info.h:154
MeshInfo(const Mesh &m)
Sets the current status of the MeshInfo object from the input mesh.
Definition mesh_info.h:166
bool hasPerFaceMaterialIndex() const
Returns true if the current object has Face Material Index.
Definition mesh_info.h:452
MeshType
Enum used to describe the type of the Mesh - by default, the value is set to UNKNOWN.
Definition mesh_info.h:82
bool hasPerVertexPosition() const
Returns true if the current object has Vertex Positions.
Definition mesh_info.h:357
bool hasPerVertexQuality() const
Returns true if the current object has Vertex Quality.
Definition mesh_info.h:384
The Mesh class represents a generic 3D mesh. A mesh is composed of a generic number of containers of ...
Definition mesh.h:68
HasEdges concepts is satisfied when at least one of its template types is (or inherits from) a vcl::m...
Definition edge_container.h:1064
HasFaces concepts is satisfied when at least one of its template types is (or inherits from) a vcl::m...
Definition face_container.h:1429
Concept that is evaluated true if a Mesh has the Materials component.
Definition mesh_requirements.h:88
Concept that checks if a Mesh has the per Face Color component.
Definition face_requirements.h:141
Concept that checks if a Mesh has the per Face CustomComponents component.
Definition face_requirements.h:157
Concept that checks if a Mesh has the per Face MaterialIndex component.
Definition face_requirements.h:188
Concept that checks if a Mesh has the per Face Normal component.
Definition face_requirements.h:204
Concept that checks if a Mesh has the per Face Quality component.
Definition face_requirements.h:252
Concept that checks if a Mesh has the per Face WedgeTexCoords component.
Definition face_requirements.h:316
Concept that checks if a Mesh has the per Vertex Color component.
Definition vertex_requirements.h:110
Concept that checks if a Mesh has the per Vertex CustomComponents.
Definition vertex_requirements.h:231
Concept that checks if a Mesh has the per Vertex MaterialIndex component.
Definition vertex_requirements.h:141
Concept that checks if a Mesh has the per Vertex Normal component.
Definition vertex_requirements.h:156
Concept that checks if a Mesh has the per Vertex Quality component.
Definition vertex_requirements.h:187
Concept that checks if a Mesh has the per Vertex TexCoord component.
Definition vertex_requirements.h:217
Definition face_requirements.h:56
Definition face_requirements.h:52
PrimitiveType
A simple type that enumerates the main primitive types.
Definition base.h:70
bool enableIfPerEdgeColorOptional(MeshType &m)
If the input mesh has a EdgeContainer, and the Edge Element has a Color Component,...
Definition edge_requirements.h:394
bool enableIfPerEdgeNormalOptional(MeshType &m)
If the input mesh has a EdgeContainer, and the Edge Element has a Normal Component,...
Definition edge_requirements.h:510
bool enableIfPerEdgeQualityOptional(MeshType &m)
If the input mesh has a EdgeContainer, and the Edge Element has a Quality Component,...
Definition edge_requirements.h:568
bool enableIfPerFaceQualityOptional(MeshType &m)
If the input mesh has a FaceContainer, and the Face Element has a Quality Component,...
Definition face_requirements.h:814
bool enableIfPerFaceWedgeTexCoordsOptional(MeshType &m)
If the input mesh has a FaceContainer, and the Face Element has a WedgeTexCoords Component,...
Definition face_requirements.h:936
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:910
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:669
bool isPerFaceQualityAvailable(const MeshType &m)
Returns true if the Quality component is available (enabled) in the Face element of the input mesh m.
Definition face_requirements.h:790
bool isPerFaceMaterialIndexAvailable(const MeshType &m)
Returns true if the MaterialIndex component is available (enabled) in the Face element of the input m...
Definition face_requirements.h:608
bool enableIfPerFaceMaterialIndexOptional(MeshType &m)
If the input mesh has a FaceContainer, and the Face Element has a MaterialIndex Component,...
Definition face_requirements.h:633
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:492
bool enableIfPerFaceNormalOptional(MeshType &m)
If the input mesh has a FaceContainer, and the Face Element has a Normal Component,...
Definition face_requirements.h:693
bool enableIfPerFaceColorOptional(MeshType &m)
If the input mesh has a FaceContainer, and the Face Element has a Color Component,...
Definition face_requirements.h:516
The CustomComponent struct is a simple structure that describes a custom component of an Element (or ...
Definition mesh_info.h:121