-
Notifications
You must be signed in to change notification settings - Fork 5
/
dxf.h
92 lines (87 loc) · 2.95 KB
/
dxf.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
/******************************************************/
/* */
/* dxf.h - Drawing Exchange Format */
/* */
/******************************************************/
/* Copyright 2019,2020 Pierre Abbat.
* This file is part of PerfectTIN.
*
* PerfectTIN is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* PerfectTIN is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License and Lesser General Public License
* for more details.
*
* You should have received a copy of the GNU General Public License
* and Lesser General Public License along with PerfectTIN. If not, see
* <http://www.gnu.org/licenses/>.
*/
#include <string>
#include <fstream>
#include <vector>
#include <array>
#include "boundrect.h"
#include "point.h"
#include "triangle.h"
struct TagRange
{
int tag;
int format;
/* 000 00: invalid
* 001 01: bool
* 002 02: short
* 004 04: int
* 008 08: long long
* 072 48: double
* 128 80: string
* 129 81: hex string representing binary chunk
* 132 84: hex string representing int
* Only 128 and 129 are stored as strings.
* 132 is read as string, but stored as integer.
*/
};
int tagFormat(int tag);
class GroupCode
{
public:
GroupCode();
explicit GroupCode(int tag0);
GroupCode(const GroupCode &b);
GroupCode& operator=(const GroupCode &b);
~GroupCode();
int tag; // short in binary file
union
{
std::string str;
double real;
long long integer;
bool flag;
};
};
struct DxfLayer
{
std::string name;
int number;
int color;
};
std::string hexEncodeInt(long long num);
GroupCode readDxfText(std::istream &file);
GroupCode readDxfBinary(std::istream &file);
void writeDxfText(std::ostream &file,GroupCode code);
void writeDxfBinary(std::ostream &file,GroupCode code);
std::vector<GroupCode> readDxfGroups(std::istream &file,bool mode); // true for text
std::vector<GroupCode> readDxfGroups(std::string filename);
void writeDxfGroups(std::ostream &file,std::vector<GroupCode> &codes,bool mode);
std::vector<std::array<xyz,3> > extractTriangles(std::vector<GroupCode> dxfData);
void dxfHeader(std::vector<GroupCode> &dxfData,BoundRect br);
void tableSection(std::vector<GroupCode> &dxfData,std::vector<DxfLayer> &layers);
void openEntitySection(std::vector<GroupCode> &dxfData);
void closeEntitySection(std::vector<GroupCode> &dxfData);
void dxfEnd(std::vector<GroupCode> &dxfData);
void insertTriangle(std::vector<GroupCode> &dxfData,triangle &tri,double outUnit);
void insertPolyline(std::vector<GroupCode> &dxfData,polyline &poly,DxfLayer &lay,double outUnit);