Changeset 3109 for trunk/packages
- Timestamp:
- Jul 23, 2012 11:40:05 AM (12 years ago)
- Location:
- trunk/packages/vizservers/vtkvis
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/packages/vizservers/vtkvis/RpMolecule.cpp
r3103 r3109 27 27 Molecule::Molecule() : 28 28 VtkGraphicsObject(), 29 _radiusScale( 1.0),30 _atomScaling( NO_ATOM_SCALING),29 _radiusScale(0.3), 30 _atomScaling(VAN_DER_WAALS_RADIUS), 31 31 _colorMap(NULL) 32 32 { … … 105 105 WARN("No element array in dataset %s", _dataSet->getName().c_str()); 106 106 setColorMap(ColorMap::getDefault()); 107 if (_atomScaling != NO_ATOM_SCALING) 108 _atomScaling = NO_ATOM_SCALING; 107 109 } else { 108 110 TRACE("Using element default colormap"); … … 125 127 if (pd->GetNumberOfLines() > 0) { 126 128 // Bonds 127 vtkSmartPointer<vtkTubeFilter> tuber = vtkSmartPointer<vtkTubeFilter>::New(); 128 tuber->SetInput(pd); 129 tuber->SetNumberOfSides(12); 130 tuber->CappingOff(); 131 tuber->SetRadius(.03); 132 tuber->SetVaryRadiusToVaryRadiusOff(); 133 _bondMapper->SetInputConnection(tuber->GetOutputPort()); 129 if (_tuber == NULL) 130 _tuber = vtkSmartPointer<vtkTubeFilter>::New(); 131 _tuber->SetInput(pd); 132 _tuber->SetNumberOfSides(12); 133 _tuber->CappingOff(); 134 _tuber->SetRadius(0.075); 135 _tuber->SetVaryRadiusToVaryRadiusOff(); 136 _bondMapper->SetInputConnection(_tuber->GetOutputPort()); 134 137 _bondProp->SetMapper(_bondMapper); 135 138 getAssembly()->AddPart(_bondProp); … … 138 141 // Atoms 139 142 vtkSmartPointer<vtkSphereSource> sphereSource = vtkSmartPointer<vtkSphereSource>::New(); 140 sphereSource->SetRadius( .08);143 sphereSource->SetRadius(1.0); 141 144 sphereSource->SetThetaResolution(14); 142 145 sphereSource->SetPhiResolution(14); … … 276 279 addRadiusArray(ds, _atomScaling, _radiusScale); 277 280 if (_glypher != NULL) { 278 if (_atomScaling != NO_ATOM_SCALING && 279 ds->GetPointData() != NULL && 280 ds->GetPointData()->GetVectors() != NULL) { 281 _glypher->SetScaleModeToScaleByVector(); 282 _glypher->ScalingOn(); 283 } else { 284 _glypher->SetScaleModeToDataScalingOff(); 285 _glypher->ScalingOff(); 286 } 281 assert(ds->GetPointData() != NULL && 282 ds->GetPointData()->GetVectors() != NULL); 283 _glypher->SetScaleModeToScaleByVector(); 284 _glypher->ScalingOn(); 287 285 } 288 286 } … … 303 301 304 302 /** 303 * \brief Set the constant radius scaling factor for bonds. 304 */ 305 void Molecule::setBondRadiusScale(double scale) 306 { 307 if (_tuber != NULL) 308 _tuber->SetRadius(scale); 309 } 310 311 /** 305 312 * \brief Add a scalar array to dataSet with sizes for the elements 306 313 * specified in the "element" scalar array … … 308 315 void Molecule::addRadiusArray(vtkDataSet *dataSet, AtomScaling scaling, double scaleFactor) 309 316 { 310 if (dataSet->GetPointData() == NULL ||311 dataSet->GetPointData()->GetScalars() == NULL) {312 return;313 }314 vtkDataArray *elements = dataSet->GetPointData()->GetScalars();315 if (strcmp(elements->GetName(), "element") != 0) {316 return;317 vtkDataArray *elements = NULL; 318 if (dataSet->GetPointData() != NULL && 319 dataSet->GetPointData()->GetScalars() != NULL && 320 strcmp(dataSet->GetPointData()->GetScalars()->GetName(), "element") == 0) { 321 elements = dataSet->GetPointData()->GetScalars(); 322 } else if (scaling != NO_ATOM_SCALING) { 323 WARN("Can't use non-constant scaling without an element array"); 317 324 } 318 325 const float *radiusSource = NULL; … … 329 336 case NO_ATOM_SCALING: 330 337 default: 331 return;338 ; 332 339 } 333 340 vtkSmartPointer<vtkFloatArray> radii = vtkSmartPointer<vtkFloatArray>::New(); 334 341 radii->SetName("radius"); 335 342 radii->SetNumberOfComponents(3); 336 for (int i = 0; i < elements->GetNumberOfTuples(); i++) { 337 int elt = (int)elements->GetComponent(i, 0); 343 vtkPolyData *pd = vtkPolyData::SafeDownCast(dataSet); 344 if (pd == NULL) { 345 ERROR("DataSet not a PolyData"); 346 return; 347 } 348 for (int i = 0; i < pd->GetNumberOfVerts(); i++) { 338 349 float tuple[3]; 339 tuple[0] = radiusSource[elt] * scaleFactor; 340 tuple[1] = 0; 341 tuple[2] = 0; 350 tuple[1] = tuple[2] = 0; 351 if (elements != NULL && radiusSource != NULL) { 352 int elt = (int)elements->GetComponent(i, 0); 353 tuple[0] = radiusSource[elt] * scaleFactor; 354 } else { 355 tuple[0] = scaleFactor; 356 } 342 357 radii->InsertNextTupleValue(tuple); 343 358 } -
trunk/packages/vizservers/vtkvis/RpMolecule.h
r3086 r3109 14 14 #include <vtkActor.h> 15 15 #include <vtkAssembly.h> 16 #include <vtkTubeFilter.h> 16 17 #include <vtkGlyph3D.h> 17 18 … … 70 71 void setAtomRadiusScale(double scale); 71 72 73 void setBondRadiusScale(double scale); 74 72 75 void setAtomVisibility(bool state); 73 76 … … 90 93 vtkSmartPointer<vtkActor> _bondProp; 91 94 vtkSmartPointer<vtkGlyph3D> _glypher; 95 vtkSmartPointer<vtkTubeFilter> _tuber; 92 96 vtkSmartPointer<vtkPolyDataMapper> _atomMapper; 93 97 vtkSmartPointer<vtkPolyDataMapper> _bondMapper;
Note: See TracChangeset
for help on using the changeset viewer.