diff --git a/Graphics/Mesh.cpp b/Graphics/Mesh.cpp index 8c257fc0fca5cfbe18291b1f8a136032537d6dcb..33ae381c18dee31af95c9754752bb0db1f216cb1 100644 --- a/Graphics/Mesh.cpp +++ b/Graphics/Mesh.cpp @@ -1,4 +1,4 @@ -// $Id: Mesh.cpp,v 1.219 2008-03-20 11:44:07 geuzaine Exp $ +// $Id: Mesh.cpp,v 1.220 2008-04-17 05:58:09 geuzaine Exp $ // // Copyright (C) 1997-2008 C. Geuzaine, J.-F. Remacle // @@ -819,8 +819,19 @@ class drawMeshGRegion { // Main drawing routine +#include "PView.h" + void Draw_Mesh() { + GModel *m = GModel::current(); + + // make sure to flag any model-dependent post-processing view as + // changed if the underlying mesh has, before resetting the changed + // flag + for(unsigned int i = 0; i < PView::list.size(); i++) + if(PView::list[i]->getData()->hasModel(m) && CTX.mesh.changed) + PView::list[i]->setChanged(true); + if(!CTX.mesh.draw) return; glPointSize(CTX.mesh.point_size); @@ -843,7 +854,6 @@ void Draw_Mesh() static bool busy = false; if(!busy){ busy = true; - GModel *m = GModel::current(); int status = m->getMeshStatus(); if(CTX.mesh.changed) { Msg(DEBUG, "Mesh has changed: reinitializing drawing data", CTX.mesh.changed); diff --git a/Post/PViewData.h b/Post/PViewData.h index 9566fa294d979257d4f23041da03b982f2196281..6b37975f03f5141b3fa9d40a0c1754de37815e47 100644 --- a/Post/PViewData.h +++ b/Post/PViewData.h @@ -26,6 +26,7 @@ #define VAL_INF 1.e200 +class GModel; class nameData; // abstract interface to post-processing view data @@ -119,6 +120,7 @@ class PViewData { virtual bool hasTimeStep(int step){ return step < getNumTimeSteps(); } virtual bool hasPartition(int part){ return false; } virtual bool hasMultipleMeshes(){ return false; } + virtual bool hasModel(GModel *model, int step=-1){ return false; } virtual bool useGaussPoints(){ return false; } // I/O routines diff --git a/Post/PViewDataGModel.cpp b/Post/PViewDataGModel.cpp index a93446da813078b1b2528b1ef75b961929b47c50..d06a10f202c68bfe3dde7a658ab9701fc7f34dc3 100644 --- a/Post/PViewDataGModel.cpp +++ b/Post/PViewDataGModel.cpp @@ -1,4 +1,4 @@ -// $Id: PViewDataGModel.cpp,v 1.50 2008-04-16 22:10:53 geuzaine Exp $ +// $Id: PViewDataGModel.cpp,v 1.51 2008-04-17 05:58:09 geuzaine Exp $ // // Copyright (C) 1997-2008 C. Geuzaine, J.-F. Remacle // @@ -420,6 +420,16 @@ bool PViewDataGModel::hasMultipleMeshes() return false; } +bool PViewDataGModel::hasModel(GModel *model, int step) +{ + if(step < 0){ + for(unsigned int i = 0; i < _steps.size(); i++) + if(model == _steps[i]->getModel()) return true; + return false; + } + return (model == _steps[step]->getModel()); +} + GEntity *PViewDataGModel::getEntity(int step, int ent) { return _steps[step]->getEntity(ent); diff --git a/Post/PViewDataGModel.h b/Post/PViewDataGModel.h index d8dce39d9fd58b099a8d0b1f2730c2eb77e92c07..407adc77d9c6d4edbbdf9a0c083d1957a5cbc1e8 100644 --- a/Post/PViewDataGModel.h +++ b/Post/PViewDataGModel.h @@ -180,6 +180,7 @@ class PViewDataGModel : public PViewData { bool hasTimeStep(int step); bool hasPartition(int part); bool hasMultipleMeshes(); + bool hasModel(GModel *model, int step=-1); bool useGaussPoints(){ return _type == GaussPointData; } // get the data type