~ubuntu-branches/ubuntu/saucy/ifrit/saucy

« back to all changes in this revision

Viewing changes to core/iviewsubject.h

  • Committer: Bazaar Package Importer
  • Author(s): Mark Hymers
  • Date: 2006-10-28 15:06:32 UTC
  • mfrom: (1.1.4 upstream) (2.1.1 etch)
  • Revision ID: james.westby@ubuntu.com-20061028150632-hyvuhvsv6zpmf5ev
Tags: 3.0.5-1
New upstream version. 

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/*=========================================================================
 
2
 
 
3
  Program:   Ionization FRont Interactive Tool (IFRIT)
 
4
  Language:  C++
 
5
 
 
6
 
 
7
Copyright (c) 2002-2006 Nick Gnedin 
 
8
All rights reserved.
 
9
 
 
10
This file may be distributed and/or modified under the terms of the
 
11
GNU General Public License version 2 as published by the Free Software
 
12
Foundation and appearing in the file LICENSE.GPL included in the
 
13
packaging of this file.
 
14
 
 
15
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS''
 
16
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 
17
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 
18
ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS OR CONTRIBUTORS BE LIABLE FOR
 
19
ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
 
20
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
 
21
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
 
22
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
 
23
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 
24
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
25
 
 
26
=========================================================================*/
 
27
 
 
28
//
 
29
// A small Set of common functionality for all IFrIT viewization objects
 
30
//
 
31
 
 
32
#ifndef IVIEWSUBJECT_H
 
33
#define IVIEWSUBJECT_H
 
34
 
 
35
 
 
36
#include "iobject.h"
 
37
#include "idataconsumer.h"
 
38
#include "ireplicated.h"
 
39
#include "ideletable.h"
 
40
 
 
41
 
 
42
#include "iarray.h"
 
43
#include "iposition.h"
 
44
 
 
45
 
 
46
class iDataLimits;
 
47
class iDataReader;
 
48
class iEventObserver;
 
49
class iMarker;
 
50
class iViewSubjectObserver;
 
51
class iViewSubjectPipeline;
 
52
class iViewSubjectReplicator;
 
53
 
 
54
 
 
55
//
 
56
//  Useful macro to declare all keys that have to be present in children too
 
57
//
 
58
#define IVIEWSUBJECT_DECLARE_INHERITED_KEYS \
 
59
        static const iObjectKey& KeyDataType(); \
 
60
        static const iObjectKey& KeyClipPlane(); \
 
61
        static const iObjectKey& KeyShading(); \
 
62
        static const iObjectKey& KeyAmbient(); \
 
63
        static const iObjectKey& KeyDiffuse(); \
 
64
        static const iObjectKey& KeySpecular(); \
 
65
        static const iObjectKey& KeySpecularPower(); \
 
66
        static const iObjectKey& KeyNumReplicas(); \
 
67
        static const iObjectKey& KeyVisible(); \
 
68
        static const iObjectKey& KeyDataPresent(); \
 
69
        static const iObjectKey& KeyReady()
 
70
 
 
71
 
 
72
class iViewSubject : public iObject, public iDataConsumer, public iReplicated, public iDeletable
 
73
{
 
74
        
 
75
        friend class iControlModule;
 
76
        friend class iViewObject;
 
77
 
 
78
public:
 
79
        
 
80
        IOBJECT_DECLARE_SELF(iViewSubject,iObject);
 
81
 
 
82
        virtual void Delete();
 
83
        static const iObjectType& Type();
 
84
 
 
85
        IVIEWSUBJECT_DECLARE_INHERITED_KEYS;
 
86
 
 
87
        inline bool GetClipPlane() const { return mClipPlaneOn; }
 
88
                
 
89
        void SetShading(bool);
 
90
        inline bool GetShading() const { return mShading; }
 
91
        
 
92
        void SetAmbient(float v);
 
93
        inline float GetAmbient() const { return mAmbient; }
 
94
 
 
95
        void SetDiffuse(float v);
 
96
        inline float GetDiffuse() const { return mDiffuse; }
 
97
 
 
98
        void SetSpecular(float v);
 
99
        inline float GetSpecular() const { return mSpecular; }
 
100
 
 
101
        void SetSpecularPower(float v);
 
102
        inline float GetSpecularPower() const { return mSpecularPower; }
 
103
        
 
104
        virtual void UpdateMaterialProperties() = 0;
 
105
 
 
106
        virtual void ShowClipPlane(bool s) = 0;
 
107
        virtual void ShowColorBars(bool s) = 0;
 
108
 
 
109
        virtual bool IsInitialized() const { return mIsInitialized; }
 
110
        virtual bool IsVisible() const = 0;
 
111
        virtual const iObjectType& RealType();
 
112
        bool IsReady() const;
 
113
 
 
114
        void Show(bool s);
 
115
        virtual void Reset() = 0;
 
116
 
 
117
        virtual float GetMemorySize() const;
 
118
 
 
119
        inline int GetObjectType() const { return mObjectType; }
 
120
        inline const iString& GetObjectName() const { return mObjectName; }
 
121
 
 
122
        inline const iPosition& GetPosition() const { return mPosition; }
 
123
        inline iViewSubjectReplicator* GetReplicator() const { return mReplicator; }
 
124
 
 
125
        virtual void UpdateAfterMarkerMove(){}
 
126
        virtual void UpdateAfterMarkerAdd(iMarker *){}
 
127
        virtual void UpdateAfterMarkerDelete(iMarker *);
 
128
 
 
129
        virtual bool CanBeShown() const = 0;
 
130
 
 
131
        iDataLimits* GetLimits() const;
 
132
 
 
133
        //
 
134
        //  Pipeline operation
 
135
        //
 
136
        inline bool IsCreatingMainPipeline() const { return mCreatingMainPipeline; }
 
137
        virtual iViewSubjectPipeline* CreatePipeline(int id);
 
138
 
 
139
        void RemoveInternalData();      
 
140
        void Configure();
 
141
 
 
142
protected:
 
143
        
 
144
        iViewSubject(iViewModule *vm, const iDataType &type, const iString &name, unsigned int flags);
 
145
        virtual ~iViewSubject();
 
146
        virtual void ConfigureBody() = 0; // Create and attach pipelines here. This will be called automatically by the factory.
 
147
        virtual void ConfigureMainPipeline(iViewSubjectPipeline *p, int id);
 
148
 
 
149
        void AddMainPipeline(int numInputs);
 
150
        virtual iViewSubjectPipeline* CreateMainPipeline(int numInputs, int id); // can be overwritten to create custom pipelines
 
151
        inline iViewSubjectPipeline* Pipeline(int n = 0) const { return mPipelines[n]; } // will automatically return zero if out-of-bounds
 
152
        virtual void RemoveInternalDataForExtraComponents();    
 
153
 
 
154
        virtual void ViewSubjectPackStateBody(iString &s) const = 0;
 
155
        virtual void ViewSubjectUnPackStateBody(const iString &s) = 0;
 
156
 
 
157
        virtual void FinishInitialization(){}
 
158
        virtual void SyncWithDataBody(const iDataSyncRequest &r);
 
159
    virtual void ViewSubjectSyncWithData(const iDataSyncRequest &r) = 0;
 
160
        virtual void UpdateReplicas();
 
161
 
 
162
        virtual void ShowBody(bool s) = 0;
 
163
 
 
164
        virtual float GetExtraMemorySize() const;
 
165
 
 
166
        //
 
167
        //  Members
 
168
        //
 
169
        bool mCreatingMainPipeline;
 
170
 
 
171
        iViewSubjectObserver *mObjectObserver;
 
172
        iViewSubjectReplicator *mReplicator;
 
173
        iString mObjectName;
 
174
        int mObjectType, mAttachedMarkerIndex;
 
175
        iPosition mPosition;
 
176
 
 
177
        bool mIsInitialized, mIsConfigured;
 
178
        bool mClipPlaneOn;
 
179
        const bool mAlwaysShaded, mNoReplicating;
 
180
 
 
181
        iMarker *mAttachedMarker;
 
182
 
 
183
        //
 
184
        //  Material properties
 
185
        //
 
186
        bool mShading;
 
187
        float mAmbient;
 
188
        float mDiffuse;
 
189
        float mSpecular;
 
190
        float mSpecularPower;
 
191
 
 
192
        iColor mDefaultColor;
 
193
 
 
194
private:
 
195
 
 
196
        //
 
197
        //  make it private so that it can only be created by AddMainPipeline calls
 
198
        //
 
199
        iArray<iViewSubjectPipeline*> mPipelines;
 
200
 
 
201
        virtual void PackStateBody(iString &s) const;
 
202
        virtual void UnPackStateBody(const iString &s);
 
203
};
 
204
 
 
205
 
 
206
//
 
207
//  Useful macros to declare all members that have to be overwritten in children
 
208
//
 
209
#define IVIEWSUBJECT_DEFINE_TYPE(_type_,_fname_,_sname_) \
 
210
        IOBJECT_DEFINE_TYPE(_type_,_fname_,_sname_,iObjectType::_Visual); \
 
211
        const iObjectType& _type_::RealType(){ return _type_::Type(); }
 
212
 
 
213
#define IVIEWSUBJECT_DECLARE_INHERITED_MEMBERS \
 
214
        virtual void UpdateMaterialProperties(); \
 
215
        virtual void Reset(); \
 
216
        virtual void ShowClipPlane(bool s); \
 
217
        virtual void ShowColorBars(bool s); \
 
218
        virtual float GetMemorySize() const; \
 
219
        virtual bool IsVisible() const; \
 
220
        virtual bool CanBeShown() const; \
 
221
        protected: \
 
222
        virtual void ViewSubjectPackStateBody(iString &s) const; \
 
223
        virtual void ViewSubjectUnPackStateBody(const iString &s); \
 
224
        virtual void ViewSubjectSyncWithData(const iDataSyncRequest &r); \
 
225
        virtual void ShowBody(bool s); \
 
226
        public: \
 
227
        virtual const iObjectType& RealType()
 
228
 
 
229
#define IVIEWSUBJECT_DEFINE_INHERITED_KEYS_COMMON(_type_) \
 
230
        IOBJECT_DEFINE_INHERITED_KEY(iViewSubject,_type_,DataType,dt,Int,1); \
 
231
        IOBJECT_DEFINE_INHERITED_KEY(iViewSubject,_type_,ClipPlane,cp,Bool,1); \
 
232
        IOBJECT_DEFINE_INHERITED_KEY(iViewSubject,_type_,Ambient,ma,Float,1); \
 
233
        IOBJECT_DEFINE_INHERITED_KEY(iViewSubject,_type_,Diffuse,md,Float,1); \
 
234
        IOBJECT_DEFINE_INHERITED_KEY(iViewSubject,_type_,Specular,ms,Float,1); \
 
235
        IOBJECT_DEFINE_INHERITED_KEY(iViewSubject,_type_,SpecularPower,mp,Float,1); \
 
236
        IOBJECT_DEFINE_INHERITED_KEY(iViewSubject,_type_,Visible,vis,Bool,1); \
 
237
        IOBJECT_DEFINE_INHERITED_KEY(iViewSubject,_type_,DataPresent,dp,Bool,1); \
 
238
        IOBJECT_DEFINE_INHERITED_KEY(iViewSubject,_type_,Ready,r,Bool,1)
 
239
 
 
240
#define IVIEWSUBJECT_DEFINE_INHERITED_KEYS_SHADING(_type_) \
 
241
        IOBJECT_DEFINE_INHERITED_KEY(iViewSubject,_type_,Shading,mh,Bool,1)
 
242
 
 
243
#define IVIEWSUBJECT_DEFINE_INHERITED_KEYS_REPLICATING(_type_) \
 
244
        IOBJECT_DEFINE_INHERITED_KEY(iViewSubject,_type_,NumReplicas,nr,Int,6)
 
245
 
 
246
#endif // IVIEWSUBJECT_H
 
247