Skip to content
Snippets Groups Projects
Commit ed4af781 authored by Franjo's avatar Franjo
Browse files

Merge branch 'enhancement-surfaceUtilities' into developmentPublicRepo

parents dddd354d 483f38e1
No related branches found
No related tags found
No related merge requests found
...@@ -46,8 +46,8 @@ void triSurfaceCopyParts::markFacetsForCopying ...@@ -46,8 +46,8 @@ void triSurfaceCopyParts::markFacetsForCopying
const geometricSurfacePatchList& patches = surf_.patches(); const geometricSurfacePatchList& patches = surf_.patches();
//- mark patches which will be removed //- mark patches which will be copied
boolList removePatch(patches.size(), false); boolList copyPatch(patches.size(), false);
forAll(patches, patchI) forAll(patches, patchI)
{ {
...@@ -57,7 +57,7 @@ void triSurfaceCopyParts::markFacetsForCopying ...@@ -57,7 +57,7 @@ void triSurfaceCopyParts::markFacetsForCopying
{ {
if( parts[partI] == name ) if( parts[partI] == name )
{ {
removePatch[patchI] = true; copyPatch[patchI] = true;
break; break;
} }
} }
...@@ -66,7 +66,7 @@ void triSurfaceCopyParts::markFacetsForCopying ...@@ -66,7 +66,7 @@ void triSurfaceCopyParts::markFacetsForCopying
//- select facets affected by the deletion of a patch //- select facets affected by the deletion of a patch
forAll(surf_, triI) forAll(surf_, triI)
{ {
if( removePatch[surf_[triI].region()] ) if( copyPatch[surf_[triI].region()] )
copyFacets[triI] = true; copyFacets[triI] = true;
} }
...@@ -110,13 +110,14 @@ void triSurfaceCopyParts::copySurfaceMesh ...@@ -110,13 +110,14 @@ void triSurfaceCopyParts::copySurfaceMesh
//- create the modifier and delete data if there is any //- create the modifier and delete data if there is any
triSurfModifier sm(s); triSurfModifier sm(s);
LongList<labelledTri>& newTriangles = sm.facetsAccess(); sm.facetsAccess().clear();
newTriangles.clear();
sm.featureEdgesAccess().clear(); sm.featureEdgesAccess().clear();
sm.patchesAccess().setSize(1); sm.patchesAccess().setSize(surf_.patches().size());
sm.patchesAccess()[0] = geometricSurfacePatch("patch0", "patch", 0); forAll(surf_.patches(), patchI)
sm.patchesAccess()[patchI] = surf_.patches()[patchI];
//- copy selected patches //- copy selected patches
labelLongList newTriangleLabel(surf_.size(), -1);
forAll(copyFacets, triI) forAll(copyFacets, triI)
{ {
if( !copyFacets[triI] ) if( !copyFacets[triI] )
...@@ -125,7 +126,7 @@ void triSurfaceCopyParts::copySurfaceMesh ...@@ -125,7 +126,7 @@ void triSurfaceCopyParts::copySurfaceMesh
const labelledTri& tri = surf_[triI]; const labelledTri& tri = surf_[triI];
labelledTri newTri; labelledTri newTri;
newTri.region() = 0; newTri.region() = tri.region();
forAll(tri, pI) forAll(tri, pI)
{ {
...@@ -138,10 +139,11 @@ void triSurfaceCopyParts::copySurfaceMesh ...@@ -138,10 +139,11 @@ void triSurfaceCopyParts::copySurfaceMesh
newTri[pI] = newPointLabel[tri[pI]]; newTri[pI] = newPointLabel[tri[pI]];
} }
newTriangles.append(newTri); newTriangleLabel[triI] = s.size();
s.appendTriangle(newTri);
} }
Info << "Copied triangles " << newTriangles.size() << endl; Info << "Copied triangles " << s.size() << endl;
Info << "Number of vertices " << nPoints << endl; Info << "Number of vertices " << nPoints << endl;
//- copy vertices //- copy vertices
...@@ -156,6 +158,115 @@ void triSurfaceCopyParts::copySurfaceMesh ...@@ -156,6 +158,115 @@ void triSurfaceCopyParts::copySurfaceMesh
newPts[newPointLabel[i]] = pts[i]; newPts[newPointLabel[i]] = pts[i];
} }
//- copy point subsets
DynList<label> subsetIds;
surf_.pointSubsetIndices(subsetIds);
forAll(subsetIds, subsetI)
{
const label origId = subsetIds[subsetI];
const word sName = surf_.pointSubsetName(origId);
labelLongList pointsInSubset;
surf_.pointsInSubset(origId, pointsInSubset);
const label newId = s.addPointSubset(sName);
forAll(pointsInSubset, i)
{
const label newPointI = newPointLabel[pointsInSubset[i]];
if( newPointI < 0 )
continue;
s.addPointToSubset(newId, newPointI);
}
}
//- copy facet subsets
surf_.facetSubsetIndices(subsetIds);
forAll(subsetIds, subsetI)
{
const label origId = subsetIds[subsetI];
const word sName = surf_.facetSubsetName(origId);
labelLongList trianglesInSubset;
surf_.facetsInSubset(origId, trianglesInSubset);
const label newId = s.addFacetSubset(sName);
forAll(trianglesInSubset, i)
{
const label newTriI = newTriangleLabel[trianglesInSubset[i]];
if( newTriI < 0 )
continue;
s.addFacetToSubset(newId, newTriI);
}
}
//- copy feature edges
labelLongList newEdgeLabel(surf_.nFeatureEdges(), -1);
const VRWGraph& pointEdges = surf_.pointEdges();
const edgeLongList& edges = surf_.edges();
const VRWGraph& edgeFacets = surf_.edgeFacets();
forAll(newEdgeLabel, edgeI)
{
const edge& e = surf_.featureEdges()[edgeI];
label eI(-1);
forAllRow(pointEdges, e.start(), peI)
{
const label eJ = pointEdges(e.start(), peI);
if( edges[eJ] == e )
{
eI = eJ;
break;
}
}
if( newPointLabel[e.start()] < 0 )
continue;
if( newPointLabel[e.end()] < 0 )
continue;
bool foundTriangle(false);
forAllRow(edgeFacets, eI, efI)
{
if( newTriangleLabel[edgeFacets(eI, efI)] >= 0 )
{
foundTriangle = true;
break;
}
}
if( !foundTriangle )
continue;
newEdgeLabel[edgeI] = sm.featureEdgesAccess().size();
sm.featureEdgesAccess().append
(
edge(newPointLabel[e.start()], newPointLabel[e.end()])
);
}
//- copy subsets of feature edges
surf_.edgeSubsetIndices(subsetIds);
forAll(subsetIds, subsetI)
{
const label origId = subsetIds[subsetI];
const word sName = surf_.edgeSubsetName(origId);
labelLongList edgesInSubset;
surf_.edgesInSubset(origId, edgesInSubset);
const label newId = s.addEdgeSubset(sName);
forAll(edgesInSubset, i)
{
const label newEdgeI = newEdgeLabel[edgesInSubset[i]];
if( newEdgeI < 0 )
continue;
s.addEdgeToSubset(newId, newEdgeI);
}
}
Info << "Finished copying surface parts" << endl; Info << "Finished copying surface parts" << endl;
} }
......
...@@ -143,6 +143,10 @@ void triSurfaceRemoveFacets::removeFacets() ...@@ -143,6 +143,10 @@ void triSurfaceRemoveFacets::removeFacets()
//- update feature edges //- update feature edges
const edgeLongList& featureEdges = surf_.featureEdges(); const edgeLongList& featureEdges = surf_.featureEdges();
const VRWGraph& pointEdges = surf_.pointEdges();
const edgeLongList& edges = surf_.edges();
const VRWGraph& edgeFacets = surf_.edgeFacets();
label edgeCounter(0); label edgeCounter(0);
labelLongList newFeatureEdgeLabel(featureEdges.size(), -1); labelLongList newFeatureEdgeLabel(featureEdges.size(), -1);
...@@ -153,6 +157,31 @@ void triSurfaceRemoveFacets::removeFacets() ...@@ -153,6 +157,31 @@ void triSurfaceRemoveFacets::removeFacets()
if( (newPointLabel[e.start()] < 0) || (newPointLabel[e.end()] < 0) ) if( (newPointLabel[e.start()] < 0) || (newPointLabel[e.end()] < 0) )
continue; continue;
//- find global edge label
label eI(-1);
forAllRow(pointEdges, e.start(), peI)
{
const label eJ = pointEdges(e.start(), peI);
if( edges[eJ] == e )
{
eI = eJ;
break;
}
}
//- check if the edge is attached to at least one triangle
bool foundTriangle(false);
forAllRow(edgeFacets, eI, efI)
{
if( newFacetLabel[edgeFacets(eI, efI)] >= 0 )
{
foundTriangle = true;
break;
}
}
if( !foundTriangle )
continue;
newFeatureEdgeLabel[feI] = edgeCounter++; newFeatureEdgeLabel[feI] = edgeCounter++;
} }
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment