00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026 #include "aclvis/Tool.h"
00027 #include "Profile/Profiler.h"
00028
00029
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
00073 updateCount++;
00074 break;
00075 case Al:
00076 updateTest = 1;
00077
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
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
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
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
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
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
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
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
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
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
00183
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
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
00273
00274 vtkIndent indent;
00275 vizData = new vizParticleDataType;
00276
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
00288
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
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
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
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
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
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
00562
00563
00564 rendertool->AddActors(vtk_actor);
00565 rendertool->Render();
00566 }
00567
00568 IsoSurfaceTool::~IsoSurfaceTool() {
00569 TAU_PROFILE("IsoSurfaceTool::~IsoSurfaceTool()", "void ()", TAU_VIZ);
00570
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
00626
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
00735 if (traceIter == traceNumber) {
00736 traceCollection->InitTraversal();
00737 stalePolyData = (vtkPolyData*)(traceCollection->GetNextItemAsObject());
00738 apd->RemoveInput(stalePolyData);
00739 traceCollection->RemoveItem(stalePolyData);
00740 IterateTraceIter(-1);
00741
00742
00743 } else if (traceIter > traceNumber) {
00744 CullStalePolyData();
00745 }
00746
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
00890 }
00891
00892 glyph->ScalingOff();
00893
00894
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;
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
00971
00972
00973
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
01045
01046
01047
01048 vtkCellArray *lines;
01049 vtkFloatPoints *points;
01050 vtkPolyData *arrowLinePolyData;
01051 vtkTubeFilter *arrowTubeFilter;
01052
01053 int i;
01054
01055
01056
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;
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
01120
01121
01122 if (readFieldTool->GetOutput()->GetPointData()->GetVectors()) {
01123
01124
01125
01126
01127
01128 MakeUnitArrowPolyData(vectorRepPolyData);
01129
01130
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
01139
01140 vectFieldMapper = GetPolyMapper();
01141 vectFieldMapper->SetInput(vectGlyph->GetOutput());
01142
01143
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;
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
01184
01185
01186 if (readParticleTool->GetOutput()->GetPointData()->GetVectors()) {
01187
01188
01189
01190
01191
01192 MakeUnitArrowPolyData(vectorRepPolyData);
01193
01194
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
01214
01215 vectParticleMapper = GetPolyMapper();
01216 vectParticleMapper->SetInput(vectGlyph->GetOutput());
01217 vectParticleMapper->ScalarsVisibleOff();
01218
01219
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);
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);
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
01312 side[0] = bounds[1] - bounds[0];
01313 side[1] = bounds[3] - bounds[2];
01314 side[2] = bounds[5] - bounds[4];
01315
01316
01317
01318
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
01349 Actors = ren->GetRenderer()->GetActors();
01350
01351
01352 for ( Actors->InitTraversal(); (anActor = Actors->GetNextItem()); )
01353 {
01354
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
01368 if (ren->GetRenderer()->GetVolumeRenderer())
01369 {
01370
01371 VolumeRenderer = ren->GetRenderer()->GetVolumeRenderer();
01372 for (VolumeRenderer->GetVolumes()->InitTraversal();
01373 (aVolume = VolumeRenderer->GetVolumes()->GetNextItem()); )
01374 {
01375
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
01392
01393
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
01435
01436
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
01476
01477
01478
01479
01480
01481
01482
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
01500 currentPDPoints = currentPolyData->GetPoints();
01501 newPDPoints = newPolyData->GetPoints();
01502 newNumCells = newPDPoints->GetNumberOfPoints();
01503
01504
01505
01506
01507 vizPointData *newIdInfo;
01508 newIdInfo = (vizPointData*)(newPD->GetPointData()->GetUserDefined());
01509 vtkIntScalars *ids = newIdInfo->GetIds();
01510 int currentId = 0;
01511
01512
01513
01514
01515 for (i=0; i<newNumCells; i++) {
01516 currentId = static_cast<int>( ids->GetScalar(i) );
01517
01518
01519
01520
01521 if (currentId != -1) {
01522
01523
01524
01525
01526
01527
01528 currentFloat = currentPDPoints->GetPoint(currentId);
01529 newFloat = newPDPoints->GetPoint(i);
01530
01531
01532
01533
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
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
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
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
01624 }
01625
01626
01627
01628
01629
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
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
01660 success = 1;
01661 break;
01662 }
01663 if (success) {
01664 isPointData = 1;
01665 }
01666
01667
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
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
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
01808 InitData(numPts, ptDataType, isIds);
01809 }
01810
01811 vizParticleDataType::~vizParticleDataType()
01812 {
01813 }
01814
01815 int
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
01826 points = new vtkFloatPoints;
01827 points->Allocate(numPoints);
01828 cellArray = new vtkCellArray;
01829 cellArray->Allocate(numPoints);
01830
01831
01832
01833
01834 if (ptDataType <= 3 && ptDataType > 0) {
01835 InitPointDataType(ptDataType);
01836 }
01837
01838
01839
01840 if (isIds) {
01841 isIdInfo = 1;
01842 InitIdInfo();
01843 }
01844
01845
01846
01847
01848
01849
01850 cellArray->InsertNextCell(numPoints);
01851 for (int i=0; i < numPoints; ++i)
01852 cellArray->InsertCellPoint(i);
01853
01854
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
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
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
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
01970
01971
01972