1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140
|
/*=========================================================================
Program: Visualization Toolkit
Module: vtkRAdapter.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 2009 Sandia Corporation.
Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation,
the U.S. Government retains certain rights in this software.
-------------------------------------------------------------------------*/
/**
* @class vtkRAdapter
* @brief This is a utility class to convert VTK array data and
* VTK tables to and from Gnu R S expression (SEXP) data structures. It is used
* with the R .Call interface and the embedded R interpreter.
*
*
*
* This class creates deep copies of input data. Created R SEXP variables created
* by these functions can be freed by the R garbage collector by calling UNPROTECT(1).
* The conversions are performed for double and integer data types.
*
* VTK data structures created by this class from R types are stored in array collections
* and freed when the class destructor is called. Use the Register() method on a returned
* object to increase its reference count by one, in order keep the object around after this
* classes destructor has been called. The code calling Register() must eventually call Delete()
* on the object to free memory.
*
* @sa
* vtkRinterface vtkRcalculatorFilter
*
* @par Thanks:
* Developed by Thomas Otahal at Sandia National Laboratories.
*
*/
#ifndef vtkRAdapter_h
#define vtkRAdapter_h
#include "vtkFiltersStatisticsGnuRModule.h" // For export macro
#include "vtkObject.h"
#ifndef VTK_BUILDING_FILTERS_STATISTICSGNUR
#define R_NO_REMAP /* Don't pollute the namespace (some of which conflict). DO NOT REMOVE. */
#endif
#include "Rinternals.h" // Needed for Rinternals.h SEXP data structure
class vtkInformation;
class vtkInformationVector;
class vtkDataArray;
class vtkArray;
class vtkTable;
class vtkTree;
class vtkDataArrayCollection;
class vtkArrayData;
class vtkDataObjectCollection;
class VTKFILTERSSTATISTICSGNUR_EXPORT vtkRAdapter : public vtkObject
{
public:
vtkTypeMacro(vtkRAdapter, vtkObject);
void PrintSelf(ostream& os, vtkIndent indent);
static vtkRAdapter *New();
/**
* Create a vtkDataArray copy of GNU R input matrix vaiable (deep copy, allocates memory)
* Input is a R matrix or vector of doubles or integers
*/
vtkDataArray* RToVTKDataArray(SEXP variable);
/**
* Create a vtkArray copy of the GNU R input variable multi-dimensional array (deep copy, allocates memory)
* Input is a R multi-dimensional array of doubles or integers
*/
vtkArray* RToVTKArray(SEXP variable);
/**
* Create a GNU R matrix copy of the input vtkDataArray da (deep copy, allocates memory)
*/
SEXP VTKDataArrayToR(vtkDataArray* da);
/**
* Create a GNU R multi-dimensional array copy of the input vtkArray da (deep copy, allocates memory)
*/
SEXP VTKArrayToR(vtkArray* da);
/**
* Create a GNU R matrix copy of the input vtkTable table (deep copy, allocates memory)
*/
SEXP VTKTableToR(vtkTable* table);
/**
* Create a vtkTable copy of the GNU R input matrix variable (deep copy, allocates memory)
* Input is R list of equal length vectors or a matrix.
*/
vtkTable* RToVTKTable(SEXP variable);
/**
* Create a GNU R phylo tree copy of the input vtkTree tree (deep copy, allocates memory)
*/
SEXP VTKTreeToR(vtkTree* tree);
/**
* Create a vtkTree copy of the GNU R input phylo tree variable (deep copy, allocates memory)
*/
vtkTree* RToVTKTree(SEXP variable);
protected:
vtkRAdapter();
~vtkRAdapter();
private:
vtkRAdapter(const vtkRAdapter&) VTK_DELETE_FUNCTION;
void operator=(const vtkRAdapter&) VTK_DELETE_FUNCTION;
vtkDataArrayCollection* vdac; // Collection of vtkDataArrays that have been converted from R.
vtkArrayData* vad; // Collection of vtkArrays that have been converted from R.
vtkDataObjectCollection* vdoc; // Collection of vtkTables that have been converted from R.
};
#endif
|