SCIRun
5.0
|
#include <PointCloudMesh.h>
Classes | |
struct | Cell |
struct | Edge |
class | ElemData |
struct | Face |
struct | Node |
Index and Iterator types required for Mesh Concept. More... | |
Public Types | |
typedef SCIRun::index_type | under_type |
typedef SCIRun::index_type | index_type |
typedef SCIRun::size_type | size_type |
typedef SCIRun::mask_type | mask_type |
typedef boost::shared_ptr < PointCloudMesh< Basis > > | handle_type |
typedef Basis | basis_type |
typedef Node | Elem |
typedef Node | DElem |
![]() | |
enum | { UNKNOWN = 0, STRUCTURED = 1 << 1, UNSTRUCTURED = 1 << 2, REGULAR = 1 << 3, IRREGULAR = 1 << 4 } |
These will become obsolete at some point. More... | |
enum | { NONE_E = 0, NODES_E = 1 << 0, EDGES_E = 1 << 1, FACES_E = 1 << 2, CELLS_E = 1 << 3, ELEMS_E = 1 << 4, DELEMS_E = 1 << 5, ENODES_E = 1 << 6, ALL_ELEMENTS_E = NODES_E | EDGES_E | FACES_E | CELLS_E | ENODES_E | ELEMS_E | DELEMS_E, NORMALS_E = 1 << 7, NODE_NEIGHBORS_E = 1 << 8, ELEM_NEIGHBORS_E = 1 << 9, NEIGHBORS_E = NODE_NEIGHBORS_E | ELEM_NEIGHBORS_E, NODE_LOCATE_E = 1 << 10, ELEM_LOCATE_E = 1 << 11, LOCATE_E = NODE_LOCATE_E | ELEM_LOCATE_E, EPSILON_E = 1 << 12, BOUNDING_BOX_E = 1 << 12, FIND_CLOSEST_NODE_E = 1 << 13, FIND_CLOSEST_ELEM_E = 1 << 14, FIND_CLOSEST_E = FIND_CLOSEST_NODE_E | FIND_CLOSEST_ELEM_E } |
Synchronize system. More... | |
![]() | |
typedef HasIntegerId::id_type | id_type |
![]() | |
typedef IdType | id_type |
![]() | |
typedef SCIRun::mask_type | mask_type |
typedef SCIRun::index_type | under_type |
typedef SCIRun::index_type | index_type |
typedef SCIRun::index_type | size_type |
typedef std::vector< index_type > | array_type |
typedef std::vector< size_type > | dimension_type |
typedef boost::shared_ptr < MeshFacade< VMesh > > | MeshFacadeHandle |
Public Member Functions | |
PointCloudMesh () | |
Construct a new mesh. More... | |
PointCloudMesh (const PointCloudMesh ©) | |
Copy a mesh, needed for detaching the mesh from a field. More... | |
virtual PointCloudMesh * | clone () const |
virtual | ~PointCloudMesh () |
Destructor. More... | |
virtual VMesh * | vmesh () |
Access point to virtual interface. More... | |
virtual MeshFacadeHandle | getFacade () const |
virtual int | basis_order () |
virtual int | dimensionality () const |
Topological dimension. More... | |
virtual int | topology_geometry () const |
virtual Core::Geometry::BBox | get_bounding_box () const |
Get the bounding box of the field. More... | |
virtual void | get_canonical_transform (Core::Geometry::Transform &t) const |
virtual void | transform (const Core::Geometry::Transform &t) |
Core::Geometry::Transform a field (transform all nodes using this transformation matrix) More... | |
virtual bool | is_editable () const |
Check whether mesh can be altered by adding nodes or elements. More... | |
virtual bool | has_normals () const |
Has this mesh normals. More... | |
virtual bool | synchronize (mask_type sync) |
virtual bool | unsynchronize (mask_type sync) |
bool | clear_synchronization () |
Basis & | get_basis () |
Get the basis class. More... | |
void | begin (typename Node::iterator &) const |
begin/end iterators More... | |
void | begin (typename Edge::iterator &) const |
void | begin (typename Face::iterator &) const |
void | begin (typename Cell::iterator &) const |
void | end (typename Node::iterator &) const |
void | end (typename Edge::iterator &) const |
void | end (typename Face::iterator &) const |
void | end (typename Cell::iterator &) const |
void | size (typename Node::size_type &) const |
Get the iteration sizes. More... | |
void | size (typename Edge::size_type &) const |
void | size (typename Face::size_type &) const |
void | size (typename Cell::size_type &) const |
void | to_index (typename Node::index_type &index, index_type i) const |
void | to_index (typename Edge::index_type &index, index_type i) const |
void | to_index (typename Face::index_type &index, index_type i) const |
void | to_index (typename Cell::index_type &index, index_type i) const |
void | get_nodes (typename Node::array_type &a, typename Node::index_type i) const |
void | get_nodes (typename Node::array_type &, typename Edge::index_type) const |
void | get_nodes (typename Node::array_type &, typename Face::index_type) const |
void | get_nodes (typename Node::array_type &, typename Cell::index_type) const |
void | get_edges (typename Edge::array_type &, typename Node::index_type) const |
void | get_edges (typename Edge::array_type &, typename Edge::index_type) const |
void | get_edges (typename Edge::array_type &, typename Face::index_type) const |
void | get_edges (typename Edge::array_type &, typename Cell::index_type) const |
void | get_faces (typename Face::array_type &, typename Node::index_type) const |
void | get_faces (typename Face::array_type &, typename Edge::index_type) const |
void | get_faces (typename Face::array_type &, typename Face::index_type) const |
void | get_faces (typename Face::array_type &, typename Cell::index_type) const |
void | get_cells (typename Cell::array_type &, typename Node::index_type) const |
void | get_cells (typename Cell::array_type &, typename Edge::index_type) const |
void | get_cells (typename Cell::array_type &, typename Face::index_type) const |
void | get_cells (typename Cell::array_type &, typename Cell::index_type) const |
void | get_elems (typename Elem::array_type &result, typename Node::index_type idx) const |
get the parent element(s) of the given index More... | |
void | get_elems (typename Elem::array_type &, typename Edge::index_type) const |
void | get_elems (typename Elem::array_type &, typename Face::index_type) const |
void | get_elems (typename Elem::array_type &, typename Cell::index_type) const |
void | get_delems (typename DElem::array_type &, typename Node::index_type) const |
void | get_delems (typename DElem::array_type &, typename Edge::index_type) const |
void | get_delems (typename DElem::array_type &, typename Face::index_type) const |
void | get_delems (typename DElem::array_type &, typename Cell::index_type) const |
template<class VECTOR > | |
void | pwl_approx_edge (VECTOR &, typename Elem::index_type, unsigned int, unsigned int) const |
template<class VECTOR > | |
void | pwl_approx_face (VECTOR &, typename Elem::index_type, unsigned int, unsigned int) const |
void | get_center (Core::Geometry::Point &p, typename Node::index_type i) const |
get the center point (in object space) of an element More... | |
void | get_center (Core::Geometry::Point &, typename Edge::index_type) const |
void | get_center (Core::Geometry::Point &, typename Face::index_type) const |
void | get_center (Core::Geometry::Point &, typename Cell::index_type) const |
double | get_size (typename Node::index_type) const |
Get the size of an elemnt (length, area, volume) More... | |
double | get_size (typename Edge::index_type) const |
double | get_size (typename Face::index_type) const |
double | get_size (typename Cell::index_type) const |
double | get_length (typename Edge::index_type) const |
double | get_area (typename Face::index_type) const |
double | get_volume (typename Cell::index_type) const |
double | get_size (typename Node::array_type &) const |
bool | get_neighbor (typename Elem::index_type &, typename Elem::index_type, typename DElem::index_type) const |
void | get_neighbors (std::vector< typename Node::index_type > &array, typename Node::index_type) const |
bool | get_neighbors (std::vector< typename Elem::index_type > &array, typename Elem::index_type, typename DElem::index_type) const |
bool | locate (typename Node::index_type &n, const Core::Geometry::Point &p) const |
Locate a point in a mesh, find which is the closest node. More... | |
bool | locate (typename Edge::index_type &, const Core::Geometry::Point &) const |
bool | locate (typename Face::index_type &, const Core::Geometry::Point &) const |
bool | locate (typename Cell::index_type &, const Core::Geometry::Point &) const |
template<class ARRAY > | |
bool | locate (typename Node::index_type &n, ARRAY &coords, const Core::Geometry::Point &p) const |
int | get_weights (const Core::Geometry::Point &p, typename Node::array_type &l, double *w) |
int | get_weights (const Core::Geometry::Point &, typename Edge::array_type &, double *) |
int | get_weights (const Core::Geometry::Point &, typename Face::array_type &, double *) |
int | get_weights (const Core::Geometry::Point &, typename Cell::array_type &, double *) |
void | get_point (Core::Geometry::Point &p, typename Node::index_type i) const |
void | set_point (const Core::Geometry::Point &p, typename Node::index_type i) |
void | get_random_point (Core::Geometry::Point &p, const typename Elem::index_type i, FieldRNG &) const |
void | get_normal (Core::Geometry::Vector &, typename Node::index_type) const |
template<class VECTOR > | |
void | get_normal (Core::Geometry::Vector &, VECTOR &, typename Elem::index_type, unsigned int) const |
Node::index_type | add_node (const Core::Geometry::Point &p) |
use these to build up a new PointCloudField mesh More... | |
Node::index_type | add_point (const Core::Geometry::Point &p) |
template<class ARRAY > | |
Elem::index_type | add_elem (ARRAY a) |
void | node_reserve (size_t s) |
void | elem_reserve (size_t s) |
void | resize_nodes (size_t s) |
void | resize_elems (size_t s) |
template<class VECTOR , class INDEX > | |
bool | get_coords (VECTOR &coords, const Core::Geometry::Point &, INDEX) const |
template<class VECTOR , class INDEX > | |
void | interpolate (Core::Geometry::Point &pt, const VECTOR &, INDEX idx) const |
template<class VECTOR1 , class INDEX , class VECTOR2 > | |
void | derivate (const VECTOR1 &, INDEX, VECTOR2 &J) const |
template<class VECTOR , class INDEX > | |
double | det_jacobian (const VECTOR &coords, INDEX idx) const |
template<class VECTOR , class INDEX > | |
void | jacobian (const VECTOR &coords, INDEX idx, double *J) const |
template<class VECTOR , class INDEX > | |
double | inverse_jacobian (const VECTOR &, INDEX, double *Ji) const |
template<class INDEX > | |
double | scaled_jacobian_metric (INDEX idx) const |
template<class INDEX > | |
double | jacobian_metric (INDEX idx) const |
template<class INDEX > | |
double | inscribed_circumscribed_radius_metric (INDEX idx) const |
template<class INDEX > | |
bool | locate_node (INDEX &node, const Core::Geometry::Point &p) const |
template<class INDEX > | |
bool | locate_elem (INDEX &idx, const Core::Geometry::Point &p) const |
template<class ARRAY > | |
bool | locate_elems (ARRAY &array, const Core::Geometry::BBox &b) const |
template<class INDEX > | |
bool | find_closest_node (double &pdist, Core::Geometry::Point &result, INDEX &node, const Core::Geometry::Point &p) const |
template<class INDEX > | |
bool | find_closest_node (double &pdist, Core::Geometry::Point &result, INDEX &node, const Core::Geometry::Point &p, double maxdist) const |
Closest node and the location. More... | |
template<class ARRAY > | |
bool | find_closest_nodes (ARRAY &nodes, const Core::Geometry::Point &p, double maxdist) const |
template<class ARRAY1 , class ARRAY2 > | |
bool | find_closest_nodes (ARRAY1 &distances, ARRAY2 &nodes, const Core::Geometry::Point &p, double maxdist) const |
template<class INDEX , class ARRAY > | |
bool | find_closest_elem (double &pdist, Core::Geometry::Point &result, ARRAY &coords, INDEX &elem, const Core::Geometry::Point &p) const |
template<class INDEX , class ARRAY > | |
bool | find_closest_elem (double &pdist, Core::Geometry::Point &result, ARRAY &coords, INDEX &elem, const Core::Geometry::Point &p, double maxdist) const |
template<class INDEX > | |
bool | find_closest_elem (double &pdist, Core::Geometry::Point &result, INDEX &elem, const Core::Geometry::Point &p) const |
template<class ARRAY > | |
bool | find_closest_elems (double &pdist, Core::Geometry::Point &result, ARRAY &elems, const Core::Geometry::Point &p) const |
double | get_epsilon () const |
virtual void | io (Piostream &) |
Export this class using the old Pio system. More... | |
virtual std::string | dynamic_type_name () const |
virtual const TypeDescription * | get_type_description () const |
![]() | |
Mesh () | |
Mesh (const Mesh ©) | |
virtual | ~Mesh () |
![]() | |
Datatype () | |
virtual | ~Datatype () |
Datatype (const Datatype &other) | |
Datatype & | operator= (const Datatype &rhs) |
template<typename T > | |
const T * | as () const |
![]() | |
virtual | ~Persistent () |
![]() | |
HasId () | |
IdType | id () const |
Static Public Member Functions | |
static const std::string | type_name (int n=-1) |
Core functionality for getting the name of a templated mesh class. More... | |
static const TypeDescription * | node_type_description () |
static const TypeDescription * | edge_type_description () |
static const TypeDescription * | face_type_description () |
static const TypeDescription * | cell_type_description () |
static const TypeDescription * | elem_type_description () |
static Persistent * | maker () |
This function returns a maker for Pio. More... | |
static MeshHandle | mesh_maker () |
This function returns a handle for the virtual interface. More... | |
![]() | |
static const std::string | type_name (int n=-1) |
![]() | |
static PersistentTypeIDPtr | find_derived (const std::string &classname, const std::string &basename) |
static bool | is_base_of (const std::string &parent, const std::string &type) |
static void | add_class (const std::string &type, const std::string &parent, Persistent *(*maker)(), Persistent *(*bc_maker1)()=0, Persistent *(*bc_maker2)()=0) |
static void | add_mesh_class (const std::string &type, Persistent *(*maker)(), Persistent *(*bc_maker1)()=0, Persistent *(*bc_maker2)()=0) |
static void | add_field_class (const std::string &type, Persistent *(*maker)(), Persistent *(*bc_maker1)()=0, Persistent *(*bc_maker2)()=0) |
Static Public Attributes | |
static PersistentTypeID | pointcloud_typeid |
These IDs are created as soon as this class will be instantiated. More... | |
![]() | |
static PersistentTypeID | type_id |
Protected Member Functions | |
template<class ARRAY , class INDEX > | |
void | get_nodes_from_elem (ARRAY nodes, INDEX idx) |
template<class ARRAY , class INDEX > | |
void | get_edges_from_elem (ARRAY edges, INDEX idx) |
template<class ARRAY , class INDEX > | |
void | set_nodes_by_elem (ARRAY &array, INDEX idx) |
void | compute_grid (Core::Geometry::BBox &bb) |
void | compute_epsilon (Core::Geometry::BBox &bb) |
void | insert_elem_into_grid (typename Elem::index_type ci) |
void | remove_elem_from_grid (typename Elem::index_type ci) |
Protected Attributes | |
std::vector < Core::Geometry::Point > | points_ |
the nodes More... | |
Basis | basis_ |
basis fns More... | |
boost::shared_ptr< SearchGridT < index_type > > | grid_ |
mask_type | synchronized_ |
Record which parts of the mesh are synchronized. More... | |
Core::Thread::Mutex | synchronize_lock_ |
Lock to synchronize between threads. More... | |
double | epsilon_ |
double | epsilon2_ |
boost::shared_ptr< VMesh > | vmesh_ |
Virtual interface. More... | |
Friends | |
template<class MESH > | |
class | VPointCloudMesh |
Make sure the virtual interface has access. More... | |
template<class MESH > | |
class | VMeshShared |
class | ElemData |
Functions for creating the virtual interface Declare the functions that instantiate the virtual interface
Declare that these can be found in a library that is already precompiled. So dynamic compilation will not instantiate them again.
typedef Basis basis_type |
Elem refers to the most complex topological object DElem refers to object just below Elem in the topological hierarchy
typedef boost::shared_ptr<PointCloudMesh<Basis> > handle_type |
typedef SCIRun::index_type index_type |
typedef SCIRun::mask_type mask_type |
typedef SCIRun::size_type size_type |
typedef SCIRun::index_type under_type |
PointCloudMesh | ( | ) |
Construct a new mesh.
Initialize the virtual interface when the mesh is created
PointCloudMesh | ( | const PointCloudMesh< Basis > & | copy | ) |
Copy a mesh, needed for detaching the mesh from a field.
We need to lock before we can copy these as these structures are generate dynamically when they are needed.
Create a new virtual interface for this copy all pointers have changed hence create a new virtual interface class
|
virtual |
Destructor.
|
inline |
|
inline |
use these to build up a new PointCloudField mesh
PointCloudMesh< Basis >::Node::index_type add_point | ( | const Core::Geometry::Point & | p | ) |
|
inlinevirtual |
This one should go at some point, should be reroute throught the virtual interface
Reimplemented from Mesh.
void begin | ( | typename Node::iterator & | itr | ) | const |
begin/end iterators
void begin | ( | typename Edge::iterator & | ) | const |
void begin | ( | typename Face::iterator & | ) | const |
void begin | ( | typename Cell::iterator & | ) | const |
|
static |
bool clear_synchronization | ( | ) |
|
inlinevirtual |
Clone function for detaching the mesh and automatically generating a new version if needed.
Implements Mesh.
|
protected |
|
protected |
|
inline |
Interpolate the derivate of the function, This infact will return the jacobian of the local to global coordinate transformation. This function is mainly intended for the non linear elements
|
inline |
Get the determinant of the jacobian, which is the local volume of an element and is intended to help with the integration of functions over an element.
|
inlinevirtual |
Topological dimension.
|
inlinevirtual |
|
static |
|
inline |
|
inlinestatic |
void end | ( | typename Node::iterator & | itr | ) | const |
void end | ( | typename Edge::iterator & | ) | const |
void end | ( | typename Face::iterator & | ) | const |
void end | ( | typename Cell::iterator & | ) | const |
|
static |
|
inline |
|
inline |
If there are no nodes we cannot find the closest one
We need to do a full shell without any elements that are closer to make sure there no closer elements in neighboring searchgrid cells
If we are closer than eps^2 we found a node close enough
|
inline |
|
inline |
This looks incorrect - but it is correct We need to do a full shell without any elements that are closer to make sure there no closer elements
|
inline |
|
inline |
Closest node and the location.
If there are no nodes we cannot find the closest one
This looks incorrect - but it is correct We need to do a full shell without any elements that are closer to make sure there no closer elements in neighboring searchgrid cells
If we are closer than eps^2 we found a node close enough
|
inline |
|
inline |
|
inline |
|
inline |
Get the basis class.
|
virtual |
Get the bounding box of the field.
|
virtual |
Return the transformation that takes a 0-1 space bounding box to the current bounding box of this mesh.
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
get the center point (in object space) of an element
|
inline |
|
inline |
|
inline |
|
inline |
THESE FUNCTIONS ARE DEFINED INSIDE THE CLASS AS THESE ARE TEMPLATED FUNCTIONS INSIDE A TEMPLATED CLASS. THIS WAY OF DEFINING THE FUNCTIONS IS SUPPORTED BY MOST COMPILERS Get the local coordinates for a certain point within an element This function uses a couple of newton iterations to find the local coordinate of a point
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inlineprotected |
|
inline |
get the parent element(s) of the given index
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
Get neighbors of an element or a node THIS ONE IS FLAWED AS IN 3D SPACE A NODE CAN BE CONNECTED TO MANY ELEMENTS
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inlineprotected |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
Get the size of an elemnt (length, area, volume)
|
inline |
|
inline |
|
inline |
|
inline |
|
virtual |
Type description, used for finding names of the mesh class for dynamic compilation purposes. Some of this should be obsolete
Implements Mesh.
|
inline |
int get_weights | ( | const Core::Geometry::Point & | p, |
typename Node::array_type & | l, | ||
double * | w | ||
) |
These should become obsolete soon, they do not follow the concept of the basis functions....
|
inline |
|
inline |
|
inline |
|
inlinevirtual |
Implements Mesh.
|
inlinevirtual |
Has this mesh normals.
|
inline |
|
protected |
|
inline |
Find the location in the global coordinate system for a local coordinate This function is the opposite of get_coords.
|
inline |
Get the inverse jacobian of the transformation. This one is needed to translate local gradients into global gradients. Hence it is crucial for calculating gradients of fields, or constructing finite elements.
|
virtual |
Export this class using the old Pio system.
Reimplemented from Mesh.
|
inlinevirtual |
Check whether mesh can be altered by adding nodes or elements.
|
inline |
Get the jacobian of the transformation. In case one wants the non inverted version of this matrix. This is currentl here for completeness of the interface
|
inline |
|
inline |
Locate a point in a mesh, find which is the closest node.
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
Find whether we are inside the element If we find an element we return true
Check whether the estimate given in idx is the point we are looking for
|
inline |
|
inline |
Find closest node Loop over all nodes to see which is the closest
If there are no nodes, we cannot find a closest one
Check accuracity of first guess if we have any
Estimate is close enough and thence continue as we found the closest point within an epsilon uncertainty
We need to do a full shell without any elements that are closer to make sure there no closer elements in neighboring searchgrid cells
|
inlinestatic |
This function returns a maker for Pio.
|
inlinestatic |
This function returns a handle for the virtual interface.
|
inline |
|
static |
|
inline |
Generate the list of points that make up a sufficiently accurate piecewise linear approximation of an edge.
|
inline |
|
protected |
|
inline |
|
inline |
|
inline |
|
inlineprotected |
|
inline |
void size | ( | typename Node::size_type & | s | ) | const |
Get the iteration sizes.
void size | ( | typename Edge::size_type & | ) | const |
void size | ( | typename Face::size_type & | ) | const |
void size | ( | typename Cell::size_type & | ) | const |
|
virtual |
Compute tables for doing topology, these need to be synchronized before doing a lot of operations.
These computations share the evalution of the bounding box
Compute the epsilon for geometrical closeness comparisons Mainly used by the grid lookup tables
Table for finding nodes in space
Reimplemented from Mesh.
|
inline |
These are here to convert indices to unsigned int counters. Some how the decision was made to use multi dimensional indices in some fields, these functions should deal with different pointer types. Use the virtual interface to avoid all this non sense.
|
inline |
|
inline |
|
inline |
|
inlinevirtual |
What kind of mesh is this structured = no connectivity data regular = no node location data
|
virtual |
Core::Geometry::Transform a field (transform all nodes using this transformation matrix)
|
static |
Core functionality for getting the name of a templated mesh class.
|
friend |
Somehow the information of how to interpolate inside an element ended up in a separate class, as they need to share information this construction was created to transfer data. Hopefully in the future this class will disappear again.
|
friend |
|
friend |
Make sure the virtual interface has access.
|
protected |
basis fns
|
protected |
|
protected |
|
protected |
|
static |
These IDs are created as soon as this class will be instantiated.
|
protected |
the nodes
|
protected |
Lock to synchronize between threads.
|
protected |
Record which parts of the mesh are synchronized.
|
protected |
Virtual interface.