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.
141 lines
4.1 KiB
C
141 lines
4.1 KiB
C
3 weeks ago
|
/*=========================================================================
|
||
|
|
||
|
Program: Visualization Toolkit
|
||
|
Module: vtkSTLReader.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 vtkSTLReader
|
||
|
* @brief read ASCII or binary stereo lithography files
|
||
|
*
|
||
|
* vtkSTLReader is a source object that reads ASCII or binary stereo
|
||
|
* lithography files (.stl files). The FileName must be specified to
|
||
|
* vtkSTLReader. The object automatically detects whether the file is
|
||
|
* ASCII or binary.
|
||
|
*
|
||
|
* .stl files are quite inefficient since they duplicate vertex
|
||
|
* definitions. By setting the Merging boolean you can control whether the
|
||
|
* point data is merged after reading. Merging is performed by default,
|
||
|
* however, merging requires a large amount of temporary storage since a
|
||
|
* 3D hash table must be constructed.
|
||
|
*
|
||
|
* @warning
|
||
|
* Binary files written on one system may not be readable on other systems.
|
||
|
* vtkSTLWriter uses VAX or PC byte ordering and swaps bytes on other systems.
|
||
|
*/
|
||
|
|
||
|
#ifndef vtkSTLReader_h
|
||
|
#define vtkSTLReader_h
|
||
|
|
||
|
#include "vtkAbstractPolyDataReader.h"
|
||
|
#include "vtkIOGeometryModule.h" // For export macro
|
||
|
|
||
|
class vtkCellArray;
|
||
|
class vtkFloatArray;
|
||
|
class vtkIncrementalPointLocator;
|
||
|
class vtkPoints;
|
||
|
|
||
|
class VTKIOGEOMETRY_EXPORT vtkSTLReader : public vtkAbstractPolyDataReader
|
||
|
{
|
||
|
public:
|
||
|
vtkTypeMacro(vtkSTLReader, vtkAbstractPolyDataReader);
|
||
|
void PrintSelf(ostream& os, vtkIndent indent) override;
|
||
|
|
||
|
/**
|
||
|
* Construct object with merging set to true.
|
||
|
*/
|
||
|
static vtkSTLReader* New();
|
||
|
|
||
|
/**
|
||
|
* Overload standard modified time function. If locator is modified,
|
||
|
* then this object is modified as well.
|
||
|
*/
|
||
|
vtkMTimeType GetMTime() override;
|
||
|
|
||
|
//@{
|
||
|
/**
|
||
|
* Turn on/off merging of points/triangles.
|
||
|
*/
|
||
|
vtkSetMacro(Merging, vtkTypeBool);
|
||
|
vtkGetMacro(Merging, vtkTypeBool);
|
||
|
vtkBooleanMacro(Merging, vtkTypeBool);
|
||
|
//@}
|
||
|
|
||
|
//@{
|
||
|
/**
|
||
|
* Turn on/off tagging of solids with scalars.
|
||
|
*/
|
||
|
vtkSetMacro(ScalarTags, vtkTypeBool);
|
||
|
vtkGetMacro(ScalarTags, vtkTypeBool);
|
||
|
vtkBooleanMacro(ScalarTags, vtkTypeBool);
|
||
|
//@}
|
||
|
|
||
|
//@{
|
||
|
/**
|
||
|
* Specify a spatial locator for merging points. By
|
||
|
* default an instance of vtkMergePoints is used.
|
||
|
*/
|
||
|
void SetLocator(vtkIncrementalPointLocator* locator);
|
||
|
vtkGetObjectMacro(Locator, vtkIncrementalPointLocator);
|
||
|
//@}
|
||
|
|
||
|
/**
|
||
|
* Get header string.
|
||
|
* If an ASCII STL file contains multiple solids then
|
||
|
* headers are separated by newline character.
|
||
|
* If a binary STL file is read, the first zero-terminated
|
||
|
* string is stored in this header, the full header is available
|
||
|
* by using GetBinaryHeader().
|
||
|
* \sa GetBinaryHeader()
|
||
|
*/
|
||
|
vtkGetStringMacro(Header);
|
||
|
|
||
|
/**
|
||
|
* Get binary file header string.
|
||
|
* If ASCII STL file is read then BinaryHeader is not set,
|
||
|
* and the header can be retrieved using.GetHeader() instead.
|
||
|
* \sa GetHeader()
|
||
|
*/
|
||
|
vtkGetObjectMacro(BinaryHeader, vtkUnsignedCharArray);
|
||
|
|
||
|
protected:
|
||
|
vtkSTLReader();
|
||
|
~vtkSTLReader() override;
|
||
|
|
||
|
/**
|
||
|
* Create default locator. Used to create one when none is specified.
|
||
|
*/
|
||
|
vtkIncrementalPointLocator* NewDefaultLocator();
|
||
|
|
||
|
/**
|
||
|
* Set header string. Internal use only.
|
||
|
*/
|
||
|
vtkSetStringMacro(Header);
|
||
|
virtual void SetBinaryHeader(vtkUnsignedCharArray* binaryHeader);
|
||
|
|
||
|
vtkTypeBool Merging;
|
||
|
vtkTypeBool ScalarTags;
|
||
|
vtkIncrementalPointLocator* Locator;
|
||
|
char* Header;
|
||
|
vtkUnsignedCharArray* BinaryHeader;
|
||
|
|
||
|
int RequestData(vtkInformation*, vtkInformationVector**, vtkInformationVector*) override;
|
||
|
bool ReadBinarySTL(FILE* fp, vtkPoints*, vtkCellArray*);
|
||
|
bool ReadASCIISTL(FILE* fp, vtkPoints*, vtkCellArray*, vtkFloatArray* scalars = nullptr);
|
||
|
int GetSTLFileType(const char* filename);
|
||
|
|
||
|
private:
|
||
|
vtkSTLReader(const vtkSTLReader&) = delete;
|
||
|
void operator=(const vtkSTLReader&) = delete;
|
||
|
};
|
||
|
|
||
|
#endif
|