From 38b3258b0e0469a04466b5481629e5f65fc0ccd8 Mon Sep 17 00:00:00 2001 From: bangerth Date: Fri, 3 Jun 2011 01:39:28 +0000 Subject: [PATCH] Introduce two new signals: for clearing a triangulation, and for any_change, a catch-all for all changes one may make to a triangulation. git-svn-id: https://svn.dealii.org/trunk@23778 0785d39b-7218-0410-832d-ea1e28bc413d --- deal.II/include/deal.II/grid/tria.h | 8 ++++++++ deal.II/source/fe/fe_values.cc | 2 +- deal.II/source/grid/tria.cc | 6 ++++++ 3 files changed, 15 insertions(+), 1 deletion(-) diff --git a/deal.II/include/deal.II/grid/tria.h b/deal.II/include/deal.II/grid/tria.h index 78e2033a6b..71860e83a4 100644 --- a/deal.II/include/deal.II/grid/tria.h +++ b/deal.II/include/deal.II/grid/tria.h @@ -1239,6 +1239,12 @@ namespace internal * the signal is copied by another triangulation using * Triangulation::copy_triangulation (i.e. it is triggered on the old * triangulation, but the new one is passed as a argument). + * - clear: This signal is triggered whenever the Trianagultion::clear + * function is called. + * - any_change: This is a catch-all signal that is triggered whenever the + * create, post_refinement, or clear signals are triggered. In effect, it + * can be used to indicate to an object connected to the signal that the + * triangulation has been changed, whatever the exact cause of the change. * * *

Technical details

@@ -2195,6 +2201,8 @@ class Triangulation : public Subscriptor boost::signals2::signal pre_refinement; boost::signals2::signal post_refinement; boost::signals2::signal &original_tria)> copy; + boost::signals2::signal clear; + boost::signals2::signal any_change; }; /** diff --git a/deal.II/source/fe/fe_values.cc b/deal.II/source/fe/fe_values.cc index 6b0860fe18..fc38ad5f80 100644 --- a/deal.II/source/fe/fe_values.cc +++ b/deal.II/source/fe/fe_values.cc @@ -3269,7 +3269,7 @@ maybe_invalidate_previous_present_cell (const typename Triangulationget_triangulation().signals.post_refinement.connect + cell->get_triangulation().signals.any_change.connect (std_cxx1x::bind (&FEValuesBase::invalidate_present_cell, std_cxx1x::ref(static_cast&>(*this)))); } diff --git a/deal.II/source/grid/tria.cc b/deal.II/source/grid/tria.cc index 1846793630..611fee0721 100644 --- a/deal.II/source/grid/tria.cc +++ b/deal.II/source/grid/tria.cc @@ -9384,6 +9384,11 @@ Triangulation (const MeshSmoothing smooth_grid, // possible components for (unsigned int i=0;i<255;++i) boundary[i] = &straight_boundary; + + // connect the any_change signal to the other signals + signals.create.connect (signals.any_change); + signals.post_refinement.connect (signals.any_change); + signals.clear.connect (signals.any_change); } @@ -9417,6 +9422,7 @@ template void Triangulation::clear () { clear_despite_subscriptions(); + signals.clear(); } -- 2.39.5