Fix SmartHandle implementation issues:
* Fix SmartHandle cyclical include dependencies. * Remove the SmartHandles include from Iterators and Circulators. * Move SmartHandle member implementations to the headers and remove SmartHandles.cc.
This commit is contained in:
@@ -53,7 +53,6 @@
|
|||||||
//== INCLUDES =================================================================
|
//== INCLUDES =================================================================
|
||||||
|
|
||||||
#include <OpenMesh/Core/System/config.h>
|
#include <OpenMesh/Core/System/config.h>
|
||||||
#include <OpenMesh/Core/Mesh/SmartHandles.hh>
|
|
||||||
#include <cassert>
|
#include <cassert>
|
||||||
#include <cstddef>
|
#include <cstddef>
|
||||||
#include <iterator>
|
#include <iterator>
|
||||||
@@ -196,7 +195,7 @@ class GenericCirculatorBaseT {
|
|||||||
public:
|
public:
|
||||||
GenericCirculatorBaseT() : mesh_(0), lap_counter_(0) {}
|
GenericCirculatorBaseT() : mesh_(0), lap_counter_(0) {}
|
||||||
|
|
||||||
GenericCirculatorBaseT(mesh_ref mesh, HalfedgeHandle heh, bool end = false) :
|
GenericCirculatorBaseT(mesh_ref mesh, typename Mesh::HalfedgeHandle heh, bool end = false) :
|
||||||
mesh_(&mesh), start_(heh), heh_(heh), lap_counter_(static_cast<int>(end && heh.is_valid())) {}
|
mesh_(&mesh), start_(heh), heh_(heh), lap_counter_(static_cast<int>(end && heh.is_valid())) {}
|
||||||
|
|
||||||
GenericCirculatorBaseT(const GenericCirculatorBaseT &rhs) :
|
GenericCirculatorBaseT(const GenericCirculatorBaseT &rhs) :
|
||||||
@@ -275,7 +274,7 @@ class GenericCirculatorT : protected GenericCirculatorBaseT<typename GenericCirc
|
|||||||
|
|
||||||
GenericCirculator_ValueHandleFns::init(this->mesh_, this->heh_, this->start_, this->lap_counter_);
|
GenericCirculator_ValueHandleFns::init(this->mesh_, this->heh_, this->start_, this->lap_counter_);
|
||||||
}
|
}
|
||||||
GenericCirculatorT(mesh_ref mesh, HalfedgeHandle heh, bool end = false) :
|
GenericCirculatorT(mesh_ref mesh, typename Mesh::HalfedgeHandle heh, bool end = false) :
|
||||||
GenericCirculatorBaseT<Mesh>(mesh, heh, end) {
|
GenericCirculatorBaseT<Mesh>(mesh, heh, end) {
|
||||||
|
|
||||||
GenericCirculator_ValueHandleFns::init(this->mesh_, this->heh_, this->start_, this->lap_counter_);
|
GenericCirculator_ValueHandleFns::init(this->mesh_, this->heh_, this->start_, this->lap_counter_);
|
||||||
@@ -448,7 +447,7 @@ class GenericCirculatorT_DEPRECATED : protected GenericCirculatorBaseT<typename
|
|||||||
|
|
||||||
GenericCirculator_ValueHandleFns::init(this->mesh_, this->heh_, this->start_, this->lap_counter_);
|
GenericCirculator_ValueHandleFns::init(this->mesh_, this->heh_, this->start_, this->lap_counter_);
|
||||||
}
|
}
|
||||||
GenericCirculatorT_DEPRECATED(mesh_ref mesh, HalfedgeHandle heh, bool end = false) :
|
GenericCirculatorT_DEPRECATED(mesh_ref mesh, typename Mesh::HalfedgeHandle heh, bool end = false) :
|
||||||
GenericCirculatorBaseT<Mesh>(mesh, heh, end) {
|
GenericCirculatorBaseT<Mesh>(mesh, heh, end) {
|
||||||
|
|
||||||
GenericCirculator_ValueHandleFns::init(this->mesh_, this->heh_, this->start_, this->lap_counter_);
|
GenericCirculator_ValueHandleFns::init(this->mesh_, this->heh_, this->start_, this->lap_counter_);
|
||||||
@@ -548,7 +547,7 @@ class GenericCirculatorT_DEPRECATED : protected GenericCirculatorBaseT<typename
|
|||||||
* current_halfedge_handle() is an implementation detail and should not
|
* current_halfedge_handle() is an implementation detail and should not
|
||||||
* be accessed from outside the iterator class.
|
* be accessed from outside the iterator class.
|
||||||
*/
|
*/
|
||||||
const HalfedgeHandle ¤t_halfedge_handle() const {
|
const typename Mesh::HalfedgeHandle ¤t_halfedge_handle() const {
|
||||||
return this->heh_;
|
return this->heh_;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -54,7 +54,6 @@
|
|||||||
|
|
||||||
#include <OpenMesh/Core/System/config.h>
|
#include <OpenMesh/Core/System/config.h>
|
||||||
#include <OpenMesh/Core/Mesh/Status.hh>
|
#include <OpenMesh/Core/Mesh/Status.hh>
|
||||||
#include <OpenMesh/Core/Mesh/SmartHandles.hh>
|
|
||||||
#include <cassert>
|
#include <cassert>
|
||||||
#include <cstddef>
|
#include <cstddef>
|
||||||
#include <iterator>
|
#include <iterator>
|
||||||
|
|||||||
@@ -1567,6 +1567,9 @@ struct PolyConnectivity::ElementRange<FaceHandle>
|
|||||||
|
|
||||||
}//namespace OpenMesh
|
}//namespace OpenMesh
|
||||||
|
|
||||||
|
#define OPENMESH_POLYCONNECTIVITY_INTERFACE_INCLUDE
|
||||||
|
#include <OpenMesh/Core/Mesh/SmartHandles.hh>
|
||||||
#include <OpenMesh/Core/Mesh/PolyConnectivity_inline_impl.hh>
|
#include <OpenMesh/Core/Mesh/PolyConnectivity_inline_impl.hh>
|
||||||
|
#undef OPENMESH_POLYCONNECTIVITY_INTERFACE_INCLUDE
|
||||||
|
|
||||||
#endif//OPENMESH_POLYCONNECTIVITY_HH
|
#endif//OPENMESH_POLYCONNECTIVITY_HH
|
||||||
|
|||||||
@@ -39,13 +39,12 @@
|
|||||||
* *
|
* *
|
||||||
* ========================================================================= */
|
* ========================================================================= */
|
||||||
|
|
||||||
#ifndef OPENMESH_POLYCONNECTIVITY_INLINE_IMPL_HH
|
#ifndef OPENMESH_POLYCONNECTIVITY_INTERFACE_INCLUDE
|
||||||
#define OPENMESH_POLYCONNECTIVITY_INLINE_IMPL_HH
|
#error Don't include this directly, include instead PolyConnectivity.hh
|
||||||
|
#endif // OPENMESH_POLYCONNECTIVITY_INTERFACE_INCLUDE
|
||||||
|
|
||||||
#include <OpenMesh/Core/Mesh/PolyConnectivity.hh>
|
|
||||||
#include <OpenMesh/Core/Mesh/IteratorsT.hh>
|
#include <OpenMesh/Core/Mesh/IteratorsT.hh>
|
||||||
#include <OpenMesh/Core/Mesh/CirculatorsT.hh>
|
#include <OpenMesh/Core/Mesh/CirculatorsT.hh>
|
||||||
#include <OpenMesh/Core/Mesh/SmartHandles.hh>
|
|
||||||
|
|
||||||
namespace OpenMesh {
|
namespace OpenMesh {
|
||||||
|
|
||||||
@@ -772,7 +771,62 @@ inline PolyConnectivity::ConstHalfedgeLoopCCWIter PolyConnectivity::chl_ccwend(H
|
|||||||
{ return ConstHalfedgeLoopCCWIter(*this, _heh, true); }
|
{ return ConstHalfedgeLoopCCWIter(*this, _heh, true); }
|
||||||
|
|
||||||
|
|
||||||
|
inline PolyConnectivity::ConstVertexFaceRange SmartVertexHandle::faces() const
|
||||||
|
{
|
||||||
|
assert(mesh() != nullptr);
|
||||||
|
return mesh()->vf_range(*this);
|
||||||
|
}
|
||||||
|
|
||||||
|
inline PolyConnectivity::ConstVertexEdgeRange SmartVertexHandle::edges() const
|
||||||
|
{
|
||||||
|
assert(mesh() != nullptr);
|
||||||
|
return mesh()->ve_range(*this);
|
||||||
|
}
|
||||||
|
|
||||||
|
inline PolyConnectivity::ConstVertexVertexRange
|
||||||
|
SmartVertexHandle::vertices() const
|
||||||
|
{
|
||||||
|
assert(mesh() != nullptr);
|
||||||
|
return mesh()->vv_range(*this);
|
||||||
|
}
|
||||||
|
|
||||||
|
inline PolyConnectivity::ConstVertexIHalfedgeRange
|
||||||
|
SmartVertexHandle::incoming_halfedges() const
|
||||||
|
{
|
||||||
|
assert(mesh() != nullptr);
|
||||||
|
return mesh()->vih_range(*this);
|
||||||
|
}
|
||||||
|
|
||||||
|
inline PolyConnectivity::ConstVertexOHalfedgeRange
|
||||||
|
SmartVertexHandle::outgoing_halfedges() const
|
||||||
|
{
|
||||||
|
assert(mesh() != nullptr);
|
||||||
|
return mesh()->voh_range(*this);
|
||||||
|
}
|
||||||
|
|
||||||
|
inline PolyConnectivity::ConstFaceVertexRange SmartFaceHandle::vertices() const
|
||||||
|
{
|
||||||
|
assert(mesh() != nullptr);
|
||||||
|
return mesh()->fv_range(*this);
|
||||||
|
}
|
||||||
|
|
||||||
|
inline PolyConnectivity::ConstFaceHalfedgeRange
|
||||||
|
SmartFaceHandle::halfedges() const
|
||||||
|
{
|
||||||
|
assert(mesh() != nullptr);
|
||||||
|
return mesh()->fh_range(*this);
|
||||||
|
}
|
||||||
|
|
||||||
|
inline PolyConnectivity::ConstFaceEdgeRange SmartFaceHandle::edges() const
|
||||||
|
{
|
||||||
|
assert(mesh() != nullptr);
|
||||||
|
return mesh()->fe_range(*this);
|
||||||
|
}
|
||||||
|
|
||||||
|
inline PolyConnectivity::ConstFaceFaceRange SmartFaceHandle::faces() const
|
||||||
|
{
|
||||||
|
assert(mesh() != nullptr);
|
||||||
|
return mesh()->ff_range(*this);
|
||||||
|
}
|
||||||
|
|
||||||
}//namespace OpenMesh
|
}//namespace OpenMesh
|
||||||
|
|
||||||
#endif // OPENMESH_POLYCONNECTIVITY_INLINE_IMPL_HH
|
|
||||||
|
|
||||||
|
|||||||
@@ -1,115 +0,0 @@
|
|||||||
/* ========================================================================= *
|
|
||||||
* *
|
|
||||||
* OpenMesh *
|
|
||||||
* Copyright (c) 2001-2019, RWTH-Aachen University *
|
|
||||||
* Department of Computer Graphics and Multimedia *
|
|
||||||
* All rights reserved. *
|
|
||||||
* www.openmesh.org *
|
|
||||||
* *
|
|
||||||
*---------------------------------------------------------------------------*
|
|
||||||
* This file is part of OpenMesh. *
|
|
||||||
*---------------------------------------------------------------------------*
|
|
||||||
* *
|
|
||||||
* Redistribution and use in source and binary forms, with or without *
|
|
||||||
* modification, are permitted provided that the following conditions *
|
|
||||||
* are met: *
|
|
||||||
* *
|
|
||||||
* 1. Redistributions of source code must retain the above copyright notice, *
|
|
||||||
* this list of conditions and the following disclaimer. *
|
|
||||||
* *
|
|
||||||
* 2. Redistributions in binary form must reproduce the above copyright *
|
|
||||||
* notice, this list of conditions and the following disclaimer in the *
|
|
||||||
* documentation and/or other materials provided with the distribution. *
|
|
||||||
* *
|
|
||||||
* 3. Neither the name of the copyright holder nor the names of its *
|
|
||||||
* contributors may be used to endorse or promote products derived from *
|
|
||||||
* this software without specific prior written permission. *
|
|
||||||
* *
|
|
||||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS *
|
|
||||||
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED *
|
|
||||||
* TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A *
|
|
||||||
* PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER *
|
|
||||||
* OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, *
|
|
||||||
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, *
|
|
||||||
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR *
|
|
||||||
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF *
|
|
||||||
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING *
|
|
||||||
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS *
|
|
||||||
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *
|
|
||||||
* *
|
|
||||||
* ========================================================================= */
|
|
||||||
|
|
||||||
|
|
||||||
//== INCLUDES =================================================================
|
|
||||||
|
|
||||||
#include <OpenMesh/Core/Mesh/PolyConnectivity.hh>
|
|
||||||
#include "SmartHandles.hh"
|
|
||||||
|
|
||||||
|
|
||||||
//== NAMESPACES ===============================================================
|
|
||||||
|
|
||||||
namespace OpenMesh {
|
|
||||||
|
|
||||||
//TODO: I was not able to leave those in the header. If you find a way to do that, please do.
|
|
||||||
|
|
||||||
PolyConnectivity::ConstVertexFaceRange SmartVertexHandle::faces() const
|
|
||||||
{
|
|
||||||
assert(mesh() != nullptr);
|
|
||||||
return mesh()->vf_range(*this);
|
|
||||||
}
|
|
||||||
|
|
||||||
PolyConnectivity::ConstVertexEdgeRange SmartVertexHandle::edges() const
|
|
||||||
{
|
|
||||||
assert(mesh() != nullptr);
|
|
||||||
return mesh()->ve_range(*this);
|
|
||||||
}
|
|
||||||
|
|
||||||
PolyConnectivity::ConstVertexVertexRange SmartVertexHandle::vertices() const
|
|
||||||
{
|
|
||||||
assert(mesh() != nullptr);
|
|
||||||
return mesh()->vv_range(*this);
|
|
||||||
}
|
|
||||||
|
|
||||||
PolyConnectivity::ConstVertexIHalfedgeRange SmartVertexHandle::incoming_halfedges() const
|
|
||||||
{
|
|
||||||
assert(mesh() != nullptr);
|
|
||||||
return mesh()->vih_range(*this);
|
|
||||||
}
|
|
||||||
|
|
||||||
PolyConnectivity::ConstVertexOHalfedgeRange SmartVertexHandle::outgoing_halfedges() const
|
|
||||||
{
|
|
||||||
assert(mesh() != nullptr);
|
|
||||||
return mesh()->voh_range(*this);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
PolyConnectivity::ConstFaceVertexRange SmartFaceHandle::vertices() const
|
|
||||||
{
|
|
||||||
assert(mesh() != nullptr);
|
|
||||||
return mesh()->fv_range(*this);
|
|
||||||
}
|
|
||||||
|
|
||||||
PolyConnectivity::ConstFaceHalfedgeRange SmartFaceHandle::halfedges() const
|
|
||||||
{
|
|
||||||
assert(mesh() != nullptr);
|
|
||||||
return mesh()->fh_range(*this);
|
|
||||||
}
|
|
||||||
|
|
||||||
PolyConnectivity::ConstFaceEdgeRange SmartFaceHandle::edges() const
|
|
||||||
{
|
|
||||||
assert(mesh() != nullptr);
|
|
||||||
return mesh()->fe_range(*this);
|
|
||||||
}
|
|
||||||
|
|
||||||
PolyConnectivity::ConstFaceFaceRange SmartFaceHandle::faces() const
|
|
||||||
{
|
|
||||||
assert(mesh() != nullptr);
|
|
||||||
return mesh()->ff_range(*this);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
//=============================================================================
|
|
||||||
} // namespace OpenMesh
|
|
||||||
//=============================================================================
|
|
||||||
|
|
||||||
//=============================================================================
|
|
||||||
@@ -39,16 +39,9 @@
|
|||||||
* *
|
* *
|
||||||
* ========================================================================= */
|
* ========================================================================= */
|
||||||
|
|
||||||
|
#ifndef OPENMESH_POLYCONNECTIVITY_INTERFACE_INCLUDE
|
||||||
#pragma once
|
#error Don't include this directly, include instead PolyConnectivity.hh
|
||||||
|
#endif//OPENMESH_POLYCONNECTIVITY_INTERFACE_INCLUDE
|
||||||
|
|
||||||
//== INCLUDES =================================================================
|
|
||||||
|
|
||||||
#include "Handles.hh"
|
|
||||||
#include <OpenMesh/Core/Mesh/PolyConnectivity.hh>
|
|
||||||
#include <OpenMesh/Core/System/OpenMeshDLLMacros.hh>
|
|
||||||
|
|
||||||
|
|
||||||
//== NAMESPACES ===============================================================
|
//== NAMESPACES ===============================================================
|
||||||
|
|
||||||
@@ -357,9 +350,6 @@ inline bool SmartFaceHandle::is_boundary() const
|
|||||||
assert(mesh() != nullptr);
|
assert(mesh() != nullptr);
|
||||||
return mesh()->is_boundary(*this);
|
return mesh()->is_boundary(*this);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
//=============================================================================
|
//=============================================================================
|
||||||
} // namespace OpenMesh
|
} // namespace OpenMesh
|
||||||
//=============================================================================
|
//=============================================================================
|
||||||
|
|||||||
Reference in New Issue
Block a user