/usr/include/dolfin/geometry/ImplicitSurface.h is in libdolfin1.3-dev 1.3.0+dfsg-2.
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 98 99 100 101 102 103 104 105 106 107 | // 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();
/// Return value of isosurfacce function. This function is
/// overloaed by the user. For closed volumes, the function should
/// evaluate to < 0 on the interior.
///
/// *Arguments*
/// point (Point)
/// The point at which to evaluate the isosurface function.
/// or "non_manifold".
///
/// *Returns*
/// double
/// Isosurface function value.
virtual double operator()(const Point& point) const = 0;
/// 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
{
error("ImplicitSurface::signed_distance has not been provided");
return 0.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; }
/// Bounding sphere
const Sphere sphere;
/// Polylines
std::list<std::vector<Point> > polylines;
/// Surface type
const std::string type;
};
}
#endif
|