diff --git a/applications/test/findSphereFeatureEdges-octree/Make/files b/applications/test/findSphereFeatureEdges-octree/Make/files
new file mode 100644
index 0000000000..b9c5a5027f
--- /dev/null
+++ b/applications/test/findSphereFeatureEdges-octree/Make/files
@@ -0,0 +1,3 @@
+Test-findSphereFeatureEdges-octree.C
+
+EXE = $(FOAM_USER_APPBIN)/Test-findSphereFeatureEdges-octree
diff --git a/applications/test/findSphereFeatureEdges-octree/Make/options b/applications/test/findSphereFeatureEdges-octree/Make/options
new file mode 100644
index 0000000000..6069034514
--- /dev/null
+++ b/applications/test/findSphereFeatureEdges-octree/Make/options
@@ -0,0 +1,9 @@
+EXE_INC = \
+ -I$(LIB_SRC)/finiteVolume/lnInclude \
+ -I$(LIB_SRC)/meshTools/lnInclude \
+ -I$(LIB_SRC)/edgeMesh/lnInclude
+
+EXE_LIBS = \
+ -lfiniteVolume \
+ -lmeshTools \
+ -ledgeMesh
diff --git a/applications/test/findSphereFeatureEdges-octree/Test-findSphereFeatureEdges-octree.C b/applications/test/findSphereFeatureEdges-octree/Test-findSphereFeatureEdges-octree.C
new file mode 100644
index 0000000000..8a81e211e0
--- /dev/null
+++ b/applications/test/findSphereFeatureEdges-octree/Test-findSphereFeatureEdges-octree.C
@@ -0,0 +1,111 @@
+/*---------------------------------------------------------------------------*\
+ ========= |
+ \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
+ \\ / O peration |
+ \\ / A nd | Copyright (C) 2011 OpenFOAM Foundation
+ \\/ M anipulation |
+-------------------------------------------------------------------------------
+License
+ This file is part of OpenFOAM.
+
+ OpenFOAM is free software: you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with OpenFOAM. If not, see .
+
+\*---------------------------------------------------------------------------*/
+
+#include "argList.H"
+#include "Time.H"
+#include "fvMesh.H"
+#include "IStringStream.H"
+#include "indexedOctree.H"
+#include "treeDataEdge.H"
+#include "OFstream.H"
+#include "extendedFeatureEdgeMesh.H"
+
+using namespace Foam;
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+// Main program:
+
+int main(int argc, char *argv[])
+{
+
+# include "setRootCase.H"
+# include "createTime.H"
+# include "createMesh.H"
+
+ fileName sFeatFileName("unit_cube.extendedFeatureEdgeMesh");
+
+ extendedFeatureEdgeMesh efem
+ (
+ IOobject
+ (
+ sFeatFileName,
+ runTime.time().constant(),
+ "extendedFeatureEdgeMesh",
+ runTime.time(),
+ IOobject::MUST_READ,
+ IOobject::NO_WRITE
+ )
+ );
+
+ // Slightly extended bb. Slightly off-centred just so on symmetric
+ // geometry there are less face/edge aligned items.
+ treeBoundBox bb
+ (
+ efem.points()
+ );
+
+ bb.min() -= point(ROOTVSMALL, ROOTVSMALL, ROOTVSMALL);
+ bb.max() += point(ROOTVSMALL, ROOTVSMALL, ROOTVSMALL);
+
+ labelList allEdges(identity(efem.edges().size()));
+
+ indexedOctree edgeTree
+ (
+ treeDataEdge
+ (
+ false, // cachebb
+ efem.edges(), // edges
+ efem.points(), // points
+ allEdges // selected edges
+ ),
+ bb, // bb
+ 8, // maxLevel
+ 10, // leafsize
+ 3.0 // duplicity
+ );
+
+ Info<< "Points: " << efem.points() << nl << endl;
+
+ Info<< "Find edge labels within sphere from point (0, 0, 0):" << endl;
+
+ Info<< " Radius = 0 : "
+ << edgeTree.findSphere(point(0, 0, 0), 0) << endl;
+
+ Info<< " Radius = 0.5 : "
+ << edgeTree.findSphere(point(0, 0, 0), 0.5) << endl;
+
+ Info<< " Radius = 1 : "
+ << edgeTree.findSphere(point(0, 0, 0), 1) << endl;
+
+ Info<< " Radius = 2 : "
+ << edgeTree.findSphere(point(0, 0, 0), 2) << endl;
+
+ Info<< "End\n" << endl;
+
+ return 0;
+}
+
+
+// ************************************************************************* //
diff --git a/src/meshTools/indexedOctree/treeDataEdge.C b/src/meshTools/indexedOctree/treeDataEdge.C
index d394582236..08d7ba8eeb 100644
--- a/src/meshTools/indexedOctree/treeDataEdge.C
+++ b/src/meshTools/indexedOctree/treeDataEdge.C
@@ -139,6 +139,25 @@ bool Foam::treeDataEdge::overlaps
}
+// Check if any point on shape is inside sphere.
+bool Foam::treeDataEdge::overlaps
+(
+ const label index,
+ const point& centre,
+ const scalar radiusSqr
+) const
+{
+ if (cacheBb_)
+ {
+ return bbs_[index].overlaps(centre, radiusSqr);
+ }
+ else
+ {
+ return calcBb(edgeLabels_[index]).overlaps(centre, radiusSqr);
+ }
+}
+
+
// Calculate nearest point to sample. Updates (if any) nearestDistSqr, minIndex,
// nearestPoint.
void Foam::treeDataEdge::findNearest
diff --git a/src/meshTools/indexedOctree/treeDataEdge.H b/src/meshTools/indexedOctree/treeDataEdge.H
index c6af44e9ed..9a8deadb73 100644
--- a/src/meshTools/indexedOctree/treeDataEdge.H
+++ b/src/meshTools/indexedOctree/treeDataEdge.H
@@ -148,6 +148,14 @@ public:
const treeBoundBox& sampleBb
) const;
+ //- Does (bb of) shape at index overlap bb
+ bool overlaps
+ (
+ const label index,
+ const point& centre,
+ const scalar radiusSqr
+ ) const;
+
//- Calculates nearest (to sample) point in shape.
// Returns actual point and distance (squared)
void findNearest