Main Page | Namespace List | Class Hierarchy | Class List | File List | Class Members | File Members

src/aclvis/Tool.cpp

Go to the documentation of this file.
00001 // -*- C++ -*-
00002 /***************************************************************************
00003  *
00004  * The IPPL Framework
00005  * 
00006  * This program was prepared by PSI. 
00007  * All rights in the program are reserved by PSI.
00008  * Neither PSI nor the author(s)
00009  * makes any warranty, express or implied, or assumes any liability or
00010  * responsibility for the use of this software
00011  *
00012  * Visit http://www.acl.lanl.gov/POOMS for more details
00013  *
00014  ***************************************************************************/
00015 
00016 // -*- C++ -*-
00017 /***************************************************************************
00018  *
00019  * The IPPL Framework
00020  * 
00021  *
00022  * Visit http://people.web.psi.ch/adelmann/ for more details
00023  *
00024  ***************************************************************************/
00025 
00026 #include "aclvis/Tool.h"
00027 #include "Profile/Profiler.h"
00028 
00029 // Tool
00030 
00031 Tool::Tool() {
00032   TAU_PROFILE("Tool::Tool()", "void ()", TAU_VIZ);
00033   SetUpdatePolicy(Once);
00034 }
00035 
00036 Tool::~Tool()
00037 {
00038 }
00039 
00040 void 
00041 Tool::SetUpdatePolicy(UpdatePolicyType param_update_policy) {
00042   TAU_PROFILE("Tool::SetUpdatePolicy()", "void (UpdatePolicyType)", TAU_VIZ);
00043   updatePolicy = param_update_policy;
00044   switch (updatePolicy) {
00045   case Zero:
00046     updateCount=1;
00047     break;
00048   case Once:
00049     updateCount=0;
00050     break;
00051   case Al:
00052     updateCount=0;
00053   default:
00054     break;
00055   }
00056 }
00057 
00058 UpdatePolicyType Tool::GetUpdatePolicy() {
00059   TAU_PROFILE("Tool::GetUpdatePolicy()", "UpdatePolicyType ()", TAU_VIZ);
00060   return updatePolicy;
00061 }
00062 
00063 int Tool::UpdateTestAndSet() {
00064   TAU_PROFILE("Tool::UpdateTestAndSet()", "int ()", TAU_VIZ);
00065   int updateTest;
00066 
00067   updateTest = False;
00068   switch (updatePolicy) {
00069   case Zero:
00070   case Once:
00071     updateTest = (updateCount < 1);
00072     // cerr << "UpdateT&S: " << updateTest << " " << updateCount << "\n";
00073     updateCount++;
00074     break;
00075   case Al:
00076     updateTest = 1;
00077     // cerr << "UpdateT&S: " << updateTest << " " << updateCount << "\n";
00078     updateCount++;
00079     break;
00080   default:
00081     break;
00082   }
00083   return updateTest;
00084 }
00085 
00086 void 
00087 Tool::SetLocalDimensions(int *param_dims) {
00088   TAU_PROFILE("Tool::SetLocalDimensions()", "void (int *)", TAU_VIZ);
00089   dims[0] = param_dims[0]; dims[1] = param_dims[1]; dims[2] = param_dims[2];
00090   //  cerr << "Set Dim: " << dims[0] << "," << dims[1] << "," << dims[2] << "\n";
00091 }
00092 
00093 void 
00094 Tool::GetLocalDimensions(int *param_dims) {
00095   TAU_PROFILE("Tool::GetLocalDimensions()", "void (int *)", TAU_VIZ);
00096   param_dims[0] = dims[0]; param_dims[1] = dims[1]; param_dims[2] = dims[2];
00097   //  cerr << "Get Dim: " << dims[0] << "," << dims[1] << "," << dims[2] << "\n";
00098 }
00099 
00100 void 
00101 Tool::SetLocalOrigin(float *param_origin){
00102   TAU_PROFILE("Tool::SetLocalOrigin()", "void (float *)", TAU_VIZ);
00103   origin[0] = param_origin[0]; origin[1] = param_origin[1]; origin[2] = param_origin[2];
00104   //  cerr << "Set Origin: " << origin[0] << "," << origin[1] << "," << origin[2] << "\n";
00105 }
00106 
00107 void 
00108 Tool::GetLocalOrigin(float *param_origin) {
00109   TAU_PROFILE("Tool::GetLocalOrigin()", "void (float *)", TAU_VIZ);
00110   param_origin[0] = origin[0]; param_origin[1] = origin[1]; param_origin[2] = origin[2];
00111   //  cerr << "Get Origin: " << origin[0] << "," << origin[1] << "," << origin[2] << "\n";
00112 }
00113 
00114 void 
00115 Tool::SetLocalAspectRatio(float *param_aspect){
00116   TAU_PROFILE("Tool::SetLocalAspectRatio()", "void (float *)", TAU_VIZ);
00117   aspect[0] = param_aspect[0]; aspect[1] = param_aspect[1]; aspect[2] = param_aspect[2];
00118   //  cerr << "Set Aspect: " << aspect[0] << "," << aspect[1] << "," << aspect[2] << "\n";
00119 }
00120 
00121 void 
00122 Tool::GetLocalAspectRatio(float *param_aspect) {
00123   TAU_PROFILE("Tool::GetLocalAspectRatio()", "void (float *)", TAU_VIZ);
00124   param_aspect[0] = aspect[0]; param_aspect[1] = aspect[1]; param_aspect[2] = aspect[2];
00125   //  cerr << "Get Aspect: " << aspect[0] << "," << aspect[1] << "," << aspect[2] << "\n";
00126 }
00127 
00128 void 
00129 Tool::SetRange(float *param_range) {
00130   TAU_PROFILE("Tool::SetRange()", "void (float *)", TAU_VIZ);
00131   range[0] = param_range[0]; range[1] = param_range[1];
00132   //  cerr << "Set Range: " << range[0] << " " << range[1] << "\n";
00133 }
00134 
00135 void 
00136 Tool::GetRange(float *param_range) {
00137   TAU_PROFILE("Tool::GetRange()", "void (float *)", TAU_VIZ);
00138   param_range[0] = range[0]; param_range[1] = range[1];
00139   //  cerr << "Get Range: " << range[0] << " " << range[1] << "\n";
00140 }
00141 
00142 void 
00143 Tool::GetAllValues(int *param_dims, float *param_origin, float *param_aspect, float *param_range) {
00144   TAU_PROFILE("Tool::GetAllValues()", "void (int *, float *, float *, float *)",
00145     TAU_VIZ);
00146   GetLocalDimensions(param_dims);
00147   GetLocalOrigin(param_origin);
00148   GetLocalAspectRatio(param_aspect);
00149   GetRange(param_range);
00150 }
00151 
00152 void 
00153 Tool::SetAllValues(int *param_dims, float *param_origin, float *param_aspect, float *param_range) {
00154   TAU_PROFILE("Tool::SetAllValues()", "void (int *, float *, float *, float *)",
00155     TAU_VIZ);
00156   SetLocalDimensions(param_dims);
00157   SetLocalOrigin(param_origin);
00158   SetLocalAspectRatio(param_aspect);
00159   SetRange(param_range);
00160 }
00161 
00162 
00164 
00165 ReadFieldTool::ReadFieldTool() {
00166   TAU_PROFILE("ReadFieldTool::ReadFieldTool()", "void ()", TAU_VIZ);
00167 
00168   // cerr << "Create: Read Field " << GetOutput() <<"\n";
00169   UpdateAllValues();
00170   GetOutput()->DebugOff();
00171   vizData = new vizStructuredFieldDataType;
00172 }    
00173 
00174 ReadFieldTool::~ReadFieldTool()
00175 {
00176   delete vizData;
00177 }
00178 
00179 void 
00180 ReadFieldTool::Execute() {
00181   TAU_PROFILE("ReadFieldTool::Execute()", "void ()", TAU_VIZ);
00182   //gather_data;
00183   //cerr << "Execute:" << Output<< "\n";
00184 }    
00185 
00186 void 
00187 ReadFieldTool::UpdateDimensions() {
00188   TAU_PROFILE("ReadFieldTool::UpdateDimensions()", "void ()", TAU_VIZ);
00189   int dims[3];
00190 
00191   GetOutput()->GetDimensions(dims); SetLocalDimensions(dims);
00192   GetOutput()->DebugOff();
00193 }
00194 
00195 void 
00196 ReadFieldTool::UpdateOrigin() {
00197   TAU_PROFILE("ReadFieldTool::UpdateOrigin()", "void ()", TAU_VIZ);
00198   float origin[3];
00199 
00200   GetOutput()->GetOrigin(origin); SetLocalOrigin(origin);
00201   GetOutput()->DebugOff();
00202 }
00203 
00204 void 
00205 ReadFieldTool::UpdateAspect() {
00206   TAU_PROFILE("ReadFieldTool::UpdateAspect()", "void ()", TAU_VIZ);
00207   float aspect[3];
00208 
00209   GetOutput()->GetAspectRatio(aspect); SetLocalAspectRatio(aspect);
00210   GetOutput()->DebugOff();
00211 }
00212 
00213 void 
00214 ReadFieldTool::SetDimensions(int dims[3])
00215 {
00216   this->GetOutput()->SetDimensions(dims);
00217   SetLocalDimensions(dims);
00218 }
00219 
00220 void 
00221 ReadFieldTool::SetAspectRatio(float aspr[3])
00222 {
00223   this->GetOutput()->SetAspectRatio(aspr);
00224   SetLocalAspectRatio(aspr);
00225 }
00226 
00227 void 
00228 ReadFieldTool::SetOrigin(float orig[3])
00229 {
00230   this->GetOutput()->SetOrigin(orig);
00231   SetLocalOrigin(orig);
00232 }
00233 
00234 vizStructuredFieldDataType *
00235 ReadFieldTool::GetVizData() 
00236 {
00237   return vizData;
00238 }
00239 
00240 void 
00241 ReadFieldTool::UpdateRange() {
00242   TAU_PROFILE("ReadFieldTool::UpdateRange()", "void ()", TAU_VIZ);
00243   float range[3];
00244 
00245   if ( Output->GetPointData()->GetScalars() ) {
00246       Output->GetPointData()->GetScalars()->GetRange(range);
00247   } else  {
00248     range[0] = 0.0; range[1] = 1.0;
00249   } 
00250   SetRange(range);
00251   //  cerr << "Set Range: " << range[0] << "..." << range[1] << "\n";
00252 }
00253 
00254 void 
00255 ReadFieldTool::UpdateAllValues() {
00256   TAU_PROFILE("ReadFieldTool::UpdateAllValues()", "void ()", TAU_VIZ);
00257   UpdateDimensions();  UpdateOrigin();  UpdateAspect();  UpdateRange();
00258 }
00259 
00260 int
00261 ReadFieldTool::PrepareFinishedData()
00262 {
00263   return vizData->InsertFieldData(this->GetOutput());
00264 }
00265 
00266 
00268 
00269 ReadParticleTool::ReadParticleTool() {
00270   TAU_PROFILE("ReadFieldTool::ReadParticleTool()", "void ()", TAU_VIZ);
00271 
00272   // cerr << "Create Read Particle: " << GetOutput() <<"\n";
00273   //  DebugOn();
00274   vtkIndent indent;
00275   vizData = new vizParticleDataType;
00276   //PrintSelf(cerr, indent);
00277 }    
00278 
00279 ReadParticleTool::~ReadParticleTool()
00280 {
00281   delete vizData;
00282 }
00283 
00284 void 
00285 ReadParticleTool::Execute() {
00286   TAU_PROFILE("ReadFieldTool::Execute()", "void ()", TAU_VIZ);
00287   //gather_data;
00288   //  cerr << "Execute:" << Output<< "\n";
00289 }    
00290 
00291 void 
00292 ReadParticleTool::UpdateRange() {
00293   TAU_PROFILE("ReadFieldTool::UpdateRange()", "void ()", TAU_VIZ);
00294   float range[3];
00295 
00296   if ( Output->GetPointData()->GetScalars() ) {
00297       Output->GetPointData()->GetScalars()->GetRange(range);
00298   } else  {
00299     range[0] = 0.0; range[1] = 1.0;
00300   } 
00301   SetRange(range);
00302   //  cerr << "Set Range: " << range[0] << "..." << range[1] << "\n";
00303 }
00304 
00305 int
00306 ReadParticleTool::PrepareFinishedData()
00307 {
00308   vizData->InsertParticleData(this->GetOutput());
00309   this->Update();
00310   return 1;
00311 }
00312 
00313 vizParticleDataType *
00314 ReadParticleTool::GetVizData() 
00315 {
00316   return vizData;
00317 }
00318 
00319 
00320 // Class: Filter Tool
00321 FilterTool::FilterTool() {
00322   TAU_PROFILE("FilTerTool::FilterTool()", "void ()", TAU_VIZ);
00323   actor = new vtkActor;
00324   polyMapper = new vtkPolyMapper;
00325   actor->GetProperty()->SetAmbient(0.1);
00326 }
00327 
00328 FilterTool::~FilterTool() {
00329   TAU_PROFILE("FilterTool::~FilterTool()", "void ()", TAU_VIZ);
00330   RenderTool *rendertool;
00331   vtkActor *vtk_actor;
00332 
00333   rendertool = GetRenderTool();
00334 
00335   // cerr << "Filter Tool Delete\n";
00336   vtk_actor = GetActor();
00337   rendertool->RemoveActors(vtk_actor);
00338   rendertool->Render();
00339 
00340   delete vtk_actor;
00341   delete polyMapper;
00342 }
00343 
00344 vtkActor* 
00345 FilterTool::GetActor() {
00346   TAU_PROFILE("FilterTool::GetActor()", "vtkActor * ()", TAU_VIZ);
00347   return actor;
00348 }
00349 
00350 vtkPolyMapper*
00351 FilterTool::GetPolyMapper() {
00352   TAU_PROFILE("FilterTool::GetPolyMapper()", "vtkPolyMapper * ()", TAU_VIZ);
00353   return polyMapper;
00354 }
00355 
00356 void 
00357 FilterTool::SetReadTool(void *param_readtool) {
00358   TAU_PROFILE("FilterTool::SetReadTool()", "void (void *)", TAU_VIZ);
00359   readtool = param_readtool;
00360 }
00361 
00362 void*
00363 FilterTool::GetReadTool() {
00364   TAU_PROFILE("FilterTool::GetReadTool()", "void ()", TAU_VIZ);
00365   return readtool;
00366 }
00367 
00368 void 
00369 FilterTool::SetRenderTool(RenderTool *param_rendertool) {
00370   TAU_PROFILE("FilterTool::SetRenderTool()", "void (RenderTool *)", TAU_VIZ);
00371   rendertool = param_rendertool;
00372 }
00373 
00374 RenderTool*
00375 FilterTool::GetRenderTool() {
00376   TAU_PROFILE("FilterTool::GetRenderTool()", "RenderTool* ()", TAU_VIZ);
00377   return rendertool;
00378 }
00379 
00380 
00381 void 
00382 FilterTool::FilterToolInit(void *param_readtool, RenderTool *param_rendertool) {
00383   TAU_PROFILE("FilterTool::FilterToolInit()", "void (void *, RenderTool *)", 
00384     TAU_VIZ);
00385   SetReadTool(param_readtool);
00386   SetRenderTool(param_rendertool);
00387 }
00388 
00390 
00391 SliceTool::SliceTool(void *param_readtool, RenderTool *param_rendertool) {
00392   TAU_PROFILE("SliceTool::SliceTool()", "void (void *, RenderTool *)", TAU_VIZ);
00393 
00394   RenderTool *rendertool;
00395   vtkActor *vtk_actor;
00396   vtkPolyMapper *p1Mapper;
00397 
00398   int dims[3];
00399   float origin[3], aspect[3];
00400   float range[2];
00401 
00402 
00403   FilterToolInit(param_readtool, param_rendertool);
00404   rendertool = GetRenderTool();
00405 
00406   //  cerr << "Slice Tool\n";
00407   ReadFieldTool *readFieldTool;
00408   readFieldTool = (ReadFieldTool *)GetReadTool();
00409   
00410   readFieldTool->GetAllValues(dims,origin,aspect,range);
00411   SetAllValues(dims,origin,aspect,range);
00412   
00413   p1 = new vtkStructuredPointsGeometryFilter;
00414   p1Mapper = GetPolyMapper();
00415   
00416   //  cerr << "Slice color range: " << range[0] << " " << range[1] << "\n";
00417   
00418   p1->SetInput(readFieldTool->GetOutput());
00419   p1Mapper->SetInput(p1->GetOutput());
00420   vtk_actor = GetActor();
00421   vtk_actor->SetMapper(p1Mapper);
00422   SetSliceType(XY);
00423   SetSliceValue(origin[sliceType]);
00424   SetExtent();
00425   p1Mapper->SetScalarRange(range);
00426   rendertool->AddActors(vtk_actor);
00427   rendertool->Render();
00428 }
00429 
00430 SliceTool::~SliceTool() {
00431   TAU_PROFILE("SliceTool::~SliceTool()", "void ()", TAU_VIZ);
00432   delete p1;
00433 }
00434 
00435 vtkStructuredPointsGeometryFilter*
00436 SliceTool::GetStructuredPointsGeometryFilter() {
00437   TAU_PROFILE("SliceTool::GetStructuredPointsGeometryFilter()", "void ()", 
00438     TAU_VIZ);
00439   return p1;
00440 }
00441 
00442 int 
00443 SliceTool::GetSliceType() {
00444   TAU_PROFILE("SliceTool::GetSliceType()", "void ()", TAU_VIZ);
00445   return sliceType;
00446 }
00447 
00448 void 
00449 SliceTool::SetSliceType(int param_sliceType) {
00450   TAU_PROFILE("SliceTool::SetSliceType()", "void ()", TAU_VIZ);
00451   sliceType = param_sliceType;
00452 }
00453 
00454 float 
00455 SliceTool::GetSliceValue() {
00456   TAU_PROFILE("SliceTool::GetSliceValue()", "void ()", TAU_VIZ);
00457   int dims[3];
00458   float aspect[3], origin[3];
00459   float range[2];
00460 
00461   GetAllValues(dims, origin, aspect,range);
00462   return sliceValue*aspect[sliceType]+origin[sliceType];
00463 }
00464 
00465 void 
00466 SliceTool::SetSliceValue(float param_sliceValue) {
00467   TAU_PROFILE("SliceTool::SetSliceValue()", "void (float )", TAU_VIZ);
00468   int dims[3];
00469   float aspect[3], origin[3];
00470   float range[2];
00471 
00472   GetAllValues(dims, origin, aspect,range);
00473   sliceValue = int((param_sliceValue - origin[sliceType])/aspect[sliceType]);
00474 }
00475 
00476 float 
00477 SliceTool::GetLowerBound() {
00478   TAU_PROFILE("SliceTool::GetLowerBound()", "float ()", TAU_VIZ);
00479   int dims[3];
00480   float aspect[3], origin[3];
00481   float range[2];
00482 
00483   GetAllValues(dims, origin, aspect,range);
00484   return origin[sliceType];
00485 }
00486 
00487 float 
00488 SliceTool::GetUpperBound() {
00489   TAU_PROFILE("SliceTool::GetUpperBound()", "float ()", TAU_VIZ);
00490   int dims[3];
00491   float aspect[3], origin[3];
00492   float range[2];
00493   
00494   GetAllValues(dims, origin, aspect,range);
00495   return dims[sliceType] * aspect[sliceType] + origin[sliceType];
00496 }
00497 
00498 float 
00499 SliceTool::GetValueRange() {
00500   TAU_PROFILE("SliceTool::GetValueRange()", "float ()", TAU_VIZ);
00501   return GetUpperBound() - GetLowerBound();
00502 }
00503 
00504 void SliceTool::SetExtent() {
00505   TAU_PROFILE("SliceTool::SetExtent()", "void ()", TAU_VIZ);
00506   int dims[3];
00507 
00508   GetLocalDimensions(dims);
00509 
00510   switch (sliceType) {
00511   case XY:
00512     p1->SetExtent(0,dims[0], 0,dims[1], sliceValue, sliceValue);
00513     break;
00514   case YZ:
00515     p1->SetExtent(sliceValue, sliceValue, 0, dims[1], 0, dims[2]);
00516     break;
00517   case XZ:
00518     p1->SetExtent(0,dims[0], sliceValue, sliceValue, 0, dims[2]);
00519     break;
00520   default:
00521     break;
00522   }
00523 }
00524 
00525 
00527 
00528 IsoSurfaceTool::IsoSurfaceTool(void *param_readtool, RenderTool *param_rendertool) {
00529   TAU_PROFILE("IsoSurfaceTool::IsoSurfaceTool()", "void (void *, RenderTool * )", TAU_VIZ);
00530   RenderTool *rendertool;
00531   ReadFieldTool *readFieldTool;
00532   vtkActor *vtk_actor;
00533   vtkPolyMapper *isoMapper;
00534   int dims[3];
00535   float origin[3], aspect[3];
00536   float range[2];  float subrange[2];
00537   float cvalue;
00538 
00539   FilterToolInit(param_readtool, param_rendertool);
00540   rendertool = GetRenderTool();
00541   readFieldTool = (ReadFieldTool *)GetReadTool();
00542   readFieldTool->GetAllValues(dims,origin,aspect,range);
00543   SetAllValues(dims,origin,aspect,range);
00544   
00545   isoF = new vtkContourFilter;
00546   isoMapper = GetPolyMapper();
00547   
00548   isoF->SetInput(readFieldTool->GetOutput());
00549   isoMapper->SetInput(isoF->GetOutput());
00550   vtk_actor = GetActor();
00551   vtk_actor->SetMapper(isoMapper); 
00552   
00553   isoMapper->SetScalarRange(range);
00554   
00555   cvalue = (range[0]+range[1])/2.0;
00556   isoF->SetValue(0,cvalue);
00557   subrange[0] = cvalue; subrange[1] = cvalue;
00558   SetContourSubRange(subrange);
00559   SetNumContours(1);
00560   
00561   //isoMapper->ScalarsVisibleOff();
00562   //  vtk_actor->GetProperty()->SetColor(1.0,1.0,1.0);
00563   
00564   rendertool->AddActors(vtk_actor);
00565   rendertool->Render();
00566 }
00567 
00568 IsoSurfaceTool::~IsoSurfaceTool() {
00569   TAU_PROFILE("IsoSurfaceTool::~IsoSurfaceTool()", "void ()", TAU_VIZ);
00570   //  cerr << "IsoSurfaceTool delete \n";
00571   delete isoF;
00572 }
00573 
00574 vtkContourFilter*
00575 IsoSurfaceTool::GetContourFilter() {
00576   TAU_PROFILE("IsoSurfaceTool::GetContourFilter()", "vtkContourFilter* ()", TAU_VIZ);
00577   return isoF;
00578 }
00579 
00580 void 
00581 IsoSurfaceTool::SetNumContours(int param_numContours) {
00582   TAU_PROFILE("IsoSurfaceTool::SetNumContours()", "void (int)", TAU_VIZ);
00583   numContours = param_numContours;
00584 }
00585 
00586 int 
00587 IsoSurfaceTool::GetNumContours() {
00588   TAU_PROFILE("IsoSurfaceTool::GetNumContours()", "int ()", TAU_VIZ);
00589   return numContours;
00590 }
00591 
00592 void 
00593 IsoSurfaceTool::SetContourSubRange(float *param_srange) {
00594   TAU_PROFILE("IsoSurfaceTool::SetContourSubRange()", "void (float *)", TAU_VIZ);
00595   srange[0] = param_srange[0];
00596   srange[1] = param_srange[1];
00597 }
00598 
00599 void 
00600 IsoSurfaceTool::GetContourSubRange(float *param_srange) {
00601   TAU_PROFILE("IsoSurfaceTool::GetContourSubRange()", "void (float * )", TAU_VIZ);
00602   param_srange[0] = srange[0];
00603   param_srange[1] = srange[1];
00604 }
00605 
00606 
00608 
00609 void RenderTool::SetRenderer(vtkRenderer *ren1) {
00610   TAU_PROFILE("RenderTool::SetRenderer()", "void (vtkRenderer * )", TAU_VIZ);
00611     renderer = ren1;
00612 }
00613 
00614 void RenderTool::SetRenderWindow(vtkXRenderWindow *renWin) {
00615   TAU_PROFILE("RenderTool::SetRenderWindow()", "void (vtkXRenderWindow * )", 
00616     TAU_VIZ);
00617     render_window = renWin;
00618 }
00619 
00620 vtkRenderer *RenderTool::GetRenderer() {
00621   TAU_PROFILE("RenderTool::GetRenderer()", "vtkRenderer * ()", TAU_VIZ);
00622   return renderer;
00623 }
00624 
00625 //vtkXRenderWindow *RenderTool::GetRenderWindow() {
00626 //  return render_window;
00627 //}
00628 
00629 vtkRenderWindow *RenderTool::GetRenderWindow() {
00630   TAU_PROFILE("RenderTool::GetRenderWindow()", "vtkRenderWindow *()", TAU_VIZ);
00631   return render_window;
00632 }
00633 
00634 RenderTool::RenderTool() {
00635   TAU_PROFILE("RenderTool::RenderTool()", "void ()", TAU_VIZ);
00636 number_of_actors = 0;
00637 }
00638 
00639 void RenderTool::ResetCamera(){
00640   TAU_PROFILE("RenderTool::ResetCamera()", "void ()", TAU_VIZ);
00641   renderer->ResetCamera();
00642   render_window->Render();
00643 }
00644 
00645 void RenderTool::AddActors(vtkActor *actor){
00646   TAU_PROFILE("RenderTool::AddActors()", "void (vtkActor * )", TAU_VIZ);
00647   number_of_actors++;
00648   renderer->AddActors(actor);
00649   if (number_of_actors == 1) {
00650     ResetCamera();
00651   }
00652 }
00653 
00654 void RenderTool::RemoveActors(vtkActor *actor){
00655   TAU_PROFILE("RenderTool::RemoveActors()", "void (vtkActor * )", TAU_VIZ);
00656   number_of_actors--;
00657   renderer->RemoveActors(actor);
00658 }
00659 
00660 
00661 void RenderTool::Render(){
00662   TAU_PROFILE("RenderTool::Render()", "void ()", TAU_VIZ);
00663   render_window->Render();
00664 }
00665 
00666 
00668 
00669 PointTool::PointTool(void *param_readtool, RenderTool *param_rendertool) {
00670   TAU_PROFILE("PointTool::PointTool()", "void (void *, RenderTool * )", TAU_VIZ);
00671 
00672   RenderTool *rendertool;
00673   vtkActor *vtk_actor;
00674   vtkPolyMapper *polyMapper;
00675   int dims[3];
00676   float origin[3], aspect[3];
00677   float range[2];
00678   
00679   FilterToolInit(param_readtool, param_rendertool);
00680   rendertool = GetRenderTool();
00681 
00682   ReadParticleTool *readParticleTool;
00683   readParticleTool = (ReadParticleTool *)GetReadTool();
00684   
00685   readParticleTool->GetAllValues(dims,origin,aspect,range);
00686   SetAllValues(dims,origin,aspect,range);
00687 
00688   polyMapper = GetPolyMapper();
00689   
00690   polyMapper->SetInput(readParticleTool->GetOutput());
00691   polyMapper->SetScalarRange(range);
00692   vtk_actor = GetActor();
00693   vtk_actor->SetMapper(polyMapper); 
00694   vtk_actor->GetProperty()->SetAmbient(1.0);
00695   vtk_actor->GetProperty()->SetSpecular(1.0);
00696   rendertool->AddActors(vtk_actor);
00697   rendertool->Render();
00698 }
00699 
00700 
00701 PointTool::~PointTool() {
00702   TAU_PROFILE("PointTool::~PointTool()", "void ()", TAU_VIZ);
00703 }
00704 
00705 
00706 
00708 
00709 vizTraceTool::vizTraceTool()
00710 {
00711   TAU_PROFILE("vizTraceTool::vizTraceTool()", "void ()", TAU_VIZ);
00712   traceCollection = new vtkCollection;
00713   apd = new vtkAppendPolyData;
00714 
00715   traceNumber = 1;
00716   traceIter = 0;
00717 }
00718 
00719 vizTraceTool::~vizTraceTool() 
00720 {
00721   TAU_PROFILE("vizTraceTool::~vizTraceTool()", "void ()", TAU_VIZ);
00722   delete traceCollection;
00723   delete apd;
00724 }
00725 
00726 int
00727 vizTraceTool::AppendPolyData(vtkPolyData *newPolyData)
00728 {
00729   TAU_PROFILE("vizTraceTool::AppendPolyData()", "int (ReadParticleTool * )", TAU_VIZ);
00730   vtkPolyData *pt;
00731   vtkPolyData *stalePolyData;
00732 
00733   if ((traceNumber >= 1)) {
00734     // if trace stack is filled, remove oldest data
00735     if (traceIter == traceNumber) {
00736       traceCollection->InitTraversal();
00737       stalePolyData = (vtkPolyData*)(traceCollection->GetNextItemAsObject());
00738       apd->RemoveInput(stalePolyData);
00739       traceCollection->RemoveItem(stalePolyData);
00740       IterateTraceIter(-1);
00741       // if trace stack is exceeded, remove old data until trace stack has one
00742       // less than the stack capacity (traceNumber)
00743     } else if (traceIter > traceNumber) {
00744       CullStalePolyData();
00745     }
00746     // add the next set of data to end of stack
00747     pt = new vtkPolyData(*newPolyData);
00748     apd->AddInput(pt);
00749     traceCollection->AddItem(pt);
00750     IterateTraceIter();
00751   }    
00752   return 1;
00753 }
00754 
00755 int
00756 vizTraceTool::CullStalePolyData(int fromSetFlag) 
00757 {
00758   TAU_PROFILE("vizTraceTool::CullStalePolyData()", "int (int )", TAU_VIZ);
00759   int          i;
00760   int          diff;
00761   vtkPolyData *stalePolyData;
00762 
00763   diff = traceIter-traceNumber;
00764   if (diff > 0) {
00765     if (fromSetFlag) {
00766       diff--;
00767       for (i=0; i <= diff; i++) {
00768         traceCollection->InitTraversal();
00769         stalePolyData = (vtkPolyData*)(traceCollection->GetNextItemAsObject());
00770         apd->RemoveInput(stalePolyData);
00771         traceCollection->RemoveItem(stalePolyData);
00772         IterateTraceIter(-1);
00773       }
00774     }
00775   }
00776   return 1;
00777 }
00778 
00779 int
00780 vizTraceTool::SetTraceNumber(int num) 
00781 {
00782   TAU_PROFILE("vizTraceTool::SetTraceNumber()", "int (int )", TAU_VIZ);
00783   if (num > 0) {
00784     traceNumber = num;
00785   }
00786 
00787   if (traceNumber < traceIter) {
00788     CullStalePolyData(1);
00789   }
00790   return traceNumber;
00791 }
00792 
00793 int
00794 vizTraceTool::SetTraceIter(int iter) 
00795 {
00796   TAU_PROFILE("vizTraceTool::SetTraceIter()", "int (int )", TAU_VIZ);
00797   if (iter > 0) {
00798     traceIter = iter;
00799   } 
00800   return traceIter;
00801 }
00802 
00803 vtkCollection*
00804 vizTraceTool::GetTraceCollection() 
00805 {
00806   TAU_PROFILE("vizTraceTool::GetTraceCollection()", "vtkCollection * ()", TAU_VIZ);
00807   return traceCollection;
00808 }
00809 
00810 int
00811 vizTraceTool::GetTraceNumber() const 
00812 {
00813   TAU_PROFILE("vizTraceTool::GetTraceNumber()", "int ()", TAU_VIZ);
00814   return traceNumber;
00815 }
00816 
00817 int
00818 vizTraceTool::GetTraceIter() const 
00819 {
00820   TAU_PROFILE("vizTraceTool::GetTraceIter()", "int ()", TAU_VIZ);
00821   return traceIter;
00822 }
00823 
00824 vtkAppendPolyData*
00825 vizTraceTool::Getapd() 
00826 {
00827   TAU_PROFILE("vizTraceTool::Getapd()", "vtkAppendPolyData * ()", TAU_VIZ);
00828   return apd;
00829 }
00830 
00831 int 
00832 vizTraceTool::IterateTraceIter(int amt) 
00833 {
00834   TAU_PROFILE("vizTraceTool::IterateTraceIter()", "int (int )", TAU_VIZ);
00835   if (amt == 1) {
00836     traceIter++;
00837   } else {
00838     traceIter = traceIter + amt;
00839   }
00840 
00841   return traceIter;
00842 }
00843 
00844 
00846 
00847 SphereTool::SphereTool(void *param_readtool, RenderTool *param_rendertool) {
00848   TAU_PROFILE("SphereTool::SphereTool()", "void (void *, RenderTool * )", 
00849     TAU_VIZ);
00850 
00851   RenderTool *rendertool;
00852   int dims[3];
00853   float origin[3], aspect[3];
00854   float range[2];
00855 
00856   vtkPolyMapper *glyphMapper;
00857   vtkActor *vtk_actor;
00858   vtkPolyData *pt;
00859 
00860   traceCollection = new vtkCollection();
00861 
00862   SetUpdatePolicy(Al);
00863   FilterToolInit(param_readtool, param_rendertool);
00864   rendertool = GetRenderTool();
00865 
00866   ReadParticleTool *readParticleTool;
00867   readParticleTool = (ReadParticleTool *)GetReadTool();
00868   
00869   readParticleTool->GetAllValues(dims,origin,aspect,range);
00870   SetAllValues(dims,origin,aspect,range);
00871 
00872   sphere = new vtkSphereSource;
00873   sphere->SetRadius(1.0);
00874   sphere->SetThetaResolution(1.0);
00875   sphere->SetPhiResolution(1.0);
00876 
00877   if (traceNumber >= 1) {
00878     apd = new vtkAppendPolyData;
00879 
00880     pt = new vtkPolyData(*readParticleTool->GetOutput());
00881     apd->AddInput(pt);
00882     traceCollection->AddItem(pt);
00883 
00884     glyph = new vtkGlyph3D;
00885     glyph->SetSource(sphere->GetOutput());
00886     glyph->SetInput(apd->GetOutput());
00887     
00888     IterateTraceIter();
00889     //cout << "traceIter = " << traceIter << endl;
00890    } 
00891   
00892   glyph->ScalingOff();
00893 
00894   // Now map glyphs
00895   glyphMapper = GetPolyMapper();
00896     glyphMapper->SetScalarRange(range);
00897     glyphMapper->SetInput(glyph->GetOutput());
00898 
00899   vtk_actor = GetActor();
00900     vtk_actor->SetMapper(glyphMapper);
00901 
00902   rendertool->AddActors(vtk_actor);
00903   rendertool->Render();
00904 }
00905 
00906 SphereTool::~SphereTool() {
00907   TAU_PROFILE("SphereTool::~SphereTool()", "void ()", TAU_VIZ);
00908   delete glyph;
00909   delete sphere;
00910 }
00911 
00912 vtkSphereSource*
00913 SphereTool::GetSphereSource() {
00914   TAU_PROFILE("SphereTool::GetSphereSource()", "vtkSphereSource * ()", TAU_VIZ);
00915   return sphere;
00916 }
00917 
00918 
00920 
00921 vizVectorTool::vizVectorTool()
00922 {
00923   tubeArrow = 0;// set to 1 to make arrows out of tubes
00924   
00925   if (!(vectorRepPolyData = new vtkPolyData))
00926     cerr << "Problem allocating vectorRepPolyData" << endl;
00927 
00928   vectGlyph = NULL;
00929   arrowTubeRadius = 0.05;
00930   numTubeFacets = 3;
00931 }
00932 
00933 vizVectorTool::~vizVectorTool()
00934 {
00935   delete vectorRepPolyData;
00936   if (vectGlyph)
00937     delete vectGlyph;
00938 }
00939 
00940 void 
00941 vizVectorTool::SetScaleFactor(float scaleFact) 
00942 {
00943   TAU_PROFILE("vizVectorTool::SetScaleFactor()", "void (float )", TAU_VIZ);
00944   if (scaleFact>=0) {
00945     scaleFactor = scaleFact;
00946     vectGlyph->SetScaleFactor(scaleFactor);
00947   } else {
00948     cerr << "Scale Factor must be greater than zero" << endl;
00949   }
00950 }
00951 
00952 void 
00953 vizVectorTool::SetScaleByValue(int scaleByVal) 
00954 {
00955   TAU_PROFILE("vizVectorTool::SetScaleByValue()", "void (int )", TAU_VIZ);
00956 
00957   if (scaleByVal==0 || scaleByVal==1) {
00958     scaleByValue = scaleByVal;
00959     vectGlyph->SetScaleMode(scaleByValue);
00960   } else {
00961     cerr << "scale By Value must be either 0 (scale) or 1 (vector)" << endl;
00962   }
00963 }
00964 
00965 void
00966 vizVectorTool::FlipTubeArrowFlag() 
00967 {
00968 
00969   tubeArrow = (tubeArrow == 1 ? 0:1);
00970 //   if (tubeArrow==1) {
00971 //     tubeArrow = 0;
00972 //   } else if (tubeArrow==0) {
00973 //     tubeArrow = 1;
00974 //   }
00975   
00976   delete vectorRepPolyData;
00977   MakeUnitArrowPolyData(vectorRepPolyData);
00978   vectGlyph->SetSource(vectorRepPolyData);
00979   vectGlyph->Update();
00980 }
00981 
00982 void
00983 vizVectorTool::SetArrowTubeRadius(float rad)
00984 {
00985   if (rad>=0) {
00986     arrowTubeRadius = rad;
00987   }
00988 
00989   delete vectorRepPolyData;
00990   MakeUnitArrowPolyData(vectorRepPolyData);
00991   vectGlyph->SetSource(vectorRepPolyData);
00992   vectGlyph->Update();
00993 }
00994 
00995 void
00996 vizVectorTool::SetNumberOfTubeFacets(int facets)
00997 {
00998   if (facets >= 3)
00999     numTubeFacets = facets;
01000 
01001   delete vectorRepPolyData;
01002   MakeUnitArrowPolyData(vectorRepPolyData);
01003   vectGlyph->SetSource(vectorRepPolyData);
01004   vectGlyph->Update();
01005 }
01006 
01007 float
01008 vizVectorTool::GetScaleFactor() const 
01009 {
01010   TAU_PROFILE("vizVectorTool::GetScaleFactor()", "float ()", TAU_VIZ);
01011   return scaleFactor;
01012 }
01013 
01014 int 
01015 vizVectorTool::GetScaleByValue() const 
01016 {
01017   TAU_PROFILE("vizVectorTool::GetScaleByValue()", "int ()", TAU_VIZ);
01018   return scaleByValue;
01019 }
01020 
01021 int 
01022 vizVectorTool::GetTubeArrowFlag() const
01023 {
01024   return tubeArrow;
01025 }
01026 
01027 float
01028 vizVectorTool::GetArrowTubeRadius() const
01029 {
01030   return arrowTubeRadius;
01031 }
01032 
01033 int
01034 vizVectorTool::GetNumberOfTubeFacets() const
01035 {
01036   return numTubeFacets;
01037 }
01038 
01039 void 
01040 vizVectorTool::MakeUnitArrowPolyData(vtkPolyData *&arrowPolyData)
01041 {
01042   TAU_PROFILE("vizVectorTool::MakeUnitArrowPolyData()", "void (vtkPolyData * )",
01043     TAU_VIZ);
01044   // vtkPolyData requires points and 
01045   // connectivity information. The points
01046   // are provided by vtFloatPoints and 
01047   // the connectivity is provided by a vtkCellArray
01048   vtkCellArray   *lines;
01049   vtkFloatPoints *points;
01050   vtkPolyData    *arrowLinePolyData;
01051   vtkTubeFilter  *arrowTubeFilter;
01052 
01053   int i;
01054   // Create the arrays that define the end points of the
01055   // lines that make the arrow, and create the connectivity that
01056   // produces an arrow using those points
01057   static float x[6][3]={{0,0,0}, 
01058                         {1,0,0}, 
01059                         {0.8,0.15,0.0}, 
01060                         {0.8,-0.075, 0.13}, 
01061                         {0.8,-0.075,-0.13}  };
01062 
01063   static int pts[4][2]={0,1, 1,2, 1,3, 1,4};
01064 
01065   points           = new vtkFloatPoints(4);
01066   lines            = new vtkCellArray;
01067 
01068   for (i=0; i<5; i++) points->InsertPoint( i, x[i]);
01069   for (i=0; i<4; i++) lines->InsertNextCell( 2, pts[i]);
01070 
01071   arrowLinePolyData = new vtkPolyData;
01072     arrowLinePolyData->SetPoints(points);
01073     points->Delete();
01074     arrowLinePolyData->SetLines(lines);
01075     lines->Delete();
01076 
01077   if (tubeArrow) {
01078     arrowTubeFilter = new vtkTubeFilter;
01079       arrowTubeFilter->SetInput(arrowLinePolyData);
01080       arrowTubeFilter->SetRadius(arrowTubeRadius);
01081       arrowTubeFilter->SetVaryRadius(VTK_VARY_RADIUS_OFF);
01082       arrowTubeFilter->SetNumberOfSides(numTubeFacets);
01083     
01084       arrowTubeFilter->Update();
01085       arrowPolyData = new vtkPolyData(*arrowTubeFilter->GetOutput());
01086       vectorRepPolyData->Update();
01087       arrowTubeFilter->Delete();
01088       arrowLinePolyData->Delete();
01089 
01090   } else {
01091     vectorRepPolyData = arrowLinePolyData;
01092   }
01093 
01094   arrowPolyData->BuildCells();
01095 }
01096 
01098 
01099 vizVectorFieldTool::vizVectorFieldTool() 
01100 {
01101   TAU_PROFILE("vizVectorFieldTool::vizVectorFieldTool()", "void ()", TAU_VIZ);
01102 
01103 };
01104 
01105 vizVectorFieldTool::vizVectorFieldTool(void *param_readtool, RenderTool *param_rendertool) {
01106   TAU_PROFILE("vizVectorFieldTool::vizVectorFieldTool()", 
01107     "void (void *, RenderTool *)", TAU_VIZ);
01108 
01109   RenderTool       *rendertool;
01110   ReadFieldTool    *readFieldTool; // reader of vtkStructuredPointData
01111   vtkPolyMapper    *vectFieldMapper;
01112   vtkActor         *vectFieldActor;
01113 
01114   FilterToolInit(param_readtool, param_rendertool);
01115   rendertool = GetRenderTool();
01116   readFieldTool = (ReadFieldTool *)GetReadTool();
01117 
01118   scaleFactor = 1.0;
01119   // Check the FieldTool data to see if it contains 
01120   // vector information. If yes, create the vector
01121   // field glyph; if not, report an error
01122   if (readFieldTool->GetOutput()->GetPointData()->GetVectors()) {
01123 
01124     //    vectorRepPolyData = new vtkPolyData;
01125 
01126     // make vtkPolyData that defines the shape of a
01127     // unit arrow, to use as the glyph source
01128     MakeUnitArrowPolyData(vectorRepPolyData);
01129 
01130     // make vectorField glyph
01131     vectGlyph = new vtkGlyph3D;
01132      vectGlyph->SetInput(readFieldTool->GetOutput());
01133      vectGlyph->SetSource(vectorRepPolyData);
01134      vectGlyph->OrientOn();
01135      vectGlyph->UseVector();
01136      vectGlyph->ScaleByVector();
01137      vectGlyph->SetScaleFactor(scaleFactor);
01138      // Set vtkPolyMapper to the vtkPolyMapper allocated
01139      // for this FilterTool, and give it the field glyph data
01140     vectFieldMapper = GetPolyMapper();
01141      vectFieldMapper->SetInput(vectGlyph->GetOutput());
01142      // Set actor to point to the actor allocated
01143      // for this FilterTool
01144     vectFieldActor = GetActor();
01145      vectFieldActor->SetMapper(vectFieldMapper);
01146 
01147      rendertool->AddActors(vectFieldActor);
01148      rendertool->Render();
01149   } else {
01150     cerr << "vtkStructuredPointData contains no vtkVector data" << endl;
01151   }
01152 }
01153 
01154 vizVectorFieldTool::~vizVectorFieldTool()
01155 {
01156   TAU_PROFILE("vizVectorFieldTool::~vizVectorFieldTool()", "void ()", TAU_VIZ);
01157 }
01158 
01159 
01161 
01162 vizVectorParticleTool::vizVectorParticleTool() 
01163 {
01164   TAU_PROFILE("vizVectorParticleTool::vizVectorParticleTool()", "void ()", 
01165     TAU_VIZ);
01166 };
01167 
01168 vizVectorParticleTool::vizVectorParticleTool(void *param_readtool, RenderTool *param_rendertool) {
01169   TAU_PROFILE("vizVectorParticleTool::vizVectorParticleTool()", 
01170     "void (void *, RenderTool *)", TAU_VIZ);
01171 
01172   RenderTool          *rendertool;
01173   ReadParticleTool    *readParticleTool; // reader of vtkPolyData
01174   vtkPolyMapper       *vectParticleMapper;
01175   vtkActor            *vectParticleActor;
01176 
01177   SetUpdatePolicy(Al);
01178   FilterToolInit(param_readtool, param_rendertool);
01179   rendertool = GetRenderTool();
01180   readParticleTool = (ReadParticleTool *)GetReadTool();
01181 
01182   scaleFactor = 1.0;
01183   // Check the ParticleTool data to see if it contains 
01184   // vector information. If yes, create the vector
01185   // field glyph; if not, report an error
01186   if (readParticleTool->GetOutput()->GetPointData()->GetVectors()) {
01187 
01188     //    vectorRepPolyData = new vtkPolyData;
01189     // make vtkPolyData that defines the shape of a
01190     // unit arrow, to use as the glyph source
01191 
01192     MakeUnitArrowPolyData(vectorRepPolyData);
01193 
01194     // make vector glyph
01195     if (traceNumber >= 1) {
01196       vtkPolyData *pt;
01197       apd = new vtkAppendPolyData;
01198 
01199       pt = new vtkPolyData(*readParticleTool->GetOutput());
01200       apd->AddInput(pt);
01201       traceCollection->AddItem(pt);
01202 
01203       vectGlyph = new vtkGlyph3D;
01204         vectGlyph->SetInput(apd->GetOutput());
01205         vectGlyph->SetSource(vectorRepPolyData);
01206         vectGlyph->OrientOn();
01207         vectGlyph->UseVector();
01208         vectGlyph->ScaleByVector();
01209         vectGlyph->SetScaleFactor(scaleFactor);
01210         IterateTraceIter();
01211     }
01212 
01213      // Set vtkPolyMapper to the vtkPolyMapper allocated
01214      // for this FilterTool, and give it the field glyph data
01215     vectParticleMapper = GetPolyMapper();
01216      vectParticleMapper->SetInput(vectGlyph->GetOutput());
01217      vectParticleMapper->ScalarsVisibleOff(); // So that the color can be set in the actor
01218      // Set actor to point to the actor allocated
01219      // for this FilterTool
01220     vectParticleActor = GetActor();
01221      vectParticleActor->SetMapper(vectParticleMapper);
01222      vectParticleActor->GetProperty()->SetColor(1.0, 0.0, 0.0);
01223 
01224      rendertool->AddActors(vectParticleActor);
01225      rendertool->Render();
01226   } else {
01227     cerr << "vtkStructuredPointData contains no vtkVector data" << endl;
01228   }
01229 }
01230 
01231 vizVectorParticleTool::~vizVectorParticleTool()
01232 {
01233   TAU_PROFILE("vizVectorParticleTool::~vizVectorParticleTool()", "void ()", 
01234     TAU_VIZ);
01235 }
01236 
01237 
01239 
01240 vizAxesTool::vizAxesTool() 
01241 {
01242   TAU_PROFILE("vizAxesTool::vizAxesTool()", "void ()", TAU_VIZ);
01243 }
01244 
01246 vizAxesTool::vizAxesTool(void *param_readtool, RenderTool *param_rendertool) {
01247   TAU_PROFILE("vizAxesTool::vizAxesTool()", "void (void *, RenderTool * )", 
01248     TAU_VIZ);
01249 
01250   RenderTool     *renderTool;
01251 
01252   vtkPolyMapper  *axesMapper;
01253   vtkActor       *axesActor;
01254 
01255   FilterToolInit(param_readtool, param_rendertool);
01256   renderTool = GetRenderTool();
01257 
01258   if (!GetMaxSideLenOfGlobalBoundingBox(renderTool, scaleFactor)) {
01259     scaleFactor = 1;
01260   }
01261 
01262   axes = new vtkAxes;
01263     axes->SetScaleFactor(scaleFactor);               // SCALE
01264   axesMapper = GetPolyMapper();
01265     axesMapper->SetInput(axes->GetOutput());
01266   axesActor = GetActor();
01267     axesActor->SetMapper(axesMapper);
01268     axesActor->GetProperty()->SetColor(1, 0, 0);
01269     axesActor->GetProperty()->SetAmbient(0.5);
01270     axesActor->GetProperty()->SetDiffuse(0.1);
01271     axesActor->GetProperty()->SetSpecular(0.1);
01272     axesActor->SetScale(1,1,1);
01273 
01274   renderTool->AddActors(axesActor);
01275 }
01277 
01279 vizAxesTool::~vizAxesTool() 
01280 {
01281   TAU_PROFILE("vizAxesTool::~vizAxesTool()", "void ()", TAU_VIZ);
01282   delete axes;
01283 }
01284 
01285 int 
01286 vizAxesTool::SetScaleFactor(float scaleFact) 
01287 {
01288   TAU_PROFILE("vizAxesTool::SetScaleFactor()", "int (float )", TAU_VIZ);
01289   scaleFactor = scaleFact;
01290   axes->SetScaleFactor(scaleFactor);               // SCALE
01291   return 1;
01292 }
01293 
01294 float
01295 vizAxesTool::GetScaleFactor() const
01296 {
01297   TAU_PROFILE("vizAxesTool::GetScaleFactor()", "float ()", TAU_VIZ);
01298   return scaleFactor;
01299 }
01300 
01301 int
01302 vizAxesTool::GetMaxSideLenOfGlobalBoundingBox(RenderTool *ren, float& maxSide)
01303 {
01304   TAU_PROFILE("vizAxesTool::GetMaxSideLenOfGlobalBoundingBox()", 
01305     "int (RenderTool *, float )", TAU_VIZ);
01306   float    bounds[6];
01307   float    side[3];
01308   int      success = 0;
01309   
01310   if (GetGlobalBoundingBox(ren, bounds)) {
01311     // get the lengths of the bounding box sides
01312     side[0] = bounds[1] - bounds[0];
01313     side[1] = bounds[3] - bounds[2];
01314     side[2] = bounds[5] - bounds[4];
01315 
01316     // find the maximum extent (side) of the 
01317     // bounding box (i.e. the length of the 
01318     // longest side of the bounding box
01319     if (side[0] > side[1]) {
01320       maxSide = side[0];
01321     } else {
01322       maxSide = side[1];
01323     }
01324     if (side[2] > maxSide) {
01325       maxSide = side[2];
01326     }
01327     success = 1;
01328   }
01329   return success;
01330 }
01331 
01332 int
01333 vizAxesTool::GetGlobalBoundingBox(RenderTool *ren, float allBounds[6])
01334 {
01335   TAU_PROFILE("vizAxesTool::GetGlobalBoundingBox()", 
01336     "int (RenderTool *, float )", TAU_VIZ);
01337   vtkVolume          *aVolume;
01338   vtkActor           *anActor;
01339   float              *bounds;
01340   int                 nothingVisible = 1;
01341   vtkActorCollection *Actors;
01342   vtkVolumeRenderer  *VolumeRenderer;
01343   int                 success = 0;
01344 
01345   allBounds[0] = allBounds[2] = allBounds[4] = VTK_LARGE_FLOAT;
01346   allBounds[1] = allBounds[3] = allBounds[5] = -VTK_LARGE_FLOAT;
01347 
01348   // get pointer to actors assigned to the vtkRenderer (ren)
01349   Actors = ren->GetRenderer()->GetActors();
01350 
01351   // loop through actors (and their parts)
01352   for ( Actors->InitTraversal(); (anActor = Actors->GetNextItem()); )
01353     {
01354     // if it's invisible, or has no geometry, we can skip the rest 
01355       if ( anActor->GetVisibility() ) { nothingVisible = 0;
01356         bounds = anActor->GetBounds();
01357 
01358         if (bounds[0] < allBounds[0]) allBounds[0] = bounds[0]; 
01359         if (bounds[1] > allBounds[1]) allBounds[1] = bounds[1]; 
01360         if (bounds[2] < allBounds[2]) allBounds[2] = bounds[2]; 
01361         if (bounds[3] > allBounds[3]) allBounds[3] = bounds[3]; 
01362         if (bounds[4] < allBounds[4]) allBounds[4] = bounds[4]; 
01363         if (bounds[5] > allBounds[5]) allBounds[5] = bounds[5]; 
01364       }
01365     }
01366 
01367   // loop through volumes if any
01368   if (ren->GetRenderer()->GetVolumeRenderer())
01369     {
01370       // Get pointer to volumes being rendered by render
01371       VolumeRenderer = ren->GetRenderer()->GetVolumeRenderer();
01372       for (VolumeRenderer->GetVolumes()->InitTraversal(); 
01373          (aVolume = VolumeRenderer->GetVolumes()->GetNextItem()); )
01374       {
01375       // if it's invisible, we can skip the rest 
01376       if ( aVolume->GetVisibility() )
01377         {
01378         nothingVisible = 0;
01379         bounds = aVolume->GetBounds();
01380         
01381         if (bounds[0] < allBounds[0]) allBounds[0] = bounds[0]; 
01382         if (bounds[1] > allBounds[1]) allBounds[1] = bounds[1]; 
01383         if (bounds[2] < allBounds[2]) allBounds[2] = bounds[2]; 
01384         if (bounds[3] > allBounds[3]) allBounds[3] = bounds[3]; 
01385         if (bounds[4] < allBounds[4]) allBounds[4] = bounds[4]; 
01386         if (bounds[5] > allBounds[5]) allBounds[5] = bounds[5]; 
01387         }
01388       }
01389     }
01390 
01391   //  if ( ren->NewVolumeRenderer )
01392   //    {
01393     // Add bounds code!!!
01394 
01395   //    }
01396 
01397   if ( nothingVisible )
01398     {
01399       cout << "No Actors to bound" << endl;
01400     } else {
01401       success = 1;
01402     }
01403 
01404   return success;
01405 }
01406 
01407 
01409 
01410 vizParticleLineTraceTool::vizParticleLineTraceTool(void *param_readtool, 
01411                                                    RenderTool *param_rendertool) {
01412   TAU_PROFILE("SphereTool::SphereTool()", "void (void *, RenderTool * )", 
01413     TAU_VIZ);
01414 
01415   RenderTool      *rendertool;
01416   int              dims[3];
01417   float origin[3], aspect[3];
01418   float            range[2];
01419   vtkPolyMapper   *linesTraceMapper;
01420   vtkActor        *linesActor;
01421 
01422   traceNumber = 10;
01423   tubeLines = 0;
01424   SetUpdatePolicy(Al);
01425   FilterToolInit(param_readtool, param_rendertool);
01426   rendertool = GetRenderTool();
01427 
01428   ReadParticleTool *readParticleTool;
01429   readParticleTool = (ReadParticleTool *)GetReadTool();
01430   
01431   readParticleTool->GetAllValues(dims,origin,aspect,range);
01432   SetAllValues(dims,origin,aspect,range);
01433 
01434   // Set the newPolyData to the incoming PolyData when
01435   // first constructed. Since no data for currentPolyData
01436   // set initially to NULL
01437 
01438   if (!(tubeFilter = new vtkTubeFilter))
01439     cerr << "Problem allocating tubeFilter" << endl;
01440 
01441   newPolyData = new vtkPolyData(*readParticleTool->GetOutput());
01442   currentPolyData = NULL;
01443 
01444   linesTraceMapper = GetPolyMapper();
01445     linesTraceMapper->SetInput(apd->GetOutput());
01446 
01447   linesActor = GetActor();
01448     linesActor->SetMapper(linesTraceMapper);
01449 
01450   rendertool->AddActors(linesActor);
01451   rendertool->Render();
01452 }
01453 
01454 vizParticleLineTraceTool::~vizParticleLineTraceTool()
01455 {
01456   currentPolyData->Delete();
01457   newPolyData->Delete();
01458 }
01459 
01460 void     
01461 vizParticleLineTraceTool::MakeAndAppendNewLines(vtkPolyData *newPD)
01462 {
01463   int               i;
01464   int               newNumCells;
01465   vtkPoints        *currentPDPoints;
01466   vtkPoints        *newPDPoints;
01467   float            *currentFloat;
01468   float            *newFloat;
01469   vtkFloatPoints   *linePoints        = new vtkFloatPoints(2);
01470   vtkCellArray     *lineArray         = new vtkCellArray;
01471   int               pointId           = 0;
01472   int               connection[2];
01473   vtkPolyData      *newLinesPolyData  = new vtkPolyData;
01474 
01475   // Two sets of PolyData are required to make a set of lines.
01476   // The the currentPolyData is the polyData from the previous
01477   // time step and newPolyData is the polyData from the new
01478   // time step being added 
01479 
01480   // If this is the first time that this function is called, the
01481   // current PolyData should not be deleted. 
01482   // It should be deleted there after.
01483   if (currentPolyData != NULL) {
01484     currentPolyData->Delete();
01485     currentPolyData = newPolyData;
01486     newPolyData = new vtkPolyData;
01487     newPolyData->CopyStructure(newPD);
01488 
01489   } else {
01490     currentPolyData = newPolyData;
01491     newPolyData = new vtkPolyData;
01492     newPolyData->CopyStructure(newPD);
01493   }
01494 
01495   newPolyData->Update();
01496   currentPolyData->Update();
01497   newPolyData->BuildCells();
01498 
01499   // Get the points from each PolyData set
01500   currentPDPoints = currentPolyData->GetPoints(); // polyData's points
01501   newPDPoints     = newPolyData->GetPoints();
01502   newNumCells     = newPDPoints->GetNumberOfPoints();  // number of cells
01503 
01504   // Get the idInfo from the newPD that tells which index
01505   // of the currentPolyData has the data corresponding to 
01506   // the same particle in the new step
01507   vizPointData          *newIdInfo;
01508   newIdInfo = (vizPointData*)(newPD->GetPointData()->GetUserDefined());
01509   vtkIntScalars *ids = newIdInfo->GetIds();
01510   int currentId = 0;
01511 
01512   // Extract point pairs from (one from current and one form new) 
01513   // point sets and form lines for each point id that exists in
01514   // both point sets
01515   for (i=0; i<newNumCells; i++) {
01516     currentId = static_cast<int>( ids->GetScalar(i) );
01517                                    // get the id of in currentPDPoints
01518                                    // that contains the data cooresponding
01519                                    // to the i'th point in the new data
01520 
01521     if (currentId != -1) { // Check if the particle in newPD is
01522                            // new and therefore does not have a 
01523                            // corresponding currentPD point value
01524 
01525       // Get pointers to the float positions where the particle
01526       // was on the last time step (currentFloat), and where the 
01527       // particle will be on the new time step
01528       currentFloat = currentPDPoints->GetPoint(currentId);
01529       newFloat = newPDPoints->GetPoint(i);
01530         
01531       // Add the currentFloat and newFlaot to the
01532       // linePoints and add the point ids to the 
01533       // lineArray to designate the two points as connected
01534       connection[0] = pointId;
01535       linePoints->InsertPoint(pointId++, currentFloat);
01536 
01537       connection[1] = pointId;
01538       linePoints->InsertPoint(pointId++, newFloat);
01539 
01540       lineArray->InsertNextCell( 2, connection);
01541     }
01542   }
01543   
01544   newLinesPolyData->SetPoints(linePoints);
01545   linePoints->Delete();
01546   newLinesPolyData->SetLines(lineArray);
01547   lineArray->Delete();
01548 
01549   if (tubeLines) {
01550     //    TubeIt(newLinesPolyData);
01551     tubeFilter->SetInput(newLinesPolyData);
01552     tubeFilter->SetRadius(0.05);
01553     tubeFilter->SetVaryRadius(VTK_VARY_RADIUS_OFF);
01554     tubeFilter->SetNumberOfSides(3);
01555     tubeFilter->Update();
01556 
01557     AppendPolyData(tubeFilter->GetOutput());
01558     //    tubeFilter->Delete();
01559   } else {
01560       AppendPolyData(newLinesPolyData);
01561   }
01562 }
01563 
01564 void
01565 vizParticleLineTraceTool::TubeIt(vtkPolyData *polyLines)
01566 {
01567   tubeFilter->SetInput(polyLines);
01568   tubeFilter->SetRadius(0.05);
01569   tubeFilter->SetVaryRadius(VTK_VARY_RADIUS_OFF);
01570   tubeFilter->SetNumberOfSides(3);
01571   tubeFilter->Update();
01572 }
01573 
01574 void
01575 vizParticleLineTraceTool::FlipTubeLinesFlag() 
01576 {
01577   tubeLines = (tubeLines == 1 ? 0:1);
01578 }
01579 
01581 
01582 vizPointData::vizPointData()
01583 {
01584   ids = new vtkIntScalars;
01585 }
01586 
01587 vizPointData::~vizPointData()
01588 {
01589   delete ids;
01590 }
01591 
01592 vtkIntScalars*
01593 vizPointData::GetIds()
01594 {
01595   return ids;
01596 }
01597 
01598 
01600 
01601 vizStructuredFieldDataType::vizStructuredFieldDataType() : type(ACLVIS_UNKNOWN),
01602                              numPoints(0)
01603 {
01604 }
01605 
01606 vizStructuredFieldDataType::vizStructuredFieldDataType(unsigned numPts, int ptDataType)
01607 {
01608   InitData(numPts, ptDataType);
01609 }
01610 
01611 vizStructuredFieldDataType::~vizStructuredFieldDataType() 
01612 {
01613 }
01614 
01615 int       // See Tool.h for explanation
01616 vizStructuredFieldDataType::InitData(unsigned numPts, int ptDataType) {
01617 
01618    if (numPts > 0) {
01619      numPoints  = numPts;
01620    } else {
01621      cerr << "numPts must be greater than zero" << endl;
01622      numPoints = 0;
01623      //     return 0;
01624    }
01625 
01626 
01627   // if ptDataType is a leagal value != 0 (ACLVIS_UNKNOWN),
01628   // initialize the point data and allocate memory for
01629   // the data
01630   if (ptDataType <= 3 && ptDataType > 0) {
01631     InitPointDataType(ptDataType);
01632   }
01633 
01634   return 1;
01635 }
01636 
01637 int
01638 vizStructuredFieldDataType::InitPointDataType(int ptDataType)
01639 {
01640   int success = 0;
01641   if ((ptDataType <= 3) && (ptDataType >= 0)) {
01642    type = ptDataType;
01643   }
01644 
01645   //  if (numPoints > 0) {
01646     switch (type) {
01647     case ACLVIS_SCALAR:
01648       scalars = new vtkFloatScalars;
01649       scalars->Allocate(numPoints);
01650       success = 1;
01651       break;
01652     case ACLVIS_VECTOR:
01653       vectors = new vtkFloatVectors;
01654       vectors->Allocate(numPoints);
01655       success = 1;
01656       break;
01657     case ACLVIS_TENSOR:
01658       tensors = new vtkFloatTensors;
01659       //tensors->Allocate(numPts);
01660       success = 1;
01661       break;
01662     }
01663     if (success) {
01664       isPointData = 1;
01665     }
01666     //  }
01667   // cout << "InitPointDataType()" << endl;
01668   return success;
01669 }
01670 
01671 int 
01672 vizStructuredFieldDataType::SetPointData(vtkDataSet *dataSet) 
01673 {
01674   int success = 0;
01675 
01676   if (isPointData) {
01677     switch (type) {
01678     case ACLVIS_SCALAR:
01679       scalars->WrotePtr();
01680       if (dataSet != 0)
01681         dataSet->GetPointData()->SetScalars(scalars);
01682       scalars->Delete();
01683       success = 1;
01684       break;
01685     case ACLVIS_VECTOR:
01686       vectors->WrotePtr();
01687       if (dataSet != 0)
01688         dataSet->GetPointData()->SetVectors(vectors);
01689       vectors->Delete();
01690       success = 1;
01691       break;
01692     case ACLVIS_TENSOR:
01693       tensors->WrotePtr();
01694       if (dataSet != 0)
01695         dataSet->GetPointData()->SetTensors(tensors);
01696       tensors->Delete();
01697       success = 1;
01698       break;
01699     }
01700   }
01701   return success;
01702 }
01703 
01704 int
01705 vizStructuredFieldDataType::GetPointDataType() const
01706 {
01707    return type;
01708 }
01709 
01710 int
01711 vizStructuredFieldDataType::AddScalar(float sc)
01712 {
01713   int success = 0;
01714   if (type == ACLVIS_SCALAR) {
01715     scalars->InsertNextScalar(sc);
01716     success = 1;
01717   } else {
01718     cerr << "PointDataType is not scalar";
01719   }
01720   return success;
01721 }
01722 
01723 
01724 int   // no bounds checking (fast), but be careful
01725 vizStructuredFieldDataType::AddScalar(int index, float sc)
01726 {
01727   int success = 0;
01728   if (type == ACLVIS_SCALAR) {
01729     scalars->SetScalar(index, sc);
01730     success = 1;
01731   } else {
01732     cerr << "PointDataType is not scalar";
01733   }
01734   return success;
01735 }
01736 
01737 int
01738 vizStructuredFieldDataType::AddVector(float vect[3])
01739 {
01740   int success = 0;
01741   if (type == ACLVIS_VECTOR) {
01742     vectors->InsertNextVector(vect);
01743     success = 1;
01744   } else {
01745     cerr << "PointDataType is not vector";
01746   }
01747   return success;
01748 }
01749 
01750 int      // no bounds checking (fast), but be careful
01751 vizStructuredFieldDataType::AddVector(int index, float vect[3])
01752 {
01753   int success = 0;
01754   if (type == ACLVIS_VECTOR) {
01755     vectors->SetVector(index, vect);
01756     success = 1;
01757   } else {
01758     cerr << "PointDataType is not vector";
01759   }
01760   return success;
01761 }
01762 
01763 void*
01764 vizStructuredFieldDataType::GetPointData()
01765 {
01766   int success = 0;
01767 
01768   if (isPointData) {
01769     switch (type) {
01770     case ACLVIS_SCALAR:
01771       return scalars;
01772     case ACLVIS_VECTOR:
01773       return vectors;
01774     case ACLVIS_TENSOR:
01775       return tensors;
01776     }
01777   }
01778   return &success;
01779 }
01780 
01781 int
01782 vizStructuredFieldDataType::InsertFieldData(vtkDataSet *dataSet)
01783 {
01784   int success = 0;
01785 
01786   if (isPointData) {
01787     SetPointData(dataSet);
01788   }
01789 
01790   return success;
01791 }
01792 
01794 
01795 vizParticleDataType::vizParticleDataType() :  points(0),
01796                                               cellArray(0),
01797                                               isIdInfo(0)
01798 {
01799 }
01800 
01801 
01802 
01803 vizParticleDataType::vizParticleDataType(unsigned numPts, 
01804                                          int ptDataType, 
01805                                          int isIds)
01806 {
01807   // cout << "vizParticleDataType Constructor" << endl;
01808   InitData(numPts, ptDataType, isIds);
01809 }
01810 
01811 vizParticleDataType::~vizParticleDataType() 
01812 {
01813 }
01814 
01815 int       // See Tool.h for explanation
01816 vizParticleDataType::InitData(unsigned numPts, int ptDataType, int isIds) {
01817 
01818   if (numPts > 0) {
01819     numPoints  = numPts;
01820   } else {
01821     cerr << "numPts must be greater than 0";
01822     return 0;
01823   }
01824 
01825   // Initialize allocation for vtkPoints "points"
01826   points     = new vtkFloatPoints;
01827    points->Allocate(numPoints);
01828   cellArray  = new vtkCellArray;
01829    cellArray->Allocate(numPoints);
01830 
01831   // if ptDataType is a leagal value != 0 (ACLVIS_UNKNOWN),
01832   // initialize the point data and allocate memory for
01833   // the data
01834   if (ptDataType <= 3 && ptDataType > 0) {
01835     InitPointDataType(ptDataType);
01836   }
01837 
01838 
01839   // If there is idInfo initialize space for it
01840   if (isIds) {
01841     isIdInfo = 1;
01842     InitIdInfo();
01843   }
01844     
01845    // Pre set cellArray since they are only points
01846    // The cellArray is tells the vtkPolyData structure
01847    // the connectivity among the vtkPoints. 
01848    // Since I only want individual points, this
01849    // connectivity is just a bunch of single points
01850   cellArray->InsertNextCell(numPoints);
01851   for (int i=0; i < numPoints; ++i)
01852     cellArray->InsertCellPoint(i);
01853   
01854   // cout << "Data Initialized" << endl;
01855   return 1;
01856 }
01857 
01858 int 
01859 vizParticleDataType::InitIdInfo()
01860 {
01861   int success = 0;
01862 
01863   idInfo = new vizPointData;
01864   if (numPoints > 0) {
01865     idInfo->GetIds()->Allocate(numPoints);
01866 
01867     isIdInfo = 1;
01868     success = 1;
01869   }
01870   // cout << "InitIdInfo()" << endl;
01871   return success;
01872 }
01873 
01874 int
01875 vizParticleDataType::AddPoint(float pt[3])
01876 {
01877   points->InsertNextPoint(pt);
01878   return 1;
01879 }
01880 
01881 int     // no bounds checking (fast), but be careful
01882 vizParticleDataType::AddPoint(int index, float pt[3])
01883 {
01884   points->SetPoint(index,pt);
01885   return 1;
01886 }
01887 
01888 int
01889 vizParticleDataType::AddIdInfoVal(int idInf)
01890 {
01891   int success = 0;
01892   
01893   if (isIdInfo) {
01894     idInfo->GetIds()->InsertNextScalar(idInf);
01895     success = 1;
01896   } else {
01897     cerr << "no IdInfo Allocated";
01898   }
01899   return success;
01900 }
01901 
01902 int     // no bounds checking (fast), but be careful
01903 vizParticleDataType::AddIdInfoVal(int index, int idInf)
01904 {
01905   int success = 0;
01906   
01907   if (isIdInfo) {
01908     idInfo->GetIds()->SetScalar(index, idInf);
01909     success = 1;
01910   } else {
01911     cerr << "no IdInfo Allocated";
01912   }
01913   return success;
01914 }
01915 
01916 int
01917 vizParticleDataType::SetIdInfo(vtkDataSet *dataSet)
01918 {
01919   int success = 0;
01920   if (isIdInfo) {
01921     if (idInfo->GetIds() != NULL) {
01922       dataSet->GetPointData()->SetUserDefined(idInfo);
01923       success = 1;
01924     }
01925   }
01926   return success;
01927 }
01928 
01929 int 
01930 vizParticleDataType::SetPoints(vtkPolyData *polyData) {
01931   int success = 0;
01932   if (polyData != 0) {
01933     polyData->SetPoints(points);
01934     polyData->SetVerts(cellArray);
01935     polyData->BuildCells();
01936     success = 1;
01937   }
01938   points->Delete();
01939   cellArray->Delete();
01940   return success;
01941 }
01942 
01943 int
01944 vizParticleDataType::GetIsIdInfoFlag() const
01945 {
01946   return isIdInfo;
01947 }
01948 
01949 int
01950 vizParticleDataType::InsertParticleData(vtkPolyData *polyData)
01951 {
01952   int success = 0;
01953 
01954   if (points && cellArray) {
01955     SetPoints(polyData);
01956     success = 1;
01957   }
01958   if (isPointData) {
01959     SetPointData(polyData);
01960   }
01961   if (isIdInfo) {
01962     SetIdInfo(polyData);
01963   }
01964 
01965   return success;
01966 }
01967 
01968 /***************************************************************************
01969  * $RCSfile: Tool.cpp,v $   $Author: adelmann $
01970  * $Revision: 1.1.1.1 $   $Date: 2003/01/23 07:40:34 $
01971  * IPPL_VERSION_ID: $Id: Tool.cpp,v 1.1.1.1 2003/01/23 07:40:34 adelmann Exp $ 
01972  ***************************************************************************/

Generated on Fri Nov 2 01:25:54 2007 for IPPL by doxygen 1.3.5