/usr/include/dolfin/geometry/ImplicitSurface.h is in libdolfin-dev 1.4.0+dfsg-4.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 | // Copyright (C) 2013 Garth N. Wells
//
// This file is part of DOLFIN.
//
// DOLFIN is free software: you can redistribute it and/or modify
// it under the terms of the GNU Lesser General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// DOLFIN 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 Lesser General Public License for more details.
//
// You should have received a copy of the GNU Lesser General Public License
// along with DOLFIN. If not, see <http://www.gnu.org/licenses/>.
//
// First added: 2013-05-04
// Last changed:
#ifndef __IMPLICITSURFACE_H
#define __IMPLICITSURFACE_H
#include <list>
#include <string>
#include <utility>
#include <vector>
#include <dolfin/generation/CSGPrimitives3D.h>
#include <dolfin/geometry/Point.h>
#include <dolfin/log/log.h>
namespace dolfin
{
/// This class is used to define a surface via a function f(x) -> R,
/// where for a point y on the surface f(y) = 0.
/// WARNING: This class is experimental and likely to change.
class ImplicitSurface
{
public:
/// Create an isosurface
///
/// *Arguments*
/// s (Sphere)
/// Bounding sphere for surface.
///
/// type (std::string)
/// Isosurface type. One of "manifold", "manifold_with_boundary"
/// or "non_manifold".
///
/// *Example*
/// .. code-block:: c++
///
/// IsoSurface isosurface(Sphere(Point(0.0, 0.2, 0.4), 1.0),
/// "manifold_with_boundary");
///
ImplicitSurface(Sphere s, std::string type);
/// Destructor
virtual ~ImplicitSurface();
/// Signed distance function surface. If f0(p) = 0, the point p is
/// possibly on the surface, which case ImplicitSurface::f1 can be
/// called to check.
virtual double f0(const Point& point) const = 0;
/// For a point for which f0 \approx 0, return <= is point is on
/// is on the surface. Can be used for creating open surfaces by
/// discarding with any artificial closure.
virtual double f1(const Point& point) const
{ return -1.0; }
// Return true is point is on surface (within tolerance). Note:
// The CGAL surface mesh generator will usually fail for open
// surface. To handle this case, f0 can describe a closed surface,
// and this function can be overloaded to 'filter' the mesh of the
// closed surface.
virtual bool on_surface(const Point& point, double tol=1.0e-2) const
{ return std::abs(f0(point)) < tol && f1(point) < 0.0; }
/// Bounding sphere
const Sphere sphere;
/// Polylines
std::list<std::vector<Point> > polylines;
/// Surface type
const std::string type;
};
}
#endif
|