update documentation of new property manager
This commit is contained in:
@@ -1,11 +1,11 @@
|
|||||||
#include <OpenMesh/Core/IO/MeshIO.hh>
|
#include <OpenMesh/Core/IO/MeshIO.hh>
|
||||||
#include <OpenMesh/Core/Mesh/TriMesh_ArrayKernelT.hh>
|
#include <OpenMesh/Core/Mesh/DefaultTriMesh.hh>
|
||||||
#include <OpenMesh/Core/Utils/PropertyManager.hh>
|
#include <OpenMesh/Core/Utils/PropertyManager.hh>
|
||||||
|
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
|
||||||
using MyMesh = OpenMesh::TriMesh_ArrayKernelT<>;
|
using MyMesh = OpenMesh::TriMesh;
|
||||||
|
|
||||||
int main(int argc, char** argv)
|
int main(int argc, char** argv)
|
||||||
{
|
{
|
||||||
@@ -27,7 +27,7 @@ int main(int argc, char** argv)
|
|||||||
|
|
||||||
{
|
{
|
||||||
// Add a vertex property storing the computed centers of gravity
|
// Add a vertex property storing the computed centers of gravity
|
||||||
auto cog = OpenMesh::makeTemporaryProperty<OpenMesh::VertexHandle, MyMesh::Point>(mesh);
|
auto cog = OpenMesh::VProp<MyMesh::Point>(mesh);
|
||||||
|
|
||||||
// Smooth the mesh several times
|
// Smooth the mesh several times
|
||||||
for (int i = 0; i < iterations; ++i) {
|
for (int i = 0; i < iterations; ++i) {
|
||||||
|
|||||||
@@ -13,6 +13,7 @@
|
|||||||
<li>Property System: Get rid of the OM_FORCE_STATIC_CAST defines. We use the type ids to check if the cast is valid or not. This will add more type safety. </li>
|
<li>Property System: Get rid of the OM_FORCE_STATIC_CAST defines. We use the type ids to check if the cast is valid or not. This will add more type safety. </li>
|
||||||
<li>Default Traits: Added DefaultTraitsDouble as a version of the default traits that uses double precision for positions and normals as well as float for colors. </li>
|
<li>Default Traits: Added DefaultTraitsDouble as a version of the default traits that uses double precision for positions and normals as well as float for colors. </li>
|
||||||
<li>Default Mesh Types: Added typdefs for a Triangle Mesh and a PolyMesh which use DefaultTraitsDouble and can be used as default mesh type be the user. </li>
|
<li>Default Mesh Types: Added typdefs for a Triangle Mesh and a PolyMesh which use DefaultTraitsDouble and can be used as default mesh type be the user. </li>
|
||||||
|
<li>Template Programming Convenience: Added n_elements which returns the number of elements corresponding to the handle type given as template argument. Also added elements and all_elements methods returning ranges of the elements corresponding to the handle type given as template argument.
|
||||||
</ul>
|
</ul>
|
||||||
|
|
||||||
|
|
||||||
@@ -27,6 +28,7 @@
|
|||||||
<ul>
|
<ul>
|
||||||
<li>Change PropertyManager::operator* to access the property value for mesh properties</li>
|
<li>Change PropertyManager::operator* to access the property value for mesh properties</li>
|
||||||
<li>PropertyManager: add hasProperty function</li>
|
<li>PropertyManager: add hasProperty function</li>
|
||||||
|
<li>PropertyManager rework: The behavior of the PropertyManager has been changed, hoepfully making it more usable. See tutoial.
|
||||||
</ul>
|
</ul>
|
||||||
|
|
||||||
<b>IO</b>
|
<b>IO</b>
|
||||||
|
|||||||
@@ -11,34 +11,33 @@ let %OpenMesh manage the data.
|
|||||||
It would be even more helpful if we could attach such properties
|
It would be even more helpful if we could attach such properties
|
||||||
dynamically to the mesh.
|
dynamically to the mesh.
|
||||||
|
|
||||||
Custom properties can be conveniently created and attached to meshes with the following functions:
|
Custom properties can be conveniently created and attached to meshes by creating an object of type OpenMesh::PropertyManager. A PropertyManager manages the lifetime of the property and provides read / write access to its values.
|
||||||
- makeTemporaryProperty() creates a property that is temporary to the current scope.
|
|
||||||
- getOrMakeProperty() is used for creating and accessing permanent named properties on a mesh.
|
|
||||||
- getProperty() is used for accessing an existing permanent named property on a mesh.
|
|
||||||
|
|
||||||
All three functions take two template arguments:
|
You can use the typedefs VProp, HProp, EProp, FProp, and MProp in order to create a PropertyManager attached to vertices, halfedge, edges, faces and the mesh respectively. Each of these takes as template argument the type of the property value that is attached to each element (e.g., \p int, \p double, etc.).
|
||||||
- First, the type of the mesh element that the property is attached to (i.e. OpenMesh::VertexHandle, OpenMesh::HalfedgeHandle, OpenMesh::EdgeHandle, or OpenMesh::FaceHandle). <em>Mesh properties</em> (i.e. singleton properties that are attached to an entire mesh instead of individual elements) are accessed by passing \c void instead of a handle type.
|
|
||||||
- Second, the type of the property value that is attached to each element (e.g., \p int, \p double, etc.).
|
We differentiate between two kinds of properties. <em>Named</em> and <em>temporary</em> properties. Temporary properties are created by just providing the constructor with a mesh on which the property should be created. These properties will be removed as soon as the PropertyManager goes out of scope. If in addition to the mesh a property name is provided, a named property will be created which will stay alive even after the PropertyManager goes out of scope. If a PropertyManager is given a name of an already existing property, it will provide read and write access to the same property.
|
||||||
|
|
||||||
|
Finally, an optional first parameter can be given containing a value that will be used to initialize the property for all elements if the property is freshly created (i.e. always for temporary properties, and only the first time a specific name is used).
|
||||||
|
|
||||||
All three functions return a handle object (of type OpenMesh::PropertyManager) that manages the lifetime of the property and provides read / write access to its values.
|
|
||||||
|
|
||||||
Here are a few examples of how to create and access mesh properties:
|
Here are a few examples of how to create and access mesh properties:
|
||||||
|
|
||||||
\code
|
\code
|
||||||
// Add a temporary mesh property that stores a double value for every vertex
|
// Add a temporary mesh property that stores a double value for every vertex
|
||||||
auto temperature = OpenMesh::getOrMakeProperty<OpenMesh::VertexHandle, double>(mesh, "temperature");
|
auto temperature = OpenMesh::VProp<double>(mesh);
|
||||||
OpenMesh::VertexHandle vh = ...;
|
OpenMesh::VertexHandle vh = ...;
|
||||||
temperature[vh] = 1.0;
|
temperature[vh] = 1.0;
|
||||||
// The temperature property will be removed from the mesh when the handle reaches the end of the scope.
|
// The temperature property will be removed from the mesh when the handle reaches the end of the scope.
|
||||||
|
|
||||||
// Obtain an existing mesh property that stores a 2D vector for every halfedge
|
// Obtain an existing property that stores a 2D vector for every halfedge
|
||||||
// (Beware: the next line might throw if the expected property doesn't exist.)
|
// (or create that property if it does not exist already) and initilize it with the Vector(1,1))
|
||||||
auto uv = OpenMesh::getProperty<OpenMesh::HalfedgeHandle, OpenMesh::Vec2d>(mesh, "uv");
|
auto uv = OpenMesh::HProp<OpenMesh::Vec2d>(mesh, "uv", OpenMesh::Vec2d(1,1));
|
||||||
OpenMesh::VertexHandle heh = ...;
|
OpenMesh::VertexHandle heh = ...;
|
||||||
std::cout << temperature[heh][0] << " " << temperature[heh][1] << std::endl;
|
std::cout << temperature[heh][0] << " " << temperature[heh][1] << std::endl;
|
||||||
|
|
||||||
// Add a permanent mesh property containing a description string
|
// Obtain an existing mesh property (or create that property if it does not exist already)
|
||||||
auto desc = OpenMesh::getOrMakeProperty<void, std::string>(mesh, "desc");
|
// containing a description string
|
||||||
|
auto desc = OpenMesh::MProp<std::string>(mesh, "desc");
|
||||||
*desc = "This is a very nice mesh.";
|
*desc = "This is a very nice mesh.";
|
||||||
\endcode
|
\endcode
|
||||||
|
|
||||||
|
|||||||
@@ -1,7 +1,9 @@
|
|||||||
/** \page tutorial_09 Using custom properties
|
/** \page tutorial_09 Using custom properties (old style)
|
||||||
|
|
||||||
This small code example shows how to attach and access additional properties on a mesh.
|
This small code example shows how to attach and access additional properties on a mesh.
|
||||||
|
|
||||||
|
<em>Note that this is an old style of using properties. Nowadays you should use the OpenMesh::PropertyManager instead.</em>
|
||||||
|
|
||||||
When you want to add an additional properties you have to attach it to a primitive of the
|
When you want to add an additional properties you have to attach it to a primitive of the
|
||||||
mesh. You can attach to verticies, halfedges, edges, faces or to the mesh itself. Use the
|
mesh. You can attach to verticies, halfedges, edges, faces or to the mesh itself. Use the
|
||||||
add_property function:
|
add_property function:
|
||||||
|
|||||||
Reference in New Issue
Block a user