void Foam::cuttingPlane::calcCutCells ( const primitiveMesh& mesh, const scalarField& dotProducts, const labelUList& cellIdLabels ) { const labelListList& cellEdges = mesh.cellEdges(); const edgeList& edges = mesh.edges(); label listSize = cellEdges.size(); if (notNull(cellIdLabels)) { listSize = cellIdLabels.size(); } cutCells_.setSize(listSize); label cutcellI(0); // Find the cut cells by detecting any cell that uses points with // opposing dotProducts. for (label listI = 0; listI < listSize; ++listI) { label cellI = listI; if (notNull(cellIdLabels)) { cellI = cellIdLabels[listI]; } const labelList& cEdges = cellEdges[cellI]; label nCutEdges = 0; forAll(cEdges, i) { const edge& e = edges[cEdges[i]]; if ( (dotProducts[e[0]] < zeroish && dotProducts[e[1]] > positive) || (dotProducts[e[1]] < zeroish && dotProducts[e[0]] > positive) ) { nCutEdges++; if (nCutEdges > 2) { cutCells_[cutcellI++] = cellI; break; } } } } // Set correct list size cutCells_.setSize(cutcellI); }