ENH: refinementFeatures: avoid searching on empty trees

This commit is contained in:
mattijs
2011-04-19 17:24:59 +01:00
parent a913524c75
commit 57d7a3be20

View File

@ -129,7 +129,8 @@ Foam::refinementFeatures::refinementFeatures
} }
Info<< "Detected " << featurePoints.size() Info<< "Detected " << featurePoints.size()
<< " featurePoints out of " << points.size() << endl; << " featurePoints out of " << points.size()
<< " on feature " << eMesh.name() << endl;
pointTrees_.set pointTrees_.set
( (
@ -164,26 +165,30 @@ void Foam::refinementFeatures::findNearestEdge
forAll(edgeTrees_, featI) forAll(edgeTrees_, featI)
{ {
const indexedOctree<treeDataEdge>& tree = edgeTrees_[featI]; const indexedOctree<treeDataEdge>& tree = edgeTrees_[featI];
forAll(samples, sampleI)
if (tree.shapes().size() > 0)
{ {
const point& sample = samples[sampleI]; forAll(samples, sampleI)
scalar distSqr;
if (nearInfo[sampleI].hit())
{ {
distSqr = magSqr(nearInfo[sampleI].hitPoint()-sample); const point& sample = samples[sampleI];
}
else
{
distSqr = nearestDistSqr[sampleI];
}
pointIndexHit info = tree.findNearest(sample, distSqr); scalar distSqr;
if (nearInfo[sampleI].hit())
{
distSqr = magSqr(nearInfo[sampleI].hitPoint()-sample);
}
else
{
distSqr = nearestDistSqr[sampleI];
}
if (info.hit()) pointIndexHit info = tree.findNearest(sample, distSqr);
{
nearInfo[sampleI] = info; if (info.hit())
nearFeature[sampleI] = featI; {
nearInfo[sampleI] = info;
nearFeature[sampleI] = featI;
}
} }
} }
} }
@ -206,33 +211,37 @@ void Foam::refinementFeatures::findNearestPoint
forAll(pointTrees_, featI) forAll(pointTrees_, featI)
{ {
const indexedOctree<treeDataPoint>& tree = pointTrees_[featI]; const indexedOctree<treeDataPoint>& tree = pointTrees_[featI];
forAll(samples, sampleI)
if (tree.shapes().pointLabels().size() > 0)
{ {
const point& sample = samples[sampleI]; forAll(samples, sampleI)
scalar distSqr;
if (nearFeature[sampleI] != -1)
{ {
label nearFeatI = nearFeature[sampleI]; const point& sample = samples[sampleI];
const indexedOctree<treeDataPoint>& nearTree =
pointTrees_[nearFeatI];
label featPointI =
nearTree.shapes().pointLabels()[nearIndex[sampleI]];
const point& featPt =
operator[](nearFeatI).points()[featPointI];
distSqr = magSqr(featPt-sample);
}
else
{
distSqr = nearestDistSqr[sampleI];
}
pointIndexHit info = tree.findNearest(sample, distSqr); scalar distSqr;
if (nearFeature[sampleI] != -1)
{
label nearFeatI = nearFeature[sampleI];
const indexedOctree<treeDataPoint>& nearTree =
pointTrees_[nearFeatI];
label featPointI =
nearTree.shapes().pointLabels()[nearIndex[sampleI]];
const point& featPt =
operator[](nearFeatI).points()[featPointI];
distSqr = magSqr(featPt-sample);
}
else
{
distSqr = nearestDistSqr[sampleI];
}
if (info.hit()) pointIndexHit info = tree.findNearest(sample, distSqr);
{
nearFeature[sampleI] = featI; if (info.hit())
nearIndex[sampleI] = info.index(); {
nearFeature[sampleI] = featI;
nearIndex[sampleI] = info.index();
}
} }
} }
} }