1
/*=========================================================================
3
Program: Ionization FRont Interactive Tool (IFRIT)
7
Copyright (c) 2002-2006 Nick Gnedin
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.
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.
26
=========================================================================*/
29
#include "ifieldviewobject.h"
31
#include "icolorbars.h"
33
#include "idatareader.h"
34
#include "idatalimits.h"
35
#include "igriddataconverter.h"
36
#include "ireplicatedactor.h"
37
#include "iviewmodule.h"
39
#include <vtkStructuredPoints.h>
42
// Templates (needed for some compilers)
44
#include "iarraytemplate.h"
47
using namespace iParameter;
50
IVIEWOBJECT_DEFINE_TYPE(iFieldViewObject,FieldViewObject,-fvo);
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);
57
IOBJECT_DEFINE_DISTANCE_KEY(iFieldViewObject,GlyphSize,gs);
61
// iFieldViewObject class
63
iFieldViewObject::iFieldViewObject(iViewModule *vm, const iDataInfo &info, int numActors, unsigned int rank, unsigned int flags) : iSolidViewObject(vm,info,numActors,flags), mGlyphSize(vm,true)
65
mName = "iFieldViewObject";
67
if(rank==0U || rank>2U)
69
IERROR_REPORT_FATAL_ERROR("Incorrect rank for iFieldViewObject.");
74
mGlyphSampleRate = 16;
80
mDataConverter = iGridDataConverter::New(this); IERROR_ASSERT_NULL_POINTER(mDataConverter);
81
mDataConverter->SetDataRank(rank);
85
iFieldViewObject::~iFieldViewObject()
87
mDataConverter->Delete();
91
void iFieldViewObject::ResetInput()
93
mDataConverter->SetScalarInput(iPointerCast<vtkImageData,vtkDataSet>(this->GetViewModule()->GetReader()->GetOutput(iDataType::UniformScalars())));
94
switch(mDataConverter->GetDataRank())
98
mDataConverter->SetVectorInput(iPointerCast<vtkImageData,vtkDataSet>(this->GetViewModule()->GetReader()->GetOutput(iDataType::UniformVectors())));
103
mDataConverter->SetTensorInput(iPointerCast<vtkImageData,vtkDataSet>(this->GetViewModule()->GetReader()->GetOutput(iDataType::UniformTensors())));
107
this->ResetPipelineInput(mDataConverter->GetOutput());
111
void iFieldViewObject::SetGlyphSize(const iDistance &v)
116
this->UpdateGlyphSize();
122
void iFieldViewObject::SetColorBy(int v)
126
if(mColorBy >= 0) this->ShowColorBars(false);
128
if(v >= 0) this->ShowColorBars(true);
129
if(this->IsColoredByScalars())
131
mDataConverter->SetCurrentVar(mColorBy);
132
mActors[0]->SyncWithLimits(this->GetLimits(this->GetScalarDataType()),mColorBy);
133
mActors[0]->ColorByArrayComponent(0,mColorByOffset);
134
mActors[0]->SetScalarVisibility(true);
138
mActors[0]->SetScalarVisibility(false);
139
this->UpdateColorByExtra();
146
void iFieldViewObject::SetGlyphSampleRate(int v)
148
if(v>0 && v<1600 && v!=mGlyphSampleRate)
150
mGlyphSampleRate = v;
151
this->UpdateGlyphSampleRate();
157
void iFieldViewObject::ShowColorBarsBody(bool show)
159
if(this->IsColoredByScalars()) this->GetViewModule()->GetColorBars()->ShowBar(_ColorBarsPriorityField,mColorBy,this->GetScalarDataType(),mPalettes[0],show);
164
// Two functions used in saving/restoring the state and in creating new instances with
166
void iFieldViewObject::SolidViewObjectPackStateBody(iString &s) const
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());
173
this->PackValueDistance(s,KeyGlyphSize(),mGlyphSize);
175
this->FieldViewObjectPackStateBody(s);
179
void iFieldViewObject::SolidViewObjectUnPackStateBody(const iString &s)
183
if(this->UnPackValue(s,KeyColorBy(),i)) this->SetColorBy(i);
184
if(this->UnPackValue(s,KeyGlyphSampleRate(),i)) this->SetGlyphSampleRate(i);
186
if(this->UnPackValueDistance(s,KeyGlyphSize(),mGlyphSize)) this->SetGlyphSize(mGlyphSize);
188
this->FieldViewObjectUnPackStateBody(s);
192
const iDataType& iFieldViewObject::GetScalarDataType() const
194
return iDataType::UniformScalars();
198
bool iFieldViewObject::CanBeShown() const
200
return (this->GetDataOffset()>=0 && this->GetDataOffset()<this->GetLimits()->GetNumVars());
204
bool iFieldViewObject::IsConnectedToScalars() const
206
return mDataConverter->GetScalarStatus() != iGridDataConverter::_NoScalars;
210
bool iFieldViewObject::IsColoredByScalars() const
212
return (this->IsConnectedToScalars() && this->GetLimits(this->GetScalarDataType())!=0 && mColorBy>=0 && mColorBy<this->GetLimits(this->GetScalarDataType())->GetNumVars());
216
void iFieldViewObject::ViewObjectSyncWithData(int info, void *data)
218
if((info==0 || info==1+mColorBy) && this->IsColoredByScalars())
220
mActors[0]->SyncWithLimits(this->GetLimits(this->GetScalarDataType()),mColorBy);
223
this->FieldViewObjectSyncWithData(info,data);