Changeset 3682
- Timestamp:
- Jun 10, 2013 12:21:22 AM (10 years ago)
- Location:
- trunk/packages/vizservers/vtkvis
- Files:
-
- 8 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/packages/vizservers/vtkvis/DataSet.cpp
r3680 r3682 185 185 } 186 186 } 187 if (ds->GetPointData()->GetScalars() != NULL) { 188 TRACE("Active point scalars: %s", ds->GetPointData()->GetScalars()->GetName()); 189 } 190 if (ds->GetPointData()->GetVectors() != NULL) { 191 TRACE("Active point vectors: %s", ds->GetPointData()->GetVectors()->GetName()); 192 } 187 193 } 188 194 if (ds->GetCellData() != NULL) { … … 200 206 ds->GetCellData()->GetAbstractArray(i)->GetNumberOfComponents()); 201 207 } 208 } 209 if (ds->GetCellData()->GetScalars() != NULL) { 210 TRACE("Active cell scalars: %s", ds->GetPointData()->GetScalars()->GetName()); 211 } 212 if (ds->GetCellData()->GetVectors() != NULL) { 213 TRACE("Active cell vectors: %s", ds->GetPointData()->GetVectors()->GetName()); 202 214 } 203 215 } … … 407 419 getBounds(bounds); 408 420 if (bounds[4] == bounds[5]) { 409 // Z = 0, XY plane421 // Zmin = Zmax, XY plane 410 422 if (plane != NULL) { 411 423 *plane = PLANE_XY; … … 415 427 return true; 416 428 } else if (bounds[0] == bounds[1]) { 417 // X = 0, ZY plane429 // Xmin = Xmax, ZY plane 418 430 if (plane != NULL) { 419 431 *plane = PLANE_ZY; … … 423 435 return true; 424 436 } else if (bounds[2] == bounds[3]) { 425 // Y = 0, XZ plane437 // Ymin = Ymax, XZ plane 426 438 if (plane != NULL) { 427 439 *plane = PLANE_XZ; -
trunk/packages/vizservers/vtkvis/LIC.cpp
r3621 r3682 21 21 #include <vtkImageMask.h> 22 22 #include <vtkImageCast.h> 23 #include <vtkDelaunay2D.h> 24 #include <vtkDelaunay3D.h> 25 #include <vtkTransform.h> 23 26 24 27 #include "LIC.h" … … 109 112 _lic->SetInputConnection(_volumeSlicer->GetOutputPort()); 110 113 } else { 111 // 2D image/ volume/uniform grid114 // 2D image/uniform grid 112 115 #ifdef USE_VTK6 113 116 _lic->SetInputData(ds); … … 120 123 } 121 124 _mapper->SetInputConnection(_lic->GetOutputPort()); 122 } else if (vtkPolyData::SafeDownCast(ds) == NULL) { 123 // structured grid, unstructured grid, or rectilinear grid 125 } else if (vtkPolyData::SafeDownCast(ds) == NULL || 126 _dataSet->isCloud() || 127 _dataSet->is2D()) { 128 // structured/rectilinear/unstructured grid, cloud or 2D polydata 124 129 if (_lic == NULL) { 125 130 _lic = vtkSmartPointer<vtkImageDataLIC2D>::New(); … … 140 145 _probeFilter = vtkSmartPointer<vtkProbeFilter>::New(); 141 146 142 if (!_dataSet->is2D()) { 143 // Sample a plane within the grid bounding box 147 PrincipalPlane plane; 148 double offset; 149 if (!_dataSet->is2D(&plane, &offset)) { 150 // 3D Data: Sample a plane within the bounding box 144 151 vtkSmartPointer<vtkCutter> cutter = vtkSmartPointer<vtkCutter>::New(); 145 152 if (_cutPlane == NULL) { … … 162 169 bounds[4] + (bounds[5]-bounds[4])/2.); 163 170 } 164 #ifdef USE_VTK6 165 cutter->SetInputData(ds); 166 #else 167 cutter->SetInput(ds); 168 #endif 171 172 if (_dataSet->isCloud()) { 173 // 3D cloud -- Need to mesh it before we can resample 174 vtkSmartPointer<vtkDelaunay3D> mesher = vtkSmartPointer<vtkDelaunay3D>::New(); 175 #ifdef USE_VTK6 176 mesher->SetInputData(ds); 177 #else 178 mesher->SetInput(ds); 179 #endif 180 cutter->SetInputConnection(mesher->GetOutputPort()); 181 } else { 182 #ifdef USE_VTK6 183 cutter->SetInputData(ds); 184 #else 185 cutter->SetInput(ds); 186 #endif 187 } 169 188 cutter->SetCutFunction(_cutPlane); 170 189 _probeFilter->SetSourceConnection(cutter->GetOutputPort()); 171 190 } else { 172 #ifdef USE_VTK6 173 _probeFilter->SetSourceData(ds); 174 #else 175 _probeFilter->SetSource(ds); 176 #endif 191 if (_dataSet->isCloud()) { 192 // 2D cloud -- Need to mesh it before we can resample 193 vtkSmartPointer<vtkDelaunay2D> mesher = vtkSmartPointer<vtkDelaunay2D>::New(); 194 if (plane == PLANE_ZY) { 195 vtkSmartPointer<vtkTransform> trans = vtkSmartPointer<vtkTransform>::New(); 196 trans->RotateWXYZ(90, 0, 1, 0); 197 if (offset != 0.0) { 198 trans->Translate(-offset, 0, 0); 199 } 200 mesher->SetTransform(trans); 201 } else if (plane == PLANE_XZ) { 202 vtkSmartPointer<vtkTransform> trans = vtkSmartPointer<vtkTransform>::New(); 203 trans->RotateWXYZ(-90, 1, 0, 0); 204 if (offset != 0.0) { 205 trans->Translate(0, -offset, 0); 206 } 207 mesher->SetTransform(trans); 208 } else if (offset != 0.0) { 209 // XY with Z offset 210 vtkSmartPointer<vtkTransform> trans = vtkSmartPointer<vtkTransform>::New(); 211 trans->Translate(0, 0, -offset); 212 mesher->SetTransform(trans); 213 } 214 #ifdef USE_VTK6 215 mesher->SetInputData(ds); 216 #else 217 mesher->SetInput(ds); 218 #endif 219 _probeFilter->SetSourceConnection(mesher->GetOutputPort()); 220 } else { 221 #ifdef USE_VTK6 222 _probeFilter->SetSourceData(ds); 223 #else 224 _probeFilter->SetSource(ds); 225 #endif 226 } 177 227 } 178 228 … … 239 289 _mapper->SetInputConnection(mask->GetOutputPort()); 240 290 } else { 241 // DataSet is a PolyData291 // DataSet is a 3D PolyData with cells 242 292 vtkPolyData *pd = vtkPolyData::SafeDownCast(ds); 243 293 assert(pd != NULL); -
trunk/packages/vizservers/vtkvis/Renderer.h
r3680 r3682 762 762 // Streamlines 763 763 764 void setStreamlinesColorMode(const DataSetId& id, 765 Streamlines::ColorMode mode, 766 const char *name, double range[2] = NULL); 767 768 void setStreamlinesColorMode(const DataSetId& id, 769 Streamlines::ColorMode mode, 770 DataSet::DataAttributeType type, 771 const char *name, double range[2] = NULL); 772 773 void setStreamlinesLength(const DataSetId& id, double length); 774 764 775 void setStreamlinesNumberOfSeedPoints(const DataSetId& id, int numPoints); 765 776 766 void setStreamlinesSeedToMeshPoints(const DataSetId& id); 777 void setStreamlinesSeedColor(const DataSetId& id, float color[3]); 778 779 void setStreamlinesSeedPointSize(const DataSetId& id, float size); 780 781 void setStreamlinesSeedToMeshPoints(const DataSetId& id, 782 int maxPoints = 500); 767 783 768 784 void setStreamlinesSeedToFilledMesh(const DataSetId& id, int numPoints); 769 785 770 786 bool setStreamlinesSeedToMeshPoints(const DataSetId& id, 771 char *data, size_t nbytes); 787 char *data, size_t nbytes, 788 int maxPoints = 500); 772 789 773 790 bool setStreamlinesSeedToFilledMesh(const DataSetId& id, … … 794 811 int numSides, int numPoints); 795 812 796 void setStreamlinesLength(const DataSetId& id, double length); 813 void setStreamlinesSeedVisibility(const DataSetId& id, bool state); 814 815 void setStreamlinesTerminalSpeed(const DataSetId& id, double speed); 797 816 798 817 void setStreamlinesTypeToLines(const DataSetId& id); … … 801 820 802 821 void setStreamlinesTypeToRibbons(const DataSetId& id, double width, double angle); 803 804 void setStreamlinesSeedVisibility(const DataSetId& id, bool state);805 806 void setStreamlinesColorMode(const DataSetId& id,807 Streamlines::ColorMode mode,808 const char *name, double range[2] = NULL);809 810 void setStreamlinesColorMode(const DataSetId& id,811 Streamlines::ColorMode mode,812 DataSet::DataAttributeType type,813 const char *name, double range[2] = NULL);814 815 void setStreamlinesSeedColor(const DataSetId& id, float color[3]);816 822 817 823 // Volumes -
trunk/packages/vizservers/vtkvis/RendererCmd.cpp
r3680 r3682 9348 9348 9349 9349 static int 9350 StreamlinesSeedPointSizeOp(ClientData clientData, Tcl_Interp *interp, int objc, 9351 Tcl_Obj *const *objv) 9352 { 9353 float size; 9354 if (GetFloatFromObj(interp, objv[3], &size) != TCL_OK) { 9355 return TCL_ERROR; 9356 } 9357 if (objc == 5) { 9358 const char *name = Tcl_GetString(objv[4]); 9359 g_renderer->setStreamlinesSeedPointSize(name, size); 9360 } else { 9361 g_renderer->setStreamlinesSeedPointSize("all", size); 9362 } 9363 return TCL_OK; 9364 } 9365 9366 static int 9350 9367 StreamlinesSeedRakeOp(ClientData clientData, Tcl_Interp *interp, int objc, 9351 9368 Tcl_Obj *const *objv) … … 9416 9433 {"points", 3, StreamlinesSeedPointsOp, 3, 4, "?dataSetName?"}, 9417 9434 {"polygon", 3, StreamlinesSeedPolygonOp, 12, 13, "centerX centerY centerZ normalX normalY normalZ angle radius numSides ?dataSetName?"}, 9435 {"ptsize", 2, StreamlinesSeedPointSizeOp, 3, 4, "size ?dataSetName?"}, 9418 9436 {"rake", 3, StreamlinesSeedRakeOp, 10, 11, "startX startY startZ endX endY endZ numPoints ?dataSetName?"}, 9419 9437 {"random", 3, StreamlinesSeedRandomOp, 4, 5, "numPoints ?dataSetName?"}, … … 9434 9452 } 9435 9453 return (*proc) (clientData, interp, objc, objv); 9454 } 9455 9456 static int 9457 StreamlinesTerminalSpeedOp(ClientData clientData, Tcl_Interp *interp, int objc, 9458 Tcl_Obj *const *objv) 9459 { 9460 double speed; 9461 if (Tcl_GetDoubleFromObj(interp, objv[2], &speed) != TCL_OK) { 9462 return TCL_ERROR; 9463 } 9464 if (objc == 4) { 9465 const char *name = Tcl_GetString(objv[3]); 9466 g_renderer->setStreamlinesTerminalSpeed(name, speed); 9467 } else { 9468 g_renderer->setStreamlinesTerminalSpeed("all", speed); 9469 } 9470 return TCL_OK; 9436 9471 } 9437 9472 … … 9492 9527 {"scale", 2, StreamlinesScaleOp, 5, 6, "sx sy sz ?dataSetName?"}, 9493 9528 {"seed", 2, StreamlinesSeedOp, 3, 14, "op params... ?dataSetName?"}, 9494 {"tubes", 1, StreamlinesTubesOp, 4, 5, "numSides radius ?dataSetName?"}, 9529 {"termspeed", 2, StreamlinesTerminalSpeedOp, 3, 4, "speed ?dataSetName?"}, 9530 {"tubes", 2, StreamlinesTubesOp, 4, 5, "numSides radius ?dataSetName?"}, 9495 9531 {"visible", 1, StreamlinesVisibleOp, 3, 4, "bool ?dataSetName?"} 9496 9532 }; -
trunk/packages/vizservers/vtkvis/RendererGraphicsObjs.cpp
r3680 r3682 2537 2537 2538 2538 /** 2539 * \brief Set the streamlines seed to points of the streamlines DataSet2540 */ 2541 void Renderer::setStreamlinesSeed ToMeshPoints(const DataSetId& id)2539 * \brief Set the streamlines seed point size (may be a no-op) 2540 */ 2541 void Renderer::setStreamlinesSeedPointSize(const DataSetId& id, float size) 2542 2542 { 2543 2543 StreamlinesHashmap::iterator itr; … … 2559 2559 2560 2560 do { 2561 itr->second->setSeedToMeshPoints(); 2561 itr->second->setSeedPointSize(size); 2562 } while (doAll && ++itr != _streamlines.end()); 2563 2564 _needsRedraw = true; 2565 } 2566 2567 /** 2568 * \brief Set the streamlines seed to points of the streamlines DataSet 2569 */ 2570 void Renderer::setStreamlinesSeedToMeshPoints(const DataSetId& id, 2571 int maxPoints) 2572 { 2573 StreamlinesHashmap::iterator itr; 2574 2575 bool doAll = false; 2576 2577 if (id.compare("all") == 0) { 2578 itr = _streamlines.begin(); 2579 if (itr == _streamlines.end()) 2580 return; 2581 doAll = true; 2582 } else { 2583 itr = _streamlines.find(id); 2584 } 2585 if (itr == _streamlines.end()) { 2586 ERROR("Streamlines not found: %s", id.c_str()); 2587 return; 2588 } 2589 2590 do { 2591 itr->second->setSeedToMeshPoints(maxPoints); 2562 2592 } while (doAll && ++itr != _streamlines.end()); 2563 2593 … … 2607 2637 */ 2608 2638 bool Renderer::setStreamlinesSeedToMeshPoints(const DataSetId& id, 2609 char *data, size_t nbytes) 2639 char *data, size_t nbytes, 2640 int maxPoints) 2610 2641 { 2611 2642 vtkSmartPointer<vtkDataSetReader> reader = vtkSmartPointer<vtkDataSetReader>::New(); … … 2640 2671 2641 2672 do { 2642 itr->second->setSeedToMeshPoints(dataSet );2673 itr->second->setSeedToMeshPoints(dataSet, maxPoints); 2643 2674 } while (doAll && ++itr != _streamlines.end()); 2644 2675 … … 2836 2867 } 2837 2868 2869 void Renderer::setStreamlinesTerminalSpeed(const DataSetId& id, double speed) 2870 { 2871 StreamlinesHashmap::iterator itr; 2872 2873 bool doAll = false; 2874 2875 if (id.compare("all") == 0) { 2876 itr = _streamlines.begin(); 2877 if (itr == _streamlines.end()) 2878 return; 2879 doAll = true; 2880 } else { 2881 itr = _streamlines.find(id); 2882 } 2883 if (itr == _streamlines.end()) { 2884 ERROR("Streamlines not found: %s", id.c_str()); 2885 return; 2886 } 2887 2888 do { 2889 itr->second->setTerminalSpeed(speed); 2890 } while (doAll && ++itr != _streamlines.end()); 2891 2892 sceneBoundsChanged(); 2893 _needsRedraw = true; 2894 } 2895 2838 2896 /** 2839 2897 * \brief Set Streamlines rendering to polylines for the specified DataSet -
trunk/packages/vizservers/vtkvis/Streamlines.cpp
r3680 r3682 32 32 #include <vtkTransformPolyDataFilter.h> 33 33 #include <vtkVertexGlyphFilter.h> 34 #include <vtkMaskPoints.h> 34 35 35 36 #include "Streamlines.h" … … 611 612 _streamTracer->Update(); 612 613 vtkPolyData *pd = _streamTracer->GetOutput(); 613 TRACE("Verts: %d Lines: %d Polys: %d Strips: %d", 614 DataSet::print(pd); 615 TRACE("Points: %d Verts: %d Lines: %d Polys: %d Strips: %d", 616 pd->GetNumberOfPoints(), 614 617 pd->GetNumberOfVerts(), 615 618 pd->GetNumberOfLines(), 616 619 pd->GetNumberOfPolys(), 617 620 pd->GetNumberOfStrips()); 621 #if 0 618 622 vtkCellArray *arr = pd->GetLines(); 619 623 arr->InitTraversal(); … … 624 628 } 625 629 #endif 630 #endif 626 631 627 632 initProp(); … … 657 662 } 658 663 break; 664 case DATASET_MESH_POINTS: 665 setSeedToMeshPoints(numPoints); 666 break; 667 case MESH_POINTS: 668 setSeedToMeshPoints(_seedMesh, numPoints); 669 break; 659 670 default: 660 671 ERROR("Can't set number of points for seed type %d", _seedType); … … 669 680 * Streamlines as seeds 670 681 */ 671 void Streamlines::setSeedToMeshPoints( )682 void Streamlines::setSeedToMeshPoints(int maxPoints) 672 683 { 673 684 _seedType = DATASET_MESH_POINTS; 674 setSeedToMeshPoints(_dataSet->getVtkDataSet() );685 setSeedToMeshPoints(_dataSet->getVtkDataSet(), maxPoints); 675 686 } 676 687 … … 696 707 * \param[in] seed vtkDataSet with points to use as seeds 697 708 */ 698 void Streamlines::setSeedToMeshPoints(vtkDataSet *seed )709 void Streamlines::setSeedToMeshPoints(vtkDataSet *seed, int maxPoints) 699 710 { 700 711 if (seed != _dataSet->getVtkDataSet()) { 701 712 _seedType = MESH_POINTS; 702 } 703 _seedMesh = NULL; 704 if (_streamTracer != NULL) { 713 _seedMesh = seed; 714 } else { 715 _seedType = DATASET_MESH_POINTS; 716 _seedMesh = NULL; 717 } 718 719 if (_streamTracer == NULL) 720 return; 721 722 #ifndef USE_VTK6 723 vtkSmartPointer<vtkDataSet> oldSeed; 724 if (_streamTracer->GetSource() != NULL) { 725 oldSeed = _streamTracer->GetSource(); 726 } 727 #endif 728 729 if (maxPoints > 0 && seed->GetNumberOfPoints() > maxPoints) { 730 TRACE("Seed points: %d", maxPoints); 731 vtkSmartPointer<vtkMaskPoints> mask = vtkSmartPointer<vtkMaskPoints>::New(); 732 #ifdef USE_VTK6 733 mask->SetInputData(seed); 734 #else 735 mask->SetInput(seed); 736 #endif 737 mask->SetMaximumNumberOfPoints(maxPoints); 738 mask->RandomModeOn(); 739 mask->GenerateVerticesOff(); 740 _streamTracer->SetSourceConnection(mask->GetOutputPort()); 741 742 vtkSmartPointer<vtkVertexGlyphFilter> vertFilter = vtkSmartPointer<vtkVertexGlyphFilter>::New(); 743 vertFilter->SetInputConnection(mask->GetOutputPort()); 744 _seedMapper->SetInputConnection(vertFilter->GetOutputPort()); 745 } else { 705 746 TRACE("Seed points: %d", seed->GetNumberOfPoints()); 706 vtkSmartPointer<vtkDataSet> oldSeed;707 if (_streamTracer->GetSource() != NULL) {708 oldSeed = _streamTracer->GetSource();709 }710 747 711 748 #ifdef USE_VTK6 … … 713 750 #else 714 751 _streamTracer->SetSource(seed); 715 716 if (oldSeed != NULL) {717 oldSeed->SetPipelineInformation(NULL);718 }719 752 #endif 720 753 if (vtkPolyData::SafeDownCast(seed) != NULL) { … … 734 767 } 735 768 } 769 770 #ifndef USE_VTK6 771 if (oldSeed != NULL) { 772 oldSeed->SetPipelineInformation(NULL); 773 } 774 #endif 736 775 } 737 776 … … 1767 1806 1768 1807 /** 1808 * \brief Set point size of seed geometry (may be a no-op) 1809 */ 1810 void Streamlines::setSeedPointSize(float size) 1811 { 1812 if (_seedActor != NULL) { 1813 _seedActor->GetProperty()->SetPointSize(size); 1814 } 1815 } 1816 1817 /** 1769 1818 * \brief Set pixel width of stream lines (may be a no-op) 1770 1819 */ -
trunk/packages/vizservers/vtkvis/Streamlines.h
r3680 r3682 100 100 void setNumberOfSeedPoints(int numPoints); 101 101 102 void setSeedToMeshPoints( );102 void setSeedToMeshPoints(int maxPoints = 500); 103 103 104 104 void setSeedToFilledMesh(int numPoints); 105 105 106 void setSeedToMeshPoints(vtkDataSet *ds );106 void setSeedToMeshPoints(vtkDataSet *ds, int maxPoints = 500); 107 107 108 108 void setSeedToFilledMesh(vtkDataSet *ds, int numPoints); … … 172 172 173 173 void setSeedColor(float color[3]); 174 175 void setSeedPointSize(float size); 174 176 175 177 private: -
trunk/packages/vizservers/vtkvis/protocol.txt
r3680 r3682 728 728 Use points of a mesh supplied as a VTK data file 729 729 streamlines seed numpts <?datasetName?> 730 If seeds have been created using 'seed random' or 'seed fmesh', 731 this command can be used to change the number of randomly 732 distributed seeds 730 If seeds have been created using 'seed random', 'seed fmesh', 731 'seed mesh' or 'seed points' this command can be used to change the 732 number of randomly distributed seeds. In the case of 'seed mesh' 733 or 'seed points', the number is the maximum number of points of the 734 mesh to be used -- the actual number may be fewer if the mesh 735 contains fewer points. Set to a number less than 0 to use all the 736 points of the mesh. 733 737 streamlines seed points <?datasetName?> 734 738 Use points of the streamlines' dataset mesh 735 739 streamlines seed polygon <centerX> <centerY> <centerZ> <normalX> <normalY> <normalZ> <angle> <radius> <numSides> <?dataSetName?> 736 740 Create seed points from vertices of a regular n-sided polygon 741 streamlines seed ptsize <size> <?datasetName?> 742 Set the point size for rendering seed points 737 743 streamlines seed rake <startX> <startY> <startZ> <endX> <endY> <endZ> <numPoints> <?datasetName?> 738 744 streamlines seed random <numPoints> <?datasetName?>
Note: See TracChangeset
for help on using the changeset viewer.