A collection of tools for triSurface. More...
Public Types | |
enum | sideType { UNKNOWN, INSIDE, OUTSIDE } |
On which side of surface. More... | |
Public Member Functions | |
triSurface | triangulateFaceCentre (const polyBoundaryMesh &mBesh, const labelHashSet &includePatches, const bool verbose=false) |
Face-centre triangulation of (selected patches of) boundaryMesh. More... | |
scalarField | featureProximity (const triSurface &surf, const scalar searchDistance) |
Calculate feature proximity. More... | |
Static Public Member Functions | |
static void | writeOBJ (const fileName &fName, const pointField &pts) |
Write pointField to OBJ format file. More... | |
static void | writeOBJ (const triSurface &surf, const fileName &fName, const boolList &markedVerts) |
Write vertex subset to OBJ format file. More... | |
static void | getVertexTriangles (const triSurface &surf, const label edgeI, labelList &edgeTris) |
Get all triangles using edge endpoint. More... | |
static labelList | getVertexVertices (const triSurface &surf, const edge &e) |
Get all vertices (local numbering) connected to vertices of edge. More... | |
static label | otherFace (const triSurface &surf, const label facei, const label edgeI) |
Get face connected to edge not facei. More... | |
static void | otherEdges (const triSurface &surf, const label facei, const label edgeI, label &e1, label &e2) |
Get the two edges on facei counterclockwise after edgeI. More... | |
static void | otherVertices (const triSurface &surf, const label facei, const label vertI, label &vert1I, label &vert2I) |
Get the two vertices (local numbering) on facei counterclockwise. More... | |
static label | oppositeEdge (const triSurface &surf, const label facei, const label vertI) |
Get edge opposite vertex (local numbering) More... | |
static label | oppositeVertex (const triSurface &surf, const label facei, const label edgeI) |
Get vertex (local numbering) opposite edge. More... | |
static label | getEdge (const triSurface &surf, const label vert1I, const label vert2I) |
Returns edge label connecting v1, v2 (local numbering) More... | |
static label | getTriangle (const triSurface &surf, const label e0I, const label e1I, const label e2I) |
Return index of triangle (or -1) using all three edges. More... | |
static triSurface | collapseEdges (const triSurface &surf, const labelList &collapsableEdges) |
Create new triSurface by collapsing edges to edge mids. More... | |
static triSurface | collapseEdges (const triSurface &surf, const labelList &collapsableEdges, const pointField &edgeMids, labelList &faceStatus) |
Create new triSurface by collapsing edges to specified. More... | |
static triSurface | greenRefine (const triSurface &surf, const labelList &refineEdges) |
Refine edges by splitting to opposite vertex. More... | |
static triSurface | redGreenRefine (const triSurface &surf, const labelList &refineFaces) |
Refine face by splitting all edges. Neighbouring face is. More... | |
static label | minEdge (const triSurface &surf, const labelList &edgeIndices) |
Returns element in edgeIndices with minimum length. More... | |
static label | maxEdge (const triSurface &surf, const labelList &edgeIndices) |
Returns element in edgeIndices with minimum length. More... | |
static triSurface | mergePoints (const triSurface &surf, const scalar mergeTol) |
Merge points within distance. More... | |
static vector | surfaceNormal (const triSurface &surf, const label nearestFacei, const point &nearestPt) |
Triangle (unit) normal. If nearest point to triangle on edge use. More... | |
static sideType | edgeSide (const triSurface &surf, const point &sample, const point &nearestPoint, const label edgeI) |
If nearest point is on edgeI, determine on which side of surface. More... | |
static sideType | surfaceSide (const triSurface &surf, const point &sample, const label nearestFacei) |
Given nearest point (to sample) on surface determines which side. More... | |
static triSurface | triangulate (const polyBoundaryMesh &mBesh, const labelHashSet &includePatches, labelList &faceMap, const bool verbose=false) |
Simple triangulation of (selected patches of) boundaryMesh. Needs. More... | |
static triSurface | triangulate (const polyBoundaryMesh &bMesh, const labelHashSet &includePatches, const boundBox &bBox, const bool verbose=false) |
static triSurface | delaunay2D (const List< vector2D > &) |
Do unconstrained Delaunay of points. Returns triSurface with 3D. More... | |
static void | calcInterpolationWeights (const triPointRef &tri, const point &p, FixedList< scalar, 3 > &weights) |
Calculate linear interpolation weights for point (guaranteed to be. More... | |
static void | calcInterpolationWeights (const triSurface &s, const pointField &samplePts, List< FixedList< label, 3 >> &allVerts, List< FixedList< scalar, 3 >> &allWeights) |
static scalar | vertexNormalWeight (const triFace &f, const label pI, const vector &fN, const UList< point > &points) |
Weighting for normals of faces attached to vertex. More... | |
static tmp< vectorField > | vertexNormals (const triSurface &surf) |
Weighted average of normals of attached faces. More... | |
static tmp< triadField > | vertexTriads (const triSurface &surf, const vectorField &pointNormals) |
Local coordinate-system for each point normal. More... | |
static tmp< scalarField > | curvatures (const triSurface &surf, const vectorField &pointNormals, const triadField &pointTriads) |
Surface curvatures at the vertex points. More... | |
static tmp< scalarField > | curvatures (const triSurface &surf) |
Surface curvatures at the vertex points. More... | |
static tmp< scalarField > | writeCurvature (const Time &runTime, const word &basename, const triSurface &surf) |
Write surface curvature at the vertex points and return the field. More... | |
static Pair< tmp< scalarField > > | writeCloseness (const Time &runTime, const word &basename, const triSurface &surf, const scalar internalAngleTolerance=45, const scalar externalAngleTolerance=10) |
Check and write internal/external closeness fields. More... | |
static void | writeFeatureProximity (const Time &runTime, const word &basename, const triSurface &surf, const bool writeVTK, const scalar searchDistance) |
Check and write internal/external closeness fields. More... | |
static bool | validTri (const triSurface &, const label facei, const bool verbose=true) |
Check single triangle for (topological) validity. More... | |
static bool | validTri (const MeshedSurface< face > &, const label facei, const bool verbose=true) |
Check single triangle for (topological) validity. More... | |
static surfaceLocation | classify (const triSurface &, const label triI, const point &trianglePoint) |
Test point on plane of triangle to see if on edge or point or inside. More... | |
static surfaceLocation | trackToEdge (const triSurface &, const surfaceLocation &start, const surfaceLocation &end, const plane &cutPlane) |
Track on surface to get closer to point. More... | |
static void | track (const triSurface &, const surfaceLocation &endInfo, const plane &cutPlane, surfaceLocation &hitInfo) |
Track from edge to edge across surface. Uses trackToEdge. More... | |
Static Public Attributes | |
static const label | ANYEDGE = -1 |
Face collapse status. More... | |
static const label | NOEDGE = -2 |
static const label | COLLAPSED = -3 |
A collection of tools for triSurface.
"Estimating Curvatures and their Derivatives on Triangle Meshes" by S. Rusinkiewicz 3DPVT'04 Proceedings of the 3D Data Processing, Visualization, and Transmission, 2nd International Symposium Pages 486-493 http://gfx.cs.princeton.edu/pubs/_2004_ECA/curvpaper.pdf
Definition at line 82 of file triSurfaceTools.H.
enum sideType |
On which side of surface.
Enumerator | |
---|---|
UNKNOWN | |
INSIDE | |
OUTSIDE |
Definition at line 512 of file triSurfaceTools.H.
|
static |
Write pointField to OBJ format file.
Definition at line 1189 of file triSurfaceTools.C.
References Foam::endl(), Foam::Pout, pts, and UList< T >::size().
|
static |
Write vertex subset to OBJ format file.
Definition at line 1206 of file triSurfaceTools.C.
References Foam::endl(), forAll, PrimitivePatch< FaceList, PointField >::localPoints(), and Foam::Pout.
|
static |
Get all triangles using edge endpoint.
Definition at line 1236 of file triSurfaceTools.C.
References Foam::constant::electromagnetic::e, PrimitivePatch< FaceList, PointField >::edgeFaces(), PrimitivePatch< FaceList, PointField >::edges(), PrimitivePatch< FaceList, PointField >::pointFaces(), List< T >::setSize(), and UList< T >::size().
|
static |
Get all vertices (local numbering) connected to vertices of edge.
Definition at line 1277 of file triSurfaceTools.C.
References Foam::constant::electromagnetic::e, PrimitivePatch< FaceList, PointField >::edges(), HashSet< Key, Hash >::insert(), PrimitivePatch< FaceList, PointField >::pointEdges(), and HashTable< T, Key, Hash >::toc().
|
static |
Get face connected to edge not facei.
Definition at line 1308 of file triSurfaceTools.C.
References PrimitivePatch< FaceList, PointField >::edgeFaces(), and UList< T >::size().
|
static |
Get the two edges on facei counterclockwise after edgeI.
Definition at line 1333 of file triSurfaceTools.C.
References Foam::abort(), PrimitivePatch< FaceList, PointField >::edges(), PrimitivePatch< FaceList, PointField >::faceEdges(), Foam::FatalError, FatalErrorInFunction, UList< T >::fcIndex(), UList< T >::find(), and PrimitivePatch< FaceList, PointField >::localFaces().
|
static |
Get the two vertices (local numbering) on facei counterclockwise.
vertI
Definition at line 1362 of file triSurfaceTools.C.
References Foam::abort(), f(), Foam::FatalError, FatalErrorInFunction, PrimitivePatch< FaceList, PointField >::localFaces(), and Foam::nl.
|
static |
Get edge opposite vertex (local numbering)
Definition at line 1398 of file triSurfaceTools.C.
References Foam::abort(), Foam::constant::electromagnetic::e, PrimitivePatch< FaceList, PointField >::edges(), PrimitivePatch< FaceList, PointField >::faceEdges(), Foam::FatalError, FatalErrorInFunction, and Foam::nl.
|
static |
Get vertex (local numbering) opposite edge.
Definition at line 1427 of file triSurfaceTools.C.
References Foam::abort(), Foam::constant::electromagnetic::e, PrimitivePatch< FaceList, PointField >::edges(), f(), Foam::FatalError, FatalErrorInFunction, and PrimitivePatch< FaceList, PointField >::localFaces().
|
static |
Returns edge label connecting v1, v2 (local numbering)
Definition at line 1454 of file triSurfaceTools.C.
References Foam::constant::electromagnetic::e, PrimitivePatch< FaceList, PointField >::edges(), and PrimitivePatch< FaceList, PointField >::pointEdges().
|
static |
Return index of triangle (or -1) using all three edges.
Definition at line 1477 of file triSurfaceTools.C.
References Foam::abort(), PrimitivePatch< FaceList, PointField >::edgeFaces(), PrimitivePatch< FaceList, PointField >::faceEdges(), Foam::FatalError, and FatalErrorInFunction.
|
static |
Create new triSurface by collapsing edges to edge mids.
Definition at line 1522 of file triSurfaceTools.C.
References Foam::constant::electromagnetic::e, PrimitivePatch< FaceList, PointField >::edges(), forAll, PrimitivePatch< FaceList, PointField >::localPoints(), PrimitivePatch< FaceList, PointField >::nEdges(), and UList< T >::size().
|
static |
Create new triSurface by collapsing edges to specified.
positions. faceStatus allows explicit control over which faces need to be protected (see above). faceStatus gets updated to protect collapsing already collapsed faces.
Definition at line 1569 of file triSurfaceTools.C.
References Foam::abort(), Foam::constant::electromagnetic::e, PrimitivePatch< FaceList, PointField >::edgeFaces(), PrimitivePatch< FaceList, PointField >::edges(), Foam::endl(), f(), Foam::FatalError, FatalErrorInFunction, forAll, Foam::identity(), PrimitivePatch< FaceList, PointField >::localFaces(), PrimitivePatch< FaceList, PointField >::localPoints(), Foam::min(), PrimitivePatch< FaceList, PointField >::nEdges(), triSurface::patches(), List< T >::resize(), and UList< T >::size().
|
static |
Refine edges by splitting to opposite vertex.
Definition at line 1736 of file triSurfaceTools.C.
References List< T >::append(), Foam::constant::electromagnetic::e, PrimitivePatch< FaceList, PointField >::edgeFaces(), PrimitivePatch< FaceList, PointField >::edges(), forAll, PrimitivePatch< FaceList, PointField >::localFaces(), PrimitivePatch< FaceList, PointField >::localPoints(), PrimitivePatch< FaceList, PointField >::nEdges(), newPointi, PrimitivePatch< FaceList, PointField >::nPoints(), triSurface::patches(), List< T >::setSize(), and UList< T >::size().
|
static |
Refine face by splitting all edges. Neighbouring face is.
greenRefine'd.
Definition at line 1717 of file triSurfaceTools.C.
References forAll, and UList< T >::size().
|
static |
Returns element in edgeIndices with minimum length.
Definition at line 1819 of file triSurfaceTools.C.
References Foam::constant::electromagnetic::e, PrimitivePatch< FaceList, PointField >::edges(), and PrimitivePatch< FaceList, PointField >::localPoints().
|
static |
Returns element in edgeIndices with minimum length.
Definition at line 1846 of file triSurfaceTools.C.
References Foam::constant::electromagnetic::e, PrimitivePatch< FaceList, PointField >::edges(), and PrimitivePatch< FaceList, PointField >::localPoints().
|
static |
Merge points within distance.
Definition at line 1873 of file triSurfaceTools.C.
References f(), PrimitivePatch< FaceList, PointField >::localFaces(), PrimitivePatch< FaceList, PointField >::localPoints(), Foam::mergePoints(), triSurface::patches(), List< T >::resize(), and UList< T >::size().
|
static |
Triangle (unit) normal. If nearest point to triangle on edge use.
edge normal (calculated on the fly); if on vertex use vertex normal. Uses planarTol.
Definition at line 1930 of file triSurfaceTools.C.
References triangle< Point, PointRef >::EDGE, PrimitivePatch< FaceList, PointField >::edgeFaces(), f(), PrimitivePatch< FaceList, PointField >::faceEdges(), PrimitivePatch< FaceList, PointField >::faceNormals(), PrimitivePatch< FaceList, PointField >::localFaces(), triangle< Point, PointRef >::NONE, Foam::normalised(), PrimitivePatch< FaceList, PointField >::pointNormals(), points, PrimitivePatch< FaceList, PointField >::points(), and Foam::Zero.
|
static |
If nearest point is on edgeI, determine on which side of surface.
sample is.
Definition at line 1974 of file triSurfaceTools.C.
References PrimitivePatch< FaceList, PointField >::edgeFaces(), PrimitivePatch< FaceList, PointField >::faceNormals(), n, and UList< T >::size().
|
static |
Given nearest point (to sample) on surface determines which side.
sample is. Uses either face normal, edge normal or point normal (non-trivial). Uses triangle::classify.
Definition at line 2011 of file triSurfaceTools.C.
References Foam::abort(), Foam::constant::universal::c, Foam::constant::electromagnetic::e, triangle< Point, PointRef >::EDGE, PrimitivePatch< FaceList, PointField >::edges(), f(), PrimitivePatch< FaceList, PointField >::faceEdges(), PrimitivePatch< FaceList, PointField >::faceNormals(), Foam::FatalError, FatalErrorInFunction, forAll, PrimitivePatch< FaceList, PointField >::localFaces(), PrimitivePatch< FaceList, PointField >::localPoints(), Foam::mag(), Foam::magSqr(), triangle< Point, PointRef >::NONE, PointHit< PointType >::point(), PrimitivePatch< FaceList, PointField >::pointEdges(), points, PrimitivePatch< FaceList, PointField >::points(), and Foam::sqr().
|
static |
Simple triangulation of (selected patches of) boundaryMesh. Needs.
polyMesh (or polyBoundaryMesh) since only at this level are the triangles on neighbouring patches connected. Return faceMap from triI to faceI
Definition at line 2167 of file triSurfaceTools.C.
References Foam::endl(), f(), Foam::faceMap(), mesh, Foam::foamVersion::patch, points, polyMesh::points(), Foam::Pout, List< T >::setSize(), Foam::fieldTypes::surface, and triangles.
|
static |
Definition at line 2265 of file triSurfaceTools.C.
References boundBox::containsAny(), Foam::endl(), f(), forAll, mesh, primitiveMesh::nBoundaryFaces(), Foam::foamVersion::patch, points, polyMesh::points(), Foam::Pout, List< T >::setSize(), Foam::fieldTypes::surface, and triangles.
Foam::triSurface triangulateFaceCentre | ( | const polyBoundaryMesh & | mBesh, |
const labelHashSet & | includePatches, | ||
const bool | verbose = false |
||
) |
Face-centre triangulation of (selected patches of) boundaryMesh.
Needs polyMesh (or polyBoundaryMesh) since only at this level are the triangles on neighbouring patches connected.
Definition at line 2351 of file triSurfaceTools.C.
References Foam::endl(), f(), primitiveMesh::faceCentres(), UList< T >::fcIndex(), forAll, PrimitivePatch< FaceList, PointField >::localFaces(), PrimitivePatch< FaceList, PointField >::localPoints(), mesh, primitiveMesh::nBoundaryFaces(), newPointi, Foam::foamVersion::patch, points, polyMesh::points(), Foam::Pout, List< T >::setSize(), UList< T >::size(), Foam::fieldTypes::surface, and triangles.
|
static |
Do unconstrained Delaunay of points. Returns triSurface with 3D.
points with z=0. All triangles in region 0.
Definition at line 2447 of file triSurfaceTools.C.
References Foam::abort(), UList< T >::begin(), dtris2(), Foam::FatalError, FatalErrorInFunction, forAll, points, pts, and UList< T >::size().
|
static |
Calculate linear interpolation weights for point (guaranteed to be.
inside triangle)
Definition at line 2513 of file triSurfaceTools.C.
References triangle< Point, PointRef >::a(), triangle< Point, PointRef >::b(), triangle< Point, PointRef >::c(), Foam::max(), Foam::normalised(), and p.
|
static |
Definition at line 2544 of file triSurfaceTools.C.
References PointHit< PointType >::distance(), triangle< Point, PointRef >::EDGE, f(), UList< T >::fcIndex(), forAll, PointHit< PointType >::hit(), Foam::min(), triangle< Point, PointRef >::nearestPointClassify(), p0, PointHit< PointType >::point(), triangle< Point, PointRef >::POINT, points, s, and UList< T >::size().
|
static |
Weighting for normals of faces attached to vertex.
Definition at line 36 of file triSurfaceCurvature.C.
References Foam::abort(), f(), Foam::FatalError, FatalErrorInFunction, Foam::mag(), Foam::magSqr(), and points.
Referenced by triSurfaceTools::curvatures(), and triSurfaceTools::vertexNormals().
|
static |
Weighted average of normals of attached faces.
Definition at line 59 of file triSurfaceCurvature.C.
References Foam::endl(), f(), forAll, Foam::Info, PrimitivePatch< FaceList, PointField >::meshPoints(), tmp< T >::New(), PrimitivePatch< FaceList, PointField >::nPoints(), pFaces, PrimitivePatch< FaceList, PointField >::pointFaces(), points, PrimitivePatch< FaceList, PointField >::points(), triSurfaceTools::vertexNormalWeight(), and Foam::Zero.
Referenced by triSurfaceTools::curvatures().
|
static |
Local coordinate-system for each point normal.
Definition at line 103 of file triSurfaceCurvature.C.
References Foam::constant::electromagnetic::e, forAll, Foam::mag(), PrimitivePatch< FaceList, PointField >::meshPointMap(), tmp< T >::New(), Foam::normalised(), p, points, PrimitivePatch< FaceList, PointField >::points(), UList< T >::size(), and triad::unset.
Referenced by triSurfaceTools::curvatures().
|
static |
Surface curvatures at the vertex points.
Definition at line 140 of file triSurfaceCurvature.C.
References Foam::constant::electromagnetic::e, Foam::eigenValues(), Foam::endl(), f(), forAll, Foam::Info, Foam::LUsolve(), Foam::mag(), Foam::magSqr(), Foam::max(), PrimitivePatch< FaceList, PointField >::meshPointMap(), PrimitivePatch< FaceList, PointField >::meshPoints(), tmp< T >::New(), triad::normalize(), points, PrimitivePatch< FaceList, PointField >::points(), Foam::rotationTensor(), triad::set(), UList< T >::size(), Foam::sqr(), Foam::T(), triSurfaceTools::vertexNormalWeight(), x, Tensor2D< Cmpt >::x(), y, Tensor2D< Cmpt >::y(), VectorSpace< SymmTensor2D< Cmpt >, Cmpt, 3 >::zero, and Foam::Zero.
Referenced by refinementSurfaces::setCurvatureMinLevelFields(), and triSurfaceTools::writeCurvature().
|
static |
Surface curvatures at the vertex points.
Definition at line 325 of file triSurfaceCurvature.C.
References tmp< T >::clear(), triSurfaceTools::vertexNormals(), and triSurfaceTools::vertexTriads().
|
static |
Write surface curvature at the vertex points and return the field.
Definition at line 342 of file triSurfaceCurvature.C.
References TimePaths::constant(), triSurfaceTools::curvatures(), Foam::dimLength, Foam::endl(), Foam::Info, IOobjectOption::NO_READ, IOobjectOption::NO_WRITE, tmp< T >::ref(), runTime, and UList< T >::swap().
|
static |
Check and write internal/external closeness fields.
Definition at line 89 of file triSurfaceCloseness.C.
References searchableSurface::bounds(), Foam::cos(), Foam::degToRad(), Foam::dimLength, Foam::drawHitProblem(), stdFoam::end(), Foam::endl(), PrimitivePatch< FaceList, PointField >::faceCentres(), PrimitivePatch< FaceList, PointField >::faceNormals(), triSurfaceMesh::findLineAll(), forAll, Foam::Info, boundBox::mag(), Foam::nl, runTime, UList< T >::size(), and UList< T >::swap().
scalarField featureProximity | ( | const triSurface & | surf, |
const scalar | searchDistance | ||
) |
Calculate feature proximity.
|
static |
Check and write internal/external closeness fields.
|
static |
Check single triangle for (topological) validity.
Definition at line 2667 of file triSurfaceTools.C.
References Foam::endl(), f(), PrimitivePatch< FaceList, PointField >::faceFaces(), PrimitivePatch< FaceList, PointField >::points(), and WarningInFunction.
Referenced by isoSurfaceCell::isoSurfaceCell(), and isoSurfacePoint::isoSurfacePoint().
|
static |
Check single triangle for (topological) validity.
Definition at line 2746 of file triSurfaceTools.C.
References Foam::endl(), f(), PrimitivePatch< FaceList, PointField >::faceFaces(), PrimitivePatch< FaceList, PointField >::points(), UList< T >::size(), and WarningInFunction.
|
static |
Test point on plane of triangle to see if on edge or point or inside.
Definition at line 2840 of file triSurfaceTools.C.
References triangle< Point, PointRef >::EDGE, surfaceLocation::elementType(), triangle< Point, PointRef >::NONE, triangle< Point, PointRef >::POINT, s, PointIndexHit< PointType >::setHit(), PointIndexHit< PointType >::setIndex(), PointIndexHit< PointType >::setMiss(), and PointIndexHit< PointType >::setPoint().
|
static |
Track on surface to get closer to point.
Possible situations:
Definition at line 2884 of file triSurfaceTools.C.
References triangle< Point, PointRef >::EDGE, surfaceLocation::elementType(), stdFoam::end(), PointIndexHit< PointType >::hit(), PointIndexHit< PointType >::index(), triangle< Point, PointRef >::NONE, pFaces, PointIndexHit< PointType >::point(), s, PointIndexHit< PointType >::setMiss(), and surfaceLocation::triangle().
|
static |
Track from edge to edge across surface. Uses trackToEdge.
Not really useful by itself, more example of how to use trackToEdge. endInfo should be location on surface. hitInfo should be initialised to starting location (on surface as well). Upon return is set to end location.
Definition at line 2962 of file triSurfaceTools.C.
References PointIndexHit< PointType >::hit(), s, and surfaceLocation::triangle().
|
static |
Face collapse status.
anyEdge: any edge can be collapsed noEdge: no edge can be collapsed collapsed: already collapsed >0: edge label that can be collapsed
Definition at line 423 of file triSurfaceTools.H.
|
static |
Definition at line 424 of file triSurfaceTools.H.
|
static |
Definition at line 425 of file triSurfaceTools.H.