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

« back to all changes in this revision

Viewing changes to core/ifieldviewobject.cpp

  • 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
 
#include "ifieldviewobject.h"
30
 
 
31
 
#include "icolorbars.h"
32
 
#include "idata.h"
33
 
#include "idatareader.h"
34
 
#include "idatalimits.h"
35
 
#include "igriddataconverter.h"
36
 
#include "ireplicatedactor.h"
37
 
#include "iviewmodule.h"
38
 
 
39
 
#include <vtkStructuredPoints.h>
40
 
 
41
 
//
42
 
//  Templates (needed for some compilers)
43
 
//
44
 
#include "iarraytemplate.h"
45
 
 
46
 
 
47
 
using namespace iParameter;
48
 
 
49
 
 
50
 
IVIEWOBJECT_DEFINE_TYPE(iFieldViewObject,FieldViewObject,-fvo);
51
 
 
52
 
IOBJECT_DEFINE_KEY(iFieldViewObject,ColorBy,cb,OffsetInt,1);
53
 
IOBJECT_DEFINE_KEY(iFieldViewObject,GlyphSampleRate,gr,Int,1);
54
 
IOBJECT_DEFINE_KEY(iFieldViewObject,ConnectedToScalars,cs,Bool,1);
55
 
IOBJECT_DEFINE_KEY(iFieldViewObject,DataOffset,-off,OffsetInt,1);
56
 
 
57
 
IOBJECT_DEFINE_DISTANCE_KEY(iFieldViewObject,GlyphSize,gs);
58
 
 
59
 
 
60
 
//
61
 
// iFieldViewObject class
62
 
//
63
 
iFieldViewObject::iFieldViewObject(iViewModule *vm, const iDataInfo &info, int numActors, unsigned int rank, unsigned int flags) : iSolidViewObject(vm,info,numActors,flags), mGlyphSize(vm,true)
64
 
{
65
 
        mName = "iFieldViewObject";
66
 
 
67
 
        if(rank==0U || rank>2U)
68
 
        {
69
 
                IERROR_REPORT_FATAL_ERROR("Incorrect rank for iFieldViewObject.");
70
 
        }
71
 
 
72
 
        mColorBy = -1;
73
 
        mGlyphSize = 0.1;
74
 
        mGlyphSampleRate = 16;
75
 
        mColorByOffset = 0;
76
 
 
77
 
        //
78
 
        //  Do VTK stuff
79
 
        //      
80
 
        mDataConverter = iGridDataConverter::New(this); IERROR_ASSERT_NULL_POINTER(mDataConverter);
81
 
        mDataConverter->SetDataRank(rank);
82
 
}
83
 
 
84
 
 
85
 
iFieldViewObject::~iFieldViewObject()
86
 
{
87
 
        mDataConverter->Delete();
88
 
}
89
 
 
90
 
 
91
 
void iFieldViewObject::ResetInput()
92
 
{
93
 
        mDataConverter->SetScalarInput(iPointerCast<vtkImageData,vtkDataSet>(this->GetViewModule()->GetReader()->GetOutput(iDataType::UniformScalars())));
94
 
        switch(mDataConverter->GetDataRank())
95
 
        {
96
 
        case 1U:
97
 
                {
98
 
                        mDataConverter->SetVectorInput(iPointerCast<vtkImageData,vtkDataSet>(this->GetViewModule()->GetReader()->GetOutput(iDataType::UniformVectors())));
99
 
                        break;
100
 
                }
101
 
        case 2U:
102
 
                {
103
 
                        mDataConverter->SetTensorInput(iPointerCast<vtkImageData,vtkDataSet>(this->GetViewModule()->GetReader()->GetOutput(iDataType::UniformTensors())));
104
 
                        break;
105
 
                }
106
 
        }
107
 
        this->ResetPipelineInput(mDataConverter->GetOutput());
108
 
}
109
 
 
110
 
 
111
 
void iFieldViewObject::SetGlyphSize(const iDistance &v)
112
 
113
 
        if(v < 1.0e5)
114
 
        {
115
 
                mGlyphSize = v;
116
 
                this->UpdateGlyphSize();
117
 
                this->ClearCache();
118
 
        }
119
 
}
120
 
 
121
 
 
122
 
void iFieldViewObject::SetColorBy(int v)
123
 
124
 
        if(v != mColorBy) 
125
 
        {
126
 
                if(mColorBy >= 0) this->ShowColorBars(false);
127
 
                mColorBy = v;
128
 
                if(v >= 0) this->ShowColorBars(true);
129
 
                if(this->IsColoredByScalars())
130
 
                {
131
 
                        mDataConverter->SetCurrentVar(mColorBy);
132
 
                        mActors[0]->SyncWithLimits(this->GetLimits(this->GetScalarDataType()),mColorBy);
133
 
                        mActors[0]->ColorByArrayComponent(0,mColorByOffset); 
134
 
                        mActors[0]->SetScalarVisibility(true);
135
 
                }
136
 
                else
137
 
                {
138
 
                        mActors[0]->SetScalarVisibility(false);
139
 
                        this->UpdateColorByExtra();
140
 
                }
141
 
                this->ClearCache();
142
 
        }
143
 
}
144
 
 
145
 
 
146
 
void iFieldViewObject::SetGlyphSampleRate(int v)
147
 
148
 
        if(v>0 && v<1600 && v!=mGlyphSampleRate) 
149
 
        {
150
 
                mGlyphSampleRate = v;
151
 
                this->UpdateGlyphSampleRate();
152
 
                this->ClearCache();
153
 
        }
154
 
}
155
 
 
156
 
 
157
 
void iFieldViewObject::ShowColorBarsBody(bool show)
158
 
{
159
 
        if(this->IsColoredByScalars()) this->GetViewModule()->GetColorBars()->ShowBar(_ColorBarsPriorityField,mColorBy,this->GetScalarDataType(),mPalettes[0],show);
160
 
}
161
 
 
162
 
 
163
 
//
164
 
//  Two functions used in saving/restoring the state and in creating new instances with
165
 
//
166
 
void iFieldViewObject::SolidViewObjectPackStateBody(iString &s) const
167
 
{
168
 
        this->PackValue(s,KeyColorBy(),mColorBy);
169
 
        this->PackValue(s,KeyGlyphSampleRate(),mGlyphSampleRate);
170
 
        this->PackValue(s,KeyConnectedToScalars(),this->IsConnectedToScalars());
171
 
        this->PackValue(s,KeyDataOffset(),this->GetDataOffset());
172
 
 
173
 
        this->PackValueDistance(s,KeyGlyphSize(),mGlyphSize);
174
 
 
175
 
        this->FieldViewObjectPackStateBody(s);
176
 
}
177
 
 
178
 
 
179
 
void iFieldViewObject::SolidViewObjectUnPackStateBody(const iString &s)
180
 
{
181
 
        int i;
182
 
 
183
 
        if(this->UnPackValue(s,KeyColorBy(),i)) this->SetColorBy(i);
184
 
        if(this->UnPackValue(s,KeyGlyphSampleRate(),i)) this->SetGlyphSampleRate(i);
185
 
        
186
 
        if(this->UnPackValueDistance(s,KeyGlyphSize(),mGlyphSize)) this->SetGlyphSize(mGlyphSize);
187
 
 
188
 
        this->FieldViewObjectUnPackStateBody(s);
189
 
}
190
 
 
191
 
 
192
 
const iDataType& iFieldViewObject::GetScalarDataType() const
193
 
{
194
 
        return iDataType::UniformScalars();
195
 
}
196
 
 
197
 
 
198
 
bool iFieldViewObject::CanBeShown() const
199
 
{
200
 
        return (this->GetDataOffset()>=0 && this->GetDataOffset()<this->GetLimits()->GetNumVars());
201
 
}
202
 
 
203
 
 
204
 
bool iFieldViewObject::IsConnectedToScalars() const
205
 
{
206
 
        return mDataConverter->GetScalarStatus() != iGridDataConverter::_NoScalars;
207
 
}
208
 
 
209
 
 
210
 
bool iFieldViewObject::IsColoredByScalars() const
211
 
{
212
 
        return (this->IsConnectedToScalars() && this->GetLimits(this->GetScalarDataType())!=0 && mColorBy>=0 && mColorBy<this->GetLimits(this->GetScalarDataType())->GetNumVars());
213
 
}
214
 
 
215
 
 
216
 
void iFieldViewObject::ViewObjectSyncWithData(int info, void *data)
217
 
{
218
 
        if((info==0 || info==1+mColorBy) && this->IsColoredByScalars())
219
 
        {
220
 
                mActors[0]->SyncWithLimits(this->GetLimits(this->GetScalarDataType()),mColorBy);
221
 
        }
222
 
 
223
 
        this->FieldViewObjectSyncWithData(info,data);
224
 
}
225