Branch data Line data Source code
1 : : //------------------------------------------------------------------------
2 : : // Class GeomDataObserver
3 : : // Description: Observer class that stores/caches specific geometric
4 : : // information (for example, the area for a surface.
5 : : //
6 : : // Author: David White
7 : : // Creation Date: 9/7/2003
8 : : //------------------------------------------------------------------------
9 : : #include "GeomDataObserver.hpp"
10 : : #include "RefEntity.hpp"
11 : : #include "GeometryEvent.hpp"
12 : :
13 : 370 : GeomDataObserver::GeomDataObserver(RefEntity* watched)
14 : 370 : : myRefEntity(watched)
15 : : {
16 : 370 : measureSet = CUBIT_FALSE;
17 : : //initialize to something weird.
18 : 370 : myMeasure = -CUBIT_DBL_MAX;
19 : 370 : }
20 : :
21 : 120 : GeomDataObserver::~GeomDataObserver()
22 : : {
23 [ + - ][ + - ]: 40 : unregister_observable( myRefEntity );
24 [ - + ]: 80 : }
25 : :
26 : 1090 : GeomDataObserver* GeomDataObserver::get( RefEntity* on_this )
27 : : {
28 [ + - ]: 1090 : DLIList<CubitObserver*> list;
29 : 1090 : GeomDataObserver* eo = NULL;
30 : :
31 [ + - ]: 1090 : on_this->get_observer_list(list);
32 [ + - ][ + + ]: 1090 : for (int i = list.size(); i--; )
33 : : {
34 [ + - ][ - + ]: 350 : if ( (eo = dynamic_cast<GeomDataObserver*>(list.step_and_get()) ))
[ + - ]
35 : 350 : break;
36 : : }
37 [ + - ]: 1090 : return eo;
38 : : }
39 : :
40 : 370 : GeomDataObserver* GeomDataObserver::create( RefEntity* on_this ) {
41 : 370 : GeomDataObserver* eo = get(on_this);
42 [ - + ]: 370 : if (eo)
43 : 0 : return eo;
44 : :
45 [ + - ]: 370 : eo = new GeomDataObserver(on_this);
46 [ + - ]: 370 : eo->register_observable(on_this);
47 : 370 : return eo;
48 : : }
49 : :
50 : 40 : void GeomDataObserver::notify_observer(const CubitEvent* event)
51 : : {
52 [ - + ]: 40 : const GeometryEvent* geom_event = dynamic_cast<const GeometryEvent*>(event);
53 : :
54 [ + - ]: 40 : if(geom_event)
55 : : {
56 [ - + ]: 40 : assert(geom_event->get_entity() == myRefEntity);
57 : :
58 [ + - ]: 40 : switch (geom_event->get_type())
59 : : {
60 : : case GeometryEvent::GEOMETRY_TOPOLOGY_MODIFIED:
61 : : case GeometryEvent::TOPOLOGY_MODIFIED:
62 : : case GeometryEvent::GEOMETRY_MODIFIED:
63 : : case GeometryEvent::TOPOLOGY_ENTITY_DESTRUCTED:
64 : 40 : break;
65 : : default:
66 : 0 : return;
67 : : }
68 : :
69 : : /* don't call virtual functions or access
70 : : class data after this! */
71 [ + - ]: 40 : delete this;
72 : : }
73 [ + - ][ + - ]: 6540 : }
74 : :
|