mirror of
https://develop.openfoam.com/Development/openfoam.git
synced 2025-11-28 03:28:01 +00:00
ENH: extendedFeatureEdgeMesh: added flipNormals function
This commit is contained in:
@ -1112,15 +1112,6 @@ void Foam::extendedFeatureEdgeMesh::add(const extendedFeatureEdgeMesh& fem)
|
|||||||
reverseFemPointMap[i] = newPointI++;
|
reverseFemPointMap[i] = newPointI++;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
//Pout<< "points:" << points().size() << endl;
|
|
||||||
//Pout<< "reversePointMap:" << reversePointMap << endl;
|
|
||||||
//
|
|
||||||
//Pout<< "fem.points:" << fem.points().size() << endl;
|
|
||||||
//Pout<< "reverseFemPointMap:" << reverseFemPointMap << endl;
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
pointField newPoints(newPointI);
|
pointField newPoints(newPointI);
|
||||||
newPoints.rmap(points(), reversePointMap);
|
newPoints.rmap(points(), reversePointMap);
|
||||||
newPoints.rmap(fem.points(), reverseFemPointMap);
|
newPoints.rmap(fem.points(), reverseFemPointMap);
|
||||||
@ -1240,11 +1231,6 @@ void Foam::extendedFeatureEdgeMesh::add(const extendedFeatureEdgeMesh& fem)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//Pout<< "fem.featurePointNormals().size():" << fem.featurePointNormals().size()
|
|
||||||
// << endl;
|
|
||||||
//Pout<< "fem.nonFeatureStart():" << fem.nonFeatureStart() << endl;
|
|
||||||
//Pout<< "reverseFemPointMap:" << reverseFemPointMap.size() << endl;
|
|
||||||
|
|
||||||
|
|
||||||
// Combine and re-index into newFeaturePointNormals
|
// Combine and re-index into newFeaturePointNormals
|
||||||
labelListList newFeaturePointNormals
|
labelListList newFeaturePointNormals
|
||||||
@ -1253,22 +1239,16 @@ void Foam::extendedFeatureEdgeMesh::add(const extendedFeatureEdgeMesh& fem)
|
|||||||
+ fem.featurePointNormals().size()
|
+ fem.featurePointNormals().size()
|
||||||
);
|
);
|
||||||
|
|
||||||
//Pout<< "newFeaturePointNormals:" << newFeaturePointNormals.size() << endl;
|
|
||||||
//Pout<< "Doing featurePointNormals." << endl;
|
|
||||||
|
|
||||||
// Note: featurePointNormals only go up to nonFeatureStart
|
// Note: featurePointNormals only go up to nonFeatureStart
|
||||||
UIndirectList<labelList>
|
UIndirectList<labelList>
|
||||||
(
|
(
|
||||||
newFeaturePointNormals,
|
newFeaturePointNormals,
|
||||||
SubList<label>(reversePointMap, nonFeatureStart())
|
SubList<label>(reversePointMap, featurePointNormals().size())
|
||||||
) = featurePointNormals();
|
) = featurePointNormals();
|
||||||
|
|
||||||
|
|
||||||
//Pout<< "Doing fem.featurePointNormals()." << endl;
|
|
||||||
UIndirectList<labelList>
|
UIndirectList<labelList>
|
||||||
(
|
(
|
||||||
newFeaturePointNormals,
|
newFeaturePointNormals,
|
||||||
SubList<label>(reverseFemPointMap, fem.nonFeatureStart())
|
SubList<label>(reverseFemPointMap, fem.featurePointNormals().size())
|
||||||
) = fem.featurePointNormals();
|
) = fem.featurePointNormals();
|
||||||
forAll(fem.featurePointNormals(), i)
|
forAll(fem.featurePointNormals(), i)
|
||||||
{
|
{
|
||||||
@ -1328,6 +1308,114 @@ void Foam::extendedFeatureEdgeMesh::add(const extendedFeatureEdgeMesh& fem)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void Foam::extendedFeatureEdgeMesh::flipNormals()
|
||||||
|
{
|
||||||
|
// Points
|
||||||
|
// ~~~~~~
|
||||||
|
|
||||||
|
// From current points into new points
|
||||||
|
labelList reversePointMap(identity(points().size()));
|
||||||
|
|
||||||
|
// Flip convex and concave points
|
||||||
|
|
||||||
|
label newPointI = 0;
|
||||||
|
// Concave points become convex
|
||||||
|
for (label i = concaveStart(); i < mixedStart(); i++)
|
||||||
|
{
|
||||||
|
reversePointMap[i] = newPointI++;
|
||||||
|
}
|
||||||
|
// Convex points become concave
|
||||||
|
label newConcaveStart = newPointI;
|
||||||
|
for (label i = 0; i < concaveStart(); i++)
|
||||||
|
{
|
||||||
|
reversePointMap[i] = newPointI++;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// Edges
|
||||||
|
// ~~~~~~
|
||||||
|
|
||||||
|
// From current edges into new edges
|
||||||
|
labelList reverseEdgeMap(identity(edges().size()));
|
||||||
|
|
||||||
|
// Flip external and internal edges
|
||||||
|
|
||||||
|
label newEdgeI = 0;
|
||||||
|
// Internal become external
|
||||||
|
for (label i = internalStart(); i < flatStart(); i++)
|
||||||
|
{
|
||||||
|
reverseEdgeMap[i] = newEdgeI++;
|
||||||
|
}
|
||||||
|
// External become internal
|
||||||
|
label newInternalStart = newEdgeI;
|
||||||
|
for (label i = 0; i < internalStart(); i++)
|
||||||
|
{
|
||||||
|
reverseEdgeMap[i] = newEdgeI++;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
pointField newPoints(points().size());
|
||||||
|
newPoints.rmap(points(), reversePointMap);
|
||||||
|
|
||||||
|
edgeList newEdges(edges().size());
|
||||||
|
forAll(edges(), i)
|
||||||
|
{
|
||||||
|
const edge& e = edges()[i];
|
||||||
|
newEdges[reverseEdgeMap[i]] = edge
|
||||||
|
(
|
||||||
|
reversePointMap[e[0]],
|
||||||
|
reversePointMap[e[1]]
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// Normals are flipped
|
||||||
|
// ~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
pointField newEdgeDirections(edges().size());
|
||||||
|
newEdgeDirections.rmap(-1.0*edgeDirections(), reverseEdgeMap);
|
||||||
|
|
||||||
|
pointField newNormals(-1.0*normals());
|
||||||
|
|
||||||
|
labelListList newEdgeNormals(edgeNormals().size());
|
||||||
|
UIndirectList<labelList>(newEdgeNormals, reverseEdgeMap) = edgeNormals();
|
||||||
|
|
||||||
|
labelListList newFeaturePointNormals(featurePointNormals().size());
|
||||||
|
|
||||||
|
// Note: featurePointNormals only go up to nonFeatureStart
|
||||||
|
UIndirectList<labelList>
|
||||||
|
(
|
||||||
|
newFeaturePointNormals,
|
||||||
|
SubList<label>(reversePointMap, featurePointNormals().size())
|
||||||
|
) = featurePointNormals();
|
||||||
|
|
||||||
|
labelList newRegionEdges(regionEdges().size());
|
||||||
|
forAll(regionEdges(), i)
|
||||||
|
{
|
||||||
|
newRegionEdges[i] = reverseEdgeMap[regionEdges()[i]];
|
||||||
|
}
|
||||||
|
|
||||||
|
// Transfer
|
||||||
|
concaveStart_ = newConcaveStart;
|
||||||
|
|
||||||
|
// Reset points and edges
|
||||||
|
reset(xferMove(newPoints), newEdges.xfer());
|
||||||
|
|
||||||
|
// Transfer
|
||||||
|
internalStart_ = newInternalStart;
|
||||||
|
|
||||||
|
edgeDirections_.transfer(newEdgeDirections);
|
||||||
|
normals_.transfer(newNormals);
|
||||||
|
edgeNormals_.transfer(newEdgeNormals);
|
||||||
|
featurePointNormals_.transfer(newFeaturePointNormals);
|
||||||
|
regionEdges_.transfer(newRegionEdges);
|
||||||
|
|
||||||
|
pointTree_.clear();
|
||||||
|
edgeTree_.clear();
|
||||||
|
edgeTreesByType_.clear();
|
||||||
|
}
|
||||||
|
//XXXXX
|
||||||
|
|
||||||
void Foam::extendedFeatureEdgeMesh::writeObj
|
void Foam::extendedFeatureEdgeMesh::writeObj
|
||||||
(
|
(
|
||||||
const fileName& prefix
|
const fileName& prefix
|
||||||
|
|||||||
@ -388,6 +388,10 @@ public:
|
|||||||
//- Add extendedFeatureEdgeMesh. No filtering of duplicates.
|
//- Add extendedFeatureEdgeMesh. No filtering of duplicates.
|
||||||
void add(const extendedFeatureEdgeMesh&);
|
void add(const extendedFeatureEdgeMesh&);
|
||||||
|
|
||||||
|
//- Flip normals. All concave become convex, all internal external
|
||||||
|
// etc.
|
||||||
|
void flipNormals();
|
||||||
|
|
||||||
|
|
||||||
// Write
|
// Write
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user