File: TestHoudiniPolyDataWriter.cxx

package info (click to toggle)
paraview 5.13.2%2Bdfsg-3
  • links: PTS, VCS
  • area: main
  • in suites: sid, trixie
  • size: 544,220 kB
  • sloc: cpp: 3,374,605; ansic: 1,332,409; python: 150,381; xml: 122,166; sql: 65,887; sh: 7,317; javascript: 5,262; yacc: 4,417; java: 3,977; perl: 2,363; lex: 1,929; f90: 1,397; makefile: 170; objc: 153; tcl: 59; pascal: 50; fortran: 29
file content (248 lines) | stat: -rw-r--r-- 12,538 bytes parent folder | download | duplicates (4)
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
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
// SPDX-FileCopyrightText: Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
// SPDX-License-Identifier: BSD-3-Clause

#include <iostream>
#include <string>

#include <vtkHoudiniPolyDataWriter.h>
#include <vtkNew.h>
#include <vtkPolyData.h>
#include <vtkSmartPointer.h>
#include <vtkTestUtilities.h>

#include <vtkCellData.h>
#include <vtkLine.h>
#include <vtkPointData.h>
#include <vtkPolyLine.h>
#include <vtkPolyVertex.h>
#include <vtkPolygon.h>
#include <vtkQuad.h>
#include <vtkTriangle.h>
#include <vtkTriangleStrip.h>
#include <vtkVertex.h>

#include <vtkCharArray.h>
#include <vtkDataArray.h>
#include <vtkDoubleArray.h>
#include <vtkFloatArray.h>
#include <vtkIdTypeArray.h>
#include <vtkIntArray.h>
#include <vtkLongArray.h>
#include <vtkLongLongArray.h>
#include <vtkShortArray.h>
#include <vtkSignedCharArray.h>
#include <vtkStringArray.h>
#include <vtkUnsignedCharArray.h>
#include <vtkUnsignedIntArray.h>
#include <vtkUnsignedLongArray.h>
#include <vtkUnsignedLongLongArray.h>
#include <vtkUnsignedShortArray.h>

vtkSmartPointer<vtkPolyData> GeneratePolyData()
{
  vtkSmartPointer<vtkPoints> points = vtkSmartPointer<vtkPoints>::New();

  vtkSmartPointer<vtkCellArray> verts = vtkSmartPointer<vtkCellArray>::New();
  {
    vtkSmartPointer<vtkVertex> vertex = vtkSmartPointer<vtkVertex>::New();
    vertex->GetPointIds()->SetId(0, points->InsertNextPoint(0., 0., 0.5));

    vtkSmartPointer<vtkPolyVertex> polyVertex = vtkSmartPointer<vtkPolyVertex>::New();
    polyVertex->GetPointIds()->SetNumberOfIds(2);
    polyVertex->GetPointIds()->SetId(0, points->InsertNextPoint(1., 0., 0.5));
    polyVertex->GetPointIds()->SetId(1, points->InsertNextPoint(0., 1., 0.5));

    verts->InsertNextCell(vertex);
    verts->InsertNextCell(polyVertex);
  }

  vtkSmartPointer<vtkCellArray> lines = vtkSmartPointer<vtkCellArray>::New();
  {
    vtkSmartPointer<vtkLine> line = vtkSmartPointer<vtkLine>::New();
    line->GetPointIds()->SetId(0, points->InsertNextPoint(0., 0., 1.));
    line->GetPointIds()->SetId(1, points->InsertNextPoint(1., 0., 1.));

    vtkSmartPointer<vtkPolyLine> polyLine = vtkSmartPointer<vtkPolyLine>::New();
    polyLine->GetPointIds()->SetNumberOfIds(3);
    polyLine->GetPointIds()->SetId(0, points->InsertNextPoint(1., 1., 1.));
    polyLine->GetPointIds()->SetId(1, points->InsertNextPoint(0., 1., 1.));
    polyLine->GetPointIds()->SetId(2, points->InsertNextPoint(1.5, 1., 1.));

    lines->InsertNextCell(line);
    lines->InsertNextCell(polyLine);
  }

  vtkSmartPointer<vtkCellArray> polys = vtkSmartPointer<vtkCellArray>::New();
  {
    vtkSmartPointer<vtkTriangle> triangle = vtkSmartPointer<vtkTriangle>::New();
    triangle->GetPointIds()->SetId(0, points->InsertNextPoint(0., 0., 2.));
    triangle->GetPointIds()->SetId(1, points->InsertNextPoint(1., 0., 2.));
    triangle->GetPointIds()->SetId(2, points->InsertNextPoint(1., 1., 2.));

    vtkSmartPointer<vtkQuad> quad = vtkSmartPointer<vtkQuad>::New();
    quad->GetPointIds()->SetId(0, points->InsertNextPoint(-1., -1., 2.));
    quad->GetPointIds()->SetId(1, points->InsertNextPoint(0., -1., 2.));
    quad->GetPointIds()->SetId(2, points->InsertNextPoint(0., 0., 2.));
    quad->GetPointIds()->SetId(3, points->InsertNextPoint(-1., 0., 2.));

    vtkSmartPointer<vtkPolygon> poly = vtkSmartPointer<vtkPolygon>::New();
    poly->GetPointIds()->SetNumberOfIds(5);
    poly->GetPointIds()->SetId(0, points->InsertNextPoint(2., 2., 2.));
    poly->GetPointIds()->SetId(1, points->InsertNextPoint(2., 3., 2.));
    poly->GetPointIds()->SetId(2, points->InsertNextPoint(3., 4., 2.));
    poly->GetPointIds()->SetId(3, points->InsertNextPoint(4., 6., 2.));
    poly->GetPointIds()->SetId(4, points->InsertNextPoint(6., 1., 2.));

    polys->InsertNextCell(triangle);
    polys->InsertNextCell(quad);
    polys->InsertNextCell(poly);
  }

  vtkSmartPointer<vtkCellArray> strips = vtkSmartPointer<vtkCellArray>::New();
  {
    vtkSmartPointer<vtkTriangleStrip> triangleStrip = vtkSmartPointer<vtkTriangleStrip>::New();
    triangleStrip->GetPointIds()->SetNumberOfIds(4);
    triangleStrip->GetPointIds()->SetId(0, points->InsertNextPoint(0, 0., 3.));
    triangleStrip->GetPointIds()->SetId(1, points->InsertNextPoint(0, 1., 3.));
    triangleStrip->GetPointIds()->SetId(2, points->InsertNextPoint(1., 0., 3.));
    triangleStrip->GetPointIds()->SetId(3, points->InsertNextPoint(1.5, 1., 3.));

    strips->InsertNextCell(triangleStrip);
  }

  vtkSmartPointer<vtkPolyData> pd = vtkSmartPointer<vtkPolyData>::New();
  pd->SetPoints(points);
  pd->SetVerts(verts);
  pd->SetLines(lines);
  pd->SetPolys(polys);
  pd->SetStrips(strips);

  vtkIdType nPoints = pd->GetNumberOfPoints();
  vtkIdType nCells = pd->GetNumberOfCells();

#define AddPointDataArray(dataType, vtkArrayType, nComponents, value)                              \
  do                                                                                               \
  {                                                                                                \
    vtkSmartPointer<vtkArrayType> myp_##vtkArrayType = vtkSmartPointer<vtkArrayType>::New();       \
    std::string name_myp_##vtkArrayType = "p_";                                                    \
    name_myp_##vtkArrayType.append(#vtkArrayType);                                                 \
    myp_##vtkArrayType->SetName(name_myp_##vtkArrayType.c_str());                                  \
    myp_##vtkArrayType->SetNumberOfComponents(nComponents);                                        \
    myp_##vtkArrayType->SetNumberOfTuples(nPoints);                                                \
    {                                                                                              \
      dataType tuple[nComponents];                                                                 \
      for (vtkIdType j = 0; j < (nComponents); j++)                                                \
      {                                                                                            \
        tuple[j] = value;                                                                          \
      }                                                                                            \
      for (vtkIdType i = 0; i < nPoints; i++)                                                      \
      {                                                                                            \
        for (vtkIdType j = 0; j < (nComponents); j++)                                              \
        {                                                                                          \
          tuple[j] += 1;                                                                           \
        }                                                                                          \
        myp_##vtkArrayType->SetTypedTuple(i, tuple);                                               \
      }                                                                                            \
    }                                                                                              \
    pd->GetPointData()->AddArray(myp_##vtkArrayType);                                              \
  } while (false)

#define AddCellDataArray(dataType, vtkArrayType, nComponents, value)                               \
  do                                                                                               \
  {                                                                                                \
    vtkSmartPointer<vtkArrayType> myc_##vtkArrayType = vtkSmartPointer<vtkArrayType>::New();       \
    std::string name_myc_##vtkArrayType = "c_";                                                    \
    name_myc_##vtkArrayType.append(#vtkArrayType);                                                 \
    myc_##vtkArrayType->SetName(name_myc_##vtkArrayType.c_str());                                  \
    myc_##vtkArrayType->SetNumberOfComponents(nComponents);                                        \
    myc_##vtkArrayType->SetNumberOfTuples(nCells);                                                 \
    {                                                                                              \
      dataType tuple[nComponents];                                                                 \
      for (vtkIdType j = 0; j < (nComponents); j++)                                                \
      {                                                                                            \
        tuple[j] = value;                                                                          \
      }                                                                                            \
      for (vtkIdType i = 0; i < nCells; i++)                                                       \
      {                                                                                            \
        for (vtkIdType j = 0; j < (nComponents); j++)                                              \
        {                                                                                          \
          tuple[j] += 1;                                                                           \
        }                                                                                          \
        myc_##vtkArrayType->SetTypedTuple(i, tuple);                                               \
      }                                                                                            \
    }                                                                                              \
    pd->GetCellData()->AddArray(myc_##vtkArrayType);                                               \
  } while (false)

  AddPointDataArray(int, vtkIntArray, 1, 0);
  AddPointDataArray(long, vtkLongArray, 1, 0);
  AddPointDataArray(long long, vtkLongLongArray, 1, 0);
  AddPointDataArray(short, vtkShortArray, 1, 0);
  AddPointDataArray(unsigned int, vtkUnsignedIntArray, 1, 0);
  AddPointDataArray(unsigned long, vtkUnsignedLongArray, 1, 0);
  AddPointDataArray(unsigned long long, vtkUnsignedLongLongArray, 1, 0);
  AddPointDataArray(unsigned short, vtkUnsignedShortArray, 1, 0);
  AddPointDataArray(vtkIdType, vtkIdTypeArray, 1, 0);
  AddPointDataArray(char, vtkCharArray, 1, '0');
  AddPointDataArray(unsigned char, vtkUnsignedCharArray, 1, '0');
  AddPointDataArray(signed char, vtkSignedCharArray, 1, '0');
  AddPointDataArray(float, vtkFloatArray, 1, 0.0);
  AddPointDataArray(double, vtkDoubleArray, 1, 0.0);

  AddCellDataArray(int, vtkIntArray, 1, 0);
  AddCellDataArray(long, vtkLongArray, 1, 0);
  AddCellDataArray(long long, vtkLongLongArray, 1, 0);
  AddCellDataArray(short, vtkShortArray, 1, 0);
  AddCellDataArray(unsigned int, vtkUnsignedIntArray, 1, 0);
  AddCellDataArray(unsigned long, vtkUnsignedLongArray, 1, 0);
  AddCellDataArray(unsigned long long, vtkUnsignedLongLongArray, 1, 0);
  AddCellDataArray(unsigned short, vtkUnsignedShortArray, 1, 0);
  AddCellDataArray(vtkIdType, vtkIdTypeArray, 1, 0);
  AddCellDataArray(char, vtkCharArray, 1, '0');
  AddCellDataArray(unsigned char, vtkUnsignedCharArray, 1, '0');
  AddCellDataArray(signed char, vtkSignedCharArray, 1, '0');
  AddCellDataArray(float, vtkFloatArray, 1, 0.0);
  AddCellDataArray(double, vtkDoubleArray, 1, 0.0);

#if 0
  vtkSmartPointer<vtkStringArray> myc_vtkStringArray =
    vtkSmartPointer<vtkStringArray>::New();
  myc_vtkStringArray->SetName("string");
  myc_vtkStringArray->SetNumberOfComponents(1);
  myc_vtkStringArray->SetNumberOfTuples(nCells);
  {
    for (vtkIdType i=0;i<nCells;i++)
    {
      std::stringstream s; s << "test" << i;
      myc_vtkStringArray->SetValue(i,s.str().c_str());
    }
  }
  pd->GetCellData()->AddArray(myc_vtkStringArray);
#endif

  return pd;
}

int TestHoudiniPolyDataWriter(int argc, char* argv[])
{
  char* temp_dir_c =
    vtkTestUtilities::GetArgOrEnvOrDefault("-T", argc, argv, "VTK_TEMP_DIR", "Testing/Temporary");
  std::string temp_dir = std::string(temp_dir_c);
  delete[] temp_dir_c;

  if (temp_dir.empty())
  {
    std::cerr << "Could not determine temporary directory." << std::endl;
    return EXIT_FAILURE;
  }

  std::string filename = temp_dir + "/testHoudiniPolyDataWriter.geo";

  vtkNew<vtkHoudiniPolyDataWriter> writer;
  writer->SetFileName(filename.c_str());
  vtkSmartPointer<vtkPolyData> pd = GeneratePolyData();
  writer->SetInputData(pd);
  writer->Write();

  return EXIT_SUCCESS;
}