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.
177 lines
4.9 KiB
C
177 lines
4.9 KiB
C
3 weeks ago
|
/*=========================================================================
|
||
|
|
||
|
Program: Visualization Toolkit
|
||
|
Module: vtkVRMLImporter.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 vtkVRMLImporter
|
||
|
* @brief imports VRML 2.0 files.
|
||
|
*
|
||
|
*
|
||
|
* vtkVRMLImporter imports VRML 2.0 files into VTK.
|
||
|
*
|
||
|
* @warning
|
||
|
* These nodes are currently supported:
|
||
|
* Appearance IndexedFaceSet
|
||
|
* Box IndexedLineSet
|
||
|
* Color Material
|
||
|
* Cone Shape
|
||
|
* Coordinate Sphere
|
||
|
* Cylinder Transform
|
||
|
* DirectionalLight
|
||
|
*
|
||
|
* @warning
|
||
|
* As you can see this implementation focuses on getting the geometry
|
||
|
* translated. The routes and scripting nodes are ignored since they deal
|
||
|
* with directly accessing a nodes internal structure based on the VRML
|
||
|
* spec. Since this is a translation the internal data structures differ
|
||
|
* greatly from the VRML spec and the External Authoring Interface (see the
|
||
|
* VRML spec). The DEF/USE mechanism does allow the VTK user to extract
|
||
|
* objects from the scene and directly manipulate them using the native
|
||
|
* language (Python, Java, or whatever language VTK is wrapped
|
||
|
* in). This, in a way, removes the need for the route and script mechanism
|
||
|
* (not completely though).
|
||
|
* Texture coordinates are attached to the mesh is available but
|
||
|
* image textures are not loaded.
|
||
|
* Viewpoints (camera presets) are not imported.
|
||
|
*
|
||
|
* @par Thanks:
|
||
|
* Thanks to Russ Coucher of Areva for numerous bug fixes and a new test.
|
||
|
*
|
||
|
* @sa
|
||
|
* vtkImporter
|
||
|
*/
|
||
|
|
||
|
#ifndef vtkVRMLImporter_h
|
||
|
#define vtkVRMLImporter_h
|
||
|
|
||
|
#include "vtkIOImportModule.h" // For export macro
|
||
|
#include "vtkImporter.h"
|
||
|
|
||
|
class vtkActor;
|
||
|
class vtkAlgorithm;
|
||
|
class vtkProperty;
|
||
|
class vtkLight;
|
||
|
class vtkTransform;
|
||
|
class vtkLookupTable;
|
||
|
class vtkFloatArray;
|
||
|
class vtkPolyDataMapper;
|
||
|
class vtkPoints;
|
||
|
class vtkIdTypeArray;
|
||
|
class vtkVRMLImporterInternal;
|
||
|
class vtkVRMLYaccData;
|
||
|
class vtkCellArray;
|
||
|
|
||
|
class VTKIOIMPORT_EXPORT vtkVRMLImporter : public vtkImporter
|
||
|
{
|
||
|
public:
|
||
|
static vtkVRMLImporter* New();
|
||
|
|
||
|
vtkTypeMacro(vtkVRMLImporter, vtkImporter);
|
||
|
void PrintSelf(ostream& os, vtkIndent indent) override;
|
||
|
|
||
|
//@{
|
||
|
/**
|
||
|
* Specify the name of the file to read.
|
||
|
*/
|
||
|
vtkSetStringMacro(FileName);
|
||
|
vtkGetStringMacro(FileName);
|
||
|
//@}
|
||
|
|
||
|
//@{
|
||
|
/**
|
||
|
* Specify the resolution for Sphere, Cone and Cylinder shape sources.
|
||
|
* Default is 12.
|
||
|
*/
|
||
|
vtkSetMacro(ShapeResolution, int);
|
||
|
vtkGetMacro(ShapeResolution, int);
|
||
|
//@}
|
||
|
|
||
|
/**
|
||
|
* In the VRML spec you can DEF and USE nodes (name them),
|
||
|
* This routine will return the associated VTK object which
|
||
|
* was created as a result of the DEF mechanism
|
||
|
* Send in the name from the VRML file, get the VTK object.
|
||
|
* You will have to check and correctly cast the object since
|
||
|
* this only returns vtkObjects.
|
||
|
*/
|
||
|
vtkObject* GetVRMLDEFObject(const char* name);
|
||
|
|
||
|
/**
|
||
|
* Get a printable string describing the outputs
|
||
|
*/
|
||
|
std::string GetOutputsDescription() override;
|
||
|
|
||
|
protected:
|
||
|
vtkVRMLImporter();
|
||
|
~vtkVRMLImporter() override;
|
||
|
|
||
|
int OpenImportFile();
|
||
|
int ImportBegin() override;
|
||
|
void ImportEnd() override;
|
||
|
void ImportActors(vtkRenderer*) override {}
|
||
|
void ImportCameras(vtkRenderer*) override {}
|
||
|
void ImportLights(vtkRenderer*) override {}
|
||
|
void ImportProperties(vtkRenderer*) override {}
|
||
|
|
||
|
//@{
|
||
|
/**
|
||
|
* Needed by the yacc/lex grammar used
|
||
|
*/
|
||
|
virtual void enterNode(const char*);
|
||
|
virtual void exitNode();
|
||
|
virtual void enterField(const char*);
|
||
|
virtual void exitField();
|
||
|
virtual void useNode(const char*);
|
||
|
//@}
|
||
|
|
||
|
/**
|
||
|
* Return the file pointer to the open file.
|
||
|
*/
|
||
|
FILE* GetFileFD() { return this->FileFD; }
|
||
|
|
||
|
char* FileName;
|
||
|
FILE* FileFD;
|
||
|
int ShapeResolution;
|
||
|
|
||
|
friend class vtkVRMLYaccData;
|
||
|
|
||
|
private:
|
||
|
vtkPoints* PointsNew();
|
||
|
vtkFloatArray* FloatArrayNew();
|
||
|
vtkIdTypeArray* IdTypeArrayNew();
|
||
|
|
||
|
void DeleteObject(vtkObject*);
|
||
|
|
||
|
vtkVRMLImporterInternal* Internal;
|
||
|
vtkVRMLYaccData* Parser;
|
||
|
vtkActor* CurrentActor;
|
||
|
vtkProperty* CurrentProperty;
|
||
|
vtkLight* CurrentLight;
|
||
|
vtkTransform* CurrentTransform;
|
||
|
vtkAlgorithm* CurrentSource;
|
||
|
vtkPoints* CurrentPoints;
|
||
|
vtkFloatArray* CurrentNormals;
|
||
|
vtkCellArray* CurrentNormalCells;
|
||
|
vtkFloatArray* CurrentTCoords;
|
||
|
vtkCellArray* CurrentTCoordCells;
|
||
|
vtkLookupTable* CurrentLut;
|
||
|
vtkFloatArray* CurrentScalars;
|
||
|
vtkPolyDataMapper* CurrentMapper;
|
||
|
|
||
|
private:
|
||
|
vtkVRMLImporter(const vtkVRMLImporter&) = delete;
|
||
|
void operator=(const vtkVRMLImporter&) = delete;
|
||
|
};
|
||
|
|
||
|
#endif
|