G+Smo  24.08.0
Geometry + Simulation Modules
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
gsSolid< T > Class Template Reference

Detailed Description

template<class T>
class gismo::gsSolid< T >

Class for representing a solid made up of vertices, edges, faces, and volumes.

Inherits gsSolidElement< T >.

Public Types

typedef std::vector
< gsSolidHalfFaceHandle * >
::iterator 
face_iterator
 Iterators.
 

Public Member Functions

gsSolidHalfFaceHandle addFace (std::vector< gsSolidHeVertexHandle > V)
 
gsSolidHalfFaceHandle addFace (std::vector< std::vector< gsSolidHeVertexHandle > > loopV, gsTrimSurface< T > *tsurf)
 Add a half face to the solid. More...
 
gsSolidHalfFaceHandle addFace_4Vertices (gsSolidHeVertexHandle v0, gsSolidHeVertexHandle v1, gsSolidHeVertexHandle v2, gsSolidHeVertexHandle v3)
 add one face as a trimmed surface, the order of the vertices in V must be either CCW or CW when viewing from infinity for all faces
 
gsSolidHalfFaceHandle addFace_PlanarPolygon (std::vector< gsSolidHeVertexHandle > V)
 Add a planar face, specified by a list of vertices that should all be in the same plane.
 
gsSolidHalfFace< T > * addFaceWithMate (const std::vector< gsSolidHeVertexHandle > &Verts, gsTrimSurface< T > *surf)
 Make a face that can be used as the mate of the given face, add both faces and split off a new volume.
 
void addHeVertex (scalar_t const &x, scalar_t const &y, scalar_t const &z=0)
 add coords to gsHeVertex, not yet pointers to HEs
 
void addVolume (gsVolumeHandle vol)
 add a volume using its handle
 
void addVolume (std::vector< gsSolidHalfFaceHandle > hfaces)
 add a volume using handles of its half faces
 
void checkStructure (bool checkVerts=false) const
 sanity checks on the graph structure of the solid
 
std::vector
< gsSolidHalfEdgeHandle > 
detectNonConvexEdges (std::vector< int > const &ncEdgeV1, std::vector< int > const &ncEdgeV2)
 Define (TODO: detect automatically) nonconvex edges.
 
void handleImpedingEdges (gsSolidHalfEdgeHandle he)
 If there are impeding edges that make the solid inseparatable along a given HE he, this routine will create a new vertex on each impeding edges.
 
std::vector
< gsSolidHalfEdgeHandle > 
impedingEdges (gsSolidHalfEdgeHandle he) const
 
void insertNewVertex (gsSolidHalfEdgeHandle he)
 Insert a new vertex to an edge of the volume. More...
 
gsVolumeBlock< T > * newVolume (gsSolidHalfFaceHandle startingFace)
 Starting with a specified face, chase round all the faces connected to it and move them to a new volume.
 
gsMultiPatch< T > plotEdgeGraph ()
 plot edge graph
 
virtual std::ostream & print (std::ostream &os) const
 Prints the object as a string.
 
void setHeMate ()
 Assigning mates for each HE.
 
gsSolidHalfFaceHandle splitFace (gsSolidHalfFaceHandle f, gsSolidHeVertexHandle startVertex, gsSolidHeVertexHandle endVertex, gsBSpline< T > *domainSpline)
 

Member Function Documentation

gsSolid< T >::gsSolidHalfFaceHandle addFace ( std::vector< gsSolidHeVertexHandle >  V)

add one face as a trimmed surface, the order of the vertices in V must be either CCW or CW when viewing from infinity for all faces

gsSolid< T >::gsSolidHalfFaceHandle addFace ( std::vector< std::vector< gsSolidHeVertexHandle > >  loopV,
gsTrimSurface< T > *  tsurf 
)

Add a half face to the solid.

Parameters
loopVa vector of vectors of vertices of one loop, the first vector is the outer loop
tsurfa (pointer to) trimmed surface
std::vector< typename gsSolid< T >::gsSolidHalfEdgeHandle > impedingEdges ( gsSolidHalfEdgeHandle  he) const

Check if the solid is separatable along a given edge he by collecting all "impeding edges" which connect the two faces incident to he.

void insertNewVertex ( gsSolidHalfEdgeHandle  he)

Insert a new vertex to an edge of the volume.

Parameters
hethe half-edge into which to insert the vertex
Note
This insertion only affects the volume containing the HE.
gsSolid< T >::gsSolidHalfFaceHandle splitFace ( gsSolidHalfFaceHandle  f,
gsSolidHeVertexHandle  startVertex,
gsSolidHeVertexHandle  endVertex,
gsBSpline< T > *  domainSpline 
)

Split a face f along a given spline. Returns the new face created as a result. The new face will have the edges from startVertex to endVertex and the reverse of domainSpline. The original face f will retain the edges from endVertex to startVertex and gain domainSpline (forwards).