diff --git a/src/OpenMesh/Core/Utils/PropertyCreator.cc b/src/OpenMesh/Core/Utils/PropertyCreator.cc index 5b8900ff..38912284 100644 --- a/src/OpenMesh/Core/Utils/PropertyCreator.cc +++ b/src/OpenMesh/Core/Utils/PropertyCreator.cc @@ -41,6 +41,11 @@ #include "PropertyCreator.hh" +#include +#include +#include +//#include + namespace OpenMesh { PropertyCreationManager& PropertyCreationManager::instance() @@ -56,3 +61,76 @@ bool PropertyCreator::can_you_create(const std::string& _type_name) } /* namespace OpenMesh */ + +//OM_REGISTER_PROPERTY_TYPE(OpenMesh::FaceHandle) +//OM_REGISTER_PROPERTY_TYPE(OpenMesh::EdgeHandle) +//OM_REGISTER_PROPERTY_TYPE(OpenMesh::HalfedgeHandle) +//OM_REGISTER_PROPERTY_TYPE(OpenMesh::VertexHandle) + +OM_REGISTER_PROPERTY_TYPE(bool) +OM_REGISTER_PROPERTY_TYPE(char) +OM_REGISTER_PROPERTY_TYPE(signed char) +OM_REGISTER_PROPERTY_TYPE(double) +OM_REGISTER_PROPERTY_TYPE(float) +OM_REGISTER_PROPERTY_TYPE(int) + +OM_REGISTER_PROPERTY_TYPE(short) + +OM_REGISTER_PROPERTY_TYPE(unsigned char); +OM_REGISTER_PROPERTY_TYPE(unsigned int); +OM_REGISTER_PROPERTY_TYPE(unsigned short); +OM_REGISTER_PROPERTY_TYPE(unsigned long); + +OM_REGISTER_PROPERTY_TYPE(Vec1c); +OM_REGISTER_PROPERTY_TYPE(Vec1uc); +OM_REGISTER_PROPERTY_TYPE(Vec1s); +OM_REGISTER_PROPERTY_TYPE(Vec1us); +OM_REGISTER_PROPERTY_TYPE(Vec1i); +OM_REGISTER_PROPERTY_TYPE(Vec1ui); +OM_REGISTER_PROPERTY_TYPE(Vec1f); +OM_REGISTER_PROPERTY_TYPE(Vec1d); + +OM_REGISTER_PROPERTY_TYPE(Vec2c); +OM_REGISTER_PROPERTY_TYPE(Vec2uc); +OM_REGISTER_PROPERTY_TYPE(Vec2s); +OM_REGISTER_PROPERTY_TYPE(Vec2us); +OM_REGISTER_PROPERTY_TYPE(Vec2i); +OM_REGISTER_PROPERTY_TYPE(Vec2ui); +OM_REGISTER_PROPERTY_TYPE(Vec2f); +OM_REGISTER_PROPERTY_TYPE(Vec2d); + +OM_REGISTER_PROPERTY_TYPE(Vec3c); +OM_REGISTER_PROPERTY_TYPE(Vec3uc); +OM_REGISTER_PROPERTY_TYPE(Vec3s); +OM_REGISTER_PROPERTY_TYPE(Vec3us); +OM_REGISTER_PROPERTY_TYPE(Vec3i); +OM_REGISTER_PROPERTY_TYPE(Vec3ui); +OM_REGISTER_PROPERTY_TYPE(Vec3f); +OM_REGISTER_PROPERTY_TYPE(Vec3d); + +OM_REGISTER_PROPERTY_TYPE(Vec4c); +OM_REGISTER_PROPERTY_TYPE(Vec4uc); +OM_REGISTER_PROPERTY_TYPE(Vec4s); +OM_REGISTER_PROPERTY_TYPE(Vec4us); +OM_REGISTER_PROPERTY_TYPE(Vec4i); +OM_REGISTER_PROPERTY_TYPE(Vec4ui); +OM_REGISTER_PROPERTY_TYPE(Vec4f); +OM_REGISTER_PROPERTY_TYPE(Vec4d); + +OM_REGISTER_PROPERTY_TYPE(Vec5c); +OM_REGISTER_PROPERTY_TYPE(Vec5uc); +OM_REGISTER_PROPERTY_TYPE(Vec5s); +OM_REGISTER_PROPERTY_TYPE(Vec5us); +OM_REGISTER_PROPERTY_TYPE(Vec5i); +OM_REGISTER_PROPERTY_TYPE(Vec5ui); +OM_REGISTER_PROPERTY_TYPE(Vec5f); +OM_REGISTER_PROPERTY_TYPE(Vec5d); + +OM_REGISTER_PROPERTY_TYPE(Vec6c); +OM_REGISTER_PROPERTY_TYPE(Vec6uc); +OM_REGISTER_PROPERTY_TYPE(Vec6s); +OM_REGISTER_PROPERTY_TYPE(Vec6us); +OM_REGISTER_PROPERTY_TYPE(Vec6i); +OM_REGISTER_PROPERTY_TYPE(Vec6ui); +OM_REGISTER_PROPERTY_TYPE(Vec6f); +OM_REGISTER_PROPERTY_TYPE(Vec6d); diff --git a/src/OpenMesh/Core/Utils/PropertyCreator.hh b/src/OpenMesh/Core/Utils/PropertyCreator.hh index 8d49a417..f1edfa7a 100644 --- a/src/OpenMesh/Core/Utils/PropertyCreator.hh +++ b/src/OpenMesh/Core/Utils/PropertyCreator.hh @@ -50,11 +50,7 @@ #include #include -#include -#include -#include -#include -#include +#include namespace OpenMesh { @@ -144,36 +140,9 @@ class PropertyCreatorT : public PropertyCreatorImpl> }; } -///used to register custom type, where typename.hh does NOT provide a string for type recognition - -#define OM_REGISTER_PROPERTY_TYPE(ClassName, TypeString) \ -namespace OpenMesh { \ -inline std::string get_string_for_type(ClassName){ return TypeString;} \ - \ -namespace { /* ensure internal linkage of class */ \ -template <> \ -class PropertyCreatorT : public PropertyCreatorImpl> \ -{ \ -public: \ - using type = ClassName; \ - std::string type_string() override { return TypeString; } \ - \ - PropertyCreatorT() \ - { \ - PropertyCreationManager::instance().register_property_creator(this); \ - } \ - ~PropertyCreatorT() override {} \ -}; \ -} \ -/* static to ensure internal linkage of object */ \ -static PropertyCreatorT OM_CONCAT(property_creator_registration_object_, __LINE__); \ -} \ - - - ///used to register custom type, where typename.hh does provide a string for type recognition -/// -#define OM_REGISTER_PROPERTY_TYPE_USING_DEFAULT_STRING(ClassName) \ + +#define OM_REGISTER_PROPERTY_TYPE(ClassName) \ namespace OpenMesh { \ namespace { /* ensure internal linkage of class */ \ template <> \ @@ -181,7 +150,7 @@ class PropertyCreatorT : public PropertyCreatorImpl::string_for_value_type(); } \ \ PropertyCreatorT() \ { \ @@ -219,7 +188,8 @@ public: return; } omerr() << "No property creator registered that can create a property of type " << _type_name << std::endl; - omerr() << "You need to register your custom type using OM_REGISTER_PROPERTY_TYPE(ClassName, TypeString)." << std::endl; + omerr() << "You need to register your custom type using OM_REGISTER_PROPERTY_TYPE(ClassName) and declare the struct binary.\ + See documentation for more details." << std::endl; omerr() << "Adding property failed." << std::endl; } @@ -260,78 +230,3 @@ void create_property_from_string(BaseKernel& _mesh, const std::string& _type_nam } } /* namespace OpenMesh */ -OM_REGISTER_PROPERTY_TYPE_USING_DEFAULT_STRING(OpenMesh::FaceHandle) -OM_REGISTER_PROPERTY_TYPE_USING_DEFAULT_STRING(OpenMesh::EdgeHandle) -OM_REGISTER_PROPERTY_TYPE_USING_DEFAULT_STRING(OpenMesh::HalfedgeHandle) -OM_REGISTER_PROPERTY_TYPE_USING_DEFAULT_STRING(OpenMesh::VertexHandle) - -OM_REGISTER_PROPERTY_TYPE_USING_DEFAULT_STRING(bool) -OM_REGISTER_PROPERTY_TYPE_USING_DEFAULT_STRING(char) -OM_REGISTER_PROPERTY_TYPE_USING_DEFAULT_STRING(signed char) -OM_REGISTER_PROPERTY_TYPE_USING_DEFAULT_STRING(double) -OM_REGISTER_PROPERTY_TYPE_USING_DEFAULT_STRING(float) -OM_REGISTER_PROPERTY_TYPE_USING_DEFAULT_STRING(int) -OM_REGISTER_PROPERTY_TYPE_USING_DEFAULT_STRING(short) - -OM_REGISTER_PROPERTY_TYPE_USING_DEFAULT_STRING(unsigned char); -OM_REGISTER_PROPERTY_TYPE_USING_DEFAULT_STRING(unsigned int); -OM_REGISTER_PROPERTY_TYPE_USING_DEFAULT_STRING(unsigned short); -OM_REGISTER_PROPERTY_TYPE_USING_DEFAULT_STRING(unsigned long); - -OM_REGISTER_PROPERTY_TYPE_USING_DEFAULT_STRING(Vec1c); -OM_REGISTER_PROPERTY_TYPE_USING_DEFAULT_STRING(Vec1uc); -OM_REGISTER_PROPERTY_TYPE_USING_DEFAULT_STRING(Vec1s); -OM_REGISTER_PROPERTY_TYPE_USING_DEFAULT_STRING(Vec1us); -OM_REGISTER_PROPERTY_TYPE_USING_DEFAULT_STRING(Vec1i); -OM_REGISTER_PROPERTY_TYPE_USING_DEFAULT_STRING(Vec1ui); -OM_REGISTER_PROPERTY_TYPE_USING_DEFAULT_STRING(Vec1f); -OM_REGISTER_PROPERTY_TYPE_USING_DEFAULT_STRING(Vec1d); - -OM_REGISTER_PROPERTY_TYPE_USING_DEFAULT_STRING(Vec2c); -OM_REGISTER_PROPERTY_TYPE_USING_DEFAULT_STRING(Vec2uc); -OM_REGISTER_PROPERTY_TYPE_USING_DEFAULT_STRING(Vec2s); -OM_REGISTER_PROPERTY_TYPE_USING_DEFAULT_STRING(Vec2us); -OM_REGISTER_PROPERTY_TYPE_USING_DEFAULT_STRING(Vec2i); -OM_REGISTER_PROPERTY_TYPE_USING_DEFAULT_STRING(Vec2ui); -OM_REGISTER_PROPERTY_TYPE_USING_DEFAULT_STRING(Vec2f); -OM_REGISTER_PROPERTY_TYPE_USING_DEFAULT_STRING(Vec2d); - -OM_REGISTER_PROPERTY_TYPE_USING_DEFAULT_STRING(Vec3c); -OM_REGISTER_PROPERTY_TYPE_USING_DEFAULT_STRING(Vec3uc); -OM_REGISTER_PROPERTY_TYPE_USING_DEFAULT_STRING(Vec3s); -OM_REGISTER_PROPERTY_TYPE_USING_DEFAULT_STRING(Vec3us); -OM_REGISTER_PROPERTY_TYPE_USING_DEFAULT_STRING(Vec3i); -OM_REGISTER_PROPERTY_TYPE_USING_DEFAULT_STRING(Vec3ui); -OM_REGISTER_PROPERTY_TYPE_USING_DEFAULT_STRING(Vec3f); -OM_REGISTER_PROPERTY_TYPE_USING_DEFAULT_STRING(Vec3d); - -OM_REGISTER_PROPERTY_TYPE_USING_DEFAULT_STRING(Vec4c); -OM_REGISTER_PROPERTY_TYPE_USING_DEFAULT_STRING(Vec4uc); -OM_REGISTER_PROPERTY_TYPE_USING_DEFAULT_STRING(Vec4s); -OM_REGISTER_PROPERTY_TYPE_USING_DEFAULT_STRING(Vec4us); -OM_REGISTER_PROPERTY_TYPE_USING_DEFAULT_STRING(Vec4i); -OM_REGISTER_PROPERTY_TYPE_USING_DEFAULT_STRING(Vec4ui); -OM_REGISTER_PROPERTY_TYPE_USING_DEFAULT_STRING(Vec4f); -OM_REGISTER_PROPERTY_TYPE_USING_DEFAULT_STRING(Vec4d); - -OM_REGISTER_PROPERTY_TYPE_USING_DEFAULT_STRING(Vec5c); -OM_REGISTER_PROPERTY_TYPE_USING_DEFAULT_STRING(Vec5uc); -OM_REGISTER_PROPERTY_TYPE_USING_DEFAULT_STRING(Vec5s); -OM_REGISTER_PROPERTY_TYPE_USING_DEFAULT_STRING(Vec5us); -OM_REGISTER_PROPERTY_TYPE_USING_DEFAULT_STRING(Vec5i); -OM_REGISTER_PROPERTY_TYPE_USING_DEFAULT_STRING(Vec5ui); -OM_REGISTER_PROPERTY_TYPE_USING_DEFAULT_STRING(Vec5f); -OM_REGISTER_PROPERTY_TYPE_USING_DEFAULT_STRING(Vec5d); - -OM_REGISTER_PROPERTY_TYPE_USING_DEFAULT_STRING(Vec6c); -OM_REGISTER_PROPERTY_TYPE_USING_DEFAULT_STRING(Vec6uc); -OM_REGISTER_PROPERTY_TYPE_USING_DEFAULT_STRING(Vec6s); -OM_REGISTER_PROPERTY_TYPE_USING_DEFAULT_STRING(Vec6us); -OM_REGISTER_PROPERTY_TYPE_USING_DEFAULT_STRING(Vec6i); -OM_REGISTER_PROPERTY_TYPE_USING_DEFAULT_STRING(Vec6ui); -OM_REGISTER_PROPERTY_TYPE_USING_DEFAULT_STRING(Vec6f); -OM_REGISTER_PROPERTY_TYPE_USING_DEFAULT_STRING(Vec6d); - - - -