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 =================================================================
|
||||
|
||||
#include <OpenMesh/Core/System/config.h>
|
||||
#include <OpenMesh/Core/Mesh/SmartHandles.hh>
|
||||
#include <cassert>
|
||||
#include <cstddef>
|
||||
#include <iterator>
|
||||
@@ -196,7 +195,7 @@ class GenericCirculatorBaseT {
|
||||
public:
|
||||
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())) {}
|
||||
|
||||
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_);
|
||||
}
|
||||
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) {
|
||||
|
||||
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_);
|
||||
}
|
||||
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) {
|
||||
|
||||
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
|
||||
* be accessed from outside the iterator class.
|
||||
*/
|
||||
const HalfedgeHandle ¤t_halfedge_handle() const {
|
||||
const typename Mesh::HalfedgeHandle ¤t_halfedge_handle() const {
|
||||
return this->heh_;
|
||||
}
|
||||
|
||||
|
||||
@@ -54,7 +54,6 @@
|
||||
|
||||
#include <OpenMesh/Core/System/config.h>
|
||||
#include <OpenMesh/Core/Mesh/Status.hh>
|
||||
#include <OpenMesh/Core/Mesh/SmartHandles.hh>
|
||||
#include <cassert>
|
||||
#include <cstddef>
|
||||
#include <iterator>
|
||||
|
||||
@@ -1567,6 +1567,9 @@ struct PolyConnectivity::ElementRange<FaceHandle>
|
||||
|
||||
}//namespace OpenMesh
|
||||
|
||||
#define OPENMESH_POLYCONNECTIVITY_INTERFACE_INCLUDE
|
||||
#include <OpenMesh/Core/Mesh/SmartHandles.hh>
|
||||
#include <OpenMesh/Core/Mesh/PolyConnectivity_inline_impl.hh>
|
||||
#undef OPENMESH_POLYCONNECTIVITY_INTERFACE_INCLUDE
|
||||
|
||||
#endif//OPENMESH_POLYCONNECTIVITY_HH
|
||||
|
||||
@@ -39,13 +39,12 @@
|
||||
* *
|
||||
* ========================================================================= */
|
||||
|
||||
#ifndef OPENMESH_POLYCONNECTIVITY_INLINE_IMPL_HH
|
||||
#define OPENMESH_POLYCONNECTIVITY_INLINE_IMPL_HH
|
||||
#ifndef OPENMESH_POLYCONNECTIVITY_INTERFACE_INCLUDE
|
||||
#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/CirculatorsT.hh>
|
||||
#include <OpenMesh/Core/Mesh/SmartHandles.hh>
|
||||
|
||||
namespace OpenMesh {
|
||||
|
||||
@@ -772,7 +771,62 @@ inline PolyConnectivity::ConstHalfedgeLoopCCWIter PolyConnectivity::chl_ccwend(H
|
||||
{ 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
|
||||
|
||||
#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 @@
|
||||
* *
|
||||
* ========================================================================= */
|
||||
|
||||
|
||||
#pragma once
|
||||
|
||||
|
||||
//== INCLUDES =================================================================
|
||||
|
||||
#include "Handles.hh"
|
||||
#include <OpenMesh/Core/Mesh/PolyConnectivity.hh>
|
||||
#include <OpenMesh/Core/System/OpenMeshDLLMacros.hh>
|
||||
|
||||
#ifndef OPENMESH_POLYCONNECTIVITY_INTERFACE_INCLUDE
|
||||
#error Don't include this directly, include instead PolyConnectivity.hh
|
||||
#endif//OPENMESH_POLYCONNECTIVITY_INTERFACE_INCLUDE
|
||||
|
||||
//== NAMESPACES ===============================================================
|
||||
|
||||
@@ -357,9 +350,6 @@ inline bool SmartFaceHandle::is_boundary() const
|
||||
assert(mesh() != nullptr);
|
||||
return mesh()->is_boundary(*this);
|
||||
}
|
||||
|
||||
|
||||
|
||||
//=============================================================================
|
||||
} // namespace OpenMesh
|
||||
//=============================================================================
|
||||
|
||||
Reference in New Issue
Block a user