PropertyManager: Added copy_to method.

git-svn-id: http://www.openmesh.org/svnrepo/OpenMesh/trunk@1176 fdac6126-5c0c-442c-9429-916003d36597
This commit is contained in:
Hans-Christian Ebke
2014-10-08 08:49:06 +00:00
parent cc08cfa957
commit 5f66980952

View File

@@ -57,7 +57,7 @@ namespace OpenMesh {
* *
* \code * \code
* TriMesh mesh; * TriMesh mesh;
* PropertyManager<VPropHandleT<bool>, MeshT> visited(mesh, "visited.plugin-example.i8.informatik.rwth-aachen.de"); * PropertyManager<VPropHandleT<bool>, TriMesh> visited(mesh, "visited.plugin-example.i8.informatik.rwth-aachen.de");
* *
* for (TriMesh::VertexIter vh_it = mesh.begin(); ... ; ...) { * for (TriMesh::VertexIter vh_it = mesh.begin(); ... ; ...) {
* if (!visited[*vh_it]) { * if (!visited[*vh_it]) {
@@ -320,6 +320,40 @@ class PropertyManager {
(*this)[*begin] = value; (*this)[*begin] = value;
} }
/**
* Conveniently transfer the values managed by one property manager
* onto the values managed by a different property manager.
*
* @param begin Start iterator. Needs to dereference to HandleType. Will
* be used with this property manager.
* @param end End iterator. (Exclusive.) Will be used with this property
* manager.
* @param dst_propmanager The destination property manager.
* @param dst_begin Start iterator. Needs to dereference to the
* HandleType of dst_propmanager. Will be used with dst_propmanager.
* @param dst_end End iterator. (Exclusive.)
* Will be used with dst_propmanager. Used to double check the bounds.
*/
template<typename HandleTypeIterator, typename PROPTYPE_2,
typename MeshT_2, typename HandleTypeIterator_2>
void copy_to(HandleTypeIterator begin, HandleTypeIterator end,
PropertyManager<PROPTYPE_2, MeshT_2> &dst_propmanager,
HandleTypeIterator_2 dst_begin, HandleTypeIterator_2 dst_end) const {
for (; begin != end && dst_begin != dst_end; ++begin, ++dst_begin) {
dst_propmanager[dst_begin] = (*this)[*begin];
}
}
template<typename RangeType, typename PROPTYPE_2,
typename MeshT_2, typename RangeType_2>
void copy_to(RangeType range,
PropertyManager<PROPTYPE_2, MeshT_2> &dst_propmanager,
RangeType_2 dst_range) const {
copy_to(range.begin(), range.end(), dst_propmanager,
dst_range.begin(), dst_range.end());
}
private: private:
void deleteProperty() { void deleteProperty() {
if (!retain_) if (!retain_)