forked from Kitware/VTK
-
Notifications
You must be signed in to change notification settings - Fork 0
/
vtkX3DExporter.h
158 lines (132 loc) · 4.31 KB
/
vtkX3DExporter.h
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
/*=========================================================================
Program: Visualization Toolkit
Module: vtkX3DExporter.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.
=========================================================================*/
/**
* @class vtkX3DExporter
* @brief create an x3d file
*
* vtkX3DExporter is a render window exporter which writes out the renderered
* scene into an X3D file. X3D is an XML-based format for representation
* 3D scenes (similar to VRML). Check out http://www.web3d.org/x3d/ for more
* details.
* @par Thanks:
* X3DExporter is contributed by Christophe Mouton at EDF.
*/
#ifndef vtkX3DExporter_h
#define vtkX3DExporter_h
#include "vtkIOExportModule.h" // For export macro
#include "vtkExporter.h"
class vtkActor;
class vtkActor2D;
class vtkDataArray;
class vtkLight;
class vtkPoints;
class vtkPolyData;
class vtkRenderer;
class vtkUnsignedCharArray;
class vtkX3DExporterWriter;
class VTKIOEXPORT_EXPORT vtkX3DExporter : public vtkExporter
{
public:
static vtkX3DExporter *New();
vtkTypeMacro(vtkX3DExporter,vtkExporter);
void PrintSelf(ostream& os, vtkIndent indent) override;
//@{
/**
* Set/Get the output file name.
*/
vtkSetStringMacro(FileName);
vtkGetStringMacro(FileName);
//@}
//@{
/**
* Specify the Speed of navigation. Default is 4.
*/
vtkSetMacro(Speed,double);
vtkGetMacro(Speed,double);
//@}
//@{
/**
* Turn on binary mode
*/
vtkSetClampMacro(Binary, vtkTypeBool, 0, 1);
vtkBooleanMacro(Binary, vtkTypeBool);
vtkGetMacro(Binary, vtkTypeBool);
//@}
//@{
/**
* In binary mode use fastest instead of best compression
*/
vtkSetClampMacro(Fastest, vtkTypeBool, 0, 1);
vtkBooleanMacro(Fastest, vtkTypeBool);
vtkGetMacro(Fastest, vtkTypeBool);
//@}
//@{
/**
* Enable writing to an OutputString instead of the default, a file.
*/
vtkSetMacro(WriteToOutputString,vtkTypeBool);
vtkGetMacro(WriteToOutputString,vtkTypeBool);
vtkBooleanMacro(WriteToOutputString,vtkTypeBool);
//@}
//@{
/**
* When WriteToOutputString in on, then a string is allocated, written to,
* and can be retrieved with these methods. The string is deleted during
* the next call to write ...
*/
vtkGetMacro(OutputStringLength, int);
vtkGetStringMacro(OutputString);
unsigned char *GetBinaryOutputString()
{
return reinterpret_cast<unsigned char *>(this->OutputString);
}
//@}
/**
* This convenience method returns the string, sets the IVAR to nullptr,
* so that the user is responsible for deleting the string.
* I am not sure what the name should be, so it may change in the future.
*/
char *RegisterAndGetOutputString();
protected:
vtkX3DExporter();
~vtkX3DExporter() override;
// Stream management
vtkTypeBool WriteToOutputString;
char *OutputString;
int OutputStringLength;
/**
* Write data to output.
*/
void WriteData() override;
void WriteALight(vtkLight *aLight, vtkX3DExporterWriter* writer);
void WriteAnActor(vtkActor *anActor, vtkX3DExporterWriter* writer,
int index);
void WriteAPiece(vtkPolyData* piece, vtkActor *anActor, vtkX3DExporterWriter* writer, int index);
void WritePointData(vtkPoints *points, vtkDataArray *normals,
vtkDataArray *tcoords, vtkUnsignedCharArray *colors,
vtkX3DExporterWriter* writer, int index);
void WriteATextActor2D(vtkActor2D *anTextActor2D,
vtkX3DExporterWriter* writer);
void WriteATexture(vtkActor *anActor, vtkX3DExporterWriter* writer);
void WriteAnAppearance(vtkActor *anActor, bool writeEmissiveColor, vtkX3DExporterWriter* writer);
// Called to give subclasses a chance to write additional nodes to the file.
// Default implementation does nothing.
virtual void WriteAdditionalNodes(vtkX3DExporterWriter* vtkNotUsed(writer)) {}
int HasHeadLight(vtkRenderer* ren);
char *FileName;
double Speed;
vtkTypeBool Binary;
vtkTypeBool Fastest;
private:
vtkX3DExporter(const vtkX3DExporter&) = delete;
void operator=(const vtkX3DExporter&) = delete;
};
#endif