diff options
Diffstat (limited to 'extern/draco/dracoenc/src/draco/io/obj_decoder.h')
-rw-r--r-- | extern/draco/dracoenc/src/draco/io/obj_decoder.h | 130 |
1 files changed, 0 insertions, 130 deletions
diff --git a/extern/draco/dracoenc/src/draco/io/obj_decoder.h b/extern/draco/dracoenc/src/draco/io/obj_decoder.h deleted file mode 100644 index 33b9dee2414..00000000000 --- a/extern/draco/dracoenc/src/draco/io/obj_decoder.h +++ /dev/null @@ -1,130 +0,0 @@ -// Copyright 2016 The Draco Authors. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -#ifndef DRACO_IO_OBJ_DECODER_H_ -#define DRACO_IO_OBJ_DECODER_H_ - -#include <string> -#include <unordered_map> - -#include "draco/draco_features.h" - -#include "draco/core/decoder_buffer.h" -#include "draco/core/status.h" -#include "draco/mesh/mesh.h" - -namespace draco { - -// Decodes a Wavefront OBJ file into draco::Mesh (or draco::PointCloud if the -// connectivity data is not needed).. This decoder can handle decoding of -// positions, texture coordinates, normals and triangular faces. -// All other geometry properties are ignored. -class ObjDecoder { - public: - ObjDecoder(); - - // Decodes an obj file stored in the input file. - // Returns nullptr if the decoding failed. - Status DecodeFromFile(const std::string &file_name, Mesh *out_mesh); - Status DecodeFromFile(const std::string &file_name, - PointCloud *out_point_cloud); - - Status DecodeFromBuffer(DecoderBuffer *buffer, Mesh *out_mesh); - Status DecodeFromBuffer(DecoderBuffer *buffer, PointCloud *out_point_cloud); - - // Flag that can be used to turn on/off deduplication of input values. - // This should be disabled only when we are sure that the input data does not - // contain any duplicate entries. - // Default: true - void set_deduplicate_input_values(bool v) { deduplicate_input_values_ = v; } - // Flag for whether using metadata to record other information in the obj - // file, e.g. material names, object names. - void set_use_metadata(bool flag) { use_metadata_ = flag; } - - protected: - Status DecodeInternal(); - DecoderBuffer *buffer() { return &buffer_; } - - private: - // Resets internal counters for attributes and faces. - void ResetCounters(); - - // Parses the next mesh property definition (position, tex coord, normal, or - // face). If the parsed data is unrecognized, it will be skipped. - // Returns false when the end of file was reached. - bool ParseDefinition(Status *status); - - // Attempts to parse definition of position, normal, tex coord, or face - // respectively. - // Returns false when the parsed data didn't contain the given definition. - bool ParseVertexPosition(Status *status); - bool ParseNormal(Status *status); - bool ParseTexCoord(Status *status); - bool ParseFace(Status *status); - bool ParseMaterialLib(Status *status); - bool ParseMaterial(Status *status); - bool ParseObject(Status *status); - - // Parses triplet of position, tex coords and normal indices. - // Returns false on error. - bool ParseVertexIndices(std::array<int32_t, 3> *out_indices); - - // Maps specified point index to the parsed vertex indices (triplet of - // position, texture coordinate, and normal indices) . - void MapPointToVertexIndices(PointIndex pi, - const std::array<int32_t, 3> &indices); - - // Parses material file definitions from a separate file. - bool ParseMaterialFile(const std::string &file_name, Status *status); - bool ParseMaterialFileDefinition(Status *status); - - // If set to true, the parser will count the number of various definitions - // but it will not parse the actual data or add any new entries to the mesh. - bool counting_mode_; - int num_obj_faces_; - int num_positions_; - int num_tex_coords_; - int num_normals_; - int num_materials_; - int last_sub_obj_id_; - - int pos_att_id_; - int tex_att_id_; - int norm_att_id_; - int material_att_id_; - int sub_obj_att_id_; // Attribute id for storing sub-objects. - - bool deduplicate_input_values_; - - int last_material_id_; - std::string material_file_name_; - - std::string input_file_name_; - - std::unordered_map<std::string, int> material_name_to_id_; - std::unordered_map<std::string, int> obj_name_to_id_; - - bool use_metadata_; - - DecoderBuffer buffer_; - - // Data structure that stores the decoded data. |out_point_cloud_| must be - // always set but |out_mesh_| is optional. - Mesh *out_mesh_; - PointCloud *out_point_cloud_; -}; - -} // namespace draco - -#endif // DRACO_IO_OBJ_DECODER_H_ |