You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
184 lines
5.6 KiB
C++
184 lines
5.6 KiB
C++
/*=========================================================================
|
|
|
|
Program: Visualization Toolkit
|
|
Module: vtkStringToNumeric.h
|
|
|
|
Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
|
|
All rights reserved.
|
|
See Copyright.txt or http://www.kitware.com/Copyright.htm for details.
|
|
|
|
This software is distributed WITHOUT ANY WARRANTY; without even
|
|
the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
|
|
PURPOSE. See the above copyright notice for more information.
|
|
|
|
=========================================================================*/
|
|
/*-------------------------------------------------------------------------
|
|
Copyright 2008 Sandia Corporation.
|
|
Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation,
|
|
the U.S. Government retains certain rights in this software.
|
|
-------------------------------------------------------------------------*/
|
|
/**
|
|
* @class vtkStringToNumeric
|
|
* @brief Converts string arrays to numeric arrays
|
|
*
|
|
*
|
|
* vtkStringToNumeric is a filter for converting a string array
|
|
* into a numeric arrays.
|
|
*/
|
|
|
|
#ifndef vtkStringToNumeric_h
|
|
#define vtkStringToNumeric_h
|
|
|
|
#include "vtkDataObjectAlgorithm.h"
|
|
#include "vtkInfovisCoreModule.h" // For export macro
|
|
|
|
class VTKINFOVISCORE_EXPORT vtkStringToNumeric : public vtkDataObjectAlgorithm
|
|
{
|
|
public:
|
|
static vtkStringToNumeric* New();
|
|
vtkTypeMacro(vtkStringToNumeric, vtkDataObjectAlgorithm);
|
|
void PrintSelf(ostream& os, vtkIndent indent) override;
|
|
|
|
//@{
|
|
/**
|
|
* Convert all numeric columns to vtkDoubleArray, even if they
|
|
* contain only integer values. Default is off.
|
|
*/
|
|
vtkSetMacro(ForceDouble, bool);
|
|
vtkGetMacro(ForceDouble, bool);
|
|
vtkBooleanMacro(ForceDouble, bool);
|
|
//@}
|
|
|
|
//@{
|
|
/**
|
|
* Set the default integer value assigned to arrays. Default is 0.
|
|
*/
|
|
vtkSetMacro(DefaultIntegerValue, int);
|
|
vtkGetMacro(DefaultIntegerValue, int);
|
|
//@}
|
|
|
|
//@{
|
|
/**
|
|
* Set the default double value assigned to arrays. Default is 0.0
|
|
*/
|
|
vtkSetMacro(DefaultDoubleValue, double);
|
|
vtkGetMacro(DefaultDoubleValue, double);
|
|
//@}
|
|
|
|
//@{
|
|
/**
|
|
* Whether to trim whitespace from strings prior to conversion to a numeric.
|
|
* Default is false to preserve backward compatibility.
|
|
|
|
* vtkVariant handles whitespace inconsistently, so trim it before we try to
|
|
* convert it. For example:
|
|
|
|
* vtkVariant(" 2.0").ToDouble() == 2.0 <-- leading whitespace is not a problem
|
|
* vtkVariant(" 2.0 ").ToDouble() == NaN <-- trailing whitespace is a problem
|
|
* vtkVariant(" infinity ").ToDouble() == NaN <-- any whitespace is a problem
|
|
|
|
* In these cases, trimming the whitespace gives us the result we expect:
|
|
* 2.0 and INF respectively.
|
|
*/
|
|
vtkSetMacro(TrimWhitespacePriorToNumericConversion, bool);
|
|
vtkGetMacro(TrimWhitespacePriorToNumericConversion, bool);
|
|
vtkBooleanMacro(TrimWhitespacePriorToNumericConversion, bool);
|
|
//@}
|
|
|
|
//@{
|
|
/**
|
|
* Whether to detect and convert field data arrays. Default is on.
|
|
*/
|
|
vtkSetMacro(ConvertFieldData, bool);
|
|
vtkGetMacro(ConvertFieldData, bool);
|
|
vtkBooleanMacro(ConvertFieldData, bool);
|
|
//@}
|
|
|
|
//@{
|
|
/**
|
|
* Whether to detect and convert cell data arrays. Default is on.
|
|
*/
|
|
vtkSetMacro(ConvertPointData, bool);
|
|
vtkGetMacro(ConvertPointData, bool);
|
|
vtkBooleanMacro(ConvertPointData, bool);
|
|
//@}
|
|
|
|
//@{
|
|
/**
|
|
* Whether to detect and convert point data arrays. Default is on.
|
|
*/
|
|
vtkSetMacro(ConvertCellData, bool);
|
|
vtkGetMacro(ConvertCellData, bool);
|
|
vtkBooleanMacro(ConvertCellData, bool);
|
|
//@}
|
|
|
|
/**
|
|
* Whether to detect and convert vertex data arrays. Default is on.
|
|
*/
|
|
virtual void SetConvertVertexData(bool b) { this->SetConvertPointData(b); }
|
|
virtual bool GetConvertVertexData() { return this->GetConvertPointData(); }
|
|
vtkBooleanMacro(ConvertVertexData, bool);
|
|
|
|
/**
|
|
* Whether to detect and convert edge data arrays. Default is on.
|
|
*/
|
|
virtual void SetConvertEdgeData(bool b) { this->SetConvertCellData(b); }
|
|
virtual bool GetConvertEdgeData() { return this->GetConvertCellData(); }
|
|
vtkBooleanMacro(ConvertEdgeData, bool);
|
|
|
|
/**
|
|
* Whether to detect and convert row data arrays. Default is on.
|
|
*/
|
|
virtual void SetConvertRowData(bool b) { this->SetConvertPointData(b); }
|
|
virtual bool GetConvertRowData() { return this->GetConvertPointData(); }
|
|
vtkBooleanMacro(ConvertRowData, bool);
|
|
|
|
/**
|
|
* This is required to capture REQUEST_DATA_OBJECT requests.
|
|
*/
|
|
vtkTypeBool ProcessRequest(vtkInformation* request, vtkInformationVector** inputVector,
|
|
vtkInformationVector* outputVector) override;
|
|
|
|
protected:
|
|
vtkStringToNumeric();
|
|
~vtkStringToNumeric() override;
|
|
|
|
/**
|
|
* Creates the same output type as the input type.
|
|
*/
|
|
int RequestDataObject(vtkInformation* request, vtkInformationVector** inputVector,
|
|
vtkInformationVector* outputVector) override;
|
|
|
|
/**
|
|
* Tries to convert string arrays to integer or double arrays.
|
|
*/
|
|
void ConvertArrays(vtkFieldData* fieldData);
|
|
|
|
bool ConvertFieldData;
|
|
bool ConvertPointData;
|
|
bool ConvertCellData;
|
|
bool ForceDouble;
|
|
int DefaultIntegerValue;
|
|
double DefaultDoubleValue;
|
|
bool TrimWhitespacePriorToNumericConversion;
|
|
|
|
/**
|
|
* Count the total number of items (array components) that will need
|
|
* to be converted in the given vtkFieldData. This lets us emit
|
|
* ProgressEvent.
|
|
*/
|
|
int CountItemsToConvert(vtkFieldData* fieldData);
|
|
|
|
// These keep track of our progress
|
|
int ItemsToConvert;
|
|
int ItemsConverted;
|
|
|
|
int RequestData(vtkInformation*, vtkInformationVector**, vtkInformationVector*) override;
|
|
|
|
private:
|
|
vtkStringToNumeric(const vtkStringToNumeric&) = delete;
|
|
void operator=(const vtkStringToNumeric&) = delete;
|
|
};
|
|
|
|
#endif
|