Changeset 3490
- Timestamp:
- Mar 11, 2013, 9:03:35 PM (12 years ago)
- Location:
- trunk/packages/vizservers/vtkvis
- Files:
-
- 8 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/packages/vizservers/vtkvis/RpContour2D.cpp
r3330 r3490 32 32 VtkGraphicsObject(), 33 33 _numContours(numContours), 34 _pipelineInitialized(false), 34 35 _colorMap(NULL), 35 36 _colorMode(COLOR_BY_SCALAR), … … 49 50 _numContours(contours.size()), 50 51 _contours(contours), 52 _pipelineInitialized(false), 51 53 _colorMap(NULL), 52 54 _colorMode(COLOR_BY_SCALAR), … … 77 79 if (_dataSet != dataSet) { 78 80 _dataSet = dataSet; 79 80 81 _renderer = renderer; 81 82 … … 84 85 _dataSet->getActiveScalarsName(), 85 86 1); 87 const char *activeVectors = _dataSet->getActiveVectorsName(); 88 if (activeVectors != NULL) { 89 renderer->getCumulativeDataRange(_vectorMagnitudeRange, 90 _dataSet->getActiveVectorsName(), 91 3); 92 for (int i = 0; i < 3; i++) { 93 renderer->getCumulativeDataRange(_vectorComponentRange[i], 94 _dataSet->getActiveVectorsName(), 95 3, i); 96 } 97 } 98 } else { 99 _dataSet->getScalarRange(_dataRange); 100 _dataSet->getVectorRange(_vectorMagnitudeRange); 101 for (int i = 0; i < 3; i++) { 102 _dataSet->getVectorRange(_vectorComponentRange[i], i); 103 } 104 } 105 106 update(); 107 } 108 } 109 110 /** 111 * \brief Internal method to re-compute contours after a state change 112 */ 113 void Contour2D::update() 114 { 115 if (_dataSet == NULL) { 116 return; 117 } 118 vtkDataSet *ds = _dataSet->getVtkDataSet(); 119 120 // Contour filter to generate isolines 121 if (_contourFilter == NULL) { 122 _contourFilter = vtkSmartPointer<vtkContourFilter>::New(); 123 } 124 125 if (!_pipelineInitialized) { 126 vtkSmartPointer<vtkCellDataToPointData> cellToPtData; 127 128 if (ds->GetPointData() == NULL || 129 ds->GetPointData()->GetScalars() == NULL) { 130 WARN("No scalar point data in dataset %s", _dataSet->getName().c_str()); 131 if (ds->GetCellData() != NULL && 132 ds->GetCellData()->GetScalars() != NULL) { 133 cellToPtData = 134 vtkSmartPointer<vtkCellDataToPointData>::New(); 135 #ifdef USE_VTK6 136 cellToPtData->SetInputData(ds); 137 #else 138 cellToPtData->SetInput(ds); 139 #endif 140 //cellToPtData->PassCellDataOn(); 141 cellToPtData->Update(); 142 ds = cellToPtData->GetOutput(); 143 } else { 144 ERROR("No scalar cell data in dataset %s", _dataSet->getName().c_str()); 145 } 146 } 147 148 vtkPolyData *pd = vtkPolyData::SafeDownCast(ds); 149 if (pd) { 150 // DataSet is a vtkPolyData 151 if (pd->GetNumberOfLines() == 0 && 152 pd->GetNumberOfPolys() == 0 && 153 pd->GetNumberOfStrips() == 0) { 154 // DataSet is a point cloud 155 PrincipalPlane plane; 156 double offset; 157 if (_dataSet->is2D(&plane, &offset)) { 158 vtkSmartPointer<vtkDelaunay2D> mesher = vtkSmartPointer<vtkDelaunay2D>::New(); 159 if (plane == PLANE_ZY) { 160 vtkSmartPointer<vtkTransform> trans = vtkSmartPointer<vtkTransform>::New(); 161 trans->RotateWXYZ(90, 0, 1, 0); 162 if (offset != 0.0) { 163 trans->Translate(-offset, 0, 0); 164 } 165 mesher->SetTransform(trans); 166 } else if (plane == PLANE_XZ) { 167 vtkSmartPointer<vtkTransform> trans = vtkSmartPointer<vtkTransform>::New(); 168 trans->RotateWXYZ(-90, 1, 0, 0); 169 if (offset != 0.0) { 170 trans->Translate(0, -offset, 0); 171 } 172 mesher->SetTransform(trans); 173 } else if (offset != 0.0) { 174 // XY with Z offset 175 vtkSmartPointer<vtkTransform> trans = vtkSmartPointer<vtkTransform>::New(); 176 trans->Translate(0, 0, -offset); 177 mesher->SetTransform(trans); 178 } 179 #ifdef USE_VTK6 180 mesher->SetInputData(pd); 181 #else 182 mesher->SetInput(pd); 183 #endif 184 _contourFilter->SetInputConnection(mesher->GetOutputPort()); 185 } else { 186 vtkSmartPointer<vtkDelaunay3D> mesher = vtkSmartPointer<vtkDelaunay3D>::New(); 187 #ifdef USE_VTK6 188 mesher->SetInputData(pd); 189 #else 190 mesher->SetInput(pd); 191 #endif 192 vtkSmartPointer<vtkDataSetSurfaceFilter> gf = vtkSmartPointer<vtkDataSetSurfaceFilter>::New(); 193 gf->SetInputConnection(mesher->GetOutputPort()); 194 _contourFilter->SetInputConnection(gf->GetOutputPort()); 195 } 196 } else { 197 // DataSet is a vtkPolyData with lines and/or polygons 198 #ifdef USE_VTK6 199 _contourFilter->SetInputData(ds); 200 #else 201 _contourFilter->SetInput(ds); 202 #endif 203 } 204 } else { 205 TRACE("Generating surface for data set"); 206 // DataSet is NOT a vtkPolyData 207 vtkSmartPointer<vtkDataSetSurfaceFilter> gf = vtkSmartPointer<vtkDataSetSurfaceFilter>::New(); 208 #ifdef USE_VTK6 209 gf->SetInputData(ds); 210 #else 211 gf->SetInput(ds); 212 #endif 213 _contourFilter->SetInputConnection(gf->GetOutputPort()); 214 } 215 } 216 217 _pipelineInitialized = true; 218 219 _contourFilter->ComputeNormalsOff(); 220 _contourFilter->ComputeGradientsOff(); 221 222 // Speed up multiple contour computation at cost of extra memory use 223 if (_numContours > 1) { 224 _contourFilter->UseScalarTreeOn(); 225 } else { 226 _contourFilter->UseScalarTreeOff(); 227 } 228 229 _contourFilter->SetNumberOfContours(_numContours); 230 231 if (_contours.empty()) { 232 // Evenly spaced isovalues 233 _contourFilter->GenerateValues(_numContours, _dataRange[0], _dataRange[1]); 234 } else { 235 // User-supplied isovalues 236 for (int i = 0; i < _numContours; i++) { 237 _contourFilter->SetValue(i, _contours[i]); 238 } 239 } 240 241 initProp(); 242 243 if (_dsMapper == NULL) { 244 _dsMapper = vtkSmartPointer<vtkPolyDataMapper>::New(); 245 _dsMapper->SetResolveCoincidentTopologyToPolygonOffset(); 246 _dsMapper->ScalarVisibilityOff(); 247 vtkSmartPointer<vtkStripper> stripper = vtkSmartPointer<vtkStripper>::New(); 248 stripper->SetInputConnection(_contourFilter->GetOutputPort()); 249 _dsMapper->SetInputConnection(stripper->GetOutputPort()); 250 getActor()->SetMapper(_dsMapper); 251 } 252 253 if (_lut == NULL) { 254 setColorMap(ColorMap::getDefault()); 255 setColorMode(_colorMode); 256 } 257 258 _dsMapper->Update(); 259 } 260 261 void Contour2D::updateRanges(Renderer *renderer) 262 { 263 if (_dataSet == NULL) { 264 ERROR("called before setDataSet"); 265 return; 266 } 267 268 if (renderer->getUseCumulativeRange()) { 269 renderer->getCumulativeDataRange(_dataRange, 270 _dataSet->getActiveScalarsName(), 271 1); 272 const char *activeVectors = _dataSet->getActiveVectorsName(); 273 if (activeVectors != NULL) { 86 274 renderer->getCumulativeDataRange(_vectorMagnitudeRange, 87 275 _dataSet->getActiveVectorsName(), … … 92 280 3, i); 93 281 } 94 } else {95 _dataSet->getScalarRange(_dataRange);96 _dataSet->getVectorRange(_vectorMagnitudeRange);97 for (int i = 0; i < 3; i++) {98 _dataSet->getVectorRange(_vectorComponentRange[i], i);99 }100 }101 102 update();103 }104 }105 106 /**107 * \brief Internal method to re-compute contours after a state change108 */109 void Contour2D::update()110 {111 if (_dataSet == NULL) {112 return;113 }114 vtkDataSet *ds = _dataSet->getVtkDataSet();115 116 // Contour filter to generate isolines117 if (_contourFilter == NULL) {118 _contourFilter = vtkSmartPointer<vtkContourFilter>::New();119 }120 121 vtkSmartPointer<vtkCellDataToPointData> cellToPtData;122 123 if (ds->GetPointData() == NULL ||124 ds->GetPointData()->GetScalars() == NULL) {125 WARN("No scalar point data in dataset %s", _dataSet->getName().c_str());126 if (ds->GetCellData() != NULL &&127 ds->GetCellData()->GetScalars() != NULL) {128 cellToPtData =129 vtkSmartPointer<vtkCellDataToPointData>::New();130 #ifdef USE_VTK6131 cellToPtData->SetInputData(ds);132 #else133 cellToPtData->SetInput(ds);134 #endif135 //cellToPtData->PassCellDataOn();136 cellToPtData->Update();137 ds = cellToPtData->GetOutput();138 } else {139 ERROR("No scalar cell data in dataset %s", _dataSet->getName().c_str());140 }141 }142 143 vtkPolyData *pd = vtkPolyData::SafeDownCast(ds);144 if (pd) {145 // DataSet is a vtkPolyData146 if (pd->GetNumberOfLines() == 0 &&147 pd->GetNumberOfPolys() == 0 &&148 pd->GetNumberOfStrips() == 0) {149 // DataSet is a point cloud150 PrincipalPlane plane;151 double offset;152 if (_dataSet->is2D(&plane, &offset)) {153 vtkSmartPointer<vtkDelaunay2D> mesher = vtkSmartPointer<vtkDelaunay2D>::New();154 if (plane == PLANE_ZY) {155 vtkSmartPointer<vtkTransform> trans = vtkSmartPointer<vtkTransform>::New();156 trans->RotateWXYZ(90, 0, 1, 0);157 if (offset != 0.0) {158 trans->Translate(-offset, 0, 0);159 }160 mesher->SetTransform(trans);161 } else if (plane == PLANE_XZ) {162 vtkSmartPointer<vtkTransform> trans = vtkSmartPointer<vtkTransform>::New();163 trans->RotateWXYZ(-90, 1, 0, 0);164 if (offset != 0.0) {165 trans->Translate(0, -offset, 0);166 }167 mesher->SetTransform(trans);168 } else if (offset != 0.0) {169 // XY with Z offset170 vtkSmartPointer<vtkTransform> trans = vtkSmartPointer<vtkTransform>::New();171 trans->Translate(0, 0, -offset);172 mesher->SetTransform(trans);173 }174 #ifdef USE_VTK6175 mesher->SetInputData(pd);176 #else177 mesher->SetInput(pd);178 #endif179 _contourFilter->SetInputConnection(mesher->GetOutputPort());180 } else {181 vtkSmartPointer<vtkDelaunay3D> mesher = vtkSmartPointer<vtkDelaunay3D>::New();182 #ifdef USE_VTK6183 mesher->SetInputData(pd);184 #else185 mesher->SetInput(pd);186 #endif187 vtkSmartPointer<vtkDataSetSurfaceFilter> gf = vtkSmartPointer<vtkDataSetSurfaceFilter>::New();188 gf->SetInputConnection(mesher->GetOutputPort());189 _contourFilter->SetInputConnection(gf->GetOutputPort());190 }191 } else {192 // DataSet is a vtkPolyData with lines and/or polygons193 #ifdef USE_VTK6194 _contourFilter->SetInputData(ds);195 #else196 _contourFilter->SetInput(ds);197 #endif198 }199 } else {200 TRACE("Generating surface for data set");201 // DataSet is NOT a vtkPolyData202 vtkSmartPointer<vtkDataSetSurfaceFilter> gf = vtkSmartPointer<vtkDataSetSurfaceFilter>::New();203 #ifdef USE_VTK6204 gf->SetInputData(ds);205 #else206 gf->SetInput(ds);207 #endif208 _contourFilter->SetInputConnection(gf->GetOutputPort());209 }210 211 _contourFilter->ComputeNormalsOff();212 _contourFilter->ComputeGradientsOff();213 214 // Speed up multiple contour computation at cost of extra memory use215 if (_numContours > 1) {216 _contourFilter->UseScalarTreeOn();217 } else {218 _contourFilter->UseScalarTreeOff();219 }220 221 _contourFilter->SetNumberOfContours(_numContours);222 223 if (_contours.empty()) {224 // Evenly spaced isovalues225 _contourFilter->GenerateValues(_numContours, _dataRange[0], _dataRange[1]);226 } else {227 // User-supplied isovalues228 for (int i = 0; i < _numContours; i++) {229 _contourFilter->SetValue(i, _contours[i]);230 }231 }232 233 initProp();234 235 if (_dsMapper == NULL) {236 _dsMapper = vtkSmartPointer<vtkPolyDataMapper>::New();237 _dsMapper->SetResolveCoincidentTopologyToPolygonOffset();238 _dsMapper->ScalarVisibilityOff();239 vtkSmartPointer<vtkStripper> stripper = vtkSmartPointer<vtkStripper>::New();240 stripper->SetInputConnection(_contourFilter->GetOutputPort());241 _dsMapper->SetInputConnection(stripper->GetOutputPort());242 getActor()->SetMapper(_dsMapper);243 }244 245 if (_lut == NULL) {246 setColorMap(ColorMap::getDefault());247 }248 249 setColorMode(_colorMode);250 251 _dsMapper->Update();252 }253 254 void Contour2D::updateRanges(Renderer *renderer)255 {256 if (_dataSet == NULL) {257 ERROR("called before setDataSet");258 return;259 }260 261 if (renderer->getUseCumulativeRange()) {262 renderer->getCumulativeDataRange(_dataRange,263 _dataSet->getActiveScalarsName(),264 1);265 renderer->getCumulativeDataRange(_vectorMagnitudeRange,266 _dataSet->getActiveVectorsName(),267 3);268 for (int i = 0; i < 3; i++) {269 renderer->getCumulativeDataRange(_vectorComponentRange[i],270 _dataSet->getActiveVectorsName(),271 3, i);272 282 } 273 283 } else { … … 536 546 * Will override any existing contours 537 547 */ 538 void Contour2D::set Contours(int numContours)548 void Contour2D::setNumContours(int numContours) 539 549 { 540 550 _contours.clear(); -
trunk/packages/vizservers/vtkvis/RpContour2D.h
r3177 r3490 54 54 virtual void setClippingPlanes(vtkPlaneCollection *planes); 55 55 56 void set Contours(int numContours);56 void setNumContours(int numContours); 57 57 58 58 void setContourList(const std::vector<double>& contours); … … 103 103 std::vector<double> _contours; 104 104 105 bool _pipelineInitialized; 106 105 107 ColorMap *_colorMap; 106 108 ColorMode _colorMode; -
trunk/packages/vizservers/vtkvis/RpContour3D.cpp
r3330 r3490 30 30 VtkGraphicsObject(), 31 31 _numContours(numContours), 32 _pipelineInitialized(false), 32 33 _colorMap(NULL), 33 34 _colorMode(COLOR_BY_SCALAR), … … 42 43 VtkGraphicsObject(), 43 44 _numContours(contours.size()), 45 _pipelineInitialized(false), 44 46 _contours(contours), 45 47 _colorMap(NULL), … … 67 69 if (_dataSet != dataSet) { 68 70 _dataSet = dataSet; 69 70 71 _renderer = renderer; 71 72 … … 74 75 _dataSet->getActiveScalarsName(), 75 76 1); 77 const char *activeVectors = _dataSet->getActiveVectorsName(); 78 if (activeVectors != NULL) { 79 renderer->getCumulativeDataRange(_vectorMagnitudeRange, 80 _dataSet->getActiveVectorsName(), 81 3); 82 for (int i = 0; i < 3; i++) { 83 renderer->getCumulativeDataRange(_vectorComponentRange[i], 84 _dataSet->getActiveVectorsName(), 85 3, i); 86 } 87 } 88 } else { 89 _dataSet->getScalarRange(_dataRange); 90 _dataSet->getVectorRange(_vectorMagnitudeRange); 91 for (int i = 0; i < 3; i++) { 92 _dataSet->getVectorRange(_vectorComponentRange[i], i); 93 } 94 } 95 96 update(); 97 } 98 } 99 100 /** 101 * \brief Internal method to re-compute contours after a state change 102 */ 103 void Contour3D::update() 104 { 105 if (_dataSet == NULL) { 106 return; 107 } 108 vtkDataSet *ds = _dataSet->getVtkDataSet(); 109 110 if (_dataSet->is2D()) { 111 ERROR("DataSet is 2D"); 112 return; 113 } 114 115 // Contour filter to generate isosurfaces 116 if (_contourFilter == NULL) { 117 _contourFilter = vtkSmartPointer<vtkContourFilter>::New(); 118 } 119 120 if (!_pipelineInitialized) { 121 vtkSmartPointer<vtkCellDataToPointData> cellToPtData; 122 123 if (ds->GetPointData() == NULL || 124 ds->GetPointData()->GetScalars() == NULL) { 125 WARN("No scalar point data in dataset %s", _dataSet->getName().c_str()); 126 if (ds->GetCellData() != NULL && 127 ds->GetCellData()->GetScalars() != NULL) { 128 cellToPtData = 129 vtkSmartPointer<vtkCellDataToPointData>::New(); 130 #ifdef USE_VTK6 131 cellToPtData->SetInputData(ds); 132 #else 133 cellToPtData->SetInput(ds); 134 #endif 135 //cellToPtData->PassCellDataOn(); 136 cellToPtData->Update(); 137 ds = cellToPtData->GetOutput(); 138 } else { 139 ERROR("No scalar cell data in dataset %s", _dataSet->getName().c_str()); 140 } 141 } 142 143 vtkPolyData *pd = vtkPolyData::SafeDownCast(ds); 144 if (pd) { 145 // DataSet is a vtkPolyData 146 if (pd->GetNumberOfLines() == 0 && 147 pd->GetNumberOfPolys() == 0 && 148 pd->GetNumberOfStrips() == 0) { 149 // DataSet is a point cloud 150 // Generate a 3D unstructured grid 151 vtkSmartPointer<vtkDelaunay3D> mesher = vtkSmartPointer<vtkDelaunay3D>::New(); 152 #ifdef USE_VTK6 153 mesher->SetInputData(pd); 154 #else 155 mesher->SetInput(pd); 156 #endif 157 _contourFilter->SetInputConnection(mesher->GetOutputPort()); 158 } else { 159 // DataSet is a vtkPolyData with lines and/or polygons 160 ERROR("Not a 3D DataSet"); 161 return; 162 } 163 } else { 164 // DataSet is NOT a vtkPolyData 165 #ifdef USE_VTK6 166 _contourFilter->SetInputData(ds); 167 #else 168 _contourFilter->SetInput(ds); 169 #endif 170 } 171 } 172 173 _pipelineInitialized = true; 174 175 _contourFilter->ComputeNormalsOff(); 176 _contourFilter->ComputeGradientsOff(); 177 178 // Speed up multiple contour computation at cost of extra memory use 179 if (_numContours > 1) { 180 _contourFilter->UseScalarTreeOn(); 181 } else { 182 _contourFilter->UseScalarTreeOff(); 183 } 184 185 _contourFilter->SetNumberOfContours(_numContours); 186 187 if (_contours.empty()) { 188 // Evenly spaced isovalues 189 _contourFilter->GenerateValues(_numContours, _dataRange[0], _dataRange[1]); 190 } else { 191 // User-supplied isovalues 192 for (int i = 0; i < _numContours; i++) { 193 _contourFilter->SetValue(i, _contours[i]); 194 } 195 } 196 197 initProp(); 198 199 if (_normalsGenerator == NULL) { 200 _normalsGenerator = vtkSmartPointer<vtkPolyDataNormals>::New(); 201 _normalsGenerator->SetInputConnection(_contourFilter->GetOutputPort()); 202 _normalsGenerator->SetFeatureAngle(90.); 203 _normalsGenerator->AutoOrientNormalsOff(); 204 _normalsGenerator->ComputePointNormalsOn(); 205 } 206 207 if (_dsMapper == NULL) { 208 _dsMapper = vtkSmartPointer<vtkPolyDataMapper>::New(); 209 _dsMapper->SetResolveCoincidentTopologyToPolygonOffset(); 210 _dsMapper->SetInputConnection(_normalsGenerator->GetOutputPort()); 211 _dsMapper->ScalarVisibilityOff(); 212 //_dsMapper->SetColorModeToMapScalars(); 213 getActor()->SetMapper(_dsMapper); 214 } 215 216 if (_lut == NULL) { 217 setColorMap(ColorMap::getDefault()); 218 setColorMode(_colorMode); 219 } 220 221 _dsMapper->Update(); 222 TRACE("Contour output %d polys, %d strips", 223 _contourFilter->GetOutput()->GetNumberOfPolys(), 224 _contourFilter->GetOutput()->GetNumberOfStrips()); 225 } 226 227 void Contour3D::updateRanges(Renderer *renderer) 228 { 229 if (_dataSet == NULL) { 230 ERROR("called before setDataSet"); 231 return; 232 } 233 234 if (renderer->getUseCumulativeRange()) { 235 renderer->getCumulativeDataRange(_dataRange, 236 _dataSet->getActiveScalarsName(), 237 1); 238 const char *activeVectors = _dataSet->getActiveVectorsName(); 239 if (activeVectors != NULL) { 76 240 renderer->getCumulativeDataRange(_vectorMagnitudeRange, 77 241 _dataSet->getActiveVectorsName(), … … 82 246 3, i); 83 247 } 84 } else {85 _dataSet->getScalarRange(_dataRange);86 _dataSet->getVectorRange(_vectorMagnitudeRange);87 for (int i = 0; i < 3; i++) {88 _dataSet->getVectorRange(_vectorComponentRange[i], i);89 }90 }91 92 update();93 }94 }95 96 /**97 * \brief Internal method to re-compute contours after a state change98 */99 void Contour3D::update()100 {101 if (_dataSet == NULL) {102 return;103 }104 vtkDataSet *ds = _dataSet->getVtkDataSet();105 106 if (_dataSet->is2D()) {107 ERROR("DataSet is 2D");108 return;109 }110 111 // Contour filter to generate isosurfaces112 if (_contourFilter == NULL) {113 _contourFilter = vtkSmartPointer<vtkContourFilter>::New();114 }115 116 vtkSmartPointer<vtkCellDataToPointData> cellToPtData;117 118 if (ds->GetPointData() == NULL ||119 ds->GetPointData()->GetScalars() == NULL) {120 WARN("No scalar point data in dataset %s", _dataSet->getName().c_str());121 if (ds->GetCellData() != NULL &&122 ds->GetCellData()->GetScalars() != NULL) {123 cellToPtData =124 vtkSmartPointer<vtkCellDataToPointData>::New();125 #ifdef USE_VTK6126 cellToPtData->SetInputData(ds);127 #else128 cellToPtData->SetInput(ds);129 #endif130 //cellToPtData->PassCellDataOn();131 cellToPtData->Update();132 ds = cellToPtData->GetOutput();133 } else {134 ERROR("No scalar cell data in dataset %s", _dataSet->getName().c_str());135 }136 }137 138 vtkPolyData *pd = vtkPolyData::SafeDownCast(ds);139 if (pd) {140 // DataSet is a vtkPolyData141 if (pd->GetNumberOfLines() == 0 &&142 pd->GetNumberOfPolys() == 0 &&143 pd->GetNumberOfStrips() == 0) {144 // DataSet is a point cloud145 // Generate a 3D unstructured grid146 vtkSmartPointer<vtkDelaunay3D> mesher = vtkSmartPointer<vtkDelaunay3D>::New();147 #ifdef USE_VTK6148 mesher->SetInputData(pd);149 #else150 mesher->SetInput(pd);151 #endif152 _contourFilter->SetInputConnection(mesher->GetOutputPort());153 } else {154 // DataSet is a vtkPolyData with lines and/or polygons155 ERROR("Not a 3D DataSet");156 return;157 }158 } else {159 // DataSet is NOT a vtkPolyData160 #ifdef USE_VTK6161 _contourFilter->SetInputData(ds);162 #else163 _contourFilter->SetInput(ds);164 #endif165 }166 167 _contourFilter->ComputeNormalsOff();168 _contourFilter->ComputeGradientsOff();169 170 // Speed up multiple contour computation at cost of extra memory use171 if (_numContours > 1) {172 _contourFilter->UseScalarTreeOn();173 } else {174 _contourFilter->UseScalarTreeOff();175 }176 177 _contourFilter->SetNumberOfContours(_numContours);178 179 if (_contours.empty()) {180 // Evenly spaced isovalues181 _contourFilter->GenerateValues(_numContours, _dataRange[0], _dataRange[1]);182 } else {183 // User-supplied isovalues184 for (int i = 0; i < _numContours; i++) {185 _contourFilter->SetValue(i, _contours[i]);186 }187 }188 189 initProp();190 191 if (_normalsGenerator == NULL) {192 _normalsGenerator = vtkSmartPointer<vtkPolyDataNormals>::New();193 }194 195 _normalsGenerator->SetInputConnection(_contourFilter->GetOutputPort());196 _normalsGenerator->SetFeatureAngle(90.);197 _normalsGenerator->AutoOrientNormalsOff();198 _normalsGenerator->ComputePointNormalsOn();199 200 if (_dsMapper == NULL) {201 _dsMapper = vtkSmartPointer<vtkPolyDataMapper>::New();202 _dsMapper->SetResolveCoincidentTopologyToPolygonOffset();203 _dsMapper->SetInputConnection(_normalsGenerator->GetOutputPort());204 _dsMapper->ScalarVisibilityOff();205 //_dsMapper->SetColorModeToMapScalars();206 getActor()->SetMapper(_dsMapper);207 }208 209 if (_lut == NULL) {210 setColorMap(ColorMap::getDefault());211 }212 213 setColorMode(_colorMode);214 215 _dsMapper->Update();216 TRACE("Contour output %d polys, %d strips",217 _contourFilter->GetOutput()->GetNumberOfPolys(),218 _contourFilter->GetOutput()->GetNumberOfStrips());219 }220 221 void Contour3D::updateRanges(Renderer *renderer)222 {223 if (_dataSet == NULL) {224 ERROR("called before setDataSet");225 return;226 }227 228 if (renderer->getUseCumulativeRange()) {229 renderer->getCumulativeDataRange(_dataRange,230 _dataSet->getActiveScalarsName(),231 1);232 renderer->getCumulativeDataRange(_vectorMagnitudeRange,233 _dataSet->getActiveVectorsName(),234 3);235 for (int i = 0; i < 3; i++) {236 renderer->getCumulativeDataRange(_vectorComponentRange[i],237 _dataSet->getActiveVectorsName(),238 3, i);239 248 } 240 249 } else { … … 503 512 * Will override any existing contours 504 513 */ 505 void Contour3D::set Contours(int numContours)514 void Contour3D::setNumContours(int numContours) 506 515 { 507 516 _contours.clear(); -
trunk/packages/vizservers/vtkvis/RpContour3D.h
r3330 r3490 55 55 virtual void setClippingPlanes(vtkPlaneCollection *planes); 56 56 57 void set Contours(int numContours);57 void setNumContours(int numContours); 58 58 59 59 void setContourList(const std::vector<double>& contours); … … 93 93 std::vector<double> _contours; 94 94 95 bool _pipelineInitialized; 96 95 97 ColorMap *_colorMap; 96 98 ColorMode _colorMode; -
trunk/packages/vizservers/vtkvis/RpHeightMap.cpp
r3435 r3490 97 97 _renderer = renderer; 98 98 99 TRACE("DataSet name: '%s' type: %s",100 _dataSet->getName().c_str(),101 _dataSet->getVtkType());102 103 99 if (_dataSet != NULL) { 100 TRACE("DataSet name: '%s' type: %s", 101 _dataSet->getName().c_str(), 102 _dataSet->getVtkType()); 103 104 104 if (renderer->getUseCumulativeRange()) { 105 105 renderer->getCumulativeDataRange(_dataRange, -
trunk/packages/vizservers/vtkvis/RpVtkRenderer.h
r3419 r3490 573 573 bool addContour2D(const DataSetId& id, const std::vector<double>& contours); 574 574 575 void setContour2D Contours(const DataSetId& id, int numContours);575 void setContour2DNumContours(const DataSetId& id, int numContours); 576 576 577 577 void setContour2DContourList(const DataSetId& id, const std::vector<double>& contours); … … 592 592 bool addContour3D(const DataSetId& id, const std::vector<double>& contours); 593 593 594 void setContour3D Contours(const DataSetId& id, int numContours);594 void setContour3DNumContours(const DataSetId& id, int numContours); 595 595 596 596 void setContour3DContourList(const DataSetId& id, const std::vector<double>& contours); -
trunk/packages/vizservers/vtkvis/RpVtkRendererCmd.cpp
r3488 r3490 2880 2880 if (objc == 4) { 2881 2881 const char *name = Tcl_GetString(objv[3]); 2882 g_renderer->setContour2D Contours(name, numContours);2883 } else { 2884 g_renderer->setContour2D Contours("all", numContours);2882 g_renderer->setContour2DNumContours(name, numContours); 2883 } else { 2884 g_renderer->setContour2DNumContours("all", numContours); 2885 2885 } 2886 2886 return TCL_OK; … … 3284 3284 if (objc == 4) { 3285 3285 const char *name = Tcl_GetString(objv[3]); 3286 g_renderer->setContour3D Contours(name, numContours);3287 } else { 3288 g_renderer->setContour3D Contours("all", numContours);3286 g_renderer->setContour3DNumContours(name, numContours); 3287 } else { 3288 g_renderer->setContour3DNumContours("all", numContours); 3289 3289 } 3290 3290 return TCL_OK; -
trunk/packages/vizservers/vtkvis/RpVtkRendererGraphicsObjs.cpp
r3330 r3490 554 554 * \brief Set the number of equally spaced contour isolines for the given DataSet 555 555 */ 556 void Renderer::setContour2D Contours(const DataSetId& id, int numContours)556 void Renderer::setContour2DNumContours(const DataSetId& id, int numContours) 557 557 { 558 558 Contour2DHashmap::iterator itr; … … 572 572 573 573 do { 574 itr->second->set Contours(numContours);574 itr->second->setNumContours(numContours); 575 575 } while (doAll && ++itr != _contour2Ds.end()); 576 576 … … 767 767 * \brief Set the number of equally spaced isosurfaces for the given DataSet 768 768 */ 769 void Renderer::setContour3D Contours(const DataSetId& id, int numContours)769 void Renderer::setContour3DNumContours(const DataSetId& id, int numContours) 770 770 { 771 771 Contour3DHashmap::iterator itr; … … 785 785 786 786 do { 787 itr->second->set Contours(numContours);787 itr->second->setNumContours(numContours); 788 788 } while (doAll && ++itr != _contour3Ds.end()); 789 789
Note: See TracChangeset
for help on using the changeset viewer.