]>
Commit | Line | Data |
---|---|---|
32e219c2 | 1 | // $Header$ |
2 | ||
8c416c5b | 3 | #include <Reve/NLTPolygonSet.h> |
4 | #include <Reve/NLTBases.h> | |
32e219c2 | 5 | |
6 | using namespace Reve; | |
7 | ||
8ef50b67 | 8 | //______________________________________________________________________________ |
32e219c2 | 9 | // NLTProjectable |
10 | // | |
8c416c5b | 11 | // Abstract base-class for non-linear projectable objects. Creates TClass instance |
12 | // for the projected class and keeps references to the projected objects. | |
13 | // | |
14 | // See also NLTProjector::ImportElements(). | |
32e219c2 | 15 | |
16 | ClassImp(NLTProjectable) | |
17 | ||
8ef50b67 | 18 | //______________________________________________________________________________ |
32e219c2 | 19 | NLTProjectable::NLTProjectable() |
8ef50b67 | 20 | { |
8c416c5b | 21 | // Comstructor. |
8ef50b67 | 22 | } |
32e219c2 | 23 | |
8ef50b67 | 24 | //______________________________________________________________________________ |
32e219c2 | 25 | NLTProjectable::~NLTProjectable() |
26 | { | |
8ef50b67 | 27 | // Destructor. |
28 | // Force projected replicas to unreference *this. | |
29 | ||
32e219c2 | 30 | while ( ! fProjectedList.empty()) |
31 | { | |
32 | fProjectedList.front()->UnRefProjectable(this); | |
33 | } | |
34 | } | |
35 | ||
8ef50b67 | 36 | |
37 | //______________________________________________________________________________ | |
32e219c2 | 38 | // NLTProjected |
39 | // | |
8c416c5b | 40 | // |
32e219c2 | 41 | |
42 | ClassImp(NLTProjected) | |
43 | ||
8ef50b67 | 44 | //______________________________________________________________________________ |
32e219c2 | 45 | NLTProjected::NLTProjected() : |
46 | fProjector (0), | |
47 | fProjectable (0), | |
48 | fDepth (0) | |
8ef50b67 | 49 | { |
8c416c5b | 50 | // Constructor. |
8ef50b67 | 51 | } |
32e219c2 | 52 | |
8ef50b67 | 53 | //______________________________________________________________________________ |
32e219c2 | 54 | NLTProjected::~NLTProjected() |
55 | { | |
8ef50b67 | 56 | // Destructor. |
57 | // If fProjectable is non-null, *this is removed from its list of | |
58 | // projected replicas. | |
59 | ||
32e219c2 | 60 | if (fProjectable) fProjectable->RemoveProjected(this); |
61 | } | |
62 | ||
8ef50b67 | 63 | //______________________________________________________________________________ |
32e219c2 | 64 | void NLTProjected::SetProjection(NLTProjector* proj, NLTProjectable* model) |
65 | { | |
66 | fProjector = proj; | |
67 | if (fProjectable) fProjectable->RemoveProjected(this); | |
68 | fProjectable = model; | |
8ef50b67 | 69 | if (fProjectable) fProjectable->AddProjected(this); |
32e219c2 | 70 | } |
71 | ||
8ef50b67 | 72 | //______________________________________________________________________________ |
32e219c2 | 73 | void NLTProjected::UnRefProjectable(NLTProjectable* assumed_parent) |
74 | { | |
75 | static const Exc_t eH("NLTProjected::UnRefProjectable "); | |
76 | ||
77 | if (fProjectable != assumed_parent) { | |
78 | Warning(eH, "mismatch between assumed and real model. This is a bug."); | |
79 | assumed_parent->RemoveProjected(this); | |
80 | return; | |
81 | } | |
82 | ||
83 | if (fProjectable) { | |
84 | fProjectable->RemoveProjected(this); | |
85 | fProjectable = 0; | |
712d9715 | 86 | } |
32e219c2 | 87 | } |