ug4
|
Applies piecewise smooth loop subdivision rules. More...
#include <subdivision_projector.h>
Public Member Functions | |
virtual number | new_vertex (Vertex *vrt, Edge *parent) |
called when a new vertex was created from an old edge. | |
virtual void | refinement_begins (const ISubGrid *sg) |
called before refinement begins | |
virtual bool | refinement_begins_requires_subgrid () const |
virtual void | refinement_ends () |
called when refinement is done | |
virtual void | set_concerned_elements (SPElementCallback cb) |
virtual void | set_crease_callback (Grid::edge_traits::callback cbIsCrease) |
virtual void | set_geometry (SPIGeometry3d geometry) |
SubdivisionProjector () | |
SubdivisionProjector (Grid::edge_traits::callback cbIsCrease) | |
SubdivisionProjector (SPIGeometry3d geometry) | |
SubdivisionProjector (SPIGeometry3d geometry, Grid::edge_traits::callback cbIsCrease) | |
![]() | |
virtual SPIGeometry3d | geometry () const |
virtual number | new_vertex (Vertex *vrt, Face *parent) |
called when a new vertex was created from an old face. | |
virtual number | new_vertex (Vertex *vrt, Vertex *parent) |
called when a new vertex was created from an old vertex. | |
virtual number | new_vertex (Vertex *vrt, Volume *parent) |
called when a new vertex was created from an old volume. | |
RefinementProjector () | |
RefinementProjector (SPElementCallback cb) | |
RefinementProjector (SPIGeometry3d geometry) | |
RefinementProjector (SPIGeometry3d geometry, SPElementCallback concernedElems) | |
virtual | ~RefinementProjector () |
Protected Member Functions | |
size_t | concerned_nbr_faces (Edge *edge, Grid::face_traits::secure_container *assFaces=NULL, Face *facesOut[2]=NULL) |
size_t | nbr_crease_edges (Vertex *vrt, Grid::edge_traits::secure_container *assEdges=NULL, Edge *creaseEdgesOut[2]=NULL) |
![]() | |
IGeometry3d & | geom () |
const IGeometry3d & | geom () const |
template<class TElem > | |
bool | is_concerned (TElem *e) |
vector3 | pos (Vertex *v) const |
void | set_pos (Vertex *v, const vector3 &p) |
Private Types | |
typedef std::vector< std::pair< Vertex *, vector3 > > | new_pos_vec_t |
Private Member Functions | |
template<class Archive > | |
void | serialize (Archive &ar, const unsigned int version) |
Private Attributes | |
Grid::edge_traits::callback | m_cbIsCrease |
bool | m_customConcernedElementsCallbackUsed |
new_pos_vec_t | m_newPositions |
Friends | |
class | boost::serialization::access |
Applies piecewise smooth loop subdivision rules.
|
private |
|
inline |
|
inline |
|
inline |
References new().
|
inline |
References new().
|
protected |
References ug::Grid::associated_elements(), ug::RefinementProjector::geom(), and ug::RefinementProjector::is_concerned().
Referenced by nbr_crease_edges(), new_vertex(), and refinement_begins().
|
protected |
References ug::Grid::associated_elements(), concerned_nbr_faces(), ug::RefinementProjector::geom(), and m_cbIsCrease.
Referenced by new_vertex(), and refinement_begins().
called when a new vertex was created from an old edge.
Reimplemented from ug::RefinementProjector.
References ug::Grid::associated_elements(), concerned_nbr_faces(), ug::RefinementProjector::geom(), ug::GetConnectedVertex(), ug::SubdivRules_PLoop::inst(), m_cbIsCrease, nbr_crease_edges(), ug::RefinementProjector::new_vertex(), p, ug::RefinementProjector::pos(), ug::SubdivRules_PLoop::ref_odd_crease_weights(), ug::SubdivRules_PLoop::ref_odd_inner_weights(), ug::RefinementProjector::set_pos(), ug::VecScaleAdd(), and ug::EdgeVertices::vertex().
|
virtual |
called before refinement begins
if not NULL, the specified sub-grid will contains all elements that will be refined and are affected by the given projector.
If the specialized implementation of refinement_begins requires this subgrid, the method 'refinement_begins_requires_subgrid' should be specialized and should return 'true'. In this case the subgrid should always be provided by the caller. If you call 'RefinementProjector::refinement_begins(sg);' at the beginning of your specialization, an error will be thrown if this is not the case.
Reimplemented from ug::RefinementProjector.
References ug::Grid::associated_elements(), concerned_nbr_faces(), ug::RefinementProjector::geom(), ug::GetConnectedVertex(), ug::ISubGrid::goc(), ug::SubdivRules_PLoop::inst(), lg_end_for, lg_for_each_const, m_newPositions, nbr_crease_edges(), p, ug::RefinementProjector::pos(), ug::SubdivRules_PLoop::ref_even_crease_weights(), ug::SubdivRules_PLoop::ref_even_inner_center_weight(), ug::SubdivRules_PLoop::ref_even_inner_nbr_weight(), ug::RefinementProjector::refinement_begins(), ug::VecAdd(), ug::VecScaleAdd(), and ug::VecSet().
|
inlinevirtual |
returns 'true' if a specialized projector requires the subgrid during its 'refinement_begins' method.
Reimplemented from ug::RefinementProjector.
|
virtual |
called when refinement is done
Reimplemented from ug::RefinementProjector.
References ug::RefinementProjector::geom(), ug::MultiGrid::get_child_vertex(), m_newPositions, and ug::RefinementProjector::set_pos().
|
inlineprivate |
References UG_EMPTY_BASE_CLASS_SERIALIZATION.
|
inlinevirtual |
Reimplemented from ug::RefinementProjector.
References m_customConcernedElementsCallbackUsed, and ug::RefinementProjector::set_concerned_elements().
|
inlinevirtual |
References m_cbIsCrease.
|
inlinevirtual |
|
friend |
|
private |
Referenced by nbr_crease_edges(), new_vertex(), and set_crease_callback().
|
private |
Referenced by set_concerned_elements(), and set_geometry().
|
private |
Referenced by refinement_begins(), and refinement_ends().