You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
184 lines
5.5 KiB
C
184 lines
5.5 KiB
C
3 weeks ago
|
/*=========================================================================
|
||
|
|
||
|
Program: Visualization Toolkit
|
||
|
Module: vtkJSONSceneExporter.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 vtkJSONSceneExporter
|
||
|
* @brief Export the content of a vtkRenderWindow into a directory with
|
||
|
* a JSON meta file describing the scene along with the http datasets
|
||
|
*
|
||
|
* @warning
|
||
|
* This writer assume LittleEndian by default. Additional work should be done to properly
|
||
|
* handle endianness.
|
||
|
*/
|
||
|
|
||
|
#ifndef vtkJSONSceneExporter_h
|
||
|
#define vtkJSONSceneExporter_h
|
||
|
|
||
|
#include "vtkExporter.h"
|
||
|
#include "vtkIOExportModule.h" // For export macro
|
||
|
#include "vtkSmartPointer.h" // For vtkSmartPointer
|
||
|
|
||
|
#include <map> // For member variables
|
||
|
#include <string> // For string parameter
|
||
|
#include <vector> // For member variables
|
||
|
|
||
|
class vtkActor;
|
||
|
class vtkDataObject;
|
||
|
class vtkDataSet;
|
||
|
class vtkPolyData;
|
||
|
class vtkScalarsToColors;
|
||
|
class vtkTexture;
|
||
|
|
||
|
class VTKIOEXPORT_EXPORT vtkJSONSceneExporter : public vtkExporter
|
||
|
{
|
||
|
public:
|
||
|
static vtkJSONSceneExporter* New();
|
||
|
vtkTypeMacro(vtkJSONSceneExporter, vtkExporter);
|
||
|
void PrintSelf(ostream& os, vtkIndent indent) override;
|
||
|
|
||
|
//@{
|
||
|
/**
|
||
|
* Specify file name of vtk data file to write.
|
||
|
* This correspond to the root directory of the data to write.
|
||
|
*/
|
||
|
vtkSetStringMacro(FileName);
|
||
|
vtkGetStringMacro(FileName);
|
||
|
//@}
|
||
|
|
||
|
//@{
|
||
|
/**
|
||
|
* Whether or not to write textures.
|
||
|
* Textures will be written in JPEG format.
|
||
|
* Default is false.
|
||
|
*/
|
||
|
vtkSetMacro(WriteTextures, bool);
|
||
|
vtkGetMacro(WriteTextures, bool);
|
||
|
//@}
|
||
|
|
||
|
//@{
|
||
|
/**
|
||
|
* Whether or not to write texture LODs.
|
||
|
* This will write out the textures in a series of decreasing
|
||
|
* resolution JPEG files, which are intended to be uploaded to the
|
||
|
* web. Each file will be 1/4 the size of the previous one. The files
|
||
|
* will stop being written out when one is smaller than the
|
||
|
* TextureLODsBaseSize.
|
||
|
* Default is false.
|
||
|
*/
|
||
|
vtkSetMacro(WriteTextureLODs, bool);
|
||
|
vtkGetMacro(WriteTextureLODs, bool);
|
||
|
//@}
|
||
|
|
||
|
//@{
|
||
|
/**
|
||
|
* The base size to be used for texture LODs. The texture LODs will
|
||
|
* stop being written out when one is smaller than this size.
|
||
|
* Default is 100 KB. Units are in bytes.
|
||
|
*/
|
||
|
vtkSetMacro(TextureLODsBaseSize, size_t);
|
||
|
vtkGetMacro(TextureLODsBaseSize, size_t);
|
||
|
//@}
|
||
|
|
||
|
//@{
|
||
|
/**
|
||
|
* The base URL to be used for texture LODs.
|
||
|
* Default is nullptr.
|
||
|
*/
|
||
|
vtkSetStringMacro(TextureLODsBaseUrl);
|
||
|
vtkGetStringMacro(TextureLODsBaseUrl);
|
||
|
//@}
|
||
|
|
||
|
//@{
|
||
|
/**
|
||
|
* Whether or not to write poly LODs.
|
||
|
* This will write out the poly LOD sources in a series of decreasing
|
||
|
* resolution data sets, which are intended to be uploaded to the
|
||
|
* web. vtkQuadricCluster is used to decrease the resolution of the
|
||
|
* poly data. Each will be approximately 1/4 the size of the previous
|
||
|
* one (unless certain errors occur, and then the defaults for quadric
|
||
|
* clustering will be used, which will produce an unknown size). The
|
||
|
* files will stop being written out when one is smaller than the
|
||
|
* PolyLODsBaseSize, or if the difference in the sizes of the two
|
||
|
* most recent LODs is less than 5%. The smallest LOD will be written
|
||
|
* into the vtkjs file, rather than with the rest of the LODs.
|
||
|
* Default is false.
|
||
|
*/
|
||
|
vtkSetMacro(WritePolyLODs, bool);
|
||
|
vtkGetMacro(WritePolyLODs, bool);
|
||
|
//@}
|
||
|
|
||
|
//@{
|
||
|
/**
|
||
|
* The base size to be used for poly LODs. The poly LODs will stop
|
||
|
* being written out when one is smaller than this size, or if the
|
||
|
* difference in the sizes of the two most recent LODs is less
|
||
|
* than 5%.
|
||
|
* Default is 100 KB. Units are in bytes.
|
||
|
*/
|
||
|
vtkSetMacro(PolyLODsBaseSize, size_t);
|
||
|
vtkGetMacro(PolyLODsBaseSize, size_t);
|
||
|
//@}
|
||
|
|
||
|
//@{
|
||
|
/**
|
||
|
* The base URL to be used for poly LODs.
|
||
|
* Default is nullptr.
|
||
|
*/
|
||
|
vtkSetStringMacro(PolyLODsBaseUrl);
|
||
|
vtkGetStringMacro(PolyLODsBaseUrl);
|
||
|
//@}
|
||
|
|
||
|
protected:
|
||
|
vtkJSONSceneExporter();
|
||
|
~vtkJSONSceneExporter() override;
|
||
|
|
||
|
void WriteDataObject(ostream& os, vtkDataObject* dataObject, vtkActor* actor);
|
||
|
std::string ExtractRenderingSetup(vtkActor* actor);
|
||
|
std::string WriteDataSet(vtkDataSet* dataset, const char* addOnMeta);
|
||
|
void WriteLookupTable(const char* name, vtkScalarsToColors* lookupTable);
|
||
|
|
||
|
void WriteData() override;
|
||
|
|
||
|
std::string CurrentDataSetPath() const;
|
||
|
|
||
|
std::string WriteTexture(vtkTexture* texture);
|
||
|
std::string WriteTextureLODSeries(vtkTexture* texture);
|
||
|
|
||
|
// The returned pointer is the smallest poly LOD, intended to be
|
||
|
// written out in the vtkjs file.
|
||
|
vtkSmartPointer<vtkPolyData> WritePolyLODSeries(vtkPolyData* polys, std::string& config);
|
||
|
|
||
|
char* FileName;
|
||
|
bool WriteTextures;
|
||
|
bool WriteTextureLODs;
|
||
|
size_t TextureLODsBaseSize;
|
||
|
char* TextureLODsBaseUrl;
|
||
|
bool WritePolyLODs;
|
||
|
size_t PolyLODsBaseSize;
|
||
|
char* PolyLODsBaseUrl;
|
||
|
int DatasetCount;
|
||
|
std::map<std::string, std::string> LookupTables;
|
||
|
std::map<vtkTexture*, std::string> TextureStrings;
|
||
|
std::map<vtkTexture*, std::string> TextureLODStrings;
|
||
|
|
||
|
// Files that subclasses should zip
|
||
|
std::vector<std::string> FilesToZip;
|
||
|
|
||
|
private:
|
||
|
vtkJSONSceneExporter(const vtkJSONSceneExporter&) = delete;
|
||
|
void operator=(const vtkJSONSceneExporter&) = delete;
|
||
|
};
|
||
|
|
||
|
#endif
|