Changeset 3142 for trunk/packages


Ignore:
Timestamp:
Aug 17, 2012 1:10:39 AM (12 years ago)
Author:
ldelgass
Message:

Fixes for bond scaling, add wireframe bonds

Location:
trunk/packages/vizservers/vtkvis
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/packages/vizservers/vtkvis/RpMolecule.cpp

    r3141 r3142  
    4040    VtkGraphicsObject(),
    4141    _radiusScale(0.3),
    42     _atomScaling(VAN_DER_WAALS_RADIUS),
     42    _atomScaling(COVALENT_RADIUS),
    4343    _labelsOn(false),
    4444    _colorMap(NULL)
     
    216216                _cylinderSource->SetResolution(12);
    217217                _cylinderSource->CappingOff();
     218                _cylinderTrans = vtkSmartPointer<vtkTransformPolyDataFilter>::New();
     219                _cylinderTrans->SetInputConnection(_cylinderSource->GetOutputPort());
     220                vtkSmartPointer<vtkTransform> trans = vtkSmartPointer<vtkTransform>::New();
     221                trans->RotateZ(-90.0);
     222                _cylinderTrans->SetTransform(trans);
    218223            }
    219             vtkSmartPointer<vtkTransformPolyDataFilter> transPD = vtkSmartPointer<vtkTransformPolyDataFilter>::New();
    220             transPD->SetInputConnection(_cylinderSource->GetOutputPort());
    221             vtkSmartPointer<vtkTransform> trans = vtkSmartPointer<vtkTransform>::New();
    222             trans->RotateZ(-90.0);
    223             transPD->SetTransform(trans);
    224 
    225             _bondMapper->SetSourceConnection(transPD->GetOutputPort());
     224            if (_lineSource == NULL) {
     225                _lineSource = vtkSmartPointer<vtkLineSource>::New();
     226                _lineSource->SetPoint1(-0.5, 0, 0);
     227                _lineSource->SetPoint2(0.5, 0, 0);
     228            }
     229
     230            _bondMapper->SetSourceConnection(_cylinderTrans->GetOutputPort());
    226231            _bondMapper->SetInputConnection(_bondPD->GetProducerPort());
    227             _bondMapper->SetOrientationArray(vtkDataSetAttributes::VECTORS);
     232            _bondMapper->SetOrientationArray("bond_orientations");
    228233            _bondMapper->SetOrientationModeToDirection();
    229234            _bondMapper->OrientOn();
    230             _bondMapper->SetScaleArray(vtkDataSetAttributes::VECTORS);
    231             _bondMapper->SetScaleModeToScaleByMagnitude();
     235            _bondMapper->SetScaleArray("bond_scales");
     236            _bondMapper->SetScaleModeToScaleByVectorComponents();
    232237            _bondMapper->ScalingOn();
    233238            _bondMapper->ClampingOff();
     
    614619}
    615620
     621void Molecule::setBondStyle(BondStyle style)
     622{
     623#ifdef MOLECULE_USE_GLYPH3D_MAPPER
     624    switch (style) {
     625    case BOND_STYLE_CYLINDER:
     626        if (_bondProp != NULL) {
     627            _bondProp->GetProperty()->SetLineWidth(_edgeWidth);
     628            _bondProp->GetProperty()->SetLighting(_lighting ? 1 : 0);
     629        }
     630        if (_bondMapper != NULL && _cylinderTrans != NULL) {
     631            _cylinderTrans->Modified();
     632            _bondMapper->SetSourceConnection(_cylinderTrans->GetOutputPort());
     633            _bondMapper->Modified();
     634        }
     635        break;
     636    case BOND_STYLE_LINE:
     637        if (_bondProp != NULL) {
     638            _bondProp->GetProperty()->LightingOff();
     639        }
     640        if (_bondMapper != NULL && _lineSource != NULL) {
     641            _lineSource->Modified();
     642            _bondMapper->SetSourceConnection(_lineSource->GetOutputPort());
     643            _bondMapper->Modified();
     644        }
     645         break;
     646    default:
     647        WARN("Unknown bond style");   
     648    }
     649#endif
     650}
     651
    616652/**
    617653 * \brief Set constant bond color
     
    680716        if (_atomMapper != NULL) {
    681717             assert(ds->GetPointData() != NULL &&
    682                    ds->GetPointData()->GetVectors() != NULL);
     718                    ds->GetPointData()->GetVectors() != NULL);
    683719            _atomMapper->SetScaleModeToScaleByMagnitude();
    684720            _atomMapper->SetScaleArray(vtkDataSetAttributes::VECTORS);
     
    708744{
    709745#ifndef MOLECULE_USE_GLYPH3D_MAPPER
    710     if (_tuber != NULL)
     746    if (_tuber != NULL) {
    711747        _tuber->SetRadius(scale);
     748    }
    712749#else
    713     if (_cylinderSource != NULL)
     750    if (_cylinderSource != NULL) {
    714751        _cylinderSource->SetRadius(scale);
     752        // Workaround bug with source modification not causing
     753        // mapper to be updated
     754        if (_bondMapper != NULL) {
     755            _bondMapper->Modified();
     756        }
     757    }
    715758#endif
    716759}
     
    735778    vtkSmartPointer<vtkIntArray> bondElements = vtkSmartPointer<vtkIntArray>::New();
    736779    vtkSmartPointer<vtkDoubleArray> bondVectors = vtkSmartPointer<vtkDoubleArray>::New();
     780    vtkSmartPointer<vtkDoubleArray> bondScales = vtkSmartPointer<vtkDoubleArray>::New();
    737781    bondElements->SetName("element");
    738     bondVectors->SetName("bonds");
     782    bondVectors->SetName("bond_orientations");
    739783    bondVectors->SetNumberOfComponents(3);
     784    bondScales->SetName("bond_scales");
     785    bondScales->SetNumberOfComponents(3);
    740786    vtkDataArray *elements = NULL;
    741787    if (pd->GetPointData() != NULL &&
     
    777823        TRACE("Bond %d, vec: %g,%g,%g", i, vec[0], vec[1], vec[2]);
    778824
     825        double scale[3];
     826        scale[0] = sqrt(vec[0]*vec[0] + vec[1]*vec[1] + vec[2]*vec[2]);
     827        scale[1] = 1.0;
     828        scale[2] = 1.0;
     829
     830        bondScales->InsertNextTupleValue(scale);
     831        bondScales->InsertNextTupleValue(scale);
     832
    779833        if (elements != NULL) {
    780834            int element = (int)elements->GetComponent(pts[0], 0);
     
    787841    }
    788842    _bondPD->SetPoints(bondPoints);
    789     _bondPD->GetPointData()->SetScalars(bondElements);
    790     _bondPD->GetPointData()->SetVectors(bondVectors);
     843    if (elements != NULL)
     844        _bondPD->GetPointData()->SetScalars(bondElements);
     845    _bondPD->GetPointData()->AddArray(bondVectors);
     846    _bondPD->GetPointData()->AddArray(bondScales);
    791847}
    792848#endif
  • trunk/packages/vizservers/vtkvis/RpMolecule.h

    r3141 r3142  
    1818#define MOLECULE_USE_GLYPH3D_MAPPER
    1919#include <vtkGlyph3DMapper.h>
     20#include <vtkTransformPolyDataFilter.h>
    2021#include <vtkCylinderSource.h>
     22#include <vtkLineSource.h>
    2123#else
    2224#include <vtkGlyph3D.h>
     
    4951        COVALENT_RADIUS,
    5052        ATOMIC_RADIUS
     53    };
     54    enum BondStyle {
     55        BOND_STYLE_CYLINDER,
     56        BOND_STYLE_LINE
    5157    };
    5258    enum ColorMode {
     
    120126    void setBondVisibility(bool state);
    121127
     128    void setBondStyle(BondStyle style);
     129
    122130    void setBondColor(float color[3]);
    123131
     
    163171    vtkSmartPointer<vtkPolyData> _bondPD;
    164172    vtkSmartPointer<vtkCylinderSource> _cylinderSource;
     173    vtkSmartPointer<vtkTransformPolyDataFilter>_cylinderTrans;
     174    vtkSmartPointer<vtkLineSource> _lineSource;
    165175    vtkSmartPointer<vtkGlyph3DMapper> _atomMapper;
    166176    vtkSmartPointer<vtkGlyph3DMapper> _bondMapper;
Note: See TracChangeset for help on using the changeset viewer.