vtkRAdapter.h 4.44 KB
Newer Older
Thomas Otahal's avatar
   
Thomas Otahal committed
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21

/*=========================================================================

  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.
-------------------------------------------------------------------------*/

22
// .NAME vtkRAdapter - This is a utility class to convert VTK array data and
Thomas Otahal's avatar
   
Thomas Otahal committed
23
24
25
26
27
28
29
30
31
//  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.
//
// .SECTION Description
//
//  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.
//
32
33
34
//  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
35
//  classes destructor has been called.  The code calling Register() must eventually call Delete()
36
37
//  on the object to free memory.
//
Thomas Otahal's avatar
   
Thomas Otahal committed
38
39
40
41
42
43
44
45
// .SECTION See Also
//  vtkRinterface vtkRcalculatorFilter
//
// .SECTION Thanks
//  Developed by Thomas Otahal at Sandia National Laboratories.
//


46
47
#ifndef vtkRAdapter_h
#define vtkRAdapter_h
Thomas Otahal's avatar
   
Thomas Otahal committed
48

49
#include "vtkFiltersStatisticsGnuRModule.h" // For export macro
Thomas Otahal's avatar
   
Thomas Otahal committed
50
#include "vtkObject.h"
51
52
53

#define R_NO_REMAP /* Don't pollute the namespace (some of which conflict). DO NOT REMOVE. */

Thomas Otahal's avatar
   
Thomas Otahal committed
54
55
56
57
58
59
60
#include "Rinternals.h" // Needed for Rinternals.h SEXP data structure

class vtkInformation;
class vtkInformationVector;
class vtkDataArray;
class vtkArray;
class vtkTable;
61
class vtkTree;
62
63
64
class vtkDataArrayCollection;
class vtkArrayData;
class vtkDataObjectCollection;
Thomas Otahal's avatar
   
Thomas Otahal committed
65

66
class VTKFILTERSSTATISTICSGNUR_EXPORT vtkRAdapter : public vtkObject
Thomas Otahal's avatar
   
Thomas Otahal committed
67
68
69
70
{

public:

71
  vtkTypeMacro(vtkRAdapter, vtkObject);
Thomas Otahal's avatar
   
Thomas Otahal committed
72
73
74
75
76
77
78
79
80

  void PrintSelf(ostream& os, vtkIndent indent);

  static vtkRAdapter *New();

//BTX
  // Description:
  // 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
81
  vtkDataArray* RToVTKDataArray(SEXP variable);
Thomas Otahal's avatar
   
Thomas Otahal committed
82
83
84
85

  // Description:
  // 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
86
  vtkArray* RToVTKArray(SEXP variable);
Thomas Otahal's avatar
   
Thomas Otahal committed
87
88
89

  // Description:
  // Create a GNU R matrix copy of the input vtkDataArray da (deep copy, allocates memory)
90
  SEXP VTKDataArrayToR(vtkDataArray* da);
Thomas Otahal's avatar
   
Thomas Otahal committed
91
92
93

  // Description:
  // Create a GNU R multi-dimensional array copy of the input vtkArray da (deep copy, allocates memory)
94
  SEXP VTKArrayToR(vtkArray* da);
Thomas Otahal's avatar
   
Thomas Otahal committed
95
96
97

  // Description:
  // Create a GNU R matrix copy of the input vtkTable table (deep copy, allocates memory)
98
  SEXP VTKTableToR(vtkTable* table);
Thomas Otahal's avatar
   
Thomas Otahal committed
99
100
101
102

  // Description:
  // 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.
103
  vtkTable* RToVTKTable(SEXP variable);
104
105
106
107
108
109
110
111

  // Description:
  // Create a GNU R phylo tree copy of the input vtkTree tree (deep copy, allocates memory)
  SEXP VTKTreeToR(vtkTree* tree);

  // Description:
  // Create a vtkTree copy of the GNU R input phylo tree variable (deep copy, allocates memory)
  vtkTree* RToVTKTree(SEXP variable);
Thomas Otahal's avatar
   
Thomas Otahal committed
112
113
114
//ETX

protected:
115
116
  vtkRAdapter();
  ~vtkRAdapter();
Thomas Otahal's avatar
   
Thomas Otahal committed
117
118
119
120
121
122

private:

  vtkRAdapter(const vtkRAdapter&); // Not implemented
  void operator=(const vtkRAdapter&); // Not implemented

123
124
125
126
  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.

Thomas Otahal's avatar
   
Thomas Otahal committed
127
128
129
130
};


#endif