summaryrefslogtreecommitdiffstats
path: root/src/3rdparty/assimp/code/DXFHelper.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/3rdparty/assimp/code/DXFHelper.h')
-rw-r--r--src/3rdparty/assimp/code/DXFHelper.h257
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;
};