G+Smo
24.08.0
Geometry + Simulation Modules
|
Class gsTriMeshToSolid object.
Construct an instance of this class from a gsMesh, and then use it to perform "CAD model reconstruction" to produce a gsSolid.
Public Member Functions | |
void | calcPatchNumbers () |
Each face obtains a patch number, faces of the same number belong to the same patch. | |
gsBSpline< T > * | calcTCurve (Vertex v1, Vertex v2) |
calculates a B-spline of degree one from 2 vertices. More... | |
gsBSpline< T > * | calcTCurve (Vertex v1, Vertex v2, Vertex v3) |
calculates a B-spline of degree two from 3 vertices. More... | |
gsCurveLoop< T > * | calculateLoop (std::vector< Vertex > outerPoints, std::vector< bool > const &isCorner, bool noSmooth=false) |
calculates a curve loop consisting of B-spline curves of degree one and two from a vector of vertices and the information about the convexity of these vertices. More... | |
void | divideAndMergePatches (T innerAngle, T patchAreaWeight, T mergeSmallPatches) |
Improve surface segmentation by using more complex rules. More... | |
void | getFaces (std::vector< std::vector< VertexHandle > > &iPoints, std::vector< std::vector< VertexHandle > > &oPoints, std::vector< std::vector< std::vector< VertexHandle > > > &innerBdrys, std::vector< std::vector< Vertex > > &innerBdrysMassP, std::vector< std::vector< bool > > &oPointsConvexFlag) |
Computes data describing the patch structure of the mesh. More... | |
void | getFeatures (T angleGrad, bool &bWarnNonManifold, bool &bWarnBorders) |
generates edges for a mesh consisting of vertices and faces. Determines if these edges are sharp, depending on the angle between the two adjacent faces of the edges. More... | |
void | getPatchData (T angle, T innerAngle, T patchAreaWeight, T mergeSmallPatches, std::vector< std::vector< VertexHandle > > &iPoints, std::vector< std::vector< VertexHandle > > &oPoints, std::vector< std::vector< std::vector< VertexHandle > > > &innerBdrys, std::vector< std::vector< Vertex > > &innerBdrysMassP, std::vector< std::vector< bool > > &oPointsConvexFlag, std::string filenameFeatures, int useFeatures) |
Computes data describing the patch structure of the mesh. Combines getFeatures and getFaces. More... | |
void | readEdges (std::string const &fn, std::vector< gsEdge< T > > &edges) |
reads a text file consisting of lines of 6 values, each line representing an edge. More... | |
void | setSharpEdges (std::vector< gsEdge< T > > &featEdges, int useFeatures) |
Sets sharp edges according to the value of useFeatures. More... | |
void | storeNeighboringFaces () |
Store each edge's neighboring faces. | |
void | toSolid (gsSolid< T > &sl, std::vector< std::vector< VertexHandle > > &iPoints, std::vector< std::vector< VertexHandle > > &oPoints, std::vector< std::vector< std::vector< VertexHandle > > > &innerBdrys, std::vector< std::vector< Vertex > > &innerBdrysMassP, std::vector< std::vector< bool > > &oPointsConvexFlag, std::vector< gsMesh< T > * > ¶Meshes, std::vector< gsMesh< T > * > &fitMeshes, std::vector< gsMesh< T > * > &patchMeshes, int kvOuterPoints, int kvAdditionalInnerPoints, bool plot, int meshPoints, bool moreInner=true, T wE=5, T wI=1, int closeBoundary=0, bool noSmooth=false) |
Parametrized a number of patches given by iPoints, oPoints, innerBdrys, innerBdrysMassP and oPointsConvexFlag, fits B-spline surfaces to them and trimmes the resulting surfaces. The trimmed surfaces are then added to the empty solid sl and a half-edge structure for sl is generated. If desired, in paraview plotable meshes to visualize the solid are generated. More... | |
Static Public Member Functions | |
static bool | approxEqual (const gsEdge< T > &e1, const gsEdge< T > &e2) |
checks if two edges are very close to each other. More... | |
static T | calcAngle (EdgeHandle e1, EdgeHandle e2, int faceNum) |
calculates the conditioned angle between 2 edges. More... | |
static T | calcArea (FaceHandle f1) |
using Heron's Formula for the area of a triangle. More... | |
static T | calcBdryLength (std::vector< VertexHandle > vec) |
Adds up the lengths between 2 neighboring vertices of a vector of vertices. More... | |
static T | calcDist (VertexHandle v1, VertexHandle v2) |
calculates the distance between 2 vertices. More... | |
static T | calcWeight (VertexHandle v1, VertexHandle v2, std::set< VertexHandle > const &vertexFaceSet) |
calculates a weight between 2 vertices used in Floater's algorithm. More... | |
static gsVertex< T > | getMassP (std::vector< VertexHandle > vec) |
calculates the mass point of a vector of vertices. More... | |
static Vertex | giveMidpoint (Vertex v1, Vertex v2) |
calculates the midpoint of two vertices. More... | |
static std::vector< bool > | isCorner (std::vector< VertexHandle > const &vertexVec3d) |
checks whether vertices are corners. More... | |
static int | normalMult (gsVector3d< T > globalNormal, std::vector< FaceHandle > &face, int bigFaceIdx) |
|
static |
checks if two edges are very close to each other.
e1 | - first edge. |
e2 | - second edge. |
|
static |
calculates the conditioned angle between 2 edges.
e1 | - first edge. |
e2 | - second edge. |
faceNum | - number of the patch, used to compute the normal. |
|
static |
using Heron's Formula for the area of a triangle.
f1 | - the face of which the area shall be calculated. |
|
static |
Adds up the lengths between 2 neighboring vertices of a vector of vertices.
vec | - a vector of vertices describing the boundary. |
|
static |
calculates the distance between 2 vertices.
v1 | - first vertex. |
v2 | - second vertex. |
calculates a B-spline of degree one from 2 vertices.
v1 | - first vertex. |
v2 | - second vertex. |
calculates a B-spline of degree two from 3 vertices.
v1 | - first vertex. |
v2 | - second vertex. |
v3 | - third vertex. |
gsCurveLoop< T > * calculateLoop | ( | std::vector< Vertex > | outerPoints, |
std::vector< bool > const & | isCorner, | ||
bool | noSmooth = false |
||
) |
calculates a curve loop consisting of B-spline curves of degree one and two from a vector of vertices and the information about the convexity of these vertices.
outerPoints | - the vertices representing the boundary. |
isCorner | - information about the convexity of the vertices. |
noSmooth | - if set to 1, only curves of degree one will be used for the curve loop. |
|
static |
calculates a weight between 2 vertices used in Floater's algorithm.
v1 | - first vertex. |
v2 | - second vertex. |
vertexFaceSet | - used to check if both vertices are in the same patch. |
void divideAndMergePatches | ( | T | innerAngle, |
T | patchAreaWeight, | ||
T | mergeSmallPatches | ||
) |
Improve surface segmentation by using more complex rules.
innerAngle | - after the initial patch generation there is the possibility to subdivide the larger patches by a smaller angle. Larger is defined by patchAreaWeight. innerAngle should be smaller than angle, else it will not have any effect. |
patchAreaWeight | - patchAreaWeight determines how large a patch has to be such that it is subdivided by using the parameter innerAngle. |
mergeSmallPatches | - by using a low angle a lot of small patches might be produced. mergeSmallPatches gives the opportunity to merge the small patches. mergeSmallPatches decides how "small" the patches are allowed to be before they are merged. A value of 1 will merge patches if the area of them is smaller than the average area. A value of 0 turns this option off. |
void getFaces | ( | std::vector< std::vector< VertexHandle > > & | iPoints, |
std::vector< std::vector< VertexHandle > > & | oPoints, | ||
std::vector< std::vector< std::vector< VertexHandle > > > & | innerBdrys, | ||
std::vector< std::vector< Vertex > > & | innerBdrysMassP, | ||
std::vector< std::vector< bool > > & | oPointsConvexFlag | ||
) |
Computes data describing the patch structure of the mesh.
[out] | iPoints | - the data about the inner points of a patch is stored in an unsorted vector. For each patch such a vector is generated. The parameter iPoints is a vector of these generated vectors. |
[out] | oPoints | - the data about the boundary points of a patch is stored in a counter clockwise sorted vector. For each patch such a vector is generated. The parameter oPoints is a vector of these generated vectors. |
[out] | innerBdrys | - the data about each hole of a patch is stored in a clockwise sorted vector. For each hole of a patch such a vector is generated. For each patch a vector of its holes is generated. The parameter innerBdrys is a vector of these generated vectors. |
[out] | innerBdrysMassP | - the data about the mass points of each hole is stored here. |
[out] | oPointsConvexFlag | - each boundary point can be convex of not, depending on the turning angles of the adjacent edges on the boundary. |
void getFeatures | ( | T | angleGrad, |
bool & | bWarnNonManifold, | ||
bool & | bWarnBorders | ||
) |
generates edges for a mesh consisting of vertices and faces. Determines if these edges are sharp, depending on the angle between the two adjacent faces of the edges.
angleGrad | - if the angle (degree) between the two adjacent faces of an edge is bigger than angleGrad the edge is marked as sharp. | |
[out] | bWarnNonManifold | - set to one if an edge is detected with more than 2 adjacent faces. |
[out] | bWarnBorders | - set to one if an edge is detected with 1 adjacent face. |
|
static |
calculates the mass point of a vector of vertices.
vec | - a vector of vertices from which the mass points is calculated. |
|
static |
calculates the midpoint of two vertices.
v1 | - first vertex. |
v2 | - second vertex. |
|
static |
checks whether vertices are corners.
vertexVec3d | vector of vertices. |
|
static |
Check if a given normal vector is consistent with a collection of triangles. Return +1 if the inner product of globalNormal with each triangle's normal is positive. Return -1 if all the inner products are negative. Return 0 if mixed.
void readEdges | ( | std::string const & | fn, |
std::vector< gsEdge< T > > & | edges | ||
) |
reads a text file consisting of lines of 6 values, each line representing an edge.
fn | - path to text file. | |
[out] | edges | - vector of the resulting edges. |
void setSharpEdges | ( | std::vector< gsEdge< T > > & | featEdges, |
int | useFeatures | ||
) |
Sets sharp edges according to the value of useFeatures.
featEdges | - a vector of edges which can be used to manually add features. |
useFeatures | - if set to 1 the text file is used to add the features from the text file. If set to 2 these features are used exclusively. |