- Timestamp:
- Mar 14, 2013, 12:59:35 PM (12 years ago)
- Location:
- trunk/packages/vizservers/vtkvis
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/packages/vizservers/vtkvis/RpCutplane.cpp
r3330 r3499 36 36 Cutplane::Cutplane() : 37 37 VtkGraphicsObject(), 38 _pipelineInitialized(false), 38 39 _colorMap(NULL), 39 40 _colorMode(COLOR_BY_SCALAR), … … 123 124 124 125 getAssembly()->AddPart(_borderActor[i]); 125 getAssembly()->AddPart(_actor[i]); 126 //getAssembly()->AddPart(_actor[i]); 127 } 128 } else { 129 for (int i = 0; i < 3; i++) { 130 getAssembly()->RemovePart(_actor[i]); 126 131 } 127 132 } … … 160 165 //_mapper[i]->InterpolateScalarsBeforeMappingOn(); 161 166 } 162 _cutPlane[i] = vtkSmartPointer<vtkPlane>::New(); 163 switch (i) { 164 case 0: 165 _cutPlane[i]->SetNormal(1, 0, 0); 166 _cutPlane[i]->SetOrigin(bounds[0] + (bounds[1]-bounds[0])/2., 167 0, 168 0); 169 break; 170 case 1: 171 _cutPlane[i]->SetNormal(0, 1, 0); 172 _cutPlane[i]->SetOrigin(0, 173 bounds[2] + (bounds[3]-bounds[2])/2., 174 0); 175 break; 176 case 2: 177 default: 178 _cutPlane[i]->SetNormal(0, 0, 1); 179 _cutPlane[i]->SetOrigin(0, 180 0, 181 bounds[4] + (bounds[5]-bounds[4])/2.); 182 break; 183 } 184 _cutter[i] = vtkSmartPointer<vtkCutter>::New(); 185 _cutter[i]->SetCutFunction(_cutPlane[i]); 167 if (_cutPlane[i] == NULL) { 168 _cutPlane[i] = vtkSmartPointer<vtkPlane>::New(); 169 switch (i) { 170 case 0: 171 _cutPlane[i]->SetNormal(1, 0, 0); 172 _cutPlane[i]->SetOrigin(bounds[0] + (bounds[1]-bounds[0])/2., 173 0, 174 0); 175 break; 176 case 1: 177 _cutPlane[i]->SetNormal(0, 1, 0); 178 _cutPlane[i]->SetOrigin(0, 179 bounds[2] + (bounds[3]-bounds[2])/2., 180 0); 181 break; 182 case 2: 183 default: 184 _cutPlane[i]->SetNormal(0, 0, 1); 185 _cutPlane[i]->SetOrigin(0, 186 0, 187 bounds[4] + (bounds[5]-bounds[4])/2.); 188 break; 189 } 190 } 191 if (_cutter[i] == NULL) { 192 _cutter[i] = vtkSmartPointer<vtkCutter>::New(); 193 _cutter[i]->SetCutFunction(_cutPlane[i]); 194 } 186 195 } 187 196 188 197 initProp(); 189 198 190 vtkPolyData *pd = vtkPolyData::SafeDownCast(ds); 191 if (pd && 192 pd->GetNumberOfLines() == 0 && 193 pd->GetNumberOfPolys() == 0 && 194 pd->GetNumberOfStrips() == 0) { 195 // DataSet is a point cloud 196 PrincipalPlane plane; 197 double offset; 198 if (_dataSet->is2D(&plane, &offset)) { 199 // DataSet is a 2D point cloud 199 if (!_pipelineInitialized) { 200 vtkPolyData *pd = vtkPolyData::SafeDownCast(ds); 201 if (pd && 202 pd->GetNumberOfLines() == 0 && 203 pd->GetNumberOfPolys() == 0 && 204 pd->GetNumberOfStrips() == 0) { 205 // DataSet is a point cloud 206 PrincipalPlane plane; 207 double offset; 208 if (_dataSet->is2D(&plane, &offset)) { 209 // DataSet is a 2D point cloud 200 210 #ifdef MESH_POINT_CLOUDS 201 vtkSmartPointer<vtkDelaunay2D> mesher = vtkSmartPointer<vtkDelaunay2D>::New();202 if (plane == PLANE_ZY) {203 vtkSmartPointer<vtkTransform> trans = vtkSmartPointer<vtkTransform>::New();204 trans->RotateWXYZ(90, 0, 1, 0);205 if (offset != 0.0) {206 trans->Translate(-offset, 0, 0);207 }208 mesher->SetTransform(trans);209 _actor[1]->VisibilityOff();210 _actor[2]->VisibilityOff();211 } else if (plane == PLANE_XZ) {212 vtkSmartPointer<vtkTransform> trans = vtkSmartPointer<vtkTransform>::New();213 trans->RotateWXYZ(-90, 1, 0, 0);214 if (offset != 0.0) {215 trans->Translate(0, -offset, 0);216 }217 mesher->SetTransform(trans);218 _actor[0]->VisibilityOff();219 _actor[2]->VisibilityOff();220 } else if (offset != 0.0) {221 // XY with Z offset222 vtkSmartPointer<vtkTransform> trans = vtkSmartPointer<vtkTransform>::New();223 trans->Translate(0, 0, -offset);224 mesher->SetTransform(trans);225 _actor[0]->VisibilityOff();226 _actor[1]->VisibilityOff();227 }211 vtkSmartPointer<vtkDelaunay2D> mesher = vtkSmartPointer<vtkDelaunay2D>::New(); 212 if (plane == PLANE_ZY) { 213 vtkSmartPointer<vtkTransform> trans = vtkSmartPointer<vtkTransform>::New(); 214 trans->RotateWXYZ(90, 0, 1, 0); 215 if (offset != 0.0) { 216 trans->Translate(-offset, 0, 0); 217 } 218 mesher->SetTransform(trans); 219 _actor[1]->VisibilityOff(); 220 _actor[2]->VisibilityOff(); 221 } else if (plane == PLANE_XZ) { 222 vtkSmartPointer<vtkTransform> trans = vtkSmartPointer<vtkTransform>::New(); 223 trans->RotateWXYZ(-90, 1, 0, 0); 224 if (offset != 0.0) { 225 trans->Translate(0, -offset, 0); 226 } 227 mesher->SetTransform(trans); 228 _actor[0]->VisibilityOff(); 229 _actor[2]->VisibilityOff(); 230 } else if (offset != 0.0) { 231 // XY with Z offset 232 vtkSmartPointer<vtkTransform> trans = vtkSmartPointer<vtkTransform>::New(); 233 trans->Translate(0, 0, -offset); 234 mesher->SetTransform(trans); 235 _actor[0]->VisibilityOff(); 236 _actor[1]->VisibilityOff(); 237 } 228 238 #ifdef USE_VTK6 229 mesher->SetInputData(pd);239 mesher->SetInputData(pd); 230 240 #else 231 mesher->SetInput(pd);232 #endif 233 for (int i = 0; i < 3; i++) {234 _mapper[i]->SetInputConnection(mesher->GetOutputPort());235 }241 mesher->SetInput(pd); 242 #endif 243 for (int i = 0; i < 3; i++) { 244 _mapper[i]->SetInputConnection(mesher->GetOutputPort()); 245 } 236 246 #else 237 if (_splatter == NULL) {238 _splatter = vtkSmartPointer<vtkGaussianSplatter>::New();239 }247 if (_splatter == NULL) { 248 _splatter = vtkSmartPointer<vtkGaussianSplatter>::New(); 249 } 240 250 #ifdef USE_VTK6 241 _splatter->SetInputData(pd);251 _splatter->SetInputData(pd); 242 252 #else 243 _splatter->SetInput(pd); 244 #endif 245 int dims[3]; 246 _splatter->GetSampleDimensions(dims); 247 TRACE("Sample dims: %d %d %d", dims[0], dims[1], dims[2]); 248 if (plane == PLANE_ZY) { 249 dims[0] = 3; 250 } else if (plane == PLANE_XZ) { 251 dims[1] = 3; 253 _splatter->SetInput(pd); 254 #endif 255 int dims[3]; 256 _splatter->GetSampleDimensions(dims); 257 TRACE("Sample dims: %d %d %d", dims[0], dims[1], dims[2]); 258 if (plane == PLANE_ZY) { 259 dims[0] = 3; 260 } else if (plane == PLANE_XZ) { 261 dims[1] = 3; 262 } else { 263 dims[2] = 3; 264 } 265 _splatter->SetSampleDimensions(dims); 266 for (int i = 0; i < 3; i++) { 267 _cutter[i]->SetInputConnection(_splatter->GetOutputPort()); 268 vtkSmartPointer<vtkDataSetSurfaceFilter> gf = vtkSmartPointer<vtkDataSetSurfaceFilter>::New(); 269 gf->UseStripsOn(); 270 gf->SetInputConnection(_cutter[i]->GetOutputPort()); 271 _mapper[i]->SetInputConnection(gf->GetOutputPort()); 272 } 273 #endif 252 274 } else { 253 dims[2] = 3;254 }255 _splatter->SetSampleDimensions(dims);256 for (int i = 0; i < 3; i++) {257 _cutter[i]->SetInputConnection(_splatter->GetOutputPort());258 vtkSmartPointer<vtkDataSetSurfaceFilter> gf = vtkSmartPointer<vtkDataSetSurfaceFilter>::New();259 gf->UseStripsOn();260 gf->SetInputConnection(_cutter[i]->GetOutputPort());261 _mapper[i]->SetInputConnection(gf->GetOutputPort());262 }263 #endif264 } else {265 275 #ifdef MESH_POINT_CLOUDS 266 // Data Set is a 3D point cloud267 // Result of Delaunay3D mesher is unstructured grid268 vtkSmartPointer<vtkDelaunay3D> mesher = vtkSmartPointer<vtkDelaunay3D>::New();276 // Data Set is a 3D point cloud 277 // Result of Delaunay3D mesher is unstructured grid 278 vtkSmartPointer<vtkDelaunay3D> mesher = vtkSmartPointer<vtkDelaunay3D>::New(); 269 279 #ifdef USE_VTK6 270 mesher->SetInputData(pd);280 mesher->SetInputData(pd); 271 281 #else 272 mesher->SetInput(pd);273 #endif 274 // Sample a plane within the grid bounding box275 for (int i = 0; i < 3; i++) {276 _cutter[i]->SetInputConnection(mesher->GetOutputPort());277 vtkSmartPointer<vtkDataSetSurfaceFilter> gf = vtkSmartPointer<vtkDataSetSurfaceFilter>::New();278 gf->UseStripsOn();279 gf->SetInputConnection(_cutter[i]->GetOutputPort());280 _mapper[i]->SetInputConnection(gf->GetOutputPort());281 }282 mesher->SetInput(pd); 283 #endif 284 // Sample a plane within the grid bounding box 285 for (int i = 0; i < 3; i++) { 286 _cutter[i]->SetInputConnection(mesher->GetOutputPort()); 287 vtkSmartPointer<vtkDataSetSurfaceFilter> gf = vtkSmartPointer<vtkDataSetSurfaceFilter>::New(); 288 gf->UseStripsOn(); 289 gf->SetInputConnection(_cutter[i]->GetOutputPort()); 290 _mapper[i]->SetInputConnection(gf->GetOutputPort()); 291 } 282 292 #else 283 if (_splatter == NULL) {284 _splatter = vtkSmartPointer<vtkGaussianSplatter>::New();285 }293 if (_splatter == NULL) { 294 _splatter = vtkSmartPointer<vtkGaussianSplatter>::New(); 295 } 286 296 #ifdef USE_VTK6 287 _splatter->SetInputData(pd);297 _splatter->SetInputData(pd); 288 298 #else 289 _splatter->SetInput(pd); 290 #endif 291 int dims[3]; 292 dims[0] = dims[1] = dims[2] = 64; 293 TRACE("Generating volume with dims (%d,%d,%d) from point cloud", 294 dims[0], dims[1], dims[2]); 295 _splatter->SetSampleDimensions(dims); 296 for (int i = 0; i < 3; i++) { 297 _cutter[i]->SetInputConnection(_splatter->GetOutputPort()); 298 vtkSmartPointer<vtkDataSetSurfaceFilter> gf = vtkSmartPointer<vtkDataSetSurfaceFilter>::New(); 299 gf->UseStripsOn(); 300 gf->SetInputConnection(_cutter[i]->GetOutputPort()); 301 _mapper[i]->SetInputConnection(gf->GetOutputPort()); 302 } 303 #endif 304 } 305 } else { 306 // DataSet can be: image/volume/uniform grid, structured grid, unstructured grid, rectilinear grid, or 307 // PolyData with cells other than points 308 PrincipalPlane plane; 309 double offset; 310 if (!_dataSet->is2D(&plane, &offset)) { 311 // Sample a plane within the grid bounding box 312 for (int i = 0; i < 3; i++) { 313 #ifdef USE_VTK6 314 _cutter[i]->SetInputData(ds); 315 #else 316 _cutter[i]->SetInput(ds); 317 #endif 318 vtkSmartPointer<vtkDataSetSurfaceFilter> gf = vtkSmartPointer<vtkDataSetSurfaceFilter>::New(); 319 gf->UseStripsOn(); 320 gf->SetInputConnection(_cutter[i]->GetOutputPort()); 321 _mapper[i]->SetInputConnection(gf->GetOutputPort()); 299 _splatter->SetInput(pd); 300 #endif 301 int dims[3]; 302 dims[0] = dims[1] = dims[2] = 64; 303 TRACE("Generating volume with dims (%d,%d,%d) from point cloud", 304 dims[0], dims[1], dims[2]); 305 _splatter->SetSampleDimensions(dims); 306 for (int i = 0; i < 3; i++) { 307 _cutter[i]->SetInputConnection(_splatter->GetOutputPort()); 308 vtkSmartPointer<vtkDataSetSurfaceFilter> gf = vtkSmartPointer<vtkDataSetSurfaceFilter>::New(); 309 gf->UseStripsOn(); 310 gf->SetInputConnection(_cutter[i]->GetOutputPort()); 311 _mapper[i]->SetInputConnection(gf->GetOutputPort()); 312 } 313 #endif 322 314 } 323 315 } else { 324 // 2D data 325 if (plane == PLANE_ZY) { 326 _actor[1]->VisibilityOff(); 327 _actor[2]->VisibilityOff(); 328 } else if (plane == PLANE_XZ) { 329 _actor[0]->VisibilityOff(); 330 _actor[2]->VisibilityOff(); 331 } else if (offset != 0.0) { 332 // XY with Z offset 333 _actor[0]->VisibilityOff(); 334 _actor[1]->VisibilityOff(); 316 // DataSet can be: image/volume/uniform grid, structured grid, unstructured grid, rectilinear grid, or 317 // PolyData with cells other than points 318 PrincipalPlane plane; 319 double offset; 320 if (!_dataSet->is2D(&plane, &offset)) { 321 // Sample a plane within the grid bounding box 322 for (int i = 0; i < 3; i++) { 323 #ifdef USE_VTK6 324 _cutter[i]->SetInputData(ds); 325 #else 326 _cutter[i]->SetInput(ds); 327 #endif 328 vtkSmartPointer<vtkDataSetSurfaceFilter> gf = vtkSmartPointer<vtkDataSetSurfaceFilter>::New(); 329 gf->UseStripsOn(); 330 gf->SetInputConnection(_cutter[i]->GetOutputPort()); 331 _mapper[i]->SetInputConnection(gf->GetOutputPort()); 332 } 333 } else { 334 // 2D data 335 if (plane == PLANE_ZY) { 336 _actor[1]->VisibilityOff(); 337 _actor[2]->VisibilityOff(); 338 } else if (plane == PLANE_XZ) { 339 _actor[0]->VisibilityOff(); 340 _actor[2]->VisibilityOff(); 341 } else if (offset != 0.0) { 342 // XY with Z offset 343 _actor[0]->VisibilityOff(); 344 _actor[1]->VisibilityOff(); 345 } 346 for (int i = 0; i < 3; i++) { 347 vtkSmartPointer<vtkDataSetSurfaceFilter> gf = vtkSmartPointer<vtkDataSetSurfaceFilter>::New(); 348 gf->UseStripsOn(); 349 #ifdef USE_VTK6 350 gf->SetInputData(ds); 351 #else 352 gf->SetInput(ds); 353 #endif 354 _mapper[i]->SetInputConnection(gf->GetOutputPort()); 355 } 335 356 } 336 for (int i = 0; i < 3; i++) { 337 vtkSmartPointer<vtkDataSetSurfaceFilter> gf = vtkSmartPointer<vtkDataSetSurfaceFilter>::New(); 338 gf->UseStripsOn(); 339 #ifdef USE_VTK6 340 gf->SetInputData(ds); 341 #else 342 gf->SetInput(ds); 343 #endif 344 _mapper[i]->SetInputConnection(gf->GetOutputPort()); 345 } 346 } 347 } 357 } 358 } 359 360 _pipelineInitialized = true; 348 361 349 362 for (int i = 0; i < 3; i++) { 350 if (_mapper[i] != NULL ) {363 if (_mapper[i] != NULL && _borderMapper[i] == NULL) { 351 364 _borderMapper[i] = vtkSmartPointer<vtkPolyDataMapper>::New(); 352 365 #ifdef CUTPLANE_TIGHT_OUTLINE … … 386 399 if (_lut == NULL) { 387 400 setColorMap(ColorMap::getDefault()); 388 } 389 390 setColorMode(_colorMode); 401 setColorMode(_colorMode); 402 } 391 403 392 404 for (int i = 0; i < 3; i++) { … … 398 410 _borderActor[i]->SetMapper(_borderMapper[i]); 399 411 _borderMapper[i]->Update(); 412 } 413 // Only add cutter actor to assembly if geometry was 414 // produced, in order to prevent messing up assembly bounds 415 double bounds[6]; 416 _actor[i]->GetBounds(bounds); 417 if (bounds[0] <= bounds[1]) { 418 getAssembly()->AddPart(_actor[i]); 400 419 } 401 420 } … … 450 469 bounds[4], bounds[5]); 451 470 #endif 452 if (_mapper[0] != NULL)453 _mapper[0]->Update();454 471 break; 455 472 case Y_AXIS: … … 463 480 bounds[4], bounds[5]); 464 481 #endif 465 if (_mapper[1] != NULL)466 _mapper[1]->Update();467 482 break; 468 483 case Z_AXIS: … … 476 491 bounds[4] + (bounds[5]-bounds[4]) * ratio); 477 492 #endif 478 if (_mapper[2] != NULL)479 _mapper[2]->Update();480 493 break; 481 494 default: … … 483 496 return; 484 497 } 498 update(); 485 499 } 486 500 -
trunk/packages/vizservers/vtkvis/RpCutplane.h
r3330 r3499 97 97 virtual void update(); 98 98 99 bool _pipelineInitialized; 100 99 101 ColorMap *_colorMap; 100 102 ColorMode _colorMode;
Note: See TracChangeset
for help on using the changeset viewer.