@jscad/dxf-deserializer 2.3.22 → 3.0.0-alpha.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +10 -169
- package/README.md +3 -1
- package/dist/jscad-dxf-deserializer.es.js +7 -0
- package/dist/jscad-dxf-deserializer.min.js +7 -0
- package/package.json +20 -10
- package/rollup.config.js +27 -0
- package/src/DxfReader.js +241 -0
- package/{autocad.js → src/autocad.js} +4 -17
- package/{colorindex2014.js → src/colorindex2014.js} +1 -3
- package/{colorindex2017.js → src/colorindex2017.js} +1 -3
- package/{helpers.js → src/helpers.js} +4 -19
- package/{index.js → src/index.js} +61 -68
- package/{instantiate.js → src/instantiate.js} +54 -67
- package/{translate.js → src/translate.js} +50 -70
- package/tests/test-2d-entities.js +39 -38
- package/tests/test-2d-translation.js +17 -17
- package/tests/test-3d-entities.js +18 -18
- package/tests/test-3d-translation.js +6 -6
- package/tests/test-DxfReader.js +8 -7
- package/tests/test-dxf-versions.js +12 -11
- package/tests/test-dxf.js +6 -5
- package/DxfReader.js +0 -250
package/package.json
CHANGED
|
@@ -1,22 +1,27 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@jscad/dxf-deserializer",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "3.0.0-alpha.0",
|
|
4
4
|
"description": "DXF Deserializer for JSCAD",
|
|
5
5
|
"homepage": "https://openjscad.xyz/",
|
|
6
6
|
"repository": "https://github.com/jscad/OpenJSCAD.org",
|
|
7
|
-
"
|
|
7
|
+
"type": "module",
|
|
8
|
+
"main": "src/index.js",
|
|
9
|
+
"unpkg": "dist/jscad-dxf-deserializer.min.js",
|
|
10
|
+
"module": "dist/jscad-dxf-deserializer.es.js",
|
|
8
11
|
"scripts": {
|
|
9
|
-
"
|
|
10
|
-
"
|
|
12
|
+
"build": "rollup --config",
|
|
13
|
+
"coverage": "c8 --all --reporter=html --reporter=text pnpm test",
|
|
14
|
+
"test": "ava --verbose --timeout 2m './tests/test*.js'",
|
|
15
|
+
"version": "pnpm run build && git add dist"
|
|
11
16
|
},
|
|
12
17
|
"contributors": [
|
|
13
18
|
{
|
|
14
19
|
"name": "z3dev",
|
|
15
|
-
"url": "
|
|
20
|
+
"url": "https://github.com/z3dev"
|
|
16
21
|
},
|
|
17
22
|
{
|
|
18
23
|
"name": "Mark 'kaosat-dev' Moissette",
|
|
19
|
-
"url": "
|
|
24
|
+
"url": "https://github.com/kaosat-dev"
|
|
20
25
|
}
|
|
21
26
|
],
|
|
22
27
|
"keywords": [
|
|
@@ -28,11 +33,16 @@
|
|
|
28
33
|
],
|
|
29
34
|
"license": "MIT",
|
|
30
35
|
"dependencies": {
|
|
31
|
-
"@jscad/modeling": "
|
|
36
|
+
"@jscad/modeling": "3.0.0-alpha.0"
|
|
32
37
|
},
|
|
33
38
|
"devDependencies": {
|
|
34
|
-
"
|
|
35
|
-
"
|
|
39
|
+
"@rollup/plugin-node-resolve": "^15.2.1",
|
|
40
|
+
"@rollup/plugin-terser": "^0.4.3",
|
|
41
|
+
"ava": "^4.3.3",
|
|
42
|
+
"c8": "^8.0.0",
|
|
43
|
+
"rollup": "^2.79.1",
|
|
44
|
+
"rollup-plugin-banner": "^0.2.1",
|
|
45
|
+
"rollup-plugin-version-injector": "^1.3.3"
|
|
36
46
|
},
|
|
37
|
-
"gitHead": "
|
|
47
|
+
"gitHead": "3656d36ed9cd738ab884e86aae5a2ce08d52adf7"
|
|
38
48
|
}
|
package/rollup.config.js
ADDED
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import banner from 'rollup-plugin-banner'
|
|
2
|
+
import { nodeResolve } from '@rollup/plugin-node-resolve'
|
|
3
|
+
import versionInjector from 'rollup-plugin-version-injector'
|
|
4
|
+
import terser from '@rollup/plugin-terser'
|
|
5
|
+
|
|
6
|
+
export default {
|
|
7
|
+
input: 'src/index.js',
|
|
8
|
+
|
|
9
|
+
output: [
|
|
10
|
+
{
|
|
11
|
+
file: 'dist/jscad-dxf-deserializer.min.js',
|
|
12
|
+
format: 'umd',
|
|
13
|
+
name: 'jscadDxfDeserializer'
|
|
14
|
+
},
|
|
15
|
+
{
|
|
16
|
+
file: 'dist/jscad-dxf-deserializer.es.js',
|
|
17
|
+
format: 'es'
|
|
18
|
+
}
|
|
19
|
+
],
|
|
20
|
+
|
|
21
|
+
plugins: [
|
|
22
|
+
nodeResolve(),
|
|
23
|
+
banner('<%= pkg.description %>\n@module <%= pkg.name %>\n@version <%= pkg.version %>\n@license <%= pkg.license %>'),
|
|
24
|
+
versionInjector({ injectInComments: { fileRegexp: /\.(html)$/ }, logLevel: 'warn' }),
|
|
25
|
+
terser({ compress: { module: true }, mangle: false, format: { comments: 'some'} })
|
|
26
|
+
]
|
|
27
|
+
}
|
package/src/DxfReader.js
ADDED
|
@@ -0,0 +1,241 @@
|
|
|
1
|
+
export const reader = (options) => new DxfReader(options)
|
|
2
|
+
|
|
3
|
+
const STATES = [
|
|
4
|
+
'start',
|
|
5
|
+
'end',
|
|
6
|
+
'error'
|
|
7
|
+
]
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* Class DxfReader
|
|
11
|
+
* A class to hold state while reading DXF formatted data.
|
|
12
|
+
* @param {Object} [options] - options for parsing
|
|
13
|
+
* @param {Boolean} [options.track=true] - track position for error reporting
|
|
14
|
+
* @param {Boolean} [options.strict=false] - obey strict DXF specifications
|
|
15
|
+
* @constructor
|
|
16
|
+
*
|
|
17
|
+
* @example
|
|
18
|
+
* const dxfPath = path.resolve(__dirname, 'circle10.dxf')
|
|
19
|
+
* let src = fs.readFileSync(dxfPath, 'UTF8')
|
|
20
|
+
* let reader = dxf.reader({track: true})
|
|
21
|
+
* // setup state handling
|
|
22
|
+
* reader.on('error',handleError)
|
|
23
|
+
* reader.on('start',handleStart)
|
|
24
|
+
* reader.on('end' ,handleEnd)
|
|
25
|
+
* // setup handling for groups of interest, skip the rest
|
|
26
|
+
* reader.absorb(0,handleEntity)
|
|
27
|
+
* // start the reader
|
|
28
|
+
* reader.write(src).close()
|
|
29
|
+
*/
|
|
30
|
+
export class DxfReader {
|
|
31
|
+
constructor (options) {
|
|
32
|
+
const defaults = {
|
|
33
|
+
strict: false,
|
|
34
|
+
track: true
|
|
35
|
+
}
|
|
36
|
+
this.options = Object.assign({ }, defaults, options)
|
|
37
|
+
|
|
38
|
+
this.trackPosition = this.options.track
|
|
39
|
+
if (this.trackPosition) {
|
|
40
|
+
this.line = 0
|
|
41
|
+
this.column = 0
|
|
42
|
+
this.c = 0
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
// set a handler for the given state
|
|
47
|
+
// see dxf.STATES above
|
|
48
|
+
on (state, callback) {
|
|
49
|
+
// verify the state
|
|
50
|
+
// set the callback
|
|
51
|
+
this['on' + state] = callback
|
|
52
|
+
return this
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
// set a handler for the given group and value
|
|
56
|
+
absorb (group, callback) {
|
|
57
|
+
if (this.absorbers === undefined) {
|
|
58
|
+
this.absorbers = new Map()
|
|
59
|
+
}
|
|
60
|
+
this.absorbers.set(group, callback)
|
|
61
|
+
return this
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
// write the given data into the reader, initiating parsing
|
|
65
|
+
write (data) {
|
|
66
|
+
parse(this, data)
|
|
67
|
+
return this
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
// close and clear all state
|
|
71
|
+
close () {
|
|
72
|
+
this.isclosed = true
|
|
73
|
+
return this
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
//
|
|
78
|
+
// emit the start of processing to the onstart handler if any
|
|
79
|
+
//
|
|
80
|
+
const emitstart = (reader) => emitstate(reader, 'onstart', reader.data)
|
|
81
|
+
|
|
82
|
+
//
|
|
83
|
+
// emit the group (code and value) to asorbers
|
|
84
|
+
//
|
|
85
|
+
const emitgroup = (reader, group, value) => {
|
|
86
|
+
// emit this group to all listeners
|
|
87
|
+
if (reader.absorbers !== undefined) {
|
|
88
|
+
const absorber = reader.absorbers.get(group)
|
|
89
|
+
if (absorber !== undefined) {
|
|
90
|
+
absorber(reader, group, value)
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
//
|
|
96
|
+
// wrap and emit the given error to the onerror handler if any
|
|
97
|
+
//
|
|
98
|
+
const emiterror = (reader, er) => {
|
|
99
|
+
// closeText(reader)
|
|
100
|
+
if (reader.trackPosition) {
|
|
101
|
+
er += `
|
|
102
|
+
Line: ${reader.line}
|
|
103
|
+
Column: ${reader.column}
|
|
104
|
+
Char: ${reader.c}`
|
|
105
|
+
}
|
|
106
|
+
er = new Error(er)
|
|
107
|
+
reader.error = er
|
|
108
|
+
return emitstate(reader, 'onerror', er)
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
//
|
|
112
|
+
// emit the end of processing to the onend handler if any
|
|
113
|
+
//
|
|
114
|
+
const emitend = (reader) => emitstate(reader, 'onend', reader.data)
|
|
115
|
+
|
|
116
|
+
const emitstate = (reader, state, data) => {
|
|
117
|
+
const onhandler = state.toString()
|
|
118
|
+
reader[onhandler] && reader[onhandler](reader, data)
|
|
119
|
+
return reader
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
//
|
|
123
|
+
// parse the given data in the context of the given reader
|
|
124
|
+
//
|
|
125
|
+
const parse = (reader, data) => {
|
|
126
|
+
// check reader state
|
|
127
|
+
if (reader.error) {
|
|
128
|
+
throw reader.error // throw the last error
|
|
129
|
+
}
|
|
130
|
+
if (reader.isclosed) {
|
|
131
|
+
return emiterror(reader, 'Cannot write after close')
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
emitstart(reader)
|
|
135
|
+
|
|
136
|
+
if (data === null) {
|
|
137
|
+
return emitend(reader)
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
// initial state to initiate parsing
|
|
141
|
+
reader.group = null
|
|
142
|
+
reader.value = null
|
|
143
|
+
reader.error = null
|
|
144
|
+
|
|
145
|
+
reader.position = 0
|
|
146
|
+
reader.line = 0
|
|
147
|
+
reader.column = 0
|
|
148
|
+
|
|
149
|
+
// use or convert the data to String
|
|
150
|
+
let i = 0
|
|
151
|
+
let c = ''
|
|
152
|
+
let l = ''
|
|
153
|
+
while (reader.error === null) {
|
|
154
|
+
c = charAt(data, i++)
|
|
155
|
+
if (!c) {
|
|
156
|
+
break
|
|
157
|
+
}
|
|
158
|
+
if (reader.trackPosition) {
|
|
159
|
+
reader.position++
|
|
160
|
+
if (c === '\n') {
|
|
161
|
+
reader.line++
|
|
162
|
+
reader.column = 0
|
|
163
|
+
} else {
|
|
164
|
+
reader.column++
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
// dxf files are parsed line by line
|
|
168
|
+
if (c === '\n') {
|
|
169
|
+
parseLine(reader, l)
|
|
170
|
+
l = ''
|
|
171
|
+
} else {
|
|
172
|
+
l += c
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
// emit state change
|
|
176
|
+
emitend(reader)
|
|
177
|
+
return reader
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
/**
|
|
181
|
+
* Parse the given line in the context of the given reader, emitting group value pairs
|
|
182
|
+
* @param reader {DxfReader} - context DxfReader to use
|
|
183
|
+
* @param line {String} - line to parse
|
|
184
|
+
*/
|
|
185
|
+
const parseLine = (reader, line) => {
|
|
186
|
+
line = line.trim()
|
|
187
|
+
if (reader.group === null) {
|
|
188
|
+
setDxfGroup(reader, line)
|
|
189
|
+
reader.value = null
|
|
190
|
+
} else {
|
|
191
|
+
setDxfValue(reader, line)
|
|
192
|
+
}
|
|
193
|
+
// handle group and value pairs
|
|
194
|
+
if (reader.group !== null && reader.value !== null) {
|
|
195
|
+
// emit events for group and value pairs
|
|
196
|
+
emitgroup(reader, reader.group, reader.value)
|
|
197
|
+
|
|
198
|
+
reader.group = null
|
|
199
|
+
reader.value = null
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
/**
|
|
204
|
+
* Parse the given line in the context of the given reader, and update the group
|
|
205
|
+
* @param reader {DxfReader} - context DxfReader to use
|
|
206
|
+
* @param line {String} - line to parse
|
|
207
|
+
*/
|
|
208
|
+
const setDxfGroup = (reader, line) => {
|
|
209
|
+
// groups are numeric
|
|
210
|
+
const code = parseInt(line)
|
|
211
|
+
if (isNaN(code)) {
|
|
212
|
+
emiterror(reader, 'Invalid group (int)')
|
|
213
|
+
reader.group = null
|
|
214
|
+
} else {
|
|
215
|
+
reader.group = code
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
|
|
219
|
+
/**
|
|
220
|
+
* Parse the given line in the context of the given reader, and update the (group) value
|
|
221
|
+
* @param reader {DxfReader} - context DxfReader to use
|
|
222
|
+
* @param line {String} - line to parse
|
|
223
|
+
*/
|
|
224
|
+
const setDxfValue = (reader, line) => {
|
|
225
|
+
if (reader.options.strict) {
|
|
226
|
+
// TODO evaluate the value based on DXF specifications
|
|
227
|
+
reader.value = line
|
|
228
|
+
} else {
|
|
229
|
+
reader.value = line
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
|
|
233
|
+
//
|
|
234
|
+
// helper function to return expected values
|
|
235
|
+
//
|
|
236
|
+
const charAt = (data, i) => {
|
|
237
|
+
if (data && data.length > i) {
|
|
238
|
+
return data.charAt(i)
|
|
239
|
+
}
|
|
240
|
+
return ''
|
|
241
|
+
}
|
|
@@ -1,11 +1,5 @@
|
|
|
1
1
|
/*
|
|
2
2
|
AutoCAD Constants
|
|
3
|
-
|
|
4
|
-
## License
|
|
5
|
-
|
|
6
|
-
Copyright (c) 2017 Z3 Development https://github.com/z3dev
|
|
7
|
-
|
|
8
|
-
All code released under MIT license
|
|
9
3
|
*/
|
|
10
4
|
|
|
11
5
|
//
|
|
@@ -35,12 +29,12 @@ const dxfTLA = [
|
|
|
35
29
|
|
|
36
30
|
const dxfMap = new Map(dxfTLA)
|
|
37
31
|
|
|
38
|
-
const getTLA = (group) => dxfMap.get(group)
|
|
32
|
+
export const getTLA = (group) => dxfMap.get(group)
|
|
39
33
|
|
|
40
34
|
/*
|
|
41
35
|
* AutoCAD Drawing Units
|
|
42
36
|
*/
|
|
43
|
-
const drawingUnits = [
|
|
37
|
+
export const drawingUnits = [
|
|
44
38
|
[0, 'none'],
|
|
45
39
|
[1, 'inches'],
|
|
46
40
|
[2, 'feet'],
|
|
@@ -64,12 +58,5 @@ const drawingUnits = [
|
|
|
64
58
|
[20, 'parsecs']
|
|
65
59
|
]
|
|
66
60
|
|
|
67
|
-
const BYBLOCK = 0
|
|
68
|
-
const BYLAYER = 256
|
|
69
|
-
|
|
70
|
-
module.exports = {
|
|
71
|
-
drawingUnits,
|
|
72
|
-
BYBLOCK,
|
|
73
|
-
BYLAYER,
|
|
74
|
-
getTLA
|
|
75
|
-
}
|
|
61
|
+
export const BYBLOCK = 0
|
|
62
|
+
export const BYLAYER = 256
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* AutoCAD 2014 Color Index (1-255) as RGB + ALPHA colors
|
|
3
3
|
*/
|
|
4
4
|
|
|
5
|
-
const colorIndex = [
|
|
5
|
+
export const colorIndex = [
|
|
6
6
|
[0, 0, 0, 255], // index 0, added for easy maintenance
|
|
7
7
|
// 1
|
|
8
8
|
[255, 0, 0, 255],
|
|
@@ -286,5 +286,3 @@ const colorIndex = [
|
|
|
286
286
|
[224, 224, 224, 255],
|
|
287
287
|
[0, 0, 0, 255]
|
|
288
288
|
]
|
|
289
|
-
|
|
290
|
-
module.exports = colorIndex
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* AutoCAD 2017 2018 Color Index (1-255) as RGB + ALPHA colors
|
|
3
3
|
*/
|
|
4
4
|
|
|
5
|
-
const colorIndex = [
|
|
5
|
+
export const colorIndex = [
|
|
6
6
|
[0, 0, 0, 255], // index 0, added for easy maintenance
|
|
7
7
|
// 1
|
|
8
8
|
[255, 0, 0, 255],
|
|
@@ -286,5 +286,3 @@ const colorIndex = [
|
|
|
286
286
|
[204, 204, 204, 255],
|
|
287
287
|
[255, 255, 255, 255]
|
|
288
288
|
]
|
|
289
|
-
|
|
290
|
-
module.exports = colorIndex
|
|
@@ -1,18 +1,9 @@
|
|
|
1
|
-
|
|
2
|
-
## License
|
|
3
|
-
|
|
4
|
-
Copyright (c) 2017-2019 Z3 Development https://github.com/z3dev
|
|
5
|
-
|
|
6
|
-
All code released under MIT license
|
|
7
|
-
|
|
8
|
-
*/
|
|
9
|
-
|
|
10
|
-
const { BYBLOCK, BYLAYER } = require('./autocad')
|
|
1
|
+
import { BYBLOCK, BYLAYER } from './autocad.js'
|
|
11
2
|
|
|
12
3
|
//
|
|
13
4
|
// find the layer referenced by the given object
|
|
14
5
|
//
|
|
15
|
-
const findLayer = (obj, layers) => {
|
|
6
|
+
export const findLayer = (obj, layers) => {
|
|
16
7
|
const lname = obj.lnam || '0'
|
|
17
8
|
for (const layer of layers) {
|
|
18
9
|
if (layer.name === lname) {
|
|
@@ -26,7 +17,7 @@ const findLayer = (obj, layers) => {
|
|
|
26
17
|
// get the color number of the object, possibly looking at layer
|
|
27
18
|
// returns -1 if a color number was not found
|
|
28
19
|
//
|
|
29
|
-
const getColorNumber = (obj, layers) => {
|
|
20
|
+
export const getColorNumber = (obj, layers) => {
|
|
30
21
|
let cn = obj.cnmb || -1
|
|
31
22
|
if (cn === BYLAYER) {
|
|
32
23
|
// use the color number from the layer
|
|
@@ -50,7 +41,7 @@ const mod = (num, mod) => {
|
|
|
50
41
|
//
|
|
51
42
|
// instantiate color using the given index into the given color index
|
|
52
43
|
// Note: 0 > index <= length of colorindex
|
|
53
|
-
const getColor = (index, colorindex) => {
|
|
44
|
+
export const getColor = (index, colorindex) => {
|
|
54
45
|
if (index < 1) { return null }
|
|
55
46
|
|
|
56
47
|
index = mod(index, colorindex.length)
|
|
@@ -58,9 +49,3 @@ const getColor = (index, colorindex) => {
|
|
|
58
49
|
const rgba = [color[0] / 255, color[1] / 255, color[2] / 255, color[3] / 255]
|
|
59
50
|
return rgba
|
|
60
51
|
}
|
|
61
|
-
|
|
62
|
-
module.exports = {
|
|
63
|
-
findLayer,
|
|
64
|
-
getColor,
|
|
65
|
-
getColorNumber
|
|
66
|
-
}
|
|
@@ -1,18 +1,10 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
1
|
+
import { BYLAYER, getTLA } from './autocad.js'
|
|
2
|
+
import { colorIndex } from './colorindex2017.js'
|
|
3
|
+
import { DxfReader } from './DxfReader.js'
|
|
4
|
+
import { instantiateAsciiDxf } from './instantiate.js'
|
|
5
|
+
import { translateAsciiDxf } from './translate.js'
|
|
3
6
|
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
All code released under MIT license
|
|
7
|
-
|
|
8
|
-
*/
|
|
9
|
-
|
|
10
|
-
const version = require('./package.json').version
|
|
11
|
-
const { BYLAYER, getTLA } = require('./autocad')
|
|
12
|
-
const colorIndex = require('./colorindex2017')
|
|
13
|
-
const dxf = require('./DxfReader')
|
|
14
|
-
const { instantiateAsciiDxf } = require('./instantiate')
|
|
15
|
-
const translateAsciiDxf = require('./translate')
|
|
7
|
+
const version = '[VI]{version}[/VI]' // version is injected by rollup
|
|
16
8
|
|
|
17
9
|
// //////////////////////////////////////////
|
|
18
10
|
//
|
|
@@ -490,64 +482,65 @@ const handleName = (reader, group, value) => {
|
|
|
490
482
|
//
|
|
491
483
|
const createReader = (src, options) => {
|
|
492
484
|
// create a reader for the DXF
|
|
493
|
-
const
|
|
485
|
+
const dxfreader = new DxfReader(options)
|
|
494
486
|
|
|
495
487
|
// setup event handling from the reader
|
|
496
|
-
|
|
497
|
-
|
|
498
|
-
|
|
488
|
+
dxfreader.on('error', handleError)
|
|
489
|
+
dxfreader.on('start', handleStart)
|
|
490
|
+
dxfreader.on('end', handleEnd)
|
|
499
491
|
|
|
500
492
|
// setup group handling
|
|
501
|
-
|
|
502
|
-
|
|
503
|
-
|
|
504
|
-
|
|
505
|
-
|
|
506
|
-
|
|
507
|
-
|
|
508
|
-
|
|
509
|
-
|
|
510
|
-
|
|
511
|
-
|
|
512
|
-
|
|
513
|
-
|
|
514
|
-
|
|
515
|
-
|
|
516
|
-
|
|
517
|
-
|
|
518
|
-
|
|
519
|
-
|
|
520
|
-
|
|
521
|
-
|
|
522
|
-
|
|
523
|
-
|
|
524
|
-
|
|
525
|
-
|
|
526
|
-
|
|
527
|
-
|
|
528
|
-
|
|
529
|
-
|
|
530
|
-
|
|
531
|
-
|
|
532
|
-
|
|
533
|
-
|
|
534
|
-
|
|
535
|
-
|
|
536
|
-
|
|
537
|
-
|
|
538
|
-
|
|
539
|
-
|
|
540
|
-
|
|
541
|
-
|
|
542
|
-
|
|
493
|
+
dxfreader.absorb(0, handleEntity)
|
|
494
|
+
dxfreader.absorb(1, handleString)
|
|
495
|
+
dxfreader.absorb(2, handleName)
|
|
496
|
+
dxfreader.absorb(3, handleName)
|
|
497
|
+
dxfreader.absorb(6, handleString)
|
|
498
|
+
dxfreader.absorb(7, handleString)
|
|
499
|
+
dxfreader.absorb(8, handleString)
|
|
500
|
+
dxfreader.absorb(9, handleVariable)
|
|
501
|
+
dxfreader.absorb(10, handleXcoord)
|
|
502
|
+
dxfreader.absorb(11, handleDouble)
|
|
503
|
+
dxfreader.absorb(12, handleDouble)
|
|
504
|
+
dxfreader.absorb(13, handleDouble)
|
|
505
|
+
dxfreader.absorb(20, handleYcoord)
|
|
506
|
+
dxfreader.absorb(21, handleDouble)
|
|
507
|
+
dxfreader.absorb(22, handleDouble)
|
|
508
|
+
dxfreader.absorb(23, handleDouble)
|
|
509
|
+
dxfreader.absorb(30, handleZcoord)
|
|
510
|
+
dxfreader.absorb(31, handleDouble)
|
|
511
|
+
dxfreader.absorb(32, handleDouble)
|
|
512
|
+
dxfreader.absorb(33, handleDouble)
|
|
513
|
+
dxfreader.absorb(39, handleDouble)
|
|
514
|
+
dxfreader.absorb(40, handleDouble)
|
|
515
|
+
dxfreader.absorb(41, handleDouble)
|
|
516
|
+
dxfreader.absorb(42, handleBulge)
|
|
517
|
+
dxfreader.absorb(50, handleDouble)
|
|
518
|
+
dxfreader.absorb(51, handleDouble)
|
|
519
|
+
dxfreader.absorb(62, handleInt)
|
|
520
|
+
dxfreader.absorb(70, handleInt)
|
|
521
|
+
dxfreader.absorb(71, handleInt)
|
|
522
|
+
dxfreader.absorb(72, handleInt)
|
|
523
|
+
dxfreader.absorb(73, handleInt)
|
|
524
|
+
dxfreader.absorb(74, handleInt)
|
|
525
|
+
dxfreader.absorb(75, handleInt)
|
|
526
|
+
dxfreader.absorb(90, handleValue)
|
|
527
|
+
dxfreader.absorb(91, handleLen) // MESH
|
|
528
|
+
dxfreader.absorb(92, handleLen) // MESH
|
|
529
|
+
dxfreader.absorb(93, handleLen) // MESH
|
|
530
|
+
dxfreader.absorb(94, handleLen) // MESH
|
|
531
|
+
dxfreader.absorb(95, handleLen) // MESH
|
|
532
|
+
dxfreader.absorb(210, handleInt)
|
|
533
|
+
dxfreader.absorb(220, handleInt)
|
|
534
|
+
dxfreader.absorb(230, handleInt)
|
|
543
535
|
|
|
544
536
|
// initial state
|
|
545
|
-
|
|
546
|
-
|
|
537
|
+
dxfreader.objstack = []
|
|
538
|
+
dxfreader.objstack.push({ type: 'dxf' })
|
|
547
539
|
|
|
548
540
|
// start the reader
|
|
549
|
-
|
|
550
|
-
|
|
541
|
+
dxfreader.write(src)
|
|
542
|
+
dxfreader.close()
|
|
543
|
+
return dxfreader
|
|
551
544
|
}
|
|
552
545
|
|
|
553
546
|
//
|
|
@@ -603,9 +596,9 @@ const deserialize = (options, src) => {
|
|
|
603
596
|
return options.output === 'script' ? translate(src, options) : instantiate(src, options)
|
|
604
597
|
}
|
|
605
598
|
|
|
606
|
-
const
|
|
599
|
+
const mimeType = 'image/vnd.dxf'
|
|
607
600
|
|
|
608
|
-
|
|
609
|
-
|
|
610
|
-
|
|
601
|
+
export {
|
|
602
|
+
mimeType,
|
|
603
|
+
deserialize
|
|
611
604
|
}
|