initial commit for version 1.6.x patch release
[OpenFOAM-1.6.x.git] / applications / utilities / postProcessing / graphics / PVFoamReader / PVFoamReader / vtkFoamReader.cxx
blobd977104ce28e26993b12342c86d4847a141a12ba
1 /*---------------------------------------------------------------------------*\
2 ========= |
3 \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
4 \\ / O peration |
5 \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd.
6 \\/ M anipulation |
7 -------------------------------------------------------------------------------
8 License
9 This file is part of OpenFOAM.
11 OpenFOAM is free software; you can redistribute it and/or modify it
12 under the terms of the GNU General Public License as published by the
13 Free Software Foundation; either version 2 of the License, or (at your
14 option) any later version.
16 OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
17 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
18 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
19 for more details.
21 You should have received a copy of the GNU General Public License
22 along with OpenFOAM; if not, write to the Free Software Foundation,
23 Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
25 Description
27 \*---------------------------------------------------------------------------*/
29 #include <ctype.h>
31 #include "vtkFoamReader.h"
33 #include "vtkCallbackCommand.h"
34 #include "vtkDataArraySelection.h"
35 #include "vtkDataArrayCollection.h"
36 #include "vtkObjectFactory.h"
37 #include "vtkDataSet.h"
38 #include "vtkErrorCode.h"
39 #include "vtkUnstructuredGrid.h"
41 #include "vtkFoam.H"
43 // * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
45 vtkCxxRevisionMacro(vtkFoamReader, "$Revision: 1.20 $");
46 vtkStandardNewMacro(vtkFoamReader);
48 // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
50 vtkFoamReader::vtkFoamReader()
52 StoredOutputs = NULL;
54 FileName = NULL;
55 foamData_ = NULL;
57 CacheMesh = 0;
59 UpdateGUI = 1;
60 UpdateGUIOld = 1;
61 TimeStep = 0;
62 TimeStepRange[0] = 0;
63 TimeStepRange[1] = 0;
65 TimeStepLimits[0] = 2;
66 TimeStepLimits[1] = 5;
68 TimeSelection = vtkDataArraySelection::New();
69 RegionSelection = vtkDataArraySelection::New();
70 VolFieldSelection = vtkDataArraySelection::New();
71 PointFieldSelection = vtkDataArraySelection::New();
73 // Setup the selection callback to modify this object when an array
74 // selection is changed.
75 SelectionObserver = vtkCallbackCommand::New();
76 SelectionObserver->SetCallback(&vtkFoamReader::SelectionModifiedCallback);
77 SelectionObserver->SetClientData(this);
79 TimeSelection->AddObserver
81 vtkCommand::ModifiedEvent,
82 this->SelectionObserver
84 RegionSelection->AddObserver
86 vtkCommand::ModifiedEvent,
87 this->SelectionObserver
89 VolFieldSelection->AddObserver
91 vtkCommand::ModifiedEvent,
92 this->SelectionObserver
94 PointFieldSelection->AddObserver
96 vtkCommand::ModifiedEvent,
97 this->SelectionObserver
100 // This is needed by ParaView 2.?.?
101 this->SetNumberOfOutputPorts(0);
105 // * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * //
107 vtkFoamReader::~vtkFoamReader()
109 if (foamData_)
111 delete foamData_;
114 if (StoredOutputs)
116 StoredOutputs->Delete();
119 if (FileName)
121 delete [] FileName;
124 TimeSelection->RemoveObserver(this->SelectionObserver);
125 RegionSelection->RemoveObserver(this->SelectionObserver);
126 VolFieldSelection->RemoveObserver(this->SelectionObserver);
127 PointFieldSelection->RemoveObserver(this->SelectionObserver);
128 SelectionObserver->Delete();
130 TimeSelection->Delete();
131 RegionSelection->Delete();
132 VolFieldSelection->Delete();
133 PointFieldSelection->Delete();
137 // * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
139 void vtkFoamReader::ExecuteInformation()
141 if (!foamData_)
143 vtkDebugMacro( << "Reading Foam case" << FileName);
144 foamData_ = new Foam::vtkFoam(FileName, this);
146 else
148 foamData_->UpdateInformation();
151 vtkDebugMacro( << "end of ExecuteInformation\n");
155 void vtkFoamReader::Execute()
157 if (!StoredOutputs)
159 foamData_->Update();
161 StoredOutputs = vtkFoamData::New();
163 for (int i = 0; i < GetNumberOfOutputs(); i++)
165 vtkDataObject* tmp = GetOutput(i);
166 vtkDataObject* output = tmp->NewInstance();
167 output->ShallowCopy(tmp);
168 StoredOutputs->SetNthOutput(i, output);
169 output->Delete();
172 else
174 for (int i = 0; i < GetNumberOfOutputs(); i++)
176 vtkDataObject* output = GetOutput(i);
177 int tempExtent[6];
178 output->GetUpdateExtent(tempExtent);
179 output->ShallowCopy(StoredOutputs->GetOutput(i));
180 output->SetUpdateExtent(tempExtent);
183 if (UpdateGUIOld == GetUpdateGUI())
185 foamData_->Update();
187 for (int i = 0; i < GetNumberOfOutputs(); i++)
189 vtkDataObject* tmp = GetOutput(i);
190 vtkDataObject* output = tmp->NewInstance();
191 output->ShallowCopy(tmp);
192 StoredOutputs->SetNthOutput(i, output);
193 output->Delete();
198 UpdateGUIOld = GetUpdateGUI();
202 void vtkFoamReader::SetFileName(const char *name)
204 if (name && !FileName || (FileName && !strcmp(FileName,name)))
206 if (!FileName)
208 FileName = new char[strlen(name) + 1];
209 strcpy(FileName, name);
212 else
214 vtkErrorMacro("Changing case is not currently supported.\nPlease delete reader and create a new one for the new case.");
215 return;
219 if ( FileName && name && (!strcmp(FileName,name)))
221 return;
224 if (!name && !FileName)
226 return;
229 if (FileName)
231 delete [] FileName;
234 FileName = new char[strlen(name) + 1];
235 strcpy(FileName, name);
237 if (foamData_)
239 delete foamData_;
240 foamData_ = NULL;
242 if (StoredOutputs)
244 StoredOutputs->Delete();
245 StoredOutputs = NULL;
249 Modified();
254 void vtkFoamReader::PrintSelf(ostream& os, vtkIndent indent)
256 Superclass::PrintSelf(os,indent);
258 os << indent << "File Name: "
259 << (FileName ? FileName : "(none)") << "\n";
263 vtkDataArraySelection* vtkFoamReader::GetTimeSelection()
265 return TimeSelection;
268 int vtkFoamReader::GetNumberOfTimeArrays()
270 return TimeSelection->GetNumberOfArrays();
273 const char* vtkFoamReader::GetTimeArrayName(int index)
275 return TimeSelection->GetArrayName(index);
278 int vtkFoamReader::GetTimeArrayStatus(const char* name)
280 return TimeSelection->ArrayIsEnabled(name);
283 void vtkFoamReader::SetTimeArrayStatus(const char* name, int status)
285 if(status)
287 TimeSelection->EnableArray(name);
289 else
291 TimeSelection->DisableArray(name);
295 vtkDataArraySelection* vtkFoamReader::GetRegionSelection()
297 return RegionSelection;
300 int vtkFoamReader::GetNumberOfRegionArrays()
302 return RegionSelection->GetNumberOfArrays();
305 const char* vtkFoamReader::GetRegionArrayName(int index)
307 return RegionSelection->GetArrayName(index);
310 int vtkFoamReader::GetRegionArrayStatus(const char* name)
312 return RegionSelection->ArrayIsEnabled(name);
315 void vtkFoamReader::SetRegionArrayStatus(const char* name, int status)
317 if(status)
319 RegionSelection->EnableArray(name);
321 else
323 RegionSelection->DisableArray(name);
328 vtkDataArraySelection* vtkFoamReader::GetVolFieldSelection()
330 return VolFieldSelection;
333 int vtkFoamReader::GetNumberOfVolFieldArrays()
335 return VolFieldSelection->GetNumberOfArrays();
338 const char* vtkFoamReader::GetVolFieldArrayName(int index)
340 return VolFieldSelection->GetArrayName(index);
343 int vtkFoamReader::GetVolFieldArrayStatus(const char* name)
345 return VolFieldSelection->ArrayIsEnabled(name);
348 void vtkFoamReader::SetVolFieldArrayStatus(const char* name, int status)
350 if(status)
352 VolFieldSelection->EnableArray(name);
354 else
356 VolFieldSelection->DisableArray(name);
361 vtkDataArraySelection* vtkFoamReader::GetPointFieldSelection()
363 return PointFieldSelection;
366 int vtkFoamReader::GetNumberOfPointFieldArrays()
368 return PointFieldSelection->GetNumberOfArrays();
371 const char* vtkFoamReader::GetPointFieldArrayName(int index)
373 return PointFieldSelection->GetArrayName(index);
376 int vtkFoamReader::GetPointFieldArrayStatus(const char* name)
378 return PointFieldSelection->ArrayIsEnabled(name);
381 void vtkFoamReader::SetPointFieldArrayStatus(const char* name, int status)
383 if(status)
385 PointFieldSelection->EnableArray(name);
387 else
389 PointFieldSelection->DisableArray(name);
394 void vtkFoamReader::SelectionModifiedCallback
396 vtkObject*,
397 unsigned long,
398 void* clientdata,
399 void*
402 static_cast<vtkFoamReader*>(clientdata)->SelectionModified();
405 void vtkFoamReader::SelectionModified()
407 Modified();
411 // ************************************************************************* //