mirror of
https://develop.openfoam.com/Development/openfoam.git
synced 2025-11-28 03:28:01 +00:00
simplification
This commit is contained in:
@ -24,15 +24,14 @@ License
|
|||||||
|
|
||||||
\*---------------------------------------------------------------------------*/
|
\*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
#include "Field.H"
|
|
||||||
#include "isoSurface.H"
|
#include "isoSurface.H"
|
||||||
#include "dictionary.H"
|
#include "dictionary.H"
|
||||||
#include "polyMesh.H"
|
#include "polyMesh.H"
|
||||||
#include "mergePoints.H"
|
#include "mergePoints.H"
|
||||||
#include "tetMatcher.H"
|
#include "tetMatcher.H"
|
||||||
#include "syncTools.H"
|
#include "syncTools.H"
|
||||||
|
|
||||||
#include "addToRunTimeSelectionTable.H"
|
#include "addToRunTimeSelectionTable.H"
|
||||||
|
#include "faceTriangulation.H"
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
|
||||||
|
|
||||||
@ -1867,7 +1866,128 @@ Foam::isoSurface::isoSurface
|
|||||||
}
|
}
|
||||||
|
|
||||||
orientSurface(*this, faceEdges, edgeFace0, edgeFace1, edgeFacesRest);
|
orientSurface(*this, faceEdges, edgeFace0, edgeFace1, edgeFacesRest);
|
||||||
|
|
||||||
|
//combineCellTriangles();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//XXXXXXX
|
||||||
|
// Experimental retriangulation of triangles per cell. Problem is that
|
||||||
|
// -it is very expensive -only gets rid of internal points, not of boundary
|
||||||
|
// ones so limited benefit (e.g. 60 v.s. 88 triangles)
|
||||||
|
void Foam::isoSurface::combineCellTriangles()
|
||||||
|
{
|
||||||
|
if (size() > 0)
|
||||||
|
{
|
||||||
|
DynamicList<labelledTri> newTris(size());
|
||||||
|
DynamicList<label> newTriToCell(size());
|
||||||
|
|
||||||
|
label startTriI = 0;
|
||||||
|
|
||||||
|
DynamicList<labelledTri> tris;
|
||||||
|
|
||||||
|
for (label triI = 1; triI <= meshCells_.size(); triI++)
|
||||||
|
{
|
||||||
|
if
|
||||||
|
(
|
||||||
|
triI == meshCells_.size()
|
||||||
|
|| meshCells_[triI] != meshCells_[startTriI]
|
||||||
|
)
|
||||||
|
{
|
||||||
|
label nTris = triI-startTriI;
|
||||||
|
|
||||||
|
if (nTris == 1)
|
||||||
|
{
|
||||||
|
newTris.append(operator[](startTriI));
|
||||||
|
newTriToCell.append(meshCells_[startTriI]);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// Collect from startTriI to triI in a triSurface
|
||||||
|
tris.clear();
|
||||||
|
for (label i = startTriI; i < triI; i++)
|
||||||
|
{
|
||||||
|
tris.append(operator[](i));
|
||||||
|
}
|
||||||
|
triSurface cellTris(tris, patches(), points());
|
||||||
|
tris.clear();
|
||||||
|
|
||||||
|
// Get outside
|
||||||
|
const labelListList& loops = cellTris.edgeLoops();
|
||||||
|
|
||||||
|
forAll(loops, i)
|
||||||
|
{
|
||||||
|
// Do proper triangulation of loop
|
||||||
|
face loop(renumber(cellTris.meshPoints(), loops[i]));
|
||||||
|
|
||||||
|
faceTriangulation faceTris
|
||||||
|
(
|
||||||
|
points(),
|
||||||
|
loop,
|
||||||
|
true
|
||||||
|
);
|
||||||
|
|
||||||
|
// Copy into newTris
|
||||||
|
forAll(faceTris, faceTriI)
|
||||||
|
{
|
||||||
|
const triFace& tri = faceTris[faceTriI];
|
||||||
|
|
||||||
|
newTris.append
|
||||||
|
(
|
||||||
|
labelledTri
|
||||||
|
(
|
||||||
|
tri[0],
|
||||||
|
tri[1],
|
||||||
|
tri[2],
|
||||||
|
operator[](startTriI).region()
|
||||||
|
)
|
||||||
|
);
|
||||||
|
newTriToCell.append(meshCells_[startTriI]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
startTriI = triI;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
newTris.shrink();
|
||||||
|
newTriToCell.shrink();
|
||||||
|
|
||||||
|
// Compact
|
||||||
|
pointField newPoints(points().size());
|
||||||
|
label newPointI = 0;
|
||||||
|
labelList oldToNewPoint(points().size(), -1);
|
||||||
|
|
||||||
|
forAll(newTris, i)
|
||||||
|
{
|
||||||
|
labelledTri& tri = newTris[i];
|
||||||
|
forAll(tri, j)
|
||||||
|
{
|
||||||
|
label pointI = tri[j];
|
||||||
|
|
||||||
|
if (oldToNewPoint[pointI] == -1)
|
||||||
|
{
|
||||||
|
oldToNewPoint[pointI] = newPointI;
|
||||||
|
newPoints[newPointI++] = points()[pointI];
|
||||||
|
}
|
||||||
|
tri[j] = oldToNewPoint[pointI];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
newPoints.setSize(newPointI);
|
||||||
|
|
||||||
|
triSurface::operator=
|
||||||
|
(
|
||||||
|
triSurface
|
||||||
|
(
|
||||||
|
newTris,
|
||||||
|
patches(),
|
||||||
|
newPoints,
|
||||||
|
true
|
||||||
|
)
|
||||||
|
);
|
||||||
|
meshCells_.transfer(newTriToCell);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//XXXXXXX
|
||||||
|
|
||||||
// ************************************************************************* //
|
// ************************************************************************* //
|
||||||
|
|||||||
@ -279,6 +279,8 @@ class isoSurface
|
|||||||
labelList& newToOldPoints
|
labelList& newToOldPoints
|
||||||
);
|
);
|
||||||
|
|
||||||
|
//- Combine all triangles inside a cell into a minimal triangulation
|
||||||
|
void combineCellTriangles();
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user