Changeset 3641 for trunk


Ignore:
Timestamp:
Apr 28, 2013, 5:29:39 PM (11 years ago)
Author:
ldelgass
Message:

Add protocol to set field used for atom labels in vtkvis molecules. Also use
point data for atoms even if VTK file doesn't specify vertices.

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

Legend:

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

    r3621 r3641  
    181181    vtkPolyData *pd = vtkPolyData::SafeDownCast(ds);
    182182    if (pd) {
    183         TRACE("Verts: %d Lines: %d Polys: %d Strips: %d",
    184                   pd->GetNumberOfVerts(),
    185                   pd->GetNumberOfLines(),
    186                   pd->GetNumberOfPolys(),
    187                   pd->GetNumberOfStrips());
     183        TRACE("Points: %d Verts: %d Lines: %d Polys: %d Strips: %d",
     184              pd->GetNumberOfPoints(),
     185              pd->GetNumberOfVerts(),
     186              pd->GetNumberOfLines(),
     187              pd->GetNumberOfPolys(),
     188              pd->GetNumberOfStrips());
    188189        // DataSet is a vtkPolyData
    189190        if (pd->GetNumberOfLines() > 0) {
     
    226227            getAssembly()->AddPart(_bondProp);
    227228        }
    228         if (pd->GetNumberOfVerts() > 0) {
    229             vtkSmartPointer<vtkPointSetToLabelHierarchy> hier = vtkSmartPointer<vtkPointSetToLabelHierarchy>::New();
     229        if (pd->GetNumberOfPoints() > 0) {
     230            if (_labelHierarchy == NULL) {
     231                _labelHierarchy = vtkSmartPointer<vtkPointSetToLabelHierarchy>::New();
     232            }
    230233#ifdef USE_VTK6
    231             hier->SetInputData(pd);
     234            _labelHierarchy->SetInputData(pd);
    232235#else
    233             hier->SetInput(pd);
     236            _labelHierarchy->SetInput(pd);
    234237#endif
    235             hier->SetLabelArrayName("labels");
    236             hier->GetTextProperty()->SetColor(0, 0, 0);
    237             _labelMapper->SetInputConnection(hier->GetOutputPort());
     238            _labelHierarchy->SetLabelArrayName("_atom_labels");
     239            _labelHierarchy->GetTextProperty()->SetColor(0, 0, 0);
     240            _labelMapper->SetInputConnection(_labelHierarchy->GetOutputPort());
    238241            _labelProp->SetMapper(_labelMapper);
    239242
     
    588591}
    589592
     593void Molecule::setAtomLabelField(const char *fieldName)
     594{
     595    if (_labelHierarchy != NULL) {
     596        if (strcmp(fieldName, "default") == 0) {
     597            _labelHierarchy->SetLabelArrayName("_atom_labels");
     598        } else {
     599            _labelHierarchy->SetLabelArrayName(fieldName);
     600        }
     601    }
     602}
     603
    590604/**
    591605 * \brief Turn on/off rendering of atom labels
     
    866880
    867881    vtkSmartPointer<vtkStringArray> labelArray = vtkSmartPointer<vtkStringArray>::New();
    868     labelArray->SetName("labels");
     882    labelArray->SetName("_atom_labels");
    869883    vtkPolyData *pd = vtkPolyData::SafeDownCast(dataSet);
    870884    if (pd == NULL) {
     
    872886        return;
    873887    }
    874     for (int i = 0; i < pd->GetNumberOfVerts(); i++) {
     888    for (int i = 0; i < pd->GetNumberOfPoints(); i++) {
    875889        char buf[32];
    876890        if (elements != NULL) {
     
    915929    }
    916930    vtkSmartPointer<vtkFloatArray> radii = vtkSmartPointer<vtkFloatArray>::New();
    917     radii->SetName("radius");
     931    radii->SetName("_radii");
    918932    radii->SetNumberOfComponents(3);
    919933    vtkPolyData *pd = vtkPolyData::SafeDownCast(dataSet);
     
    922936        return;
    923937    }
    924     for (int i = 0; i < pd->GetNumberOfVerts(); i++) {
     938    for (int i = 0; i < pd->GetNumberOfPoints(); i++) {
    925939        float tuple[3];
    926940        tuple[1] = tuple[2] = 0;
  • trunk/packages/vizservers/vtkvis/Molecule.h

    r3621 r3641  
    1919#include <vtkCylinderSource.h>
    2020#include <vtkLineSource.h>
     21#include <vtkPointSetToLabelHierarchy.h>
    2122#include <vtkLabelPlacementMapper.h>
    2223
     
    117118    void setAtomLabelVisibility(bool state);
    118119
     120    void setAtomLabelField(const char *fieldName);
     121
    119122    void setBondVisibility(bool state);
    120123
     
    160163    vtkSmartPointer<vtkGlyph3DMapper> _atomMapper;
    161164    vtkSmartPointer<vtkGlyph3DMapper> _bondMapper;
     165    vtkSmartPointer<vtkPointSetToLabelHierarchy> _labelHierarchy;
    162166    vtkSmartPointer<vtkLabelPlacementMapper> _labelMapper;
    163167};
  • trunk/packages/vizservers/vtkvis/Renderer.h

    r3621 r3641  
    703703    void setMoleculeAtomVisibility(const DataSetId& id, bool state);
    704704
     705    void setMoleculeAtomLabelField(const DataSetId& id, const char *fieldName);
     706
    705707    void setMoleculeAtomLabelVisibility(const DataSetId& id, bool state);
    706708
  • trunk/packages/vizservers/vtkvis/RendererCmd.cpp

    r3621 r3641  
    65986598
    65996599static int
     6600MoleculeAtomLabelFieldOp(ClientData clientData, Tcl_Interp *interp, int objc,
     6601                         Tcl_Obj *const *objv)
     6602{
     6603    const char *fieldName = Tcl_GetString(objv[2]);
     6604    if (objc == 4) {
     6605        const char *name = Tcl_GetString(objv[3]);
     6606        g_renderer->setMoleculeAtomLabelField(name, fieldName);
     6607    } else {
     6608        g_renderer->setMoleculeAtomLabelField("all", fieldName);
     6609    }
     6610    return TCL_OK;
     6611}
     6612
     6613
     6614static int
    66006615MoleculeAtomLabelVisibilityOp(ClientData clientData, Tcl_Interp *interp, int objc,
    66016616                              Tcl_Obj *const *objv)
     
    70437058    {"edges",        1, MoleculeEdgeVisibilityOp, 3, 4, "bool ?dataSetName?"},
    70447059    {"labels",       2, MoleculeAtomLabelVisibilityOp, 3, 4, "bool ?dataSetName?"},
     7060    {"lfield",       2, MoleculeAtomLabelFieldOp, 3, 4, "fieldName ?dataSetName?"},
    70457061    {"lighting",     3, MoleculeLightingOp, 3, 4, "bool ?dataSetName?"},
    70467062    {"linecolor",    5, MoleculeLineColorOp, 5, 6, "r g b ?dataSetName?"},
  • trunk/packages/vizservers/vtkvis/RendererGraphicsObjs.cpp

    r3621 r3641  
    19531953}
    19541954
     1955void Renderer::setMoleculeAtomLabelField(const DataSetId& id, const char *fieldName)
     1956{
     1957    MoleculeHashmap::iterator itr;
     1958
     1959    bool doAll = false;
     1960
     1961    if (id.compare("all") == 0) {
     1962        itr = _molecules.begin();
     1963        if (itr == _molecules.end())
     1964            return;
     1965        doAll = true;
     1966    } else {
     1967        itr = _molecules.find(id);
     1968    }
     1969    if (itr == _molecules.end()) {
     1970        ERROR("Molecule not found: %s", id.c_str());
     1971        return;
     1972    }
     1973
     1974    do {
     1975        itr->second->setAtomLabelField(fieldName);
     1976    } while (doAll && ++itr != _molecules.end());
     1977
     1978    _needsRedraw = true;
     1979}
     1980
    19551981/**
    19561982 * \brief Turn on/off rendering of the Molecule atom labels for the given DataSet
  • trunk/packages/vizservers/vtkvis/protocol.txt

    r3615 r3641  
    573573molecule edges <bool> <?datasetName?>
    574574molecule labels <bool> <?datasetName?>
     575         Toggle display of atom labels
     576molecule lfield <fieldName> <?datasetName?>
     577         Set the field used for atom labels
    575578molecule lighting <bool> <?datasetName?>
    576579molecule linecolor <r> <g> <b> <?datasetName?>
Note: See TracChangeset for help on using the changeset viewer.