source: branches/blt4/packages/vizservers/vtkvis/RpVtkDataSet.cpp @ 2120

Last change on this file since 2120 was 2120, checked in by gah, 14 years ago
File size: 2.3 KB
Line 
1/* -*- mode: c++; c-basic-offset: 4; indent-tabs-mode: nil -*- */
2/*
3 * Copyright (C) 2011, Purdue Research Foundation
4 *
5 * Author: Leif Delgass <ldelgass@purdue.edu>
6 */
7
8#include <vtkCharArray.h>
9#include <vtkDataSetReader.h>
10#include <vtkDataSetMapper.h>
11#include <vtkProperty.h>
12#include <vtkPointData.h>
13#include <vtkLookupTable.h>
14
15#include "RpVtkDataSet.h"
16#include "Trace.h"
17
18using namespace Rappture::VtkVis;
19
20DataSet::DataSet(const std::string& name)
21{
22    _name = name;
23    _dataRange[0] = 0.0;
24    _dataRange[1] = 1.0;
25}
26
27DataSet::~DataSet()
28{
29}
30
31/**
32 * \brief Read a VTK data file
33 */
34bool DataSet::setDataFile(const char *filename)
35{
36    vtkSmartPointer<vtkDataSetReader> reader = vtkSmartPointer<vtkDataSetReader>::New();
37    reader->SetFileName(filename);
38    return setData(reader);
39}
40
41/**
42 * \brief Read a VTK data file from a memory buffer
43 */
44bool DataSet::setData(char *data, int nbytes)
45{
46    vtkSmartPointer<vtkDataSetReader> reader = vtkSmartPointer<vtkDataSetReader>::New();
47    vtkSmartPointer<vtkCharArray> dataSetString = vtkSmartPointer<vtkCharArray>::New();
48
49    dataSetString->SetArray(data, nbytes, 1);
50    reader->SetInputArray(dataSetString);
51    reader->ReadFromInputStringOn();
52    return setData(reader);
53}
54
55/**
56 * \brief Read dataset using supplied reader
57 */
58bool DataSet::setData(vtkDataSetReader *reader)
59{
60    // Force reading data set
61    reader->SetLookupTableName("");
62    _dataSet = reader->GetOutput();
63    _dataSet->Update();
64    _dataSet->GetScalarRange(_dataRange);
65
66    TRACE("Scalar Range: %.12e, %.12e", _dataRange[0], _dataRange[1]);
67    return true;
68}
69
70/**
71 * \brief Get the name/id of this dataset
72 */
73const std::string& DataSet::getName()
74{
75    return _name;
76}
77
78/**
79 * \brief Get the underlying VTK DataSet object
80 */
81vtkDataSet *DataSet::getVtkDataSet()
82{
83    return _dataSet;
84}
85
86/**
87 * \brief Get the range of scalar values in the DataSet
88 */
89void DataSet::getDataRange(double minmax[2])
90{
91    minmax[0] = _dataRange[0];
92    minmax[1] = _dataRange[1];
93}
94
95/**
96 * \brief Get nearest data value given world coordinates x,y,z
97 *
98 * Note: no interpolation is performed on data
99 */
100double DataSet::getDataValue(double x, double y, double z)
101{
102    if (_dataSet == NULL)
103        return 0;
104    vtkIdType pt = _dataSet->FindPoint(x, y, z);
105    return _dataSet->GetPointData()->GetScalars()->GetComponent(pt, 0);
106}
Note: See TracBrowser for help on using the repository browser.