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
|
/*=========================================================================
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 rendered
* 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 "vtkExporter.h"
#include "vtkIOExportModule.h" // For export macro
VTK_ABI_NAMESPACE_BEGIN
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.
*/
vtkSetFilePathMacro(FileName);
vtkGetFilePathMacro(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, vtkIdType);
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;
vtkIdType 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;
};
VTK_ABI_NAMESPACE_END
#endif
|