diff --git a/src/meshTools/searchableSurface/searchableRotatedBox.C b/src/meshTools/searchableSurface/searchableRotatedBox.C
new file mode 100644
index 0000000000..cbedeeeeed
--- /dev/null
+++ b/src/meshTools/searchableSurface/searchableRotatedBox.C
@@ -0,0 +1,401 @@
+/*---------------------------------------------------------------------------*\
+ ========= |
+ \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
+ \\ / O peration |
+ \\ / A nd | Copyright (C) 2014 OpenFOAM Foundation
+ \\/ M anipulation | Copyright (C) 2015 OpenCFD Ltd.
+-------------------------------------------------------------------------------
+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 "searchableRotatedBox.H"
+#include "addToRunTimeSelectionTable.H"
+#include "axesRotation.H"
+
+// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
+
+namespace Foam
+{
+ defineTypeNameAndDebug(searchableRotatedBox, 0);
+ addToRunTimeSelectionTable(searchableSurface, searchableRotatedBox, dict);
+}
+
+
+// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
+
+Foam::searchableRotatedBox::searchableRotatedBox
+(
+ const IOobject& io,
+ const dictionary& dict
+)
+:
+ searchableSurface(io),
+ box_
+ (
+ IOobject
+ (
+ io.name() + "_box",
+ io.instance(),
+ io.local(),
+ io.db(),
+ io.readOpt(),
+ io.writeOpt(),
+ false, //io.registerObject(),
+ io.globalObject()
+ ),
+ treeBoundBox(point::zero, dict.lookup("span"))
+ ),
+ transform_
+ (
+ "rotation",
+ dict.lookup("origin"),
+ dict.lookup("e3"),
+ dict.lookup("e1")
+ )
+{
+ points_ = transform_.globalPosition(box_.points());
+}
+
+
+// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * //
+
+Foam::searchableRotatedBox::~searchableRotatedBox()
+{}
+
+
+// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
+
+const Foam::wordList& Foam::searchableRotatedBox::regions() const
+{
+ return box_.regions();
+}
+
+
+Foam::tmp Foam::searchableRotatedBox::coordinates() const
+{
+ return transform_.globalPosition(box_.coordinates());
+}
+
+
+void Foam::searchableRotatedBox::boundingSpheres
+(
+ pointField& centres,
+ scalarField& radiusSqr
+) const
+{
+ box_.boundingSpheres(centres, radiusSqr);
+ centres = transform_.globalPosition(centres);
+}
+
+
+Foam::tmp Foam::searchableRotatedBox::points() const
+{
+ return points_;
+}
+
+
+bool Foam::searchableRotatedBox::overlaps(const boundBox& bb) const
+{
+ // (from treeDataPrimitivePatch.C)
+
+ // 1. bounding box
+ if (!bb.overlaps(bounds()))
+ {
+ return false;
+ }
+
+ // 2. Check if one or more face points inside
+ const faceList& fcs = treeBoundBox::faces;
+ forAll(fcs, faceI)
+ {
+ if (bb.containsAny(points_))
+ {
+ return true;
+ }
+ }
+
+ // 3. Difficult case: all points are outside but connecting edges might
+ // go through cube.
+
+ const treeBoundBox treeBb(bb);
+
+ // 3a. my edges through bb faces
+ const edgeList& edges = treeBoundBox::edges;
+ forAll(edges, edgeI)
+ {
+ const edge& e = edges[edgeI];
+
+ point inter;
+ if (treeBb.intersects(points_[e[0]], points_[e[1]], inter))
+ {
+ return true;
+ }
+ }
+
+ // 3b. bb edges through my faces
+
+ const pointField bbPoints(bb.points());
+
+ forAll(fcs, faceI)
+ {
+ const face& f = fcs[faceI];
+ point fc = f.centre(points_);
+
+ forAll(edges, edgeI)
+ {
+ const edge& e = edges[edgeI];
+
+ pointHit inter = f.intersection
+ (
+ bbPoints[e[0]],
+ bbPoints[e[1]],
+ fc,
+ points_,
+ intersection::HALF_RAY
+ );
+
+ if (inter.hit() && inter.distance() <= 1)
+ {
+ return true;
+ }
+ }
+ }
+
+ return false;
+}
+
+
+Foam::pointIndexHit Foam::searchableRotatedBox::findNearest
+(
+ const point& sample,
+ const scalar nearestDistSqr
+) const
+{
+ pointIndexHit boxNearest
+ (
+ box_.findNearest
+ (
+ transform_.localPosition(sample),
+ nearestDistSqr
+ )
+ );
+
+ boxNearest.rawPoint() = transform_.globalPosition(boxNearest.rawPoint());
+
+ return boxNearest;
+}
+
+
+Foam::pointIndexHit Foam::searchableRotatedBox::findNearest
+(
+ const linePointRef& ln,
+ treeBoundBox& tightest,
+ point& linePoint
+) const
+{
+ notImplemented
+ (
+ "searchableRotatedBox::findNearest"
+ "(const linePointRef&, treeBoundBox&, point&)"
+ );
+ return pointIndexHit();
+}
+
+
+Foam::pointIndexHit Foam::searchableRotatedBox::findLine
+(
+ const point& start,
+ const point& end
+) const
+{
+ pointIndexHit boxHit
+ (
+ box_.findLine
+ (
+ transform_.localPosition(start),
+ transform_.localPosition(end)
+ )
+ );
+
+ boxHit.rawPoint() = transform_.globalPosition(boxHit.rawPoint());
+
+ return boxHit;
+}
+
+
+Foam::pointIndexHit Foam::searchableRotatedBox::findLineAny
+(
+ const point& start,
+ const point& end
+) const
+{
+ return findLine(start, end);
+}
+
+
+void Foam::searchableRotatedBox::findNearest
+(
+ const pointField& samples,
+ const scalarField& nearestDistSqr,
+ List& info
+) const
+{
+ info.setSize(samples.size());
+
+ forAll(samples, i)
+ {
+ info[i] = findNearest(samples[i], nearestDistSqr[i]);
+ }
+}
+
+
+void Foam::searchableRotatedBox::findLine
+(
+ const pointField& start,
+ const pointField& end,
+ List& info
+) const
+{
+ info.setSize(start.size());
+
+ forAll(start, i)
+ {
+ info[i] = findLine(start[i], end[i]);
+ }
+}
+
+
+void Foam::searchableRotatedBox::findLineAny
+(
+ const pointField& start,
+ const pointField& end,
+ List& info
+) const
+{
+ info.setSize(start.size());
+
+ forAll(start, i)
+ {
+ info[i] = findLineAny(start[i], end[i]);
+ }
+}
+
+
+void Foam::searchableRotatedBox::findLineAll
+(
+ const pointField& start,
+ const pointField& end,
+ List >& info
+) const
+{
+ info.setSize(start.size());
+
+ // Work array
+ DynamicList hits;
+
+ // Tolerances:
+ // To find all intersections we add a small vector to the last intersection
+ // This is chosen such that
+ // - it is significant (SMALL is smallest representative relative tolerance;
+ // we need something bigger since we're doing calculations)
+ // - if the start-end vector is zero we still progress
+ const vectorField dirVec(end-start);
+ const scalarField magSqrDirVec(magSqr(dirVec));
+ const vectorField smallVec
+ (
+ Foam::sqrt(SMALL)*dirVec
+ + vector(ROOTVSMALL,ROOTVSMALL,ROOTVSMALL)
+ );
+
+ forAll(start, pointI)
+ {
+ // See if any intersection between pt and end
+ pointIndexHit inter = findLine(start[pointI], end[pointI]);
+
+ if (inter.hit())
+ {
+ hits.clear();
+ hits.append(inter);
+
+ point pt = inter.hitPoint() + smallVec[pointI];
+
+ while (((pt-start[pointI])&dirVec[pointI]) <= magSqrDirVec[pointI])
+ {
+ // See if any intersection between pt and end
+ pointIndexHit inter = findLine(pt, end[pointI]);
+
+ // Check for not hit or hit same face as before (can happen
+ // if vector along surface of face)
+ if
+ (
+ !inter.hit()
+ || (inter.index() == hits.last().index())
+ )
+ {
+ break;
+ }
+ hits.append(inter);
+
+ pt = inter.hitPoint() + smallVec[pointI];
+ }
+
+ info[pointI].transfer(hits);
+ }
+ else
+ {
+ info[pointI].clear();
+ }
+ }
+}
+
+
+void Foam::searchableRotatedBox::getRegion
+(
+ const List& info,
+ labelList& region
+) const
+{
+ region.setSize(info.size());
+ region = 0;
+}
+
+
+void Foam::searchableRotatedBox::getNormal
+(
+ const List& info,
+ vectorField& normal
+) const
+{
+ // searchableBox does not use hitPoints so no need to transform
+ box_.getNormal(info, normal);
+
+ normal = transform_.globalVector(normal);
+}
+
+
+void Foam::searchableRotatedBox::getVolumeType
+(
+ const pointField& points,
+ List& volType
+) const
+{
+ box_.getVolumeType(transform_.localPosition(points), volType);
+}
+
+
+// ************************************************************************* //
diff --git a/src/meshTools/searchableSurface/searchableRotatedBox.H b/src/meshTools/searchableSurface/searchableRotatedBox.H
new file mode 100644
index 0000000000..1d1b9c452c
--- /dev/null
+++ b/src/meshTools/searchableSurface/searchableRotatedBox.H
@@ -0,0 +1,264 @@
+/*---------------------------------------------------------------------------*\
+ ========= |
+ \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
+ \\ / O peration |
+ \\ / A nd | Copyright (C) 2014 OpenFOAM Foundation
+ \\/ M anipulation | Copyright (C) 2015 OpenCFD Ltd.
+-------------------------------------------------------------------------------
+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 .
+
+Class
+ Foam::searchableRotatedBox
+
+Description
+ Searching on a rotated box
+
+ Box defined as min and max coordinate. Rotation by coordinate system
+ at box middle.
+
+ E.g. box with sides 1 1 1 rotated 45 degrees around z-axis at
+ origin (0.5 0.5 0.5)
+ \verbatim
+ span (1 1 1);
+ origin (0.5 0.5 0.5);
+ e1 (1 1 0);
+ e3 (0 0 1);
+ \endverbatim
+
+SourceFiles
+ searchableRotatedBox.C
+
+\*---------------------------------------------------------------------------*/
+
+#ifndef searchableRotatedBox_H
+#define searchableRotatedBox_H
+
+#include "searchableSurface.H"
+#include "coordinateSystem.H"
+#include "searchableBox.H"
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+namespace Foam
+{
+
+// Forward declaration of classes
+
+/*---------------------------------------------------------------------------*\
+ Class searchableRotatedBox Declaration
+\*---------------------------------------------------------------------------*/
+
+class searchableRotatedBox
+:
+ public searchableSurface
+{
+private:
+
+ // Private Member Data
+
+ //- box in local coordinate system
+ searchableBox box_;
+
+ //- transformation from local to global coordinates
+ coordinateSystem transform_;
+
+ //- (global) corner points (in treeBoundBox order)
+ pointField points_;
+
+
+ // Private Member Functions
+
+ //- Disallow default bitwise copy construct
+ searchableRotatedBox(const searchableRotatedBox&);
+
+ //- Disallow default bitwise assignment
+ void operator=(const searchableRotatedBox&);
+
+
+public:
+
+ //- Runtime type information
+ TypeName("searchableRotatedBox");
+
+
+ // Constructors
+
+ //- Construct from dictionary (used by searchableSurface)
+ searchableRotatedBox
+ (
+ const IOobject& io,
+ const dictionary& dict
+ );
+
+
+ //- Destructor
+ virtual ~searchableRotatedBox();
+
+
+ // Member Functions
+
+ virtual const wordList& regions() const;
+
+ //- Whether supports volume type below
+ virtual bool hasVolumeType() const
+ {
+ return true;
+ }
+
+ //- Range of local indices that can be returned.
+ virtual label size() const
+ {
+ return 6;
+ }
+
+ //- Get representative set of element coordinates
+ // Usually the element centres (should be of length size()).
+ virtual tmp coordinates() const;
+
+ //- Get bounding spheres (centre and radius squared), one per element.
+ // Any point on element is guaranteed to be inside.
+ virtual void boundingSpheres
+ (
+ pointField& centres,
+ scalarField& radiusSqr
+ ) const;
+
+ //- Get the points that define the surface.
+ virtual tmp points() const;
+
+ // Does any part of the surface overlap the supplied bound box?
+ virtual bool overlaps(const boundBox& bb) const;
+
+ // Single point queries.
+
+ //- Calculate nearest point on surface.
+ // Returns
+ // - bool : any point found nearer than nearestDistSqr
+ // - label: relevant index in surface (=face 0..5)
+ // - point: actual nearest point found
+ pointIndexHit findNearest
+ (
+ const point& sample,
+ const scalar nearestDistSqr
+ ) const;
+
+ //- Find nearest to segment.
+ // Returns
+ // - bool : any point found?
+ // - label: relevant index in shapes (=face 0..5)
+ // - point: actual nearest point found
+ // sets:
+ // - tightest : bounding box
+ // - linePoint : corresponding nearest point on line
+ pointIndexHit findNearest
+ (
+ const linePointRef& ln,
+ treeBoundBox& tightest,
+ point& linePoint
+ ) const;
+
+ //- Find nearest intersection of line between start and end.
+ pointIndexHit findLine
+ (
+ const point& start,
+ const point& end
+ ) const;
+
+ //- Find any intersection of line between start and end.
+ pointIndexHit findLineAny
+ (
+ const point& start,
+ const point& end
+ ) const;
+
+
+ // Multiple point queries.
+
+ virtual void findNearest
+ (
+ const pointField& sample,
+ const scalarField& nearestDistSqr,
+ List&
+ ) const;
+
+ virtual void findLine
+ (
+ const pointField& start,
+ const pointField& end,
+ List&
+ ) const;
+
+ virtual void findLineAny
+ (
+ const pointField& start,
+ const pointField& end,
+ List&
+ ) const;
+
+ //- Get all intersections in order from start to end.
+ virtual void findLineAll
+ (
+ const pointField& start,
+ const pointField& end,
+ List >&
+ ) const;
+
+ //- From a set of points and indices get the region
+ virtual void getRegion
+ (
+ const List&,
+ labelList& region
+ ) const;
+
+ //- From a set of points and indices get the normal
+ virtual void getNormal
+ (
+ const List&,
+ vectorField& normal
+ ) const;
+
+ //- Determine type (inside/outside/mixed) for point. unknown if
+ // cannot be determined (e.g. non-manifold surface)
+ virtual void getVolumeType
+ (
+ const pointField&,
+ List&
+ ) const;
+
+
+ // regIOobject implementation
+
+ bool writeData(Ostream&) const
+ {
+ notImplemented
+ (
+ "searchableRotatedBox::writeData(Ostream&) const"
+ );
+ return false;
+ }
+};
+
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+} // End namespace Foam
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+#endif
+
+// ************************************************************************* //
diff --git a/src/meshTools/searchableSurface/searchableSurfaceCollection.H b/src/meshTools/searchableSurface/searchableSurfaceCollection.H
index b3153b6576..de13609e02 100644
--- a/src/meshTools/searchableSurface/searchableSurfaceCollection.H
+++ b/src/meshTools/searchableSurface/searchableSurfaceCollection.H
@@ -3,7 +3,7 @@
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration |
\\ / A nd | Copyright (C) 2011-2015 OpenFOAM Foundation
- \\/ M anipulation |
+ \\/ M anipulation | Copyright (C) 2015 OpenCFD Ltd.
-------------------------------------------------------------------------------
License
This file is part of OpenFOAM.
@@ -25,8 +25,8 @@ Class
Foam::searchableSurfaceCollection
Description
- Set of transformed searchableSurfaces. Does not do boolean operations.
- So when meshing might find parts 'inside'.
+ Set of transformed searchableSurfaces. Does not do boolean operations
+ so when meshing might find parts 'inside'.
SourceFiles
searchableSurfaceCollection.C
@@ -47,8 +47,6 @@ SourceFiles
namespace Foam
{
-// Forward declaration of classes
-
/*---------------------------------------------------------------------------*\
Class searchableSurfaceCollection Declaration
\*---------------------------------------------------------------------------*/
diff --git a/src/meshTools/searchableSurface/searchableSurfaceWithGaps.H b/src/meshTools/searchableSurface/searchableSurfaceWithGaps.H
index 0cd23e807a..de668c28fe 100644
--- a/src/meshTools/searchableSurface/searchableSurfaceWithGaps.H
+++ b/src/meshTools/searchableSurface/searchableSurfaceWithGaps.H
@@ -3,7 +3,7 @@
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration |
\\ / A nd | Copyright (C) 2011-2015 OpenFOAM Foundation
- \\/ M anipulation |
+ \\/ M anipulation | Copyright (C) 2015 OpenCFD Ltd.
-------------------------------------------------------------------------------
License
This file is part of OpenFOAM.
@@ -34,6 +34,22 @@ Description
- extend the test vector slightly (with SMALL) to account for numerical
inaccuracies.
+ \verbatim
+ sphere.stl
+ {
+ type triSurfaceMesh;
+ }
+
+ sphere
+ {
+ type searchableSurfaceWithGaps;
+ // Underlying surface
+ surface sphere.stl;
+ // Perturb distance
+ gap 1e-3;
+ }
+ \endverbatim
+
SourceFiles
searchableSurfaceWithGaps.C
diff --git a/src/meshTools/searchableSurface/searchableSurfaces.C b/src/meshTools/searchableSurface/searchableSurfaces.C
index 49cbaf8ab0..99b73b7558 100644
--- a/src/meshTools/searchableSurface/searchableSurfaces.C
+++ b/src/meshTools/searchableSurface/searchableSurfaces.C
@@ -3,7 +3,7 @@
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration |
\\ / A nd | Copyright (C) 2011-2014 OpenFOAM Foundation
- \\/ M anipulation |
+ \\/ M anipulation | Copyright (C) 2015 OpenCFD Ltd.
-------------------------------------------------------------------------------
License
This file is part of OpenFOAM.
@@ -27,9 +27,7 @@ License
#include "searchableSurfacesQueries.H"
#include "ListOps.H"
#include "Time.H"
-//#include "vtkSetWriter.H"
#include "DynamicField.H"
-//#include "OBJstream.H"
#include "PatchTools.H"
#include "triSurfaceMesh.H"
@@ -405,9 +403,9 @@ void Foam::searchableSurfaces::findNearest
// Find nearest. Return -1 or nearest point
void Foam::searchableSurfaces::findNearest
(
+ const labelListList& regionIndices,
const pointField& samples,
const scalarField& nearestDistSqr,
- const labelList& regionIndices,
labelList& nearestSurfaces,
List& nearestInfo
) const
@@ -416,9 +414,11 @@ void Foam::searchableSurfaces::findNearest
(
*this,
allSurfaces_,
+ regionIndices,
+
samples,
nearestDistSqr,
- regionIndices,
+
nearestSurfaces,
nearestInfo
);
diff --git a/src/meshTools/searchableSurface/searchableSurfaces.H b/src/meshTools/searchableSurface/searchableSurfaces.H
index 1931c8d5b7..53b39e9bf1 100644
--- a/src/meshTools/searchableSurface/searchableSurfaces.H
+++ b/src/meshTools/searchableSurface/searchableSurfaces.H
@@ -3,7 +3,7 @@
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration |
\\ / A nd | Copyright (C) 2011-2014 OpenFOAM Foundation
- \\/ M anipulation |
+ \\/ M anipulation | Copyright (C) 2015 OpenCFD Ltd.
-------------------------------------------------------------------------------
License
This file is part of OpenFOAM.
@@ -200,9 +200,9 @@ public:
void findNearest
(
+ const labelListList& regionIndices,
const pointField& samples,
const scalarField& nearestDistSqr,
- const labelList& regionIndices,
labelList& nearestSurfaces,
List& nearestInfo
) const;
diff --git a/src/meshTools/searchableSurface/searchableSurfacesQueries.C b/src/meshTools/searchableSurface/searchableSurfacesQueries.C
index 2073de3d76..c3080a5d59 100644
--- a/src/meshTools/searchableSurface/searchableSurfacesQueries.C
+++ b/src/meshTools/searchableSurface/searchableSurfacesQueries.C
@@ -2,8 +2,8 @@
========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration |
- \\ / A nd | Copyright (C) 2011-2013 OpenFOAM Foundation
- \\/ M anipulation |
+ \\ / A nd | Copyright (C) 2011-2014 OpenFOAM Foundation
+ \\/ M anipulation | Copyright (C) 2015 OpenCFD Ltd.
-------------------------------------------------------------------------------
License
This file is part of OpenFOAM.
@@ -672,9 +672,11 @@ void Foam::searchableSurfacesQueries::findNearest
(
const PtrList& allSurfaces,
const labelList& surfacesToTest,
+ const labelListList& regionIndices,
+
const pointField& samples,
const scalarField& nearestDistSqr,
- const labelList& regionIndices,
+
labelList& nearestSurfaces,
List& nearestInfo
)
@@ -707,7 +709,7 @@ void Foam::searchableSurfacesQueries::findNearest
(
samples,
minDistSqr,
- regionIndices,
+ regionIndices[testI],
hitInfo
);
diff --git a/src/meshTools/searchableSurface/searchableSurfacesQueries.H b/src/meshTools/searchableSurface/searchableSurfacesQueries.H
index 529d4b94fa..8cf80f4aa5 100644
--- a/src/meshTools/searchableSurface/searchableSurfacesQueries.H
+++ b/src/meshTools/searchableSurface/searchableSurfacesQueries.H
@@ -2,8 +2,8 @@
========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration |
- \\ / A nd | Copyright (C) 2011-2013 OpenFOAM Foundation
- \\/ M anipulation |
+ \\ / A nd | Copyright (C) 2011-2014 OpenFOAM Foundation
+ \\/ M anipulation | Copyright (C) 2015 OpenCFD Ltd.
-------------------------------------------------------------------------------
License
This file is part of OpenFOAM.
@@ -183,14 +183,14 @@ public:
List&
);
- //- Find nearest points to a specific region of the surface
+ //- Find nearest points to a specific regions of the surface
static void findNearest
(
const PtrList& allSurfaces,
const labelList& surfacesToTest,
+ const labelListList& regionIndices,
const pointField& samples,
const scalarField& nearestDistSqr,
- const labelList& regionIndices,
labelList& nearestSurfaces,
List& nearestInfo
);
diff --git a/src/meshTools/triSurface/triSurfaceSearch/triSurfaceRegionSearch.C b/src/meshTools/triSurface/triSurfaceSearch/triSurfaceRegionSearch.C
index 34dc89f920..96dd4cab32 100644
--- a/src/meshTools/triSurface/triSurfaceSearch/triSurfaceRegionSearch.C
+++ b/src/meshTools/triSurface/triSurfaceSearch/triSurfaceRegionSearch.C
@@ -2,8 +2,8 @@
========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration |
- \\ / A nd | Copyright (C) 2011-2013 OpenFOAM Foundation
- \\/ M anipulation |
+ \\ / A nd | Copyright (C) 2011-2014 OpenFOAM Foundation
+ \\/ M anipulation | Copyright (C) 2015 OpenCFD Ltd.
-------------------------------------------------------------------------------
License
This file is part of OpenFOAM.
@@ -163,7 +163,7 @@ Foam::triSurfaceRegionSearch::treeByRegion() const
(
treeDataIndirectTriSurface
(
- true,
+ false, //true,
indirectRegionPatches_[regionI],
tolerance()
),
@@ -211,6 +211,7 @@ void Foam::triSurfaceRegionSearch::findNearest
}
const treeType& octree = octrees[treeI];
+ const treeDataIndirectTriSurface::findNearestOp nearOp(octree);
forAll(samples, i)
{
@@ -223,7 +224,7 @@ void Foam::triSurfaceRegionSearch::findNearest
(
samples[i],
nearestDistSqr[i],
- treeDataIndirectTriSurface::findNearestOp(octree)
+ nearOp
);
if
diff --git a/src/meshTools/triSurface/triSurfaceSearch/triSurfaceSearch.C b/src/meshTools/triSurface/triSurfaceSearch/triSurfaceSearch.C
index 5d78faff69..f11a6091a4 100644
--- a/src/meshTools/triSurface/triSurfaceSearch/triSurfaceSearch.C
+++ b/src/meshTools/triSurface/triSurfaceSearch/triSurfaceSearch.C
@@ -2,8 +2,8 @@
========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration |
- \\ / A nd | Copyright (C) 2011-2013 OpenFOAM Foundation
- \\/ M anipulation |
+ \\ / A nd | Copyright (C) 2011-2014 OpenFOAM Foundation
+ \\/ M anipulation | Copyright (C) 2015 OpenCFD Ltd.
-------------------------------------------------------------------------------
License
This file is part of OpenFOAM.
@@ -234,7 +234,7 @@ Foam::triSurfaceSearch::tree() const
(
new indexedOctree
(
- treeDataTriSurface(true, surface_, tolerance_),
+ treeDataTriSurface(false, surface_, tolerance_),
bb,
maxTreeDepth_, // maxLevel
10, // leafsize
@@ -290,15 +290,17 @@ void Foam::triSurfaceSearch::findNearest
const indexedOctree& octree = tree();
+ const treeDataTriSurface::findNearestOp fOp(octree);
+
info.setSize(samples.size());
forAll(samples, i)
{
- static_cast(info[i]) = octree.findNearest
+ info[i] = octree.findNearest
(
samples[i],
nearestDistSqr[i],
- treeDataTriSurface::findNearestOp(octree)
+ fOp
);
}
@@ -335,11 +337,7 @@ void Foam::triSurfaceSearch::findLine
forAll(start, i)
{
- static_cast(info[i]) = octree.findLine
- (
- start[i],
- end[i]
- );
+ info[i] = octree.findLine(start[i], end[i]);
}
indexedOctree::perturbTol() = oldTol;
@@ -362,11 +360,7 @@ void Foam::triSurfaceSearch::findLineAny
forAll(start, i)
{
- static_cast(info[i]) = octree.findLineAny
- (
- start[i],
- end[i]
- );
+ info[i] = octree.findLineAny(start[i], end[i]);
}
indexedOctree::perturbTol() = oldTol;