!function(e, a) { "object" == typeof exports && "object" == typeof module ? module.exports = a() : "function" == typeof define && define.amd ? define([], a) : "object" == typeof exports ? exports.DxfParser = a() : e.DxfParser = a() }("undefined" != typeof self ? self : this, function() { return function(e) { var a = {}; function t(r) { if (a[r]) return a[r].exports; var n = a[r] = { i: r, l: !1, exports: {} }; return e[r].call(n.exports, n, n.exports, t), n.l = !0, n.exports } return t.m = e, t.c = a, t.d = function(e, a, r) { t.o(e, a) || Object.defineProperty(e, a, { enumerable: !0, get: r }) } , t.r = function(e) { "undefined" != typeof Symbol && Symbol.toStringTag && Object.defineProperty(e, Symbol.toStringTag, { value: "Module" }), Object.defineProperty(e, "__esModule", { value: !0 }) } , t.t = function(e, a) { if (1 & a && (e = t(e)), 8 & a) return e; if (4 & a && "object" == typeof e && e && e.__esModule) return e; var r = Object.create(null); if (t.r(r), Object.defineProperty(r, "default", { enumerable: !0, value: e }), 2 & a && "string" != typeof e) for (var n in e) t.d(r, n, function(a) { return e[a] } .bind(null, n)); return r } , t.n = function(e) { var a = e && e.__esModule ? function() { return e.default } : function() { return e } ; return t.d(a, "a", a), a } , t.o = function(e, a) { return Object.prototype.hasOwnProperty.call(e, a) } , t.p = "", t(t.s = 1) }([function(e, a, t) { var r, n; !function(o, c) { "use strict"; void 0 === (n = "function" == typeof (r = function() { var e = function() {} , a = "undefined" , t = ["trace", "debug", "info", "warn", "error"]; function r(e, a) { var t = e[a]; if ("function" == typeof t.bind) return t.bind(e); try { return Function.prototype.bind.call(t, e) } catch (a) { return function() { return Function.prototype.apply.apply(t, [e, arguments]) } } } function n(a, r) { for (var n = 0; n < t.length; n++) { var o = t[n]; this[o] = n < a ? e : this.methodFactory(o, a, r) } this.log = this.debug } function o(t, o, c) { return function(t) { "debug" === t && (t = "log"); return typeof console !== a && (void 0 !== console[t] ? r(console, t) : void 0 !== console.log ? r(console, "log") : e) }(t) || function(e, t, r) { return function() { typeof console !== a && (n.call(this, t, r), this[e].apply(this, arguments)) } } .apply(this, arguments) } function c(e, r, c) { var i, u = this, s = "loglevel"; function l() { var e; if (typeof window !== a) { try { e = window.localStorage[s] } catch (e) {} if (typeof e === a) try { var t = window.document.cookie , r = t.indexOf(encodeURIComponent(s) + "="); -1 !== r && (e = /^([^;]+)/.exec(t.slice(r))[1]) } catch (e) {} return void 0 === u.levels[e] && (e = void 0), e } } e && (s += ":" + e), u.name = e, u.levels = { TRACE: 0, DEBUG: 1, INFO: 2, WARN: 3, ERROR: 4, SILENT: 5 }, u.methodFactory = c || o, u.getLevel = function() { return i } , u.setLevel = function(r, o) { if ("string" == typeof r && void 0 !== u.levels[r.toUpperCase()] && (r = u.levels[r.toUpperCase()]), !("number" == typeof r && r >= 0 && r <= u.levels.SILENT)) throw "log.setLevel() called with invalid level: " + r; if (i = r, !1 !== o && function(e) { var r = (t[e] || "silent").toUpperCase(); if (typeof window === a) return; try { return void (window.localStorage[s] = r) } catch (e) {} try { window.document.cookie = encodeURIComponent(s) + "=" + r + ";" } catch (e) {} }(r), n.call(u, r, e), typeof console === a && r < u.levels.SILENT) return "No console available for logging" } , u.setDefaultLevel = function(e) { l() || u.setLevel(e, !1) } , u.enableAll = function(e) { u.setLevel(u.levels.TRACE, e) } , u.disableAll = function(e) { u.setLevel(u.levels.SILENT, e) } ; var v = l(); null == v && (v = null == r ? "WARN" : r), u.setLevel(v, !1) } var i = new c , u = {}; i.getLogger = function(e) { if ("string" != typeof e || "" === e) throw new TypeError("You must supply a name when creating a logger."); var a = u[e]; return a || (a = u[e] = new c(e,i.getLevel(),i.methodFactory)), a } ; var s = typeof window !== a ? window.log : void 0; return i.noConflict = function() { return typeof window !== a && window.log === i && (window.log = s), i } , i.getLoggers = function() { return u } , i } ) ? r.call(a, t, a, e) : r) || (e.exports = n) }() } , function(e, a, t) { "use strict"; function r(e) { this._pointer = 0, this._data = e, this._eof = !1 } function n(e, a) { return e <= 9 ? a : e >= 10 && e <= 59 ? parseFloat(a) : e >= 60 && e <= 99 ? parseInt(a) : e >= 100 && e <= 109 ? a : e >= 110 && e <= 149 ? parseFloat(a) : e >= 160 && e <= 179 ? parseInt(a) : e >= 210 && e <= 239 ? parseFloat(a) : e >= 270 && e <= 289 ? parseInt(a) : e >= 290 && e <= 299 ? function(e) { if ("0" === e) return !1; if ("1" === e) return !0; throw TypeError("String '" + e + "' cannot be cast to Boolean type") }(a) : e >= 300 && e <= 369 ? a : e >= 370 && e <= 389 ? parseInt(a) : e >= 390 && e <= 399 ? a : e >= 400 && e <= 409 ? parseInt(a) : e >= 410 && e <= 419 ? a : e >= 420 && e <= 429 ? parseInt(a) : e >= 430 && e <= 439 ? a : e >= 440 && e <= 459 ? parseInt(a) : e >= 460 && e <= 469 ? parseFloat(a) : e >= 470 && e <= 481 ? a : 999 === e ? a : e >= 1e3 && e <= 1009 ? a : e >= 1010 && e <= 1059 ? parseFloat(a) : e >= 1060 && e <= 1071 ? parseInt(a) : (console.log("WARNING: Group code does not have a defined type: %j", { code: e, value: a }), a) } t.r(a), r.prototype.next = function() { var e; if (!this.hasNext()) throw this._eof ? new Error("Cannot call 'next' after EOF group has been read") : new Error("Unexpected end of input: EOF group not read before end of file. Ended on code " + this._data[this._pointer]); return e = { code: parseInt(this._data[this._pointer]) }, this._pointer++, e.value = n(e.code, this._data[this._pointer].trim()), this._pointer++, 0 === e.code && "EOF" === e.value && (this._eof = !0), this.lastReadGroup = e, e } , r.prototype.peek = function() { if (!this.hasNext()) throw this._eof ? new Error("Cannot call 'next' after EOF group has been read") : new Error("Unexpected end of input: EOF group not read before end of file. Ended on code " + this._data[this._pointer]); var e = { code: parseInt(this._data[this._pointer]) }; return e.value = n(e.code, this._data[this._pointer + 1].trim()), e } , r.prototype.rewind = function(e) { e = e || 1, this._pointer = this._pointer - 2 * e } , r.prototype.hasNext = function() { return !this._eof && !(this._pointer > this._data.length - 2) } , r.prototype.isEOF = function() { return this._eof } ; var o = [0, 16711680, 16776960, 65280, 65535, 255, 16711935, 16777215, 8421504, 12632256, 16711680, 16744319, 13369344, 13395558, 10027008, 10046540, 8323072, 8339263, 4980736, 4990502, 16727808, 16752511, 13382400, 13401958, 10036736, 10051404, 8331008, 8343359, 4985600, 4992806, 16744192, 16760703, 13395456, 13408614, 10046464, 10056268, 8339200, 8347455, 4990464, 4995366, 16760576, 16768895, 13408512, 13415014, 10056192, 10061132, 8347392, 8351551, 4995328, 4997670, 16776960, 16777087, 13421568, 13421670, 10000384, 10000460, 8355584, 8355647, 5000192, 5000230, 12582656, 14679935, 10079232, 11717734, 7510016, 8755276, 6258432, 7307071, 3755008, 4344870, 8388352, 12582783, 6736896, 10079334, 5019648, 7510092, 4161280, 6258495, 2509824, 3755046, 4194048, 10485631, 3394560, 8375398, 2529280, 6264908, 2064128, 5209919, 1264640, 3099686, 65280, 8388479, 52224, 6736998, 38912, 5019724, 32512, 4161343, 19456, 2509862, 65343, 8388511, 52275, 6737023, 38950, 5019743, 32543, 4161359, 19475, 2509871, 65407, 8388543, 52326, 6737049, 38988, 5019762, 32575, 4161375, 19494, 2509881, 65471, 8388575, 52377, 6737074, 39026, 5019781, 32607, 4161391, 19513, 2509890, 65535, 8388607, 52428, 6737100, 39064, 5019800, 32639, 4161407, 19532, 2509900, 49151, 8380415, 39372, 6730444, 29336, 5014936, 24447, 4157311, 14668, 2507340, 32767, 8372223, 26316, 6724044, 19608, 5010072, 16255, 4153215, 9804, 2505036, 16383, 8364031, 13260, 6717388, 9880, 5005208, 8063, 4149119, 4940, 2502476, 255, 8355839, 204, 6710988, 152, 5000344, 127, 4145023, 76, 2500172, 4129023, 10452991, 3342540, 8349388, 2490520, 6245528, 2031743, 5193599, 1245260, 3089996, 8323327, 12550143, 6684876, 10053324, 4980888, 7490712, 4128895, 6242175, 2490444, 3745356, 12517631, 14647295, 10027212, 11691724, 7471256, 8735896, 6226047, 7290751, 3735628, 4335180, 16711935, 16744447, 13369548, 13395660, 9961624, 9981080, 8323199, 8339327, 4980812, 4990540, 16711871, 16744415, 13369497, 13395634, 9961586, 9981061, 8323167, 8339311, 4980793, 4990530, 16711807, 16744383, 13369446, 13395609, 9961548, 9981042, 8323135, 8339295, 4980774, 4990521, 16711743, 16744351, 13369395, 13395583, 9961510, 9981023, 8323103, 8339279, 4980755, 4990511, 3355443, 5987163, 8684676, 11382189, 14079702, 16777215]; function c(e) { var a = {}; e.rewind(); var t = e.next() , r = t.code; if (a.x = t.value, r += 10, (t = e.next()).code != r) throw new Error("Expected code for point value to be " + r + " but got " + t.code + "."); return a.y = t.value, r += 10, (t = e.next()).code != r ? (e.rewind(), a) : (a.z = t.value, a) } function i(e, a) { switch (a.code) { case 0: e.type = a.value; break; case 5: e.handle = a.value; /* if(e.handle == "2FDDB"){ console.log(1) } */ break; case 6: e.lineType = a.value; break; case 8: e.layer = a.value; break; case 48: e.lineTypeScale = a.value; break; case 60: e.visible = 0 === a.value; break; case 62: e.colorIndex = a.value, e.color = (t = Math.abs(a.value), o[t]); break; case 67: e.inPaperSpace = 0 !== a.value; break; case 100: break; case 330: e.ownerHandle = a.value; break; case 347: e.materialObjectHandle = a.value; break; case 370: e.lineweight = a.value; break; case 420: e.color = a.value; break; case 1e3: e.extendedData = e.extendedData || {}, e.extendedData.customStrings = e.extendedData.customStrings || [], e.extendedData.customStrings.push(a.value); break; case 1001: e.extendedData = e.extendedData || {}, e.extendedData.applicationName = a.value; break; default: return !1 } var t; return !0 } function u() {} function s(e, a) { var t, r = [], n = !1, o = !1; for (t = 0; t <= 4; t++) { for (var c = {}; "EOF" !== a && 0 !== a.code && !o; ) { switch (a.code) { case 10: case 11: case 12: case 13: if (n) { o = !0; continue } c.x = a.value, n = !0; break; case 20: case 21: case 22: case 23: c.y = a.value; break; case 30: case 31: case 32: case 33: c.z = a.value; break; default: return r } a = e.next() } r.push(c), n = !1, o = !1 } return e.rewind(), r } function l() {} function v() {} function d() {} function b() {} function p() {} function f() {} function k() {} function y() {} function x(e, a) { if (!e || e <= 0) throw Error("n must be greater than 0 verticies"); var t, r = [], n = !1, o = !1, c = a.lastReadGroup; for (t = 0; t < e; t++) { for (var i = {}; "EOF" !== c && 0 !== c.code && !o; ) { switch (c.code) { case 10: if (n) { o = !0; continue } i.x = c.value, n = !0; break; case 20: i.y = c.value; break; case 30: i.z = c.value; break; case 40: i.startWidth = c.value; break; case 41: i.endWidth = c.value; break; case 42: 0 != c.value && (i.bulge = c.value); break; default: return n && r.push(i), r } c = a.next() } r.push(i), n = !1, o = !1 } return a.rewind(), r } function h() {} function g() {} function E() {} function w() {} function m(e, a) { var t = { type: a.value }; for (a = e.next(); "EOF" != a && 0 != a.code; ) i(t, a), a = e.next(); return t } function P() {} function F() {} function O() {} u.ForEntityName = "3DFACE", u.prototype.parseEntity = function(e, a) { var t = { type: a.value, vertices: [] }; for (a = e.next(); "EOF" !== a && 0 !== a.code; ) { switch (a.code) { case 70: t.shape = 1 == (1 & a.value), t.hasContinuousLinetypePattern = 128 == (128 & a.value); break; case 10: t.vertices = s(e, a), a = e.lastReadGroup; break; default: i(t, a) } a = e.next() } return t } , l.ForEntityName = "ARC", l.prototype.parseEntity = function(e, a) { var t; for (t = { type: a.value }, a = e.next(); "EOF" !== a && 0 !== a.code; ) { switch (a.code) { case 10: t.center = c(e); break; case 40: t.radius = a.value; break; case 50: t.startAngle = Math.PI / 180 * a.value; break; case 51: t.endAngle = Math.PI / 180 * a.value, t.angleLength = t.endAngle - t.startAngle; break; default: i(t, a) } a = e.next() } return t } , v.ForEntityName = "ATTDEF", v.prototype.parseEntity = function(e, a) { var t = { type: a.value, scale: 1, textStyle: "STANDARD" }; for (a = e.next(); "EOF" !== a && 0 !== a.code; ) { switch (a.code) { case 1: t.text = a.value; break; case 2: t.tag = a.value; break; case 3: t.prompt = a.value; break; case 7: t.textStyle = a.value; break; case 10: t.startPoint = c(e); break; case 11: t.endPoint = c(e); break; case 39: t.thickness = a.value; break; case 40: t.textHeight = a.value; break; case 41: t.scale = a.value; break; case 50: t.rotation = a.value; break; case 51: t.obliqueAngle = a.value; break; case 70: t.invisible = !!(1 & a.value), t.constant = !!(2 & a.value), t.verificationRequired = !!(4 & a.value), t.preset = !!(8 & a.value); break; case 71: t.backwards = !!(2 & a.value), t.mirrored = !!(4 & a.value); break; case 72: t.horizontalJustification = a.value; break; case 73: t.fieldLength = a.value; break; case 74: t.verticalJustification = a.value; break; case 100: break; case 210: t.extrusionDirectionX = a.value; break; case 220: t.extrusionDirectionY = a.value; break; case 230: t.extrusionDirectionZ = a.value; break; default: i(t, a) } a = e.next() } return t } , d.ForEntityName = "CIRCLE", d.prototype.parseEntity = function(e, a) { var t, r; for (t = { type: a.value }, a = e.next(); "EOF" !== a && 0 !== a.code; ) { switch (a.code) { case 10: t.center = c(e); break; case 40: t.radius = a.value; break; case 50: t.startAngle = Math.PI / 180 * a.value; break; case 51: (r = Math.PI / 180 * a.value) < t.startAngle ? t.angleLength = r + 2 * Math.PI - t.startAngle : t.angleLength = r - t.startAngle, t.endAngle = r; break; default: i(t, a) } a = e.next() } return t } , b.ForEntityName = "DIMENSION", b.prototype.parseEntity = function(e, a) { var t; for (t = { type: a.value }, a = e.next(); "EOF" !== a && 0 !== a.code; ) { switch (a.code) { case 2: t.block = a.value; break; case 10: t.anchorPoint = c(e); break; case 11: t.middleOfText = c(e); break; case 12: t.insertionPoint = c(e); break; case 13: t.linearOrAngularPoint1 = c(e); break; case 14: t.linearOrAngularPoint2 = c(e); break; case 15: t.diameterOrRadiusPoint = c(e); break; case 16: t.arcPoint = c(e); break; case 70: t.dimensionType = a.value; break; case 71: t.attachmentPoint = a.value; break; case 42: t.actualMeasurement = a.value; break; case 1: t.text = a.value; break; case 50: t.angle = a.value; break; default: i(t, a) } a = e.next() } return t } , p.ForEntityName = "ELLIPSE", p.prototype.parseEntity = function(e, a) { var t; for (t = { type: a.value }, a = e.next(); "EOF" !== a && 0 !== a.code; ) { switch (a.code) { case 10: t.center = c(e); break; case 11: t.majorAxisEndPoint = c(e); break; case 40: t.axisRatio = a.value; break; case 41: t.startAngle = a.value; break; case 42: t.endAngle = a.value; break; case 2: t.name = a.value; break; default: i(t, a) } a = e.next() } return t } , f.ForEntityName = "INSERT", f.prototype.parseEntity = function(e, a) { var t; for (t = { type: a.value }, a = e.next(); "EOF" !== a && 0 !== a.code; ) { switch (a.code) { case 2: t.name = a.value; break; case 41: t.xScale = a.value; break; case 42: t.yScale = a.value; break; case 43: t.zScale = a.value; break; case 10: t.position = c(e); break; case 50: t.rotation = a.value; break; case 70: t.columnCount = a.value; break; case 71: t.rowCount = a.value; break; case 44: t.columnSpacing = a.value; break; case 45: t.rowSpacing = a.value; break; case 210: t.extrusionDirection = c(e); break; default: i(t, a) } a = e.next() } return t } , k.ForEntityName = "LINE", k.prototype.parseEntity = function(e, a) { var t = { type: a.value, vertices: [] }; for (a = e.next(); "EOF" !== a && 0 !== a.code; ) { switch (a.code) { case 10: t.vertices.unshift(c(e)); break; case 11: t.vertices.push(c(e)); break; case 210: t.extrusionDirection = c(e); break; case 100: break; default: i(t, a) } a = e.next() } return t } , y.ForEntityName = "LWPOLYLINE", y.prototype.parseEntity = function(e, a) { var t = { type: a.value, vertices: [] } , r = 0; for (a = e.next(); "EOF" !== a && 0 !== a.code; ) { switch (a.code) { case 38: t.elevation = a.value; break; case 39: t.depth = a.value; break; case 70: t.shape = 1 == (1 & a.value), t.hasContinuousLinetypePattern = 128 == (128 & a.value); break; case 90: r = a.value; break; case 10: //t.vertices = x(r, e); //改,因有的文件有点问题,可能版本原因 t.vertices.push(...x(r, e))//有的文件同一个entity需要多次执行到这里,所以不能直接覆盖,要push t.vertices = t.vertices.filter(e=>e.x!=void 0)//而且会出现空的vertix:{},所以排除下 break; case 43: 0 !== a.value && (t.width = a.value); break; case 210: t.extrusionDirectionX = a.value; break; case 220: t.extrusionDirectionY = a.value; break; case 230: t.extrusionDirectionZ = a.value; break; default: i(t, a) } a = e.next() } return t } , h.ForEntityName = "MTEXT", h.prototype.parseEntity = function(e, a) { var t = { type: a.value }; for (a = e.next(); "EOF" !== a && 0 !== a.code; ) { switch (a.code) { case 3: case 1: t.text ? t.text += a.value : t.text = a.value; break; case 10: t.position = c(e); break; case 40: t.height = a.value; break; case 41: t.width = a.value; break; case 50: t.rotation = a.value; break; case 71: t.attachmentPoint = a.value; break; case 72: t.drawingDirection = a.value; break; default: i(t, a) } a = e.next() } return t } , g.ForEntityName = "POINT", g.prototype.parseEntity = function(e, a) { var t; for (t = { type: a.value }, a = e.next(); "EOF" !== a && 0 !== a.code; ) { switch (a.code) { case 10: t.position = c(e); break; case 39: t.thickness = a.value; break; case 210: t.extrusionDirection = c(e); break; case 100: break; default: i(t, a) } a = e.next() } return t } , E.ForEntityName = "VERTEX", E.prototype.parseEntity = function(e, a) { var t = { type: a.value }; for (a = e.next(); "EOF" !== a && 0 !== a.code; ) { switch (a.code) { case 10: t.x = a.value; break; case 20: t.y = a.value; break; case 30: t.z = a.value; break; case 40: case 41: case 42: 0 != a.value && (t.bulge = a.value); break; case 70: t.curveFittingVertex = 0 != (1 & a.value), t.curveFitTangent = 0 != (2 & a.value), t.splineVertex = 0 != (8 & a.value), t.splineControlPoint = 0 != (16 & a.value), t.threeDPolylineVertex = 0 != (32 & a.value), t.threeDPolylineMesh = 0 != (64 & a.value), t.polyfaceMeshVertex = 0 != (128 & a.value); break; case 50: case 71: t.faceA = a.value; break; case 72: t.faceB = a.value; break; case 73: t.faceC = a.value; break; case 74: t.faceD = a.value; break; default: i(t, a) } a = e.next() } return t } , w.ForEntityName = "POLYLINE", w.prototype.parseEntity = function(e, a) { var t = { type: a.value, vertices: [] }; for (a = e.next(); "EOF" !== a && 0 !== a.code; ) { switch (a.code) { case 10: case 20: case 30: case 39: t.thickness = a.value; break; case 40: case 41: break; case 70: t.shape = 0 != (1 & a.value), t.includesCurveFitVertices = 0 != (2 & a.value), t.includesSplineFitVertices = 0 != (4 & a.value), t.is3dPolyline = 0 != (8 & a.value), t.is3dPolygonMesh = 0 != (16 & a.value), t.is3dPolygonMeshClosed = 0 != (32 & a.value), t.isPolyfaceMesh = 0 != (64 & a.value), t.hasContinuousLinetypePattern = 0 != (128 & a.value); break; case 71: case 72: case 73: case 74: case 75: break; case 210: t.extrusionDirection = c(e); break; default: i(t, a) } a = e.next() } return t.vertices = function(e, a) { var t = new E , r = []; for (; !e.isEOF(); ) if (0 === a.code) if ("VERTEX" === a.value) r.push(t.parseEntity(e, a)), a = e.lastReadGroup; else if ("SEQEND" === a.value) { m(e, a); break } return r }(e, a), t } , P.ForEntityName = "SOLID", P.prototype.parseEntity = function(e, a) { var t; for ((t = { type: a.value }).points = [], a = e.next(); "EOF" !== a && 0 !== a.code; ) { switch (a.code) { case 10: t.points[0] = c(e); break; case 11: t.points[1] = c(e); break; case 12: t.points[2] = c(e); break; case 13: t.points[3] = c(e); break; case 210: t.extrusionDirection = c(e); break; default: i(t, a) } a = e.next() } return t } , F.ForEntityName = "SPLINE", F.prototype.parseEntity = function(e, a) { var t; for (t = { type: a.value }, a = e.next(); "EOF" !== a && 0 !== a.code; ) { switch (a.code) { case 10: t.controlPoints || (t.controlPoints = []), t.controlPoints.push(c(e)); break; case 11: t.fitPoints || (t.fitPoints = []), t.fitPoints.push(c(e)); break; case 12: t.startTangent = c(e); break; case 13: t.endTangent = c(e); break; case 40: t.knotValues || (t.knotValues = []), t.knotValues.push(a.value); break; case 70: 0 != (1 & a.value) && (t.closed = !0), 0 != (2 & a.value) && (t.periodic = !0), 0 != (4 & a.value) && (t.rational = !0), 0 != (8 & a.value) && (t.planar = !0), 0 != (16 & a.value) && (t.planar = !0, t.linear = !0); break; case 71: t.degreeOfSplineCurve = a.value; break; case 72: t.numberOfKnots = a.value; break; case 73: t.numberOfControlPoints = a.value; break; case 74: t.numberOfFitPoints = a.value; break; case 210: t.normalVector = c(e); break; default: i(t, a) } a = e.next() } return t } , O.ForEntityName = "TEXT", O.prototype.parseEntity = function(e, a) { var t; for (t = { type: a.value }, a = e.next(); "EOF" !== a && 0 !== a.code; ) { switch (a.code) { case 10: t.startPoint = c(e); break; case 11: t.endPoint = c(e); break; case 40: t.textHeight = a.value; break; case 41: t.xScale = a.value; break; case 50: t.rotation = a.value; break; case 1: t.text = a.value; break; case 72: t.halign = a.value; break; case 73: t.valign = a.value; break; default: i(t, a) } a = e.next() } return t } ; var N = t(0); function T() { var e; this._entityHandlers = {}, (e = this).registerEntityHandler(u), e.registerEntityHandler(l), e.registerEntityHandler(v), e.registerEntityHandler(d), e.registerEntityHandler(b), e.registerEntityHandler(p), e.registerEntityHandler(f), e.registerEntityHandler(k), e.registerEntityHandler(y), e.registerEntityHandler(h), e.registerEntityHandler(g), e.registerEntityHandler(w), e.registerEntityHandler(P), e.registerEntityHandler(F), e.registerEntityHandler(O) } function S(e) { N.debug("unhandled group " + L(e)) } function L(e) { return e.code + ":" + e.value } N.setLevel("error"), T.prototype.parse = function(e, a) { throw new Error("read() not implemented. Use readSync()") } , T.prototype.registerEntityHandler = function(e) { var a = new e; this._entityHandlers[e.ForEntityName] = a } , T.prototype.parseSync = function(e) { return "string" == typeof e ? this._parse(e) : (console.error("Cannot read dxf source of type `" + typeof e), null) } , T.prototype.parseStream = function(e, a) { var t = "" , r = this; e.on("data", function(e) { t += e }), e.on("end", function() { try { var e = r._parse(t) } catch (e) { return a(e) } a(null, e) }), e.on("error", function(e) { a(e) }) } , T.prototype._parse = function(e) { var a, t, n = {}, c = 0, i = e.split(/\r\n|\r|\n/g); if (!(a = new r(i)).hasNext()) throw Error("Empty file"); var u = this , s = function(e, a) { return t.code === e && t.value === a } , l = function() { var e = null , r = null , n = {}; for (t = a.next(); ; ) { if (s(0, "ENDSEC")) { e && (n[e] = r); break } 9 === t.code ? (e && (n[e] = r), e = t.value) : 10 === t.code ? r = { x: t.value } : 20 === t.code ? r.y = t.value : 30 === t.code ? r.z = t.value : r = t.value, t = a.next() } return t = a.next(), n } , v = function() { var e, r = {}; for (t = a.next(); "EOF" !== t.value && !s(0, "ENDSEC"); ) s(0, "BLOCK") ? (N.debug("block {"), e = d(), N.debug("}"), x(e), e.name ? r[e.name] = e : N.error('block with handle "' + e.handle + '" is missing a name.')) : (S(t), t = a.next()); return r } , d = function() { var e = {}; for (t = a.next(); "EOF" !== t.value; ) { switch (t.code) { case 1: e.xrefPath = t.value, t = a.next(); break; case 2: e.name = t.value, t = a.next(); break; case 3: e.name2 = t.value, t = a.next(); break; case 5: e.handle = t.value, t = a.next(); break; case 8: e.layer = t.value, t = a.next(); break; case 10: e.position = y(), t = a.next(); break; case 67: e.paperSpace = !(!t.value || 1 != t.value), t = a.next(); break; case 70: 0 != t.value && (e.type = t.value), t = a.next(); break; case 100: t = a.next(); break; case 330: e.ownerHandle = t.value, t = a.next(); break; case 0: if ("ENDBLK" == t.value) break; e.entities = k(!0); break; default: S(t), t = a.next() } if (s(0, "ENDBLK")) { t = a.next(); break } } return e } , b = function() { var e = {}; for (t = a.next(); "EOF" !== t.value && !s(0, "ENDSEC"); ) { s(0, "TABLE") ? (t = a.next(), f[t.value] ? (N.debug(t.value + " Table {"), e[f[t.value].tableName] = p(), N.debug("}")) : N.debug("Unhandled Table " + t.value)) : t = a.next() } return t = a.next(), e }; var p = function() { var e, r = f[t.value], n = {}, o = 0; for (t = a.next(); !s(0, "ENDTAB"); ) switch (t.code) { case 5: n.handle = t.value, t = a.next(); break; case 330: n.ownerHandle = t.value, t = a.next(); break; case 100: "AcDbSymbolTable" === t.value ? t = a.next() : (S(t), t = a.next()); break; case 70: o = t.value, t = a.next(); break; case 0: t.value === r.dxfSymbolName ? n[r.tableRecordsProperty] = r.parseTableRecords() : (S(t), t = a.next()); break; default: S(t), t = a.next() } var c = n[r.tableRecordsProperty]; return c && (c.constructor === Array ? e = c.length : "object" == typeof c && (e = Object.keys(c).length), o !== e && N.warn("Parsed " + e + " " + r.dxfSymbolName + "'s but expected " + o)), t = a.next(), n } , f = { VPORT: { tableRecordsProperty: "viewPorts", tableName: "viewPort", dxfSymbolName: "VPORT", parseTableRecords: function() { var e = [] , r = {}; for (N.debug("ViewPort {"), t = a.next(); !s(0, "ENDTAB"); ) switch (t.code) { case 2: r.name = t.value, t = a.next(); break; case 10: r.lowerLeftCorner = y(), t = a.next(); break; case 11: r.upperRightCorner = y(), t = a.next(); break; case 12: r.center = y(), t = a.next(); break; case 13: r.snapBasePoint = y(), t = a.next(); break; case 14: r.snapSpacing = y(), t = a.next(); break; case 15: r.gridSpacing = y(), t = a.next(); break; case 16: r.viewDirectionFromTarget = y(), t = a.next(); break; case 17: r.viewTarget = y(), t = a.next(); break; case 42: r.lensLength = t.value, t = a.next(); break; case 43: r.frontClippingPlane = t.value, t = a.next(); break; case 44: r.backClippingPlane = t.value, t = a.next(); break; case 45: r.viewHeight = t.value, t = a.next(); break; case 50: r.snapRotationAngle = t.value, t = a.next(); break; case 51: r.viewTwistAngle = t.value, t = a.next(); break; case 79: r.orthographicType = t.value, t = a.next(); break; case 110: r.ucsOrigin = y(), t = a.next(); break; case 111: r.ucsXAxis = y(), t = a.next(); break; case 112: r.ucsYAxis = y(), t = a.next(); break; case 110: r.ucsOrigin = y(), t = a.next(); break; case 281: r.renderMode = t.value, t = a.next(); break; case 281: r.defaultLightingType = t.value, t = a.next(); break; case 292: r.defaultLightingOn = t.value, t = a.next(); break; case 330: r.ownerHandle = t.value, t = a.next(); break; case 63: case 421: case 431: r.ambientColor = t.value, t = a.next(); break; case 0: "VPORT" === t.value && (N.debug("}"), e.push(r), N.debug("ViewPort {"), r = {}, t = a.next()); break; default: S(t), t = a.next() } return N.debug("}"), e.push(r), e } }, LTYPE: { tableRecordsProperty: "lineTypes", tableName: "lineType", dxfSymbolName: "LTYPE", parseTableRecords: function() { var e, r, n = {}, o = {}; for (N.debug("LType {"), t = a.next(); !s(0, "ENDTAB"); ) switch (t.code) { case 2: o.name = t.value, e = t.value, t = a.next(); break; case 3: o.description = t.value, t = a.next(); break; case 73: (r = t.value) > 0 && (o.pattern = []), t = a.next(); break; case 40: o.patternLength = t.value, t = a.next(); break; case 49: o.pattern.push(t.value), t = a.next(); break; case 0: N.debug("}"), r > 0 && r !== o.pattern.length && N.warn("lengths do not match on LTYPE pattern"), n[e] = o, o = {}, N.debug("LType {"), t = a.next(); break; default: t = a.next() } return N.debug("}"), n[e] = o, n } }, LAYER: { tableRecordsProperty: "layers", tableName: "layer", dxfSymbolName: "LAYER", parseTableRecords: function() { var e, r, n = {}, c = {}; for (N.debug("Layer {"), t = a.next(); !s(0, "ENDTAB"); ) switch (t.code) { case 2: c.name = t.value, e = t.value, t = a.next(); break; case 62: c.visible = t.value >= 0, c.colorIndex = Math.abs(t.value), c.color = (r = c.colorIndex, o[r]), t = a.next(); break; case 70: c.frozen = 0 != (1 & t.value) || 0 != (2 & t.value), t = a.next(); break; case 0: "LAYER" === t.value && (N.debug("}"), n[e] = c, N.debug("Layer {"), c = {}, e = void 0, t = a.next()); break; default: S(t), t = a.next() } return N.debug("}"), n[e] = c, n } } } , k = function(e) { var r = [] , n = e ? "ENDBLK" : "ENDSEC"; for (e || (t = a.next()); ; ) if (0 === t.code) { if (t.value === n) break; var o, c = u._entityHandlers[t.value]; if (null == c) { N.warn("Unhandled entity " + t.value), t = a.next(); continue } N.debug(t.value + " {"), o = c.parseEntity(a, t), t = a.lastReadGroup, N.debug("}"), x(o), r.push(o) } else t = a.next(); return "ENDSEC" == n && (t = a.next()), r } , y = function() { var e = {} , r = t.code; if (e.x = t.value, r += 10, (t = a.next()).code != r) throw new Error("Expected code for point value to be " + r + " but got " + t.code + "."); return e.y = t.value, r += 10, (t = a.next()).code != r ? (a.rewind(), e) : (e.z = t.value, e) } , x = function(e) { if (!e) throw new TypeError("entity cannot be undefined or null"); e.handle || (e.handle = c++) }; return function() { for (t = a.next(); !a.isEOF(); ) if (0 === t.code && "SECTION" === t.value) { if (2 !== (t = a.next()).code) { console.error("Unexpected code %s after 0:SECTION", L(t)), t = a.next(); continue } "HEADER" === t.value ? (N.debug("> HEADER"), n.header = l(), N.debug("<")) : "BLOCKS" === t.value ? (N.debug("> BLOCKS"), n.blocks = v(), N.debug("<")) : "ENTITIES" === t.value ? (N.debug("> ENTITIES"), n.entities = k(!1), N.debug("<")) : "TABLES" === t.value ? (N.debug("> TABLES"), n.tables = b(), N.debug("<")) : "EOF" === t.value ? N.debug("EOF") : N.warn("Skipping section '%s'", t.value) } else t = a.next() }(), n } ; a.default = T } ]).default });