]> https://gitweb.dealii.org/ - dealii.git/commitdiff
Add new functions to BoundingBox 14974/head
authorPeter Munch <peterrmuench@gmail.com>
Fri, 24 Mar 2023 20:26:41 +0000 (21:26 +0100)
committerPeter Munch <peterrmuench@gmail.com>
Mon, 27 Mar 2023 17:14:03 +0000 (19:14 +0200)
include/deal.II/base/bounding_box.h
tests/base/bounding_box_1.cc
tests/base/bounding_box_1.output
tests/base/bounding_box_5.cc
tests/base/bounding_box_5.output

index 74643162c5d23a4c7cdf677615386af33b697d75..24d5a7befa1896d2ad3830d6d8feb7b8f082eba0 100644 (file)
@@ -142,6 +142,22 @@ public:
    */
   BoundingBox() = default;
 
+  /**
+   * Standard copy constructor operator.
+   */
+  BoundingBox(const BoundingBox<spacedim, Number> &box) = default;
+
+  /**
+   * Standard copy assignment operator.
+   */
+  BoundingBox<spacedim, Number> &
+  operator=(const BoundingBox<spacedim, Number> &t) = default;
+
+  /**
+   * Standard constructor for an empty box around a point @p point.
+   */
+  BoundingBox(const Point<spacedim, Number> &point);
+
   /**
    * Standard constructor for non-empty boxes: it uses a pair of points
    * which describe the box: one for the bottom and one for the top
@@ -233,6 +249,13 @@ public:
   void
   extend(const Number amount);
 
+  /**
+   * The same as above with the difference that a new BoundingBox instance is
+   * created without changing the current object.
+   */
+  BoundingBox<spacedim, Number>
+  create_extended(const Number amount) const;
+
   /**
    * Compute the volume (i.e. the dim-dimensional measure) of the BoundingBox.
    */
@@ -416,6 +439,14 @@ namespace internal
 #ifndef DOXYGEN
 
 
+template <int spacedim, typename Number>
+inline BoundingBox<spacedim, Number>::BoundingBox(
+  const Point<spacedim, Number> &p)
+  : BoundingBox({p, p})
+{}
+
+
+
 template <int spacedim, typename Number>
 inline BoundingBox<spacedim, Number>::BoundingBox(
   const std::pair<Point<spacedim, Number>, Point<spacedim, Number>>
@@ -512,6 +543,19 @@ BoundingBox<spacedim, Number>::extend(const Number amount)
 }
 
 
+
+template <int spacedim, typename Number>
+inline BoundingBox<spacedim, Number>
+BoundingBox<spacedim, Number>::create_extended(const Number amount) const
+{
+  // create and modify copy
+  auto bb = *this;
+  bb.extend(amount);
+
+  return bb;
+}
+
+
 template <int spacedim, typename Number>
 template <class Archive>
 void
index 8fb53c02cf997ba508cd0e727ad78bf3356ecfe1..ae4fb3df9f2fe68f1e6836536ec07cfde34a56ff 100644 (file)
@@ -104,6 +104,38 @@ test_bounding_box()
     deallog << "Boxes should not be equal : " << (b2 != b) << std::endl;
   }
   deallog << std::endl;
+
+  // Initalize box with point
+  {
+    Point<spacedim> p;
+    for (unsigned int i = 0; i < spacedim; ++i)
+      p[i] = i + 1;
+
+    BoundingBox<spacedim> b(p);
+    deallog << "Boundary points: " << std::endl;
+    deallog << b.get_boundary_points().first << std::endl;
+    deallog << b.get_boundary_points().second << std::endl;
+  }
+  deallog << std::endl;
+
+  // Initalize box with box
+  {
+    BoundingBox<spacedim> bb(b);
+    deallog << "Boundary points: " << std::endl;
+    deallog << bb.get_boundary_points().first << std::endl;
+    deallog << bb.get_boundary_points().second << std::endl;
+  }
+  deallog << std::endl;
+
+  // Initalize box with box
+  {
+    BoundingBox<spacedim> bb;
+    bb = b;
+    deallog << "Boundary points: " << std::endl;
+    deallog << bb.get_boundary_points().first << std::endl;
+    deallog << bb.get_boundary_points().second << std::endl;
+  }
+  deallog << std::endl;
 }
 
 void
index 0d37542091a1cee734085857e0e865b884664c29..cd3055366fbce47cebfa1b767a1141ea47158199 100644 (file)
@@ -24,6 +24,18 @@ DEAL::10.0000 is inside: 0
 DEAL::-12.5000 is inside: 0
 DEAL::Boxes should not be equal : 1
 DEAL::
+DEAL::Boundary points: 
+DEAL::1.00000
+DEAL::1.00000
+DEAL::
+DEAL::Boundary points: 
+DEAL::0.200000
+DEAL::0.800000
+DEAL::
+DEAL::Boundary points: 
+DEAL::0.200000
+DEAL::0.800000
+DEAL::
 DEAL::
 DEAL::Test for dimension 2
 DEAL::Empty constructor: 
@@ -49,6 +61,18 @@ DEAL::10.0000 16.0000 is inside: 0
 DEAL::-12.5000 -20.0000 is inside: 0
 DEAL::Boxes should not be equal : 1
 DEAL::
+DEAL::Boundary points: 
+DEAL::1.00000 2.00000
+DEAL::1.00000 2.00000
+DEAL::
+DEAL::Boundary points: 
+DEAL::0.200000 0.00000
+DEAL::0.800000 1.60000
+DEAL::
+DEAL::Boundary points: 
+DEAL::0.200000 0.00000
+DEAL::0.800000 1.60000
+DEAL::
 DEAL::
 DEAL::Test for dimension 3
 DEAL::Empty constructor: 
@@ -74,6 +98,18 @@ DEAL::10.0000 16.0000 22.0000 is inside: 0
 DEAL::-12.5000 -20.0000 -27.5000 is inside: 0
 DEAL::Boxes should not be equal : 1
 DEAL::
+DEAL::Boundary points: 
+DEAL::1.00000 2.00000 3.00000
+DEAL::1.00000 2.00000 3.00000
+DEAL::
+DEAL::Boundary points: 
+DEAL::0.200000 0.00000 -0.200000
+DEAL::0.800000 1.60000 2.40000
+DEAL::
+DEAL::Boundary points: 
+DEAL::0.200000 0.00000 -0.200000
+DEAL::0.800000 1.60000 2.40000
+DEAL::
 DEAL::
 DEAL::Test for dimension 3, unitary box
 DEAL::Boundary points:
index a033ec3ae19c3ace7267d99b54fdd34e6f5935c6..84f16b199daf792399e577367095c7fb55a25699 100644 (file)
@@ -13,7 +13,7 @@
 //
 // ---------------------------------------------------------------------
 
-// test BoundingBox::extend
+// test BoundingBox::extend() and BoundingBox::create_extend()
 
 #include <deal.II/base/bounding_box.h>
 
@@ -34,11 +34,20 @@ test()
 
   BoundingBox<dim> box({p0, p1});
 
+  const auto box1 = box.create_extended(.5);
+
+  deallog << "New points: " << box1.get_boundary_points().first << ", "
+          << box1.get_boundary_points().second << std::endl;
+
   box.extend(.5);
 
   deallog << "New points: " << box.get_boundary_points().first << ", "
           << box.get_boundary_points().second << std::endl;
 
+  const auto box2 = box.create_extended(-.8);
+
+  deallog << "New points: " << box2.get_boundary_points().first << ", "
+          << box2.get_boundary_points().second << std::endl;
 
   box.extend(-.8);
 
index 837b1d9bd95bfad91c1d3c7e0e56dc272a3477d3..6035749676282c4fcfdbc12fc4ef8e9fc3eb0691 100644 (file)
@@ -1,7 +1,13 @@
 
 DEAL::New points: -0.500000, 1.50000
+DEAL::New points: -0.500000, 1.50000
+DEAL::New points: 0.300000, 0.700000
 DEAL::New points: 0.300000, 0.700000
 DEAL::New points: -0.500000 -0.500000, 1.50000 1.50000
+DEAL::New points: -0.500000 -0.500000, 1.50000 1.50000
 DEAL::New points: 0.300000 0.300000, 0.700000 0.700000
+DEAL::New points: 0.300000 0.300000, 0.700000 0.700000
+DEAL::New points: -0.500000 -0.500000 -0.500000, 1.50000 1.50000 1.50000
 DEAL::New points: -0.500000 -0.500000 -0.500000, 1.50000 1.50000 1.50000
 DEAL::New points: 0.300000 0.300000 0.300000, 0.700000 0.700000 0.700000
+DEAL::New points: 0.300000 0.300000 0.300000, 0.700000 0.700000 0.700000

In the beginning the Universe was created. This has made a lot of people very angry and has been widely regarded as a bad move.

Douglas Adams


Typeset in Trocchi and Trocchi Bold Sans Serif.