diff options
Diffstat (limited to 'src/3rdparty/assimp/code/DXFHelper.h')
-rw-r--r-- | src/3rdparty/assimp/code/DXFHelper.h | 257 |
1 files changed, 131 insertions, 126 deletions
diff --git a/src/3rdparty/assimp/code/DXFHelper.h b/src/3rdparty/assimp/code/DXFHelper.h index 0c76c3f2d..1947469a8 100644 --- a/src/3rdparty/assimp/code/DXFHelper.h +++ b/src/3rdparty/assimp/code/DXFHelper.h @@ -2,11 +2,11 @@ Open Asset Import Library (assimp) ---------------------------------------------------------------------- -Copyright (c) 2006-2012, assimp team +Copyright (c) 2006-2016, assimp team All rights reserved. -Redistribution and use of this software in source and binary forms, -with or without modification, are permitted provided that the +Redistribution and use of this software in source and binary forms, +with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above @@ -23,22 +23,22 @@ following conditions are met: derived from this software without specific prior written permission of the assimp team. -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ---------------------------------------------------------------------- */ -/** @file DXFHelper.h +/** @file DXFHelper.h * @brief Internal utilities for the DXF loader. */ @@ -48,9 +48,12 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #include "LineSplitter.h" #include "TinyFormatter.h" #include "StreamReader.h" +#include "fast_atof.h" +#include <vector> +#include <assimp/DefaultLogger.hpp> namespace Assimp { - namespace DXF { + namespace DXF { // read pairs of lines, parse group code and value and provide utilities @@ -60,113 +63,115 @@ class LineReader public: - LineReader(StreamReaderLE& reader) - // do NOT skip empty lines. In DXF files, they count as valid data. - : splitter(reader,false,true) - , end() - { - } + LineReader(StreamReaderLE& reader) + // do NOT skip empty lines. In DXF files, they count as valid data. + : splitter(reader,false,true) + , groupcode( 0 ) + , value() + , end() + { + } public: - // ----------------------------------------- - bool Is(int gc, const char* what) const { - return groupcode == gc && !strcmp(what,value.c_str()); - } + // ----------------------------------------- + bool Is(int gc, const char* what) const { + return groupcode == gc && !strcmp(what,value.c_str()); + } - // ----------------------------------------- - bool Is(int gc) const { - return groupcode == gc; - } + // ----------------------------------------- + bool Is(int gc) const { + return groupcode == gc; + } - // ----------------------------------------- - int GroupCode() const { - return groupcode; - } + // ----------------------------------------- + int GroupCode() const { + return groupcode; + } - // ----------------------------------------- - const std::string& Value() const { - return value; - } + // ----------------------------------------- + const std::string& Value() const { + return value; + } - // ----------------------------------------- - bool End() const { - return !((bool)*this); - } + // ----------------------------------------- + bool End() const { + return !((bool)*this); + } public: - // ----------------------------------------- - unsigned int ValueAsUnsignedInt() const { - return strtoul10(value.c_str()); - } + // ----------------------------------------- + unsigned int ValueAsUnsignedInt() const { + return strtoul10(value.c_str()); + } - // ----------------------------------------- - int ValueAsSignedInt() const { - return strtol10(value.c_str()); - } + // ----------------------------------------- + int ValueAsSignedInt() const { + return strtol10(value.c_str()); + } - // ----------------------------------------- - float ValueAsFloat() const { - return fast_atof(value.c_str()); - } + // ----------------------------------------- + float ValueAsFloat() const { + return fast_atof(value.c_str()); + } public: - // ----------------------------------------- - /** pseudo-iterator increment to advance to the next (groupcode/value) pair */ - LineReader& operator++() { - if (end) { - if (end == 1) { - ++end; - } - return *this; - } - - try { - groupcode = strtol10(splitter->c_str()); - splitter++; - - value = *splitter; - splitter++; - - // automatically skip over {} meta blocks (these are for application use - // and currently not relevant for Assimp). - if (value.length() && value[0] == '{') { - - size_t cnt = 0; - for(;splitter->length() && splitter->at(0) != '}'; splitter++, cnt++); - - splitter++; - DefaultLogger::get()->debug((Formatter::format("DXF: skipped over control group ("),cnt," lines)")); - } - } catch(std::logic_error&) { - ai_assert(!splitter); - } - if (!splitter) { - end = 1; - } - return *this; - } - - // ----------------------------------------- - LineReader& operator++(int) { - return ++(*this); - } - - - // ----------------------------------------- - operator bool() const { - return end <= 1; - } + // ----------------------------------------- + /** pseudo-iterator increment to advance to the next (groupcode/value) pair */ + LineReader& operator++() { + if (end) { + if (end == 1) { + ++end; + } + return *this; + } + + try { + groupcode = strtol10(splitter->c_str()); + splitter++; + + value = *splitter; + splitter++; + + // automatically skip over {} meta blocks (these are for application use + // and currently not relevant for Assimp). + if (value.length() && value[0] == '{') { + + size_t cnt = 0; + for(;splitter->length() && splitter->at(0) != '}'; splitter++, cnt++); + + splitter++; + DefaultLogger::get()->debug((Formatter::format("DXF: skipped over control group ("),cnt," lines)")); + } + } catch(std::logic_error&) { + ai_assert(!splitter); + } + if (!splitter) { + end = 1; + } + return *this; + } + + // ----------------------------------------- + LineReader& operator++(int) { + return ++(*this); + } + + + // ----------------------------------------- + operator bool() const { + return end <= 1; + } private: - LineSplitter splitter; - int groupcode; - std::string value; - int end; + LineSplitter splitter; + int groupcode; + std::string value; + int end; }; @@ -174,52 +179,52 @@ private: // represents a POLYLINE or a LWPOLYLINE. or even a 3DFACE The data is converted as needed. struct PolyLine { - PolyLine() - : flags() - {} - - std::vector<aiVector3D> positions; - std::vector<aiColor4D> colors; - std::vector<unsigned int> indices; - std::vector<unsigned int> counts; - unsigned int flags; - - std::string layer; - std::string desc; + PolyLine() + : flags() + {} + + std::vector<aiVector3D> positions; + std::vector<aiColor4D> colors; + std::vector<unsigned int> indices; + std::vector<unsigned int> counts; + unsigned int flags; + + std::string layer; + std::string desc; }; // reference to a BLOCK. Specifies its own coordinate system. struct InsertBlock { - InsertBlock() - : scale(1.f,1.f,1.f) - , angle() - {} + InsertBlock() + : scale(1.f,1.f,1.f) + , angle() + {} - aiVector3D pos; - aiVector3D scale; - float angle; + aiVector3D pos; + aiVector3D scale; + float angle; - std::string name; + std::string name; }; // keeps track of all geometry in a single BLOCK. struct Block { - std::vector< boost::shared_ptr<PolyLine> > lines; - std::vector<InsertBlock> insertions; + std::vector< std::shared_ptr<PolyLine> > lines; + std::vector<InsertBlock> insertions; - std::string name; - aiVector3D base; + std::string name; + aiVector3D base; }; struct FileData { - // note: the LAST block always contains the stuff from ENTITIES. - std::vector<Block> blocks; + // note: the LAST block always contains the stuff from ENTITIES. + std::vector<Block> blocks; }; |