@maqiuyao/dxf-viewer 0.2.2 → 0.2.3
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/README.md +47 -0
- package/dist/dxf-viewer.cjs +1 -1
- package/dist/dxf-viewer.js +4 -4
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -66,6 +66,53 @@ helper.enableSyncCamera(true); // 左右相机同步
|
|
|
66
66
|
|
|
67
67
|
对比结果会在左右两个视口上用**修订云线框 + 半透明填充**标出每处变动(新增绿 / 删除红 / 修改黄),框与内容间自动留隙。
|
|
68
68
|
|
|
69
|
+
## 文本搜索
|
|
70
|
+
|
|
71
|
+
```ts
|
|
72
|
+
// mode: "fuzzy"(模糊:子串/跳字匹配,默认)| "exact"(精准:整条文字完全相等)
|
|
73
|
+
const results = viewer.searchText("松口", { mode: "fuzzy" });
|
|
74
|
+
// 每项含 text、layer、handle、box(世界坐标包围盒)
|
|
75
|
+
|
|
76
|
+
viewer.focusText(results[0]); // 相机定位并高亮该文字
|
|
77
|
+
viewer.clearTextHighlight();
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
支持 TEXT / MTEXT / ATTRIB 全部文字实体(含块内属性),中文按图纸编码自动解码。
|
|
81
|
+
|
|
82
|
+
## 实体点击事件
|
|
83
|
+
|
|
84
|
+
```ts
|
|
85
|
+
import { ViewerEvent, type MouseClickInfo } from "@maqiuyao/dxf-viewer";
|
|
86
|
+
|
|
87
|
+
viewer.addEventListener(ViewerEvent.MouseClick, (info: MouseClickInfo) => {
|
|
88
|
+
if (!info.handle) return; // 点击空白处
|
|
89
|
+
const ud = info.userData;
|
|
90
|
+
console.log(ud.dxfType, ud.layerName, ud.textContent, ud.xdata);
|
|
91
|
+
});
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
拾取自动跳过背景平面;合并渲染架构下按命中游标反查实体,`userData` 携带 `handle` / `dxfType` / `layerName` / `textContent` / `xdata`。
|
|
95
|
+
|
|
96
|
+
### 扩展数据(XDATA,组码 1000)
|
|
97
|
+
|
|
98
|
+
INSERT/ATTRIB 实体上的 `HLXSYSTEM_DATA` 等扩展数据已解析为 JSON 挂在 `userData.xdata`,点击即可读取业务字段(iconid / id / rid / shapeguid 等)。
|
|
99
|
+
|
|
100
|
+
### 点击高亮
|
|
101
|
+
|
|
102
|
+
```ts
|
|
103
|
+
viewer.enableClickHighlight = true; // 默认 false;开启后点击实体绘制云线框
|
|
104
|
+
viewer.clearClickHighlight(); // 主动清除
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
## 优化与完善(0.2.x)
|
|
108
|
+
|
|
109
|
+
- 修复 ATTRIB/ATTDEF 对齐组码(72/74)解析:右对齐/居中文字不再与块内图符重叠
|
|
110
|
+
- 中文乱码修复:`\M+XXXX` GBK 转义码正确解码
|
|
111
|
+
- 字体字间距优化,中文渲染更接近 AutoCAD
|
|
112
|
+
- 畸形 SPLINE 实体自动跳过,不再中断整图加载
|
|
113
|
+
- 加载进度以页面中央百分比呈现
|
|
114
|
+
- 文本元数据(textContent/handle/layer/dxfType)下放到叶子网格,合并后仍可搜索、拾取
|
|
115
|
+
|
|
69
116
|
## 字体资源
|
|
70
117
|
|
|
71
118
|
DXF 文本渲染依赖 SHX/TTF 字体文件,本包**不内置**字体(版权原因)。请从你的 AutoCAD 安装目录或公开字体包中获取 `hztxt.shx`、`simplex.shx`、`@extfont2.shx` 等,放到你自己站点的可访问路径,再传给 `viewer.setFont([...])`。
|
package/dist/dxf-viewer.cjs
CHANGED
|
@@ -788,7 +788,7 @@ void main() {
|
|
|
788
788
|
gl_FragColor = vec4(u_color * total, 1.0);
|
|
789
789
|
#include <colorspace_fragment>
|
|
790
790
|
}
|
|
791
|
-
`;return new d.ShaderMaterial({uniforms:r,vertexShader:n,fragmentShader:a,clipping:!0})}var De=(h=>(h.Unitless="Unitless",h.Inches="Inches",h.Feet="Feet",h.Millimeters="Millimeters",h.Centimeters="Centimeters",h.Meters="Meters",h))(De||{});const Ps=h=>h==="Unitless"?1:h==="Inches"?.0254:h==="Feet"?.3048:h==="Millimeters"?.001:h==="Centimeters"?.01:(h==="Meters"||console.warn("[Units] Unsupported unit '"+h+"', will return 1 for unit scale."),1),Yo=(h,t)=>Ps(h)/Ps(t);class wn{constructor(){p(this,"pointer");p(this,"eof");p(this,"lastReadGroup");this.pointer=0,this.eof=!1}}class vi{constructor(t,e){p(this,"endian");p(this,"position");p(this,"data");p(this,"decoder");this.endian=e&&e==="big"?"big":"little",this.position=0,this.data=new DataView(t)}readAsciiString(t){if(this.data.byteLength<this.position+t)throw"range error";let e="";for(let i=0;i<t;i++)e+=String.fromCharCode(this.data.getInt8(this.position+i));return this.position+=t,e}readUtf8String(t){const e=this.readBytes(t);return this.decoder||(this.decoder=new TextDecoder("utf-8")),this.decoder.decode(e)}readBytes(t=1){if(this.data.byteLength<this.position+t)throw"range error";const e=new Uint8Array(t);for(let i=0;i<t;i++)e[i]=this.data.getUint8(this.position+i);return this.position+=t,e}readUint8(){if(this.data.byteLength<this.position+1)throw"range error";const t=this.data.getUint8(this.position);return this.position+=1,t}readInt8(){if(this.data.byteLength<this.position+1)throw"range error";const t=this.data.getInt8(this.position);return this.position+=1,t}readUint16(){if(this.data.byteLength<this.position+2)throw"range error";const t=this.data.getUint16(this.position,this.endian==="little");return this.position+=2,t}readInt16(){if(this.data.byteLength<this.position+2)throw"range error";const t=this.data.getInt16(this.position,this.endian==="little");return this.position+=2,t}readUint32(){if(this.data.byteLength<this.position+4)throw"range error";const t=this.data.getUint32(this.position,this.endian==="little");return this.position+=4,t}readInt32(){if(this.data.byteLength<this.position+4)throw"range error";const t=this.data.getInt32(this.position,this.endian==="little");return this.position+=4,t}readFloat32(){if(this.data.byteLength<this.position+4)throw"range error";const t=this.data.getFloat32(this.position,this.endian==="little");return this.position+=4,t}readFloat64(){if(this.data.byteLength<this.position+8)throw"range error";const t=this.data.getFloat64(this.position,this.endian==="little");return this.position+=8,t}readInt64(){if(this.data.byteLength<this.position+8)throw"range error";const t=wi.DataViewGetBigInt64(this.data,this.position,this.endian==="little");return this.position+=8,wi.toNumber(t)}readUint64(){if(this.data.byteLength<this.position+8)throw"range error";const t=wi.DataViewGetBigUint64(this.data,this.position,this.endian==="little");return this.position+=8,wi.toNumber(t)}getPosition(){return this.position}setPosition(t){if(this.data.byteLength<t)throw"range error";this.position=t}isEnd(){return this.position===this.data.byteLength-1}}const hr=1e3;class Xo extends wn{constructor(e){super();p(this,"reader");p(this,"decoder");p(this,"int8Array");p(this,"caches");this.int8Array=new Int8Array(hr),this.caches=new Map,this.reader=new vi(e);const i=this.reader.readBytes(22);let s="";for(let r=0;r<18;r++)s+=String.fromCharCode(i[r]);if(s!=="AutoCAD Binary DXF")throw new Error("Invalid DXF file")}next(){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.");const e={code:this.reader.readInt16()};return e.value=this.parseGroupValue(e.code),e.code===0&&e.value==="EOF"&&(this.eof=!0),this.lastReadGroup=e,e}hasNext(){return this.eof?!1:!this.reader.isEnd()}isEOF(){return this.eof}parseGroupValue(e){if(e>=0&&e<=9)return this.readNullTerminatedString();if(e>=10&&e<=59)return this.reader.readFloat64();if(e>=60&&e<=79)return this.reader.readInt16();if(e>=90&&e<=99)return this.reader.readInt32();if(e>=100&&e<=109)return this.readNullTerminatedString();if(e>=110&&e<=149)return this.reader.readFloat64();if(e>=160&&e<=169)return this.reader.readInt64();if(e>=170&&e<=179)return this.reader.readInt16();if(e>=210&&e<=239)return this.reader.readFloat64();if(e>=270&&e<=289)return this.reader.readInt16();if(e>=290&&e<=299)return this.reader.readInt8()>0;if(e>=300&&e<=309)return this.readNullTerminatedString();if(e>=310&&e<=319){const i=this.ReadBinaryData();return cr(i)}if(e>=320&&e<=369)return this.readNullTerminatedString();if(e>=370&&e<=389)return this.reader.readInt16();if(e>=390&&e<=399)return this.readNullTerminatedString();if(e>=400&&e<=409)return this.reader.readInt16();if(e>=410&&e<=419)return this.readNullTerminatedString();if(e>=420&&e<=429)return this.reader.readInt32();if(e>=430&&e<=439)return this.readNullTerminatedString();if(e>=440&&e<=449)return this.reader.readInt32();if(e>=450&&e<=459)return this.reader.readFloat64();if(e>=460&&e<=469)return this.readNullTerminatedString();if(e>=470&&e<=479)return this.readNullTerminatedString();if(e>=480&&e<=481)return this.readNullTerminatedString();if(e>=999&&e<=999)throw new Error("The comment group 999, is not used in binary DXF files at byte address!");if(e===1004){const i=this.ReadBinaryData();return cr(i)}if(e>=1e3&&e<=1009)return this.readNullTerminatedString();if(e>=1010&&e<=1059)return this.reader.readFloat64();if(e>=1060&&e<=1070)return this.reader.readInt16();if(e===1071)return this.reader.readInt32();console.warn("[DxfBinReader] Invalid code '"+e+"' at byte address "+this.reader.getPosition())}readNullTerminatedString(){this.decoder||(this.decoder=new TextDecoder("utf-8"));let e=0,i=this.reader.readInt8();for(;i!==0;)this.int8Array[e++]=i,i=this.reader.readInt8();if(e===0)return"";if(e>hr)return console.warn("[DxfBinReader] Failed to read string! The number of bytes is "+e+" !"),"";const s=this.int8Array.subarray(0,e),r=s.toString();if(this.caches.get(r))return this.caches.get(r);const n=this.decoder?.decode(s);return this.caches.set(r,n),n}ReadBinaryData(){const e=this.reader.readUint8();return this.reader.readBytes(e)}}function cr(h){return Array.prototype.map.call(h,t=>("00"+t.toString(16)).slice(-2)).join("")}class dr extends wn{constructor(e){super();p(this,"data");this.data=e}next(){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]);const e={code:parseInt(this.data[this.pointer])};return this.pointer++,e.value=Zo(e.code,this.data[this.pointer].trim(),this.data[this.pointer]),this.pointer++,e.code===0&&e.value==="EOF"&&(this.eof=!0),this.lastReadGroup=e,e}hasNext(){return!(this.eof||this.pointer>this.data.length-2)}isEOF(){return this.eof}}function Zo(h,t,e){return h>=0&&h<=9?e:h>=10&&h<=59?parseFloat(t):h>=60&&h<=99?parseInt(t):h>=100&&h<=109?t:h>=110&&h<=149?parseFloat(t):h>=160&&h<=179?parseInt(t):h>=210&&h<=239?parseFloat(t):h>=270&&h<=289?parseInt(t):h>=290&&h<=299?Ko(t):h>=300&&h<=369?t:h>=370&&h<=389?parseInt(t):h>=390&&h<=399?t:h>=400&&h<=409?parseInt(t):h>=410&&h<=419?t:h>=420&&h<=429?parseInt(t):h>=430&&h<=439?t:h>=440&&h<=449?parseInt(t):h>=450&&h<=459?parseFloat(t):h>=460&&h<=469||h===999||h>=1e3&&h<=1009?t:h>=1010&&h<=1059?parseFloat(t):h>=1060&&h<=1071?parseInt(t):(console.info("WARNING: Group code does not have a defined type: %j",{code:h,value:t}),t)}function Ko(h){if(h==="0")return!1;if(h==="1")return!0;throw TypeError("String '"+h+"' cannot be cast to Boolean type")}function $o(h){if(h==null)return!0;for(const t in h)if(Object.prototype.hasOwnProperty.call(h,t))return!1;return!0}function Jo(h,t){const e=[];let i=!1,s=!1;const r=4;for(let n=0;n<=r;n++){const a={};for(;!h.isEOF()&&!(t.code===0||s);){switch(t.code){case 10:case 11:case 12:case 13:if(i){s=!0;continue}a.x=t.value,i=!0;break;case 20:case 21:case 22:case 23:a.y=t.value;break;case 30:case 31:case 32:case 33:a.z=t.value;break;default:return e}t=h.next()}$o(a)||e.push(a),i=!1,s=!1}return e}class Qo{constructor(){p(this,"ForEntityName","3DFACE")}parseEntity(t,e){const i={type:e.value,vertices:[]};for(e=t.next();!t.isEOF()&&e.code!==0;)switch(e.code){case 70:if(e.value!==0){const s=Math.log2(e.value)-1;i.vertices.splice(s,0,1)}e=t.next();break;case 10:i.vertices=Jo(t,e),e=t.lastReadGroup;break;case 101:for(;e.code!=0;)e=t.next();break;default:Q(i,e),e=t.next();break}return i}}class el{constructor(){p(this,"ForEntityName","ARC")}parseEntity(t,e){const i={type:e.value};for(e=t.next();!t.isEOF()&&e.code!==0;)switch(e.code){case 10:i.center=tl(t),e=t.lastReadGroup;break;case 40:i.radius=e.value,e=t.next();break;case 50:i.startAngle=Math.PI/180*e.value,e=t.next();break;case 51:i.endAngle=Math.PI/180*e.value,i.angleLength=i.endAngle-i.startAngle,e=t.next();break;case 210:i.extrusionDirectionX=e.value,e=t.next();break;case 220:i.extrusionDirectionY=e.value,e=t.next();break;case 230:i.extrusionDirectionZ=e.value,e=t.next();break;case 101:for(;e.code!=0;)e=t.next();break;default:Q(i,e),e=t.next();break}return i}}function tl(h){const t={};let e=h.lastReadGroup||h.next();const i=e.code;for(;!h.isEOF();){if(e.code===i)t.x=e.value;else if(e.code===i+10)t.y=e.value;else if(e.code===i+20)t.z=e.value;else if(e.code===42)t.bulge=e.value;else return t;e=h.next()}return t}class il{constructor(){p(this,"ForEntityName","ATTDEF")}parseEntity(t,e){const i={type:e.value,xScale:1,textStyle:"STANDARD"};for(e=t.next();!t.isEOF()&&e.code!==0;)switch(e.code){case 1:i.text=e.value,e=t.next();break;case 2:i.tag=e.value,e=t.next();break;case 3:i.prompt=e.value,e=t.next();break;case 7:i.textStyle=e.value,e=t.next();break;case 10:i.startPoint=ur(t),e=t.lastReadGroup;break;case 11:i.endPoint=ur(t),e=t.lastReadGroup;break;case 39:i.thickness=e.value,e=t.next();break;case 40:i.textHeight=e.value,e=t.next();break;case 41:i.xScale=e.value,e=t.next();break;case 50:i.rotation=e.value,e=t.next();break;case 51:i.obliqueAngle=e.value,e=t.next();break;case 70:i.invisible=!!(e.value&1),i.constant=!!(e.value&2),i.verificationRequired=!!(e.value&4),i.preset=!!(e.value&8),e=t.next();break;case 71:i.backwards=!!(e.value&2),i.mirrored=!!(e.value&4),e=t.next();break;case 72:i.horizontalJustification=e.value,e=t.next();break;case 73:i.fieldLength=e.value,e=t.next();break;case 74:i.verticalJustification=e.value,e=t.next();break;case 100:e=t.next();break;case 210:i.extrusionDirectionX=e.value,e=t.next();break;case 220:i.extrusionDirectionY=e.value,e=t.next();break;case 230:i.extrusionDirectionZ=e.value,e=t.next();break;case 101:for(;e.code!=0;)e=t.next();break;default:Q(i,e),e=t.next();break}return i}}function ur(h){const t={};let e=h.lastReadGroup||h.next();const i=e.code;for(;!h.isEOF();){if(e.code===i)t.x=e.value;else if(e.code===i+10)t.y=e.value;else if(e.code===i+20)t.z=e.value;else if(e.code===42)t.bulge=e.value;else return t;e=h.next()}return t}class sl{constructor(){p(this,"ForEntityName","ATTRIB")}parseEntity(t,e){const i={type:e.value,xScale:1,textStyle:"STANDARD"};for(e=t.next();!t.isEOF()&&e.code!==0;)switch(e.code){case 1:i.text=e.value,e=t.next();break;case 2:i.tag=e.value,e=t.next();break;case 3:i.prompt=e.value,e=t.next();break;case 7:i.textStyle=e.value,e=t.next();break;case 10:i.startPoint=fr(t),e=t.lastReadGroup;break;case 11:i.endPoint=fr(t),e=t.lastReadGroup;break;case 39:i.thickness=e.value,e=t.next();break;case 40:i.textHeight=e.value,e=t.next();break;case 41:i.xScale=e.value,e=t.next();break;case 50:i.rotation=e.value,e=t.next();break;case 51:i.obliqueAngle=e.value,e=t.next();break;case 70:i.invisible=!!(e.value&1),i.constant=!!(e.value&2),i.verificationRequired=!!(e.value&4),i.preset=!!(e.value&8),e=t.next();break;case 71:i.backwards=!!(e.value&2),i.mirrored=!!(e.value&4),e=t.next();break;case 72:i.horizontalJustification=e.value,e=t.next();break;case 73:i.fieldLength=e.value,e=t.next();break;case 74:i.verticalJustification=e.value,e=t.next();break;case 100:e=t.next();break;case 210:i.extrusionDirectionX=e.value,e=t.next();break;case 220:i.extrusionDirectionY=e.value,e=t.next();break;case 230:i.extrusionDirectionZ=e.value,e=t.next();break;case 101:for(;e.code!=0;)e=t.next();break;default:Q(i,e),e=t.next();break}return i}}function fr(h){const t={};let e=h.lastReadGroup||h.next();const i=e.code;for(;!h.isEOF();){if(e.code===i)t.x=e.value;else if(e.code===i+10)t.y=e.value;else if(e.code===i+20)t.z=e.value;else if(e.code===42)t.bulge=e.value;else return t;e=h.next()}return t}class rl{constructor(){p(this,"ForEntityName","CIRCLE")}parseEntity(t,e){const i={type:e.value};for(e=t.next();!t.isEOF()&&e.code!==0;)switch(e.code){case 10:i.center=nl(t),e=t.lastReadGroup;break;case 40:i.radius=e.value,e=t.next();break;case 50:i.startAngle=Math.PI/180*e.value,e=t.next();break;case 51:const s=Math.PI/180*e.value;s<i.startAngle?i.angleLength=s+2*Math.PI-i.startAngle:i.angleLength=s-i.startAngle,i.endAngle=s,e=t.next();break;case 101:for(;e.code!=0;)e=t.next();break;default:Q(i,e),e=t.next();break}return i}}function nl(h){const t={};let e=h.lastReadGroup||h.next();const i=e.code;for(;!h.isEOF();){if(e.code===i)t.x=e.value;else if(e.code===i+10)t.y=e.value;else if(e.code===i+20)t.z=e.value;else if(e.code===42)t.bulge=e.value;else return t;e=h.next()}return t}class al{constructor(){p(this,"ForEntityName","DIMENSION")}parseEntity(t,e){const i={type:e.value};for(e=t.next();!t.isEOF()&&e.code!==0;)switch(e.code){case 2:i.block=e.value,e=t.next();break;case 3:i.dimStyleName=e.value,e=t.next();break;case 10:i.anchorPoint=xt(t),e=t.lastReadGroup;break;case 11:i.middleOfText=xt(t),e=t.lastReadGroup;break;case 12:i.insertionPoint=xt(t),e=t.lastReadGroup;break;case 13:i.linearOrAngularPoint1=xt(t),e=t.lastReadGroup;break;case 14:i.linearOrAngularPoint2=xt(t),e=t.lastReadGroup;break;case 15:i.diameterOrRadiusPoint=xt(t),e=t.lastReadGroup;break;case 16:i.arcPoint=xt(t),e=t.lastReadGroup;break;case 70:i.dimensionType=e.value,e=t.next();break;case 71:i.attachmentPoint=e.value,e=t.next();break;case 42:i.actualMeasurement=e.value,e=t.next();break;case 1:i.text=e.value,e=t.next();break;case 50:i.angle=e.value,e=t.next();break;case 101:for(;e.code!=0;)e=t.next();break;default:Q(i,e),e=t.next();break}return i}}function xt(h){const t={};let e=h.lastReadGroup||h.next();const i=e.code;for(;!h.isEOF();){if(e.code===i)t.x=e.value;else if(e.code===i+10)t.y=e.value;else if(e.code===i+20)t.z=e.value;else if(e.code===42)t.bulge=e.value;else return t;e=h.next()}return t}class ol{constructor(){p(this,"ForEntityName","MULTILEADER")}parseEntity(t,e){const i={type:e.value};i.contextData={leaders:[]},e=t.next();const s=()=>{const o=i.contextData.leaders[i.contextData.leaders.length-1],l={vertices:[[]]};for(o.leaderLines.push(l);!t.isEOF();)switch(e.code){case 10:l.vertices[0].push(_e(t)),e=t.lastReadGroup;break;case 305:return;default:e=t.next();break}},r=()=>{const o={leaderLines:[]};for(i.contextData.leaders.push(o);!t.isEOF();)switch(e.code){case 290:o.hasSetLastLeaderLinePoint=e.value,e=t.next();break;case 291:o.hasSetDoglegVector=e.value,e=t.next();break;case 10:o.lastLeaderLinePoint=_e(t),e=t.lastReadGroup;break;case 11:o.doglegVector=_e(t),e=t.lastReadGroup;break;case 90:o.leaderBranchIndex=e.value,e=t.next();break;case 40:o.doglegLength=e.value,e=t.next();break;case 303:return;case 304:s(),e=t.lastReadGroup;break;default:e=t.next();break}},n=()=>{for(;!t.isEOF();)switch(e.code){case 40:i.contextData.contentScale=e.value,e=t.next();break;case 10:i.contextData.contentBasePosition=_e(t),e=t.lastReadGroup;break;case 145:i.contextData.landingGap=e.value,e=t.next();break;case 290:i.contextData.hasMText=e.value,e=t.next();break;case 300:i.contextData.defaultTextContents=e.value,e=t.next();break;case 11:i.contextData.textNormalDirection=_e(t),e=t.lastReadGroup;break;case 12:i.contextData.textLocation=_e(t),e=t.lastReadGroup;break;case 13:i.contextData.textDirection=_e(t),e=t.lastReadGroup;break;case 140:i.contextData.arrowHeadSize=e.value,e=t.next();break;case 41:i.contextData.textHeight=e.value,e=t.next();break;case 42:i.contextData.textRotation=e.value,e=t.next();break;case 43:i.contextData.textWidth=e.value,e=t.next();break;case 44:e=t.next();break;case 45:i.contextData.textLineSpacingFactor=e.value,e=t.next();break;case 90:i.contextData.textColor=e.value,e=t.next();break;case 170:i.contextData.textLineSpacingStyle=e.value,e=t.next();break;case 171:i.contextData.textAttachment=e.value,e=t.next();break;case 172:i.contextData.textFlowDirection=e.value,e=t.next();break;case 141:i.contextData.textBackgroundScaleFactor=e.value,e=t.next();break;case 92:i.contextData.textBackgroundTransparency=e.value,e=t.next();break;case 291:i.contextData.textBackgroundColorOn=e.value,e=t.next();break;case 292:i.contextData.textBackgroundFillOn=e.value,e=t.next();break;case 293:i.contextData.textUseAutoHeight=e.value,e=t.next();break;case 173:i.contextData.textColumnType=e.value,e=t.next();break;case 142:i.contextData.textColumnWidth=e.value,e=t.next();break;case 143:i.contextData.textColumnGutterWidth=e.value,e=t.next();break;case 144:i.contextData.textColumnHeight=e.value,e=t.next();break;case 295:i.contextData.textUseWordBreak=e.value,e=t.next();break;case 296:i.contextData.hasBlock=e.value,e=t.next();break;case 341:i.contextData.blockContentId=e.value,e=t.next();break;case 14:i.contextData.blockContentNormalDirection=_e(t),e=t.lastReadGroup;break;case 15:i.contextData.blockContentPosition=_e(t),e=t.lastReadGroup;break;case 16:i.contextData.blockContentScale=e.value,e=t.next();break;case 46:i.contextData.blockContentRotation=e.value,e=t.next();break;case 93:i.contextData.blockContentColor=e.value,e=t.next();break;case 47:i.contextData.blockTransformationMatrix=ll(t,47),e=t.lastReadGroup;break;case 110:i.contextData.planeOriginPoint=_e(t),e=t.lastReadGroup;break;case 111:i.contextData.planeXAxisDirection=_e(t),e=t.lastReadGroup;break;case 112:i.contextData.planeYAxisDirection=_e(t),e=t.lastReadGroup;break;case 297:i.contextData.planeNormalReversed=e.value,e=t.next();break;case 301:return;case 302:r(),e=t.lastReadGroup;break;default:e=t.next();break}};return(()=>{for(;!t.isEOF();)switch(e.code){case 0:return;case 340:i.leaderStyleId=e.value,e=t.next();break;case 170:i.leaderLineType=e.value,e=t.next();break;case 91:i.leaderLineColor=e.value,e=t.next();break;case 341:i.leaderLineTypeId=e.value,e=t.next();break;case 171:i.leaderLineWeight=e.value,e=t.next();break;case 41:i.doglegLength=e.value,e=t.next();break;case 290:i.enableLanding=e.value,e=t.next();break;case 291:i.enableDogLeg=e.value,e=t.next();break;case 342:i.arrowHeadId=e.value,e=t.next();break;case 42:i.arrowHeadSize=e.value,e=t.next();break;case 172:i.contentType=e.value,e=t.next();break;case 173:i.textLeftAttachmentType=e.value,e=t.next();break;case 95:i.textLeftAttachmentType=e.value,e=t.next();break;case 174:i.textAngleType=e.value,e=t.next();break;case 175:i.textAlignmentType=e.value,e=t.next();break;case 343:i.textStyleId=e.value,e=t.next();break;case 92:i.textColor=e.value,e=t.next();break;case 292:i.enableFrameText=e.value,e=t.next();break;case 344:i.blockContentId=e.value,e=t.next();break;case 93:i.blockContentColor=e.value,e=t.next();break;case 10:i.blockContentScale=_e(t),e=t.lastReadGroup;break;case 43:i.blockContentRotation=e.value,e=t.next();break;case 176:i.blockContentConnectionType=e.value,e=t.next();break;case 293:i.enableAnotationScale=e.value,e=t.next();break;case 94:i.arrowHeadIndex=e.value,e=t.next();break;case 177:i.blockAttributeIndex=e.value,e=t.next();break;case 44:i.blockAttributeWidth=e.value,e=t.next();break;case 302:i.blockAttributeTextString=e.value,e=t.next();break;case 294:i.textDirectionNegative=e.value,e=t.next();break;case 178:i.textAlignInIPE=e.value,e=t.next();break;case 179:i.textAttachmentPoint=e.value,e=t.next();break;case 271:i.textAttachmentDirectionMText=e.value,e=t.next();break;case 272:i.textAttachmentDirectionBottom=e.value,e=t.next();break;case 273:i.textAttachmentDirectionTop=e.value,e=t.next();break;case 300:n(),e=t.lastReadGroup;break;case 101:for(;e.code!=0;)e=t.next();break;default:Q(i,e),e=t.next();break}})(),i}}function _e(h){const t={};let e=h.lastReadGroup||h.next();for(;!h.isEOF();){switch(e.code){case 10:case 11:case 12:case 13:case 14:case 15:case 16:case 110:case 111:case 112:t.x=e.value;break;case 20:case 21:case 22:case 23:case 24:case 25:case 26:case 120:case 121:case 122:t.y=e.value;break;case 30:case 31:case 32:case 33:case 34:case 35:case 36:case 130:case 131:case 132:t.z=e.value;break;case 42:t.bulge=e.value;break;default:return t}e=h.next()}return t}function ll(h,t){const e=[];let i=h.lastReadGroup||h.next();for(;!h.isEOF()&&(i.code>=t&&i.code<t+16);){e.push(i.value);i=h.next()}return e}class hl{constructor(){p(this,"ForEntityName","ELLIPSE")}parseEntity(t,e){const i={type:e.value};for(e=t.next();!t.isEOF()&&e.code!==0;)switch(e.code){case 10:i.center=hs(t),e=t.lastReadGroup;break;case 11:i.majorAxisEndPoint=hs(t),e=t.lastReadGroup;break;case 40:i.axisRatio=e.value,e=t.next();break;case 41:i.startAngle=e.value,e=t.next();break;case 42:i.endAngle=e.value,e=t.next();break;case 210:i.extrusionDirection=hs(t),e=t.lastReadGroup;break;case 2:i.name=e.value,e=t.next();break;default:Q(i,e),e=t.next();break}return i}}function hs(h){const t={};let e=h.lastReadGroup||h.next();const i=e.code;for(;!h.isEOF();){if(e.code===i)t.x=e.value;else if(e.code===i+10)t.y=e.value;else if(e.code===i+20)t.z=e.value;else if(e.code===42)t.bulge=e.value;else return t;e=h.next()}return t}var Mn=(h=>(h[h.Default=0]="Default",h[h.External=1]="External",h[h.Polyline=2]="Polyline",h[h.Derived=4]="Derived",h[h.Textbox=8]="Textbox",h[h.Outermost=16]="Outermost",h[h.MaxFlags=31]="MaxFlags",h))(Mn||{}),Lt=(h=>(h[h.Polyline=0]="Polyline",h[h.Line=1]="Line",h[h.Arc=2]="Arc",h[h.Ellipse=3]="Ellipse",h[h.Spline=4]="Spline",h))(Lt||{});function Rt(h){const t={};let e=h.lastReadGroup||h.next();const i=e.code;if(e.code===i)if(t.x=e.value,!h.isEOF()&&h.hasNext())e=h.next();else return t;if(e.code===i+10)if(t.y=e.value,!h.isEOF()&&h.hasNext())e=h.next();else return t;return e.code===i+20&&(t.z=e.value,!h.isEOF()&&h.hasNext()&&(e=h.next())),t}function cl(h){const t={type:0,points:[],isClosed:!0};let e=h.next();const i=e.value!==0;e=h.next(),t.isClosed=e.value!==0,e=h.next();const s=e.value;e=h.next();for(let n=0;n<s;n++){const a=Rt(h);e=h.lastReadGroup,i&&(a.bulge=e.value,e=h.next()),t.points.push(a)}e=h.lastReadGroup,console.assert(e.code===97,"The reference count code 97 was expected.");const r=e.value;e=h.next();for(let n=0;n<r;n++)console.assert(e.code===330,"The reference handle code 330 was expected."),e=h.next();return{edges:[t],pathTypeFlag:-1}}function dl(h,t){const e=[];let i=t.next();for(;e.length<h;){if(i.code!==72){i=t.next();continue}switch(i.value){case 1:{i=t.next();const n={type:1,startPoint:Rt(t),endPoint:Rt(t)};i=t.lastReadGroup,e.push(n);break}case 2:{i=t.next();const n={type:2,center:Rt(t),radius:0,startAngle:0,endAngle:0,bCounterclockwise:!1};i=t.lastReadGroup,n.radius=i.value,i=t.next(),n.startAngle=i.value,i=t.next(),n.endAngle=i.value,i=t.next(),n.bCounterclockwise=i.value!==0,i=t.next(),e.push(n);break}case 3:{i=t.next();const n={type:3,center:Rt(t),majorAxisEndPoint:Rt(t),minorRatio:0,startAngle:0,endAngle:0,bCounterclockwise:!1};i=t.lastReadGroup,n.minorRatio=i.value,i=t.next(),n.startAngle=i.value,i=t.next(),n.endAngle=i.value,i=t.next(),n.bCounterclockwise=i.value!==0,i=t.next(),e.push(n);break}case 4:{i=t.next();const n={type:4,degreeOfSplineCurve:i.value,bRational:!1,bPeriodic:!1,numKnots:0,numControlPoints:0,knotValues:[],controlPoints:[]};i=t.next(),n.bRational=i.value!==0,i=t.next(),n.bPeriodic=i.value!==0,i=t.next(),n.numKnots=i.value,i=t.next(),n.numControlPoints=i.value,i=t.next();for(let a=0;a<n.numKnots;a++)n.knotValues.push(i.value),i=t.next();for(let a=0;a<n.numControlPoints;a++){const o=i.value;i=t.next();const l=i.value;let c=1;i=t.next(),i.code===42&&(c=i.value,i=t.next()),n.controlPoints.push({x:o,y:l,z:c})}e.push(n);break}default:i=t.next();break}}i=t.lastReadGroup,console.assert(i.code===97,"The reference count code 97 was expected.");const s=i.value;i=t.next();for(let r=0;r<s;r++)console.assert(i.code===330,"The reference handle code 330 was expected."),i=t.next();return{edges:e,pathTypeFlag:-1}}function ul(h,t){const e=[];let i=-1,s=t.next();for(;e.length<h;){let r;switch(s.code){case 92:if(i=s.value,i&2){if(r=cl(t),r)r.pathTypeFlag=i,e.push(r);else throw new Error("[Hatch] Failed to parse hatch polyline boundary path !");s=t.lastReadGroup}else s=t.next();break;case 93:{const n=s.value;r=dl(n,t),r.pathTypeFlag=i,e.push(r),s=t.lastReadGroup;break}default:s=t.next();break}}return e}function fl(h,t){if(h<=0){t.next();return}const e=[];let i=t.next();for(let s=0;s<h;s++){let r=0;const n={x:0,y:0},a={x:0,y:0};let o=-1;const l=[];for(;!t.isEOF()&&i.code!==0;){let c=!1;switch(i.code){case 53:r=i.value;break;case 43:n.x=i.value;break;case 44:n.y=i.value;break;case 45:a.x=i.value;break;case 46:a.y=i.value;break;case 79:o=i.value;break;case 49:l.push(i.value);break;default:c=!0}if(i=t.next(),c||l.length===o)break}o>=0&&e.push({angle:r,origin:n,delta:a,dashPattern:l})}return e}function pl(h,t){const e=[];let i=t.next();for(;e.length<h&&!t.isEOF()&&i.code!==void 0&&i.code!==0;)switch(i.code){case 63:i=t.next();break;case 421:e.push(i.value),i=t.next();break;default:i=t.next();break}return e}class ml{constructor(){p(this,"ForEntityName","HATCH")}parseEntity(t,e){const i={type:e.value,boundaryPaths:[]};for(e=t.next();!t.isEOF()&&e.code!==0;)switch(e.code){case 2:i.patternName=e.value,e=t.next();break;case 10:i.elevationX=e.value,e=t.next();break;case 20:i.elevationY=e.value,e=t.next();break;case 30:i.elevationZ=e.value,e=t.next();break;case 41:i.patternScale=e.value,e=t.next();break;case 47:i.pixelSize=e.value,e=t.next();break;case 52:i.patternAngle=e.value,e=t.next();break;case 63:i.patternFillColor=e.value,e=t.next();break;case 70:i.solidFill=(e.value&1)!==0,e=t.next();break;case 71:i.associativity=(e.value&1)!==0,e=t.next();break;case 73:i.annotatedBoundary=(e.value&1)!==0,e=t.next();break;case 75:i.style=e.value,e=t.next();break;case 76:i.patternType=e.value,e=t.next();break;case 78:i.patternLines=fl(e.value,t),e=t.lastReadGroup;break;case 91:i.boundaryPathsCount=e.value,i.boundaryPaths=ul(i.boundaryPathsCount,t),e=t.lastReadGroup;break;case 98:i.seedPointsCount=e.value,e=t.next();break;case 210:i.extrusionDirectionX=e.value,e=t.next();break;case 220:i.extrusionDirectionY=e.value,e=t.next();break;case 230:i.extrusionDirectionZ=e.value,e=t.next();break;case 450:i.isGradientColor=e.value===1,e=t.next();break;case 451:e=t.next();break;case 452:e=t.next();break;case 453:i.gradientColorCount=e.value,i.gradientColors=pl(i.gradientColorCount,t),e=t.next();break;case 460:e=t.next();break;case 461:e=t.next();break;case 462:e=t.next();break;case 463:e=t.next();break;case 470:e=t.next();break;case 101:for(;e.code!=0;)e=t.next();break;default:Q(i,e),e=t.next();break}return i}}var Gi=(h=>(h[h.ShowImage=1]="ShowImage",h[h.ShowImageWhenNotAlignedWithScreen=2]="ShowImageWhenNotAlignedWithScreen",h[h.UseClippingBoundary=4]="UseClippingBoundary",h[h.TransparencyIsOn=8]="TransparencyIsOn",h))(Gi||{});let gl=class{constructor(){p(this,"ForEntityName","IMAGE")}parseEntity(t,e){const i={type:e.value,clippingBoundaryPath:[]};for(e=t.next();!t.isEOF()&&e.code!==0;)switch(e.code){case 10:i.position=Kt(t),e=t.lastReadGroup;break;case 11:i.uPixel=Kt(t),e=t.lastReadGroup;break;case 12:i.vPixel=Kt(t),e=t.lastReadGroup;break;case 13:i.imageSize=Kt(t),e=t.lastReadGroup;break;case 340:i.imageDefHandle=e.value,e=t.next();break;case 70:i.flags=e.value,e=t.next();break;case 280:i.clipping=e.value,e=t.next();break;case 281:i.brightness=e.value,e=t.next();break;case 282:i.contrast=e.value,e=t.next();break;case 283:i.fade=e.value,e=t.next();break;case 360:i.imageDefReactorHandle=e.value,e=t.next();break;case 71:i.clippingBoundaryType=e.value,e=t.next();break;case 91:i.countBoundaryPoints=e.value,e=t.next();break;case 14:i.clippingBoundaryPath.push(Kt(t)),e=t.lastReadGroup;break;case 290:i.clipMode=e.value,e=t.next();break;default:Q(i,e),e=t.next();break}return i}};function Kt(h){const t={};let e=h.lastReadGroup||h.next();for(;!h.isEOF();){switch(e.code){case 10:case 11:case 12:case 13:case 14:t.x=e.value;break;case 20:case 21:case 22:case 23:case 24:t.y=e.value;break;case 30:case 31:case 32:case 33:case 34:t.z=e.value;break;case 42:t.bulge=e.value;break;default:return t}e=h.next()}return t}class yl{constructor(){p(this,"ForEntityName","INSERT")}parseEntity(t,e){const i={type:e.value};for(e=t.next();!t.isEOF()&&e.code!==0;)switch(e.code){case 2:i.block=e.value,e=t.next();break;case 66:i.attributesFollow=e.value!=0,e=t.next();break;case 41:i.xScale=e.value,e=t.next();break;case 42:i.yScale=e.value,e=t.next();break;case 43:i.zScale=e.value,e=t.next();break;case 10:i.position=pr(t),e=t.lastReadGroup;break;case 50:i.rotation=e.value,e=t.next();break;case 70:i.columnCount=e.value,e=t.next();break;case 71:i.rowCount=e.value,e=t.next();break;case 44:i.columnSpacing=e.value,e=t.next();break;case 45:i.rowSpacing=e.value,e=t.next();break;case 210:i.extrusionDirection=pr(t),e=t.lastReadGroup;break;case 101:for(;e.code!=0;)e=t.next();break;case 1e3:i.zdysx?i.zdysx+=e.value:i.zdysx=e.value,e=t.next();break;default:Q(i,e),e=t.next();break}return i}}function pr(h){const t={};let e=h.lastReadGroup||h.next();const i=e.code;for(;!h.isEOF();){if(e.code===i)t.x=e.value;else if(e.code===i+10)t.y=e.value;else if(e.code===i+20)t.z=e.value;else if(e.code===42)t.bulge=e.value;else return t;e=h.next()}return t}function xl(h){switch(h){case 40:return"DIMSCALE";case 41:return"DIMASZ";case 42:return"DIMEXO";case 44:return"DIMEXE";case 75:return"DIMSE1";case 76:return"DIMSE2";case 77:return"DIMTAD";case 140:return"DIMTXT";case 144:return"DIMLFAC";case 147:return"DIMGAP";case 176:return"DIMCLRD";case 178:return"DIMCLRT";case 271:return"DIMDEC";case 341:return"DIMLDRBLK";default:return null}}class bl{constructor(){p(this,"ForEntityName","LEADER")}parseEntity(t,e){const i={type:e.value,arrowFlag:1,vertices:[]};e=t.next();let s=!1;for(;!t.isEOF()&&e.code!==0;)switch(e.code){case 10:i.vertices.push(vl(t)),e=t.lastReadGroup;break;case 3:i.dimensionStyle=e.value,e=t.next();break;case 40:i.textHeight=e.value,e=t.next();break;case 41:i.textWidth=e.value,e=t.next();break;case 71:i.arrowFlag=e.value,e=t.next();break;case 72:i.pathType=e.value,e=t.next();break;case 73:i.creationFlag=e.value,e=t.next();break;case 74:i.direction=e.value,e=t.next();break;case 75:i.hasHookline=e.value===1,e=t.next();break;case 1001:s=e.value==="ACAD",e=t.next();break;case 1070:if(s){const r=xl(e.value);r&&(e=t.next(),(e.code==1005||e.code==1040||e.code==1070)&&(r==="DIMLDRBLK"?i.arrowHeadBlockHandle=e.value:r==="DIMASZ"?i.arrowHeight=e.value:r==="DIMSCALE"?i.arrowHeadScale=e.value:r==="DIMCLRD"&&e.value>0&&(i.colorIndex=e.value,i.color=Nt(Math.abs(e.value)))))}e=t.next();break;default:Q(i,e),e=t.next();break}return i}}function vl(h){const t={};let e=h.lastReadGroup||h.next();const i=e.code;for(;!h.isEOF();){if(e.code===i)t.x=e.value;else if(e.code===i+10)t.y=e.value;else if(e.code===i+20)t.z=e.value;else if(e.code===42)t.bulge=e.value;else return t;e=h.next()}return t}class wl{constructor(){p(this,"ForEntityName","LINE")}parseEntity(t,e){const i={type:e.value,vertices:[]};for(e=t.next();!t.isEOF()&&e.code!==0;)switch(e.code){case 10:i.vertices.unshift(cs(t)),e=t.lastReadGroup;break;case 11:i.vertices.push(cs(t)),e=t.lastReadGroup;break;case 210:i.extrusionDirection=cs(t),e=t.lastReadGroup;break;case 100:e=t.next();break;case 101:for(;e.code!=0;)e=t.next();break;default:Q(i,e),e=t.next();break}return i}}function cs(h){const t={};let e=h.lastReadGroup||h.next();const i=e.code;for(;!h.isEOF();){if(e.code===i)t.x=e.value;else if(e.code===i+10)t.y=e.value;else if(e.code===i+20)t.z=e.value;else if(e.code===42)t.bulge=e.value;else return t;e=h.next()}return t}function Ml(h,t){if(!h||h<=0)throw Error("n must be greater than 0 verticies");const e=[];let i=!1,s=!1,r=t.lastReadGroup;const n={};for(;!t.isEOF()&&!(r.code===0||s);)switch(r.code){case 10:if(i){s=!0;continue}n.x=r.value,i=!0,r=t.next();break;case 20:n.y=r.value,r=t.next();break;case 30:n.z=r.value,r=t.next();break;case 40:n.startWidth=r.value,r=t.next();break;case 41:n.endWidth=r.value,r=t.next();break;case 42:r.value!=0&&(n.bulge=r.value),r=t.next();break;default:return i&&e.push(n),e}return e.push(n),i=!1,s=!1,e}class Tl{constructor(){p(this,"ForEntityName","LWPOLYLINE")}parseEntity(t,e){const i={type:e.value,vertices:[]};let s=0;for(e=t.next();!t.isEOF()&&e.code!==0;)switch(e.code){case 38:i.elevation=e.value,e=t.next();break;case 39:i.thickness=e.value,e=t.next();break;case 70:i.shape=(e.value&1)===1,i.hasContinuousLinetypePattern=(e.value&128)===128,e=t.next();break;case 90:s=e.value,e=t.next();break;case 10:i.vertices.push(...Ml(s,t)),e=t.lastReadGroup;break;case 43:e.value!==0&&(i.constantWidth=e.value),e=t.next();break;case 210:i.extrusionDirectionX=e.value,e=t.next();break;case 220:i.extrusionDirectionY=e.value,e=t.next();break;case 230:i.extrusionDirectionZ=e.value,e=t.next();break;case 101:for(;e.code!=0;)e=t.next();break;default:Q(i,e),e=t.next();break}return i}}class Cl{constructor(){p(this,"ForEntityName","MTEXT")}parseEntity(t,e){const i={type:e.value};for(e=t.next();!t.isEOF()&&e.code!==0;)switch(e.code){case 3:const s=e.value;i.text?i.text+=s:i.text=s,e=t.next();break;case 1:const r=e.value;i.text?i.text+=r:i.text=r,e=t.next();break;case 10:i.position=mr(t),e=t.lastReadGroup;break;case 7:i.textStyle=e.value,e=t.next();break;case 44:i.lineSpaceFactor=e.value,e=t.next();break;case 11:i.directionVector=mr(t),i.rotation=void 0,e=t.lastReadGroup;break;case 40:i.height=e.value,e=t.next();break;case 41:const n=e.value;Math.abs(n)<1e-6?i.width=void 0:i.width=n,e=t.next();break;case 50:i.rotation=e.value,i.directionVector=void 0,e=t.next();break;case 71:i.attachmentPoint=e.value,e=t.next();break;case 72:i.drawingDirection=e.value,e=t.next();break;case 101:for(;e.code!=0;)e=t.next();break;default:Q(i,e),e=t.next();break}return i}}function mr(h){const t={};let e=h.lastReadGroup||h.next();const i=e.code;for(;!h.isEOF();){if(e.code===i)t.x=e.value;else if(e.code===i+10)t.y=e.value;else if(e.code===i+20)t.z=e.value;else if(e.code===42)t.bulge=e.value;else return t;e=h.next()}return t}class Sl{constructor(){p(this,"ForEntityName","OLE2FRAME")}parseEntity(t,e){const i={type:e.value,binaryData:""};for(e=t.next();e.value!=="OLE"&&e.code!==0;)switch(e.code){case 3:i.documentType=e.value,e=t.next();break;case 70:i.version=e.value,e=t.next();break;case 10:i.leftUpX=e.value,e=t.next();break;case 20:i.leftUpY=e.value,e=t.next();break;case 30:i.leftUpZ=e.value,e=t.next();break;case 11:i.rightDownX=e.value,e=t.next();break;case 21:i.rightDownY=e.value,e=t.next();break;case 31:i.rightDownZ=e.value,e=t.next();break;case 90:i.lengthOfBinaryData=e.value,e=t.next();break;case 310:i.binaryData+=e.value,e=t.next();break;case 101:for(;e.code!=0;)e=t.next();break;default:Q(i,e),e=t.next();break}return i}}class Ol{constructor(){p(this,"ForEntityName","POINT")}parseEntity(t,e){const i={type:e.value};for(e=t.next();!t.isEOF()&&e.code!==0;)switch(e.code){case 10:i.position=gr(t),e=t.lastReadGroup;break;case 39:i.thickness=e.value,e=t.next();break;case 210:i.extrusionDirection=gr(t),e=t.lastReadGroup;break;case 100:e=t.next();break;case 101:for(;e.code!=0;)e=t.next();break;default:Q(i,e),e=t.next();break}return i}}function gr(h){const t={};let e=h.lastReadGroup||h.next();const i=e.code;for(;!h.isEOF();){if(e.code===i)t.x=e.value;else if(e.code===i+10)t.y=e.value;else if(e.code===i+20)t.z=e.value;else if(e.code===42)t.bulge=e.value;else return t;e=h.next()}return t}class El{constructor(){p(this,"ForEntityName","VERTEX")}parseEntity(t,e){const i={type:e.value};for(e=t.next();!t.isEOF()&&e.code!==0;)switch(e.code){case 10:i.x=e.value,e=t.next();break;case 20:i.y=e.value,e=t.next();break;case 30:i.z=e.value,e=t.next();break;case 40:e=t.next();break;case 41:e=t.next();break;case 42:e.value!=0&&(i.bulge=e.value),e=t.next();break;case 70:i.curveFittingVertex=(e.value&1)!==0,i.curveFitTangent=(e.value&2)!==0,i.splineVertex=(e.value&8)!==0,i.splineControlPoint=(e.value&16)!==0,i.threeDPolylineVertex=(e.value&32)!==0,i.threeDPolylineMesh=(e.value&64)!==0,i.polyfaceMeshVertex=(e.value&128)!==0,e=t.next();break;case 50:e=t.next();break;case 71:i.faceA=e.value,e=t.next();break;case 72:i.faceB=e.value,e=t.next();break;case 73:i.faceC=e.value,e=t.next();break;case 74:i.faceD=e.value,e=t.next();break;case 101:for(;e.code!=0;)e=t.next();break;default:Q(i,e),e=t.next();break}return i}}function _l(h,t){const e=new El,i=[];for(;!h.isEOF();)if(t.code===0){if(t.value==="VERTEX")i.push(e.parseEntity(h,t)),t=h.lastReadGroup;else if(t.value==="SEQEND"){Pl(h,t);break}}return i}function Pl(h,t){const e={type:t.value};for(t=h.next();!h.isEOF()&&t.code!==0;)if(t.code===101)for(;t.code!=0;)t=h.next();else Q(e,t),t=h.next();return e}class Al{constructor(){p(this,"ForEntityName","POLYLINE")}parseEntity(t,e){const i={type:e.value,vertices:[]};for(e=t.next();!t.isEOF()&&e.code!==0;)switch(e.code){case 10:e=t.next();break;case 20:e=t.next();break;case 30:e=t.next();break;case 39:e=t.next(),i.thickness=e.value;break;case 40:e=t.next();break;case 41:e=t.next();break;case 70:i.shape=(e.value&1)!==0,i.includesCurveFitVertices=(e.value&2)!==0,i.includesSplineFitVertices=(e.value&4)!==0,i.is3dPolyline=(e.value&8)!==0,i.is3dPolygonMesh=(e.value&16)!==0,i.is3dPolygonMeshClosed=(e.value&32)!==0,i.isPolyfaceMesh=(e.value&64)!==0,i.hasContinuousLinetypePattern=(e.value&128)!==0,e=t.next();break;case 71:e=t.next();break;case 72:e=t.next();break;case 73:e=t.next();break;case 74:e=t.next();break;case 75:e=t.next();break;case 210:i.extrusionDirection=Il(t),e=t.lastReadGroup;break;case 101:for(;e.code!=0;)e=t.next();break;default:Q(i,e),e=t.next();break}return i.vertices=_l(t,e),i}}function Il(h){const t={};let e=h.lastReadGroup||h.next();const i=e.code;for(;!h.isEOF();){if(e.code===i)t.x=e.value;else if(e.code===i+10)t.y=e.value;else if(e.code===i+20)t.z=e.value;else if(e.code===42)t.bulge=e.value;else return t;e=h.next()}return t}class kl{constructor(){p(this,"ForEntityName","REGION")}parseEntity(t,e){const i={type:e.value};for(e=t.next();!t.isEOF()&&e.code!==0;)switch(e.code){case 70:i.modelerVersion=e.value,e=t.next();break;case 1:i.proprietaryData=e.value,e=t.next();break;case 3:i.proprietaryData+=e.value,e=t.next();break;case 101:for(;e.code!=0;)e=t.next();break;default:Q(i,e),e=t.next();break}return i}}class Dl{constructor(){p(this,"ForEntityName","RAY")}parseEntity(t,e){const i={type:e.value,vertices:[]};for(e=t.next();!t.isEOF()&&e.code!==0;)switch(e.code){case 10:i.vertices.unshift(yr(t)),e=t.lastReadGroup;break;case 11:i.directionVector=yr(t),e=t.lastReadGroup;break;case 100:e=t.next();break;case 101:for(;e.code!=0;)e=t.next();break;default:Q(i,e),e=t.next();break}return i}}function yr(h){const t={};let e=h.lastReadGroup||h.next();const i=e.code;for(;!h.isEOF();){if(e.code===i)t.x=e.value;else if(e.code===i+10)t.y=e.value;else if(e.code===i+20)t.z=e.value;else if(e.code===42)t.bulge=e.value;else return t;e=h.next()}return t}class Bl{constructor(){p(this,"ForEntityName","SEQEND")}parseEntity(t,e){const i={type:e.value};for(e=t.next();!t.isEOF()&&e.code!==0;)e.code===-2||(Q(i,e),e=t.next());return i}}class Ll{constructor(){p(this,"ForEntityName","SOLID")}parseEntity(t,e){const i={type:e.value,points:[]};for(e=t.next();!t.isEOF()&&e.code!==0;)switch(e.code){case 10:i.points[0]=$t(t),e=t.lastReadGroup;break;case 11:i.points[1]=$t(t),e=t.lastReadGroup;break;case 12:i.points[2]=$t(t),e=t.lastReadGroup;break;case 13:i.points[3]=$t(t),e=t.lastReadGroup;break;case 210:i.extrusionDirection=$t(t),e=t.lastReadGroup;break;case 101:for(;e.code!=0;)e=t.next();break;default:Q(i,e),e=t.next();break}return i}}function $t(h){const t={};let e=h.lastReadGroup||h.next();const i=e.code;for(;!h.isEOF();){if(e.code===i)t.x=e.value;else if(e.code===i+10)t.y=e.value;else if(e.code===i+20)t.z=e.value;else if(e.code===42)t.bulge=e.value;else return t;e=h.next()}return t}class Rl{constructor(){p(this,"ForEntityName","SPLINE")}parseEntity(t,e){const i={type:e.value};for(e=t.next();!t.isEOF()&&e.code!==0;)switch(e.code){case 10:i.controlPoints||(i.controlPoints=[]),i.controlPoints.push(Jt(t)),e=t.lastReadGroup;break;case 11:i.fitPoints||(i.fitPoints=[]),i.fitPoints.push(Jt(t)),e=t.lastReadGroup;break;case 12:i.startTangent=Jt(t),e=t.lastReadGroup;break;case 13:i.endTangent=Jt(t),e=t.lastReadGroup;break;case 40:i.knotValues||(i.knotValues=[]),i.knotValues.push(e.value),e=t.next();break;case 70:(e.value&1)!=0&&(i.closed=!0),(e.value&2)!=0&&(i.periodic=!0),(e.value&4)!=0&&(i.rational=!0),(e.value&8)!=0&&(i.planar=!0),(e.value&16)!=0&&(i.planar=!0,i.linear=!0),e=t.next();break;case 71:i.degreeOfSplineCurve=e.value,e=t.next();break;case 72:i.numberOfKnots=e.value,e=t.next();break;case 73:i.numberOfControlPoints=e.value,e=t.next();break;case 74:i.numberOfFitPoints=e.value,e=t.next();break;case 210:i.normalVector=Jt(t),e=t.lastReadGroup;break;case 101:for(;e.code!=0;)e=t.next();break;default:Q(i,e),e=t.next();break}return i}}function Jt(h){const t={};let e=h.lastReadGroup||h.next();const i=e.code;for(;!h.isEOF();){if(e.code===i)t.x=e.value;else if(e.code===i+10)t.y=e.value;else if(e.code===i+20)t.z=e.value;else if(e.code===42)t.bulge=e.value;else return t;e=h.next()}return t}function Fl(h,t,e){let i=h;for(;i.code!==304;)switch(i.code){case 301:i=e.next();break;case 93:i=e.next();break;case 90:i=e.next();break;case 1:t.text=i.value,i=e.next();break;case 94:i=e.next();break;case 300:t.attrText=i.value,i=e.next();break;case 302:t.text=i.value?i.value:t.text,i=e.next();break;default:console.log("[DXF ACAD_TABLE] ignore code: "+i.code+", value: "+i.value),i=e.next();break}}function xr(h,t){const e={};for(h.code===171&&(e.cellType=h.value);!t.isEOF();){const i=t.next();if(i.code===0||i.code===171){t.lastReadGroup=i;break}if(i.code===301){Fl(i,e,t);continue}switch(i.code){case 172:e.flagValue=i.value;break;case 173:e.mergedValue=i.value;break;case 174:e.autoFit=i.value;break;case 175:e.borderWidth=i.value;break;case 176:e.borderHeight=i.value;break;case 177:e.overrideFlag=i.value;break;case 178:e.virtualEdgeFlag=i.value;break;case 145:e.rotation=i.value;break;case 140:e.textHeight=i.value;break;case 170:e.attachmentPoint=i.value;break;case 91:e.extendedCellFlags=i.value;break;case 7:e.textStyle=i.value;break;case 340:e.blockTableRecordId=i.value;break;case 345:e.fieldObjetId=i.value;break;case 146:e.blockScale=i.value;break;case 179:e.blockAttrNum=i.value;break;case 1:e.text=i.value;break;case 302:e.attrText=i.value;break}}return e}class zl{constructor(){p(this,"ForEntityName","ACAD_TABLE")}parseEntity(t,e){const i={type:e.value};for(e=t.next();!t.isEOF()&&e.code!==0;)switch(e.code){case 10:i.startPoint=br(t),e=t.lastReadGroup;break;case 11:i.directionVector=br(t),e=t.lastReadGroup;break;case 90:i.tableValue=e.value,e=t.next();break;case 91:i.rowCount=e.value,e=t.next();break;case 92:i.columnCount=e.value,e=t.next();break;case 93:i.overrideFlag=e.value,e=t.next();break;case 94:i.borderColorOverrideFlag=e.value,e=t.next();break;case 95:i.borderLineWeightOverrideFlag=e.value,e=t.next();break;case 96:i.borderVisibilityOverrideFlag=e.value,e=t.next();break;case 141:i.rowHeightArr?i.rowHeightArr.push(e.value):i.rowHeightArr=[e.value],e=t.next();break;case 142:i.columnWidthArr?i.columnWidthArr.push(e.value):i.columnWidthArr=[e.value],e=t.next();break;case 280:i.version=e.value,e=t.next();break;case 342:i.tableStyleId=e.value,e=t.next();break;case 343:i.blockRecordHandle=e.value,e=t.next();break;case 171:i.cells?i.cells.push(xr(e,t)):i.cells=[xr(e,t)],e=t.lastReadGroup;break;default:Q(i,e),e=t.next();break}return i}}function br(h){const t={};let e=h.lastReadGroup||h.next();const i=e.code;for(;!h.isEOF();){if(e.code===i)t.x=e.value;else if(e.code===i+10)t.y=e.value;else if(e.code===i+20)t.z=e.value;else if(e.code===42)t.bulge=e.value;else return t;e=h.next()}return t}class jl{constructor(){p(this,"ForEntityName","TEXT")}parseEntity(t,e){const i={type:e.value};for(e=t.next();!t.isEOF()&&e.code!==0;)switch(e.code){case 10:i.startPoint=vr(t),e=t.lastReadGroup;break;case 11:i.endPoint=vr(t),e=t.lastReadGroup;break;case 40:i.textHeight=e.value,e=t.next();break;case 41:i.xScale=e.value,e=t.next();break;case 50:i.rotation=e.value,e=t.next();break;case 1:i.text=e.value,e=t.next();break;case 72:i.halign=e.value,e=t.next();break;case 73:i.valign=e.value,e=t.next();break;case 7:i.textStyle=e.value,e=t.next();break;case 71:i.mirrored=e.value,e=t.next();break;case 101:for(;e.code!=0;)e=t.next();break;default:Q(i,e),e=t.next();break}return i}}function vr(h){const t={};let e=h.lastReadGroup||h.next();const i=e.code;for(;!h.isEOF();){if(e.code===i)t.x=e.value;else if(e.code===i+10)t.y=e.value;else if(e.code===i+20)t.z=e.value;else if(e.code===42)t.bulge=e.value;else return t;e=h.next()}return t}class Vl{constructor(){p(this,"ForEntityName","VIEWPORT")}parseEntity(t,e){const i={type:e.value};for(e=t.next();!t.isEOF()&&e.code!==0;)switch(e.code){case 68:i.viewportStatus=e.value,e=t.next();break;case 40:i.width_paperSpace=e.value,e=t.next();break;case 41:i.height_paperSpace=e.value,e=t.next();break;case 69:i.viewportId=e.value,e=t.next();break;case 10:i.centerPoint=qe(t),e=t.lastReadGroup;break;case 12:i.centerPoint_dcs=qe(t),e=t.lastReadGroup;break;case 13:i.snapBasePoint_dcs=qe(t),e=t.lastReadGroup;break;case 14:i.snapSpacing_dcs=qe(t),e=t.lastReadGroup;break;case 15:i.gridSpacing_dcs=qe(t),e=t.lastReadGroup;break;case 16:i.viewDirection=qe(t),e=t.lastReadGroup;break;case 17:i.viewTarget=qe(t),e=t.lastReadGroup;break;case 42:i.perspectiveLens=e.value,e=t.next();break;case 43:i.frontClippingPlaneZ=e.value,e=t.next();break;case 44:i.backClippingPlaneZ=e.value,e=t.next();break;case 45:i.viewHeight=e.value,e=t.next();break;case 50:i.snapAngle=e.value,e=t.next();break;case 51:i.viewTwistAngle=e.value,e=t.next();break;case 72:i.circleZoomPercent=e.value,e=t.next();break;case 331:i.frozenLayerHandles=i.frozenLayerHandles||[],i.frozenLayerHandles.push(e.value),e=t.next();break;case 90:i.viewportStatusFlags=e.value,e=t.next();break;case 340:i.viewportClippingBoundaryhandleId=e.value,e=t.next();break;case 1:i.plotStyleSheetName=e.value,e=t.next();break;case 281:i.renderMode=e.value,e=t.next();break;case 71:i.viewportFlag_ucs=e.value,e=t.next();break;case 74:i.ucsIcon=e.value,e=t.next();break;case 110:i.ucsOrigin=qe(t),e=t.lastReadGroup;break;case 111:i.ucsXAxis=qe(t),e=t.lastReadGroup;break;case 112:i.ucsYAxis=qe(t),e=t.lastReadGroup;break;case 345:i.ucsTableRecordHandle=e.value,e=t.next();break;case 346:i.baseUcsTableRecordHandle=e.value,e=t.next();break;case 79:i.orthographicType=e.value,e=t.next();break;case 146:i.elevation=e.value,e=t.next();break;case 170:i.shadePlotMode=e.value,e=t.next();break;case 61:i.frequency=e.value,e=t.next();break;case 292:i.lightingFlag=e.value,e=t.next();break;case 282:i.lightingType=e.value,e=t.next();break;case 141:i.viewBrightness=e.value,e=t.next();break;case 142:i.viewContrast=e.value,e=t.next();break;case 101:for(;e.code!=0;)e=t.next();break;default:Q(i,e),e=t.next();break}return i}}function qe(h){const t={};let e=h.lastReadGroup||h.next();for(;!h.isEOF();){switch(e.code){case 10:case 12:case 13:case 14:case 15:case 16:case 17:case 110:case 111:case 112:t.x=e.value;break;case 20:case 22:case 23:case 24:case 25:case 26:case 27:case 120:case 121:case 122:t.y=e.value;break;case 30:case 32:case 33:case 34:case 35:case 36:case 37:case 130:case 131:case 132:t.z=e.value;break;case 42:t.bulge=e.value;break;default:return t}e=h.next()}return t}class Ul{constructor(){p(this,"ForEntityName","XLINE")}parseEntity(t,e){const i={type:e.value,vertices:[]};for(e=t.next();!t.isEOF()&&e.code!==0;)switch(e.code){case 10:i.vertices.unshift(wr(t)),e=t.lastReadGroup;break;case 11:i.directionVector=wr(t),e=t.lastReadGroup;break;case 100:e=t.next();break;case 101:for(;e.code!=0;)e=t.next();break;default:Q(i,e),e=t.next();break}return i}}function wr(h){const t={};let e=h.lastReadGroup||h.next();const i=e.code;for(;!h.isEOF();){if(e.code===i)t.x=e.value;else if(e.code===i+10)t.y=e.value;else if(e.code===i+20)t.z=e.value;else if(e.code===42)t.bulge=e.value;else return t;e=h.next()}return t}class Hl{constructor(){p(this,"ForObjectName","DICTIONARY")}parseObject(t,e){const s={type:e.value},r=[],n=[];for(e=t.next();!t.isEOF()&&e.code!==0;)switch(e.code){case 280:s.isHardOwner=e.value===1,e=t.next();break;case 281:s.cloningFlag=e.value,e=t.next();break;case 3:r.push(e.value),e=t.next();break;case 350:n.push(e.value),e=t.next();break;case 360:n.push(e.value),e=t.next();break;case 100:e=t.next();break;case 102:e=t.next();break;default:Xt(s,e),e=t.next();break}if(r.length!==n.length)throw new Error("The number of Dictionary entries does not match !");return s.entries={},r.forEach((a,o)=>{s.entries[n[o]]=a}),s}}class Nl{constructor(){p(this,"ForObjectName","IMAGEDEF")}parseObject(t,e){const s={type:e.value};for(e=t.next();!t.isEOF()&&e.code!==0;)switch(e.code){case 90:s.classVersion=e.value,e=t.next();break;case 1:s.filename=e.value,e=t.next();break;case 10:s.imageSize=Mr(t),e=t.next();break;case 11:s.pixelSize=Mr(t),e=t.next();break;case 280:s.loaded=e.value,e=t.next();break;case 281:s.resolutionUnits=e.value,e=t.next();break;default:Xt(s,e),e=t.next();break}return s}}function Mr(h){const t={};let e=h.lastReadGroup||h.next();const i=e.code;for(;!h.isEOF();){if(e.code===i)t.x=e.value;else if(e.code===i+10)t.y=e.value;else if(e.code===i+20)t.z=e.value;else if(e.code===42)t.bulge=e.value;else return t;e=h.next()}return t}class Gl{constructor(){p(this,"ForObjectName","LAYOUT")}parseObject(t,e){const s={type:e.value};for(e=t.next();!t.isEOF()&&e.code!==0;)switch(e.code){case 100:e=t.next();break;case 1:s.layoutName=e.value,e=t.next();break;case 70:s.flag=e.value,e=t.next();break;case 71:s.tabOrder=e.value,e=t.next();break;case 76:s.orthographicType=e.value,e=t.next();break;case 10:s.minLimit=ot(t),e=t.lastReadGroup;break;case 11:s.maxLimit=ot(t),e=t.lastReadGroup;break;case 12:s.basePoint=ot(t),e=t.lastReadGroup;break;case 13:s.origin=ot(t),e=t.lastReadGroup;break;case 14:s.minExtent=ot(t),e=t.lastReadGroup;break;case 15:s.maxExtent=ot(t),e=t.lastReadGroup;break;case 16:s.XAxis=ot(t),e=t.lastReadGroup;break;case 17:s.YAxis=ot(t),e=t.lastReadGroup;break;case 146:s.elevation=e.value,e=t.next();break;case 330:s.viewportHandle=e.value,e=t.next();break;default:Xt(s,e),e=t.next();break}return s.blockTableHandle=s.ownerHandle,s}}function ot(h){const t={};let e=h.lastReadGroup||h.next();const i=e.code;for(;!h.isEOF();){if(e.code===i)t.x=e.value;else if(e.code===i+10)t.y=e.value;else if(e.code===i+20)t.z=e.value;else if(e.code===42)t.bulge=e.value;else return t;e=h.next()}return t}class ql{constructor(){p(this,"ForObjectName","SORTENTSTABLE")}parseObject(t,e){const s={type:e.value};let r=!1;s.sortEntsObject={},s.sortEntsObject.entityHandles=[];let n=[];for(e=t.next();!t.isEOF()&&e.code!==0;)switch(e.code){case 5:r?(n.push(e.value),s.sortEntsObject.entityHandles.push(n),n=[]):s.handle=e.value,e=t.next();break;case 100:e=t.next(),r=!0;break;case 102:e=t.next();break;case 330:r?s.sortEntsObject.ownerHandle=e.value:s.ownerHandle=e.value,e=t.next();break;case 331:n.push(e.value),e=t.next();break;default:Xt(s,e),e=t.next();break}return s}}class Wl{constructor(){p(this,"ForObjectName","SPATIAL_FILTER")}parseObject(t,e){const s={type:e.value};s.vertices=[];let r,n;for(e=t.next();!t.isEOF()&&e.code!==0;)switch(e.code){case 11:s.origin=qi(t),e=t.lastReadGroup;break;case 70:s.numberOfPointsOnClipBoundary=e.value,s.numberOfPointsOnClipBoundary===2?(e=t.next(),r=qi(t),e=t.lastReadGroup,n=qi(t),e=t.lastReadGroup,s.vertices.push(r,{x:n.x,y:r.y},n,{x:r.x,y:n.y},r)):s.numberOfPointsOnClipBoundary>2?(s.vertices=Yl(s.numberOfPointsOnClipBoundary,t),e=t.lastReadGroup):e=t.next();break;case 71:s.clipBoundaryVisible=e.value===1,e=t.next();break;case 72:s.frontClippingPlaneFlag=e.value===1,e=t.next(),s.frontClippingPlaneFlag&&e.code===40&&(s.frontClippingPlaneDistance=e.value,e=t.next());break;case 73:s.backClippingPlaneFlag=e.value===1,e=t.next(),s.backClippingPlaneFlag&&e.code===41&&(s.backClippingPlaneDistance=e.value,e=t.next());break;case 100:e=t.next();break;case 102:e=t.next();break;case 210:s.extrusionDirectionX=e.value,e=t.next();break;case 220:s.extrusionDirectionY=e.value,e=t.next();break;case 230:s.extrusionDirectionZ=e.value,e=t.next();break;case 40:s.invertBlockMatrix=Tr(t,40),s.matrix=Tr(t,40),e=t.lastReadGroup;break;default:Xt(s,e),e=t.next();break}return s}}function Yl(h,t){t.next();const e=[];for(;e.length<h;)e.push(qi(t));return e}function Tr(h,t){let e=h.lastReadGroup;const i=[];for(let s=0;s<12;s++){if(e.code!==t)throw new Error("Expected code for matrix value to be "+t+" but got "+e.code);i.push(e.value),e=h.next()}return i}function qi(h){const t={};let e=h.lastReadGroup||h.next();const i=e.code;for(;!h.isEOF();){if(e.code===i)t.x=e.value;else if(e.code===i+10)t.y=e.value;else if(e.code===i+20)t.z=e.value;else if(e.code===42)t.bulge=e.value;else return t;e=h.next()}return t}class Xl{constructor(){p(this,"ForObjectName","XRECORD")}parseObject(t,e){const s={type:e.value,binaryData:""};for(e=t.next();!t.isEOF()&&e.code!==0;)switch(e.code){case 100:e=t.next();break;case 280:s.cloningFlag=e.value,e=t.next();break;case 310:s.binaryData+=e.value,e=t.next();break;case 311:e=t.next();break;default:Xt(s,e),e=t.next();break}return s}}function Zl(h){h.registerEntityHandler(Qo),h.registerEntityHandler(el),h.registerEntityHandler(il),h.registerEntityHandler(sl),h.registerEntityHandler(rl),h.registerEntityHandler(al),h.registerEntityHandler(ol),h.registerEntityHandler(hl),h.registerEntityHandler(ml),h.registerEntityHandler(gl),h.registerEntityHandler(yl),h.registerEntityHandler(bl),h.registerEntityHandler(wl),h.registerEntityHandler(Tl),h.registerEntityHandler(Cl),h.registerEntityHandler(Sl),h.registerEntityHandler(Ol),h.registerEntityHandler(Al),h.registerEntityHandler(kl),h.registerEntityHandler(Dl),h.registerEntityHandler(Bl),h.registerEntityHandler(Ll),h.registerEntityHandler(Rl),h.registerEntityHandler(zl),h.registerEntityHandler(jl),h.registerEntityHandler(Vl),h.registerEntityHandler(Ul)}function Kl(h){h.registerObjectHandler(Hl),h.registerObjectHandler(Nl),h.registerObjectHandler(Gl),h.registerObjectHandler(ql),h.registerObjectHandler(Wl),h.registerObjectHandler(Xl)}function $l(h){const t=new Uint8Array(h,0,18);let e="";for(let i=0;i<18;i++)e+=String.fromCharCode(t[i]);return e==="AutoCAD Binary DXF"}class Tn{constructor(t){p(this,"_entityHandlers",{});p(this,"_objectHandlers",{});p(this,"_layoutBlocks",{});p(this,"unhandledSections",{});p(this,"unhandledObjects",{});p(this,"unhandledEntities",{});p(this,"unsupportedLineTypes",{});p(this,"encoding");this.encoding=t,Zl(this),Kl(this)}parse(t){if(typeof t=="string"){const e=this.splitByLineSeparator(t),i=new dr(e);return this._parse(i)}else{let e;if($l(t))e=new Xo(t);else{const i=new TextDecoder(this.encoding).decode(t),s=Date.now(),r=this.splitByLineSeparator(i);console.info("[DxfParser] string.split took "+(Date.now()-s)/1e3+"s, it is avoidable by using dxf in binary."),e=new dr(r)}return this._parse(e)}}registerEntityHandler(t){const e=new t;this._entityHandlers[e.ForEntityName]=e}registerObjectHandler(t){const e=new t;this._objectHandlers[e.ForObjectName]=e}parseSync(t){return this.parse(t)}parseStream(t){let e="";const i=this;return new Promise((s,r)=>{t.on("data",n=>{e+=n}),t.on("end",()=>{try{s(i.parse(e))}catch(n){r(n)}}),t.on("error",n=>{r(n)})})}_parse(t){const e={};let i=0;if(!t.hasNext())throw Error("Empty file");const s=this;let r;function n(){for(r=t.next();r.code===999;)r=t.next();for(;!t.isEOF();)if(r.code===0&&r.value==="SECTION"){if(r=t.next(),r.code!==2){console.error("Unexpected code %s after 0:SECTION",Cn(r)),r=t.next();continue}if(r.value==="HEADER")S.trace("> HEADER"),e.header=a(),S.trace("<");else if(r.value==="TABLES")S.trace("> TABLES"),e.tables=c(),S.trace("<");else if(r.value==="BLOCKS")S.trace("> BLOCKS"),e.blocks=o(),S.trace("<");else if(r.value==="ENTITIES")S.trace("> ENTITIES"),e.entities=E(!1),S.trace("<");else if(r.value==="OBJECTS")S.trace("> OBJECTS"),e.objects=O(),S.trace("<");else if(r.value==="EOF")S.trace("EOF");else{const C=r.value;s.unhandledSections[C]?s.unhandledSections[C]++:s.unhandledSections[C]=1}}else r=t.next();s.unhandledSections={},s.unhandledEntities={},s.unhandledObjects={},s.unsupportedLineTypes={}}function a(){let C=null,w=null;const M={};for(r=t.next();;){if(Pe(r,0,"ENDSEC")){C&&(M[C]=w);break}else r.code===9?(C&&(M[C]=w),C=r.value):r.code===10?w={x:r.value}:r.code===20?w.y=r.value:r.code===30?w.z=r.value:w=r.value;r=t.next()}return r=t.next(),M}function o(){const C={};for(r=t.next();r.value!=="EOF"&&!Pe(r,0,"ENDSEC");)if(Pe(r,0,"BLOCK")){S.trace("block {");const w=l();S.trace("}"),_(w),w.name?C[w.name]=w:console.error("[DxfParser] Block with handle '"+w.handle+"' is missing a name, ignored!")}else Qe(r),r=t.next();return C}function l(){const C={};for(r=t.next();r.value!=="EOF";){switch(r.code){case 1:C.xrefPath=r.value,r=t.next();break;case 2:C.name=r.value,r=t.next();break;case 3:C.name2=r.value,r=t.next();break;case 4:C.description=r.value,r=t.next();break;case 5:C.handle=r.value,r=t.next();break;case 8:C.layer=r.value,r=t.next();break;case 10:C.position=Ie(t),r=t.lastReadGroup;break;case 67:C.paperSpace=!!(r.value&&r.value===1),r=t.next();break;case 70:C.blockType=r.value,r=t.next();break;case 100:r=t.next();break;case 330:C.ownerHandle=r.value,r=t.next();break;case 0:if(r.value==="ENDBLK")break;C.entities=E(!0);break;default:Qe(r),r=t.next();break}if(Pe(r,0,"ENDBLK")){r=t.next();break}}return C}function c(){const C={};for(r=t.next();r.value!=="EOF"&&!Pe(r,0,"ENDSEC");)Pe(r,0,"TABLE")?(r=t.next(),b[r.value]?(S.trace(r.value+" Table {"),C[b[r.value].tableName]=f(r),S.trace("}")):S.trace("Unhandled Table "+r.value)):r=t.next();return r=t.next(),C}const u="ENDTAB";function f(C){const w=b[C.value],M={};let P=0;for(r=t.next();!Pe(r,0,u);)switch(r.code){case 5:M.handle=r.value,r=t.next();break;case 330:M.ownerHandle=r.value,r=t.next();break;case 100:r.value==="AcDbSymbolTable"||Qe(r),r=t.next();break;case 70:P=r.value,r=t.next();break;case 0:r.value===w.dxfSymbolName?M[w.tableRecordsProperty]=w.parseTableRecords():(Qe(r),r=t.next());break;default:Qe(r),r=t.next();break}const A=M[w.tableRecordsProperty];if(A){const I=(()=>{if(A.constructor===Array)return A.length;if(typeof A=="object")return Object.keys(A).length})();P!==I&&console.warn("[DxfParser] Parsed "+I+" "+w.dxfSymbolName+"s but expected "+P)}return r=t.next(),M}function m(){const C=[];let w={};for(S.trace("Viewport {"),r=t.next();!Pe(r,0,u);)switch(r.code){case 2:w.name=r.value,r=t.next();break;case 10:w.lowerLeftCorner=Ie(t),r=t.lastReadGroup;break;case 11:w.upperRightCorner=Ie(t),r=t.lastReadGroup;break;case 12:w.center=Ie(t),r=t.lastReadGroup;break;case 13:w.snapBasePoint=Ie(t),r=t.lastReadGroup;break;case 14:w.snapSpacing=Ie(t),r=t.lastReadGroup;break;case 15:w.gridSpacing=Ie(t),r=t.lastReadGroup;break;case 16:w.viewDirectionFromTarget=Ie(t),r=t.lastReadGroup;break;case 17:w.viewTarget=Ie(t),r=t.lastReadGroup;break;case 40:w.viewHeight=r.value,r=t.next();break;case 41:w.aspectRatio=r.value,r=t.next();break;case 42:w.lensLength=r.value,r=t.next();break;case 43:w.frontClippingPlane=r.value,r=t.next();break;case 44:w.backClippingPlane=r.value,r=t.next();break;case 45:w.viewHeight=r.value,r=t.next();break;case 50:w.snapRotationAngle=r.value,r=t.next();break;case 51:w.viewTwistAngle=r.value,r=t.next();break;case 79:w.orthographicType=r.value,r=t.next();break;case 110:w.ucsOrigin=Ie(t),r=t.lastReadGroup;break;case 111:w.ucsXAxis=Ie(t),r=t.lastReadGroup;break;case 112:w.ucsYAxis=Ie(t),r=t.lastReadGroup;break;case 281:w.renderMode=r.value,r=t.next();break;case 282:w.defaultLightingType=r.value,r=t.next();break;case 292:w.defaultLightingOn=r.value,r=t.next();break;case 330:w.ownerHandle=r.value,r=t.next();break;case 63:case 421:case 431:w.ambientColor=r.value,r=t.next();break;case 0:r.value==="VPORT"&&(S.trace("}"),C.push(w),S.trace("Viewport {"),w={},r=t.next());break;default:Qe(r),r=t.next();break}return S.trace("}"),C.push(w),C}function g(){const C={};let w={},M=0,P="",A=!1;for(S.trace("LType {"),r=t.next();!Pe(r,0,"ENDTAB");)switch(r.code){case 2:w.name=r.value.toUpperCase(),P=w.name,r=t.next();break;case 3:w.description=r.value,r=t.next();break;case 9:r=t.next();break;case 40:w.patternLength=r.value,r=t.next();break;case 44:r=t.next();break;case 45:r=t.next();break;case 46:r=t.next();break;case 49:let I=r.value;A&&(I=Math.abs(I),A=!1),w.pattern.push(I),r=t.next();break;case 70:r=t.next();break;case 73:M=r.value,M>0&&(w.pattern=[]),r=t.next();break;case 74:r.value!==0&&(A=!0,s.unsupportedLineTypes[w.name]?s.unsupportedLineTypes[w.name]++:s.unsupportedLineTypes[w.name]=1),r=t.next();break;case 75:r=t.next();break;case 0:S.trace("}"),M>0&&M!==w.pattern.length&&console.warn("[DxfParser] lengths do not match on LTYPE pattern"),C[P]=w,w={},S.trace("LType {"),r=t.next();break;default:r=t.next();break}return S.trace("}"),C[P]=w,C}function x(){const C={};let w={},M;for(S.trace("Layer {"),r=t.next();!Pe(r,0,"ENDTAB");)switch(r.code){case 2:w.name=r.value,M=r.value,r=t.next();break;case 5:w.handle=r.value,r=t.next();break;case 62:w.visible=r.value>=0,w.colorIndex=Math.abs(r.value),w.color=Nt(w.colorIndex),r=t.next();break;case 70:w.flag=r.value,w.frozen=(w.flag&1)>0,r=t.next();break;case 420:w.color=Math.abs(r.value),r=t.next();break;case 6:w.lineType=r.value.toUpperCase(),r=t.next();break;case 370:w.lineweight=r.value,r=t.next();break;case 0:r.value==="LAYER"&&(S.trace("}"),M&&(C[M]=w),S.trace("Layer {"),w={},M=void 0,r=t.next());break;default:Qe(r),r=t.next();break}return S.trace("}"),M&&(C[M]=w),C}function y(){const C={};let w={},M;for(S.trace("Style {"),r=t.next();!Pe(r,0,"ENDTAB");)switch(r.code){case 2:w.styleName=r.value,M=r.value,r=t.next();break;case 3:w.fontFile=r.value,r=t.next();break;case 4:w.bigFontFile=r.value,r=t.next();break;case 5:w.handle=r.value,r=t.next();break;case 40:w.textHeight=r.value,r=t.next();break;case 41:w.xScale=r.value,r=t.next();break;case 42:w.priorTextHeight=r.value,r=t.next();break;case 50:w.rotation=r.value,r=t.next();break;case 70:r=t.next();break;case 71:w.mirrorType=r.value,r=t.next();break;case 330:w.ownerHandle=r.value,r=t.next();break;case 0:r.value==="STYLE"&&(S.trace("}"),M&&(C[M]=w),S.trace("Style {"),w={},M=void 0,r=t.next());break;default:r=t.next();break}return S.trace("}"),M&&(C[M]=w),C}function T(){const C={};let w={},M;for(S.trace("DimStyle {"),r=t.next();!Pe(r,0,"ENDTAB");)switch(r.code){case 2:w.styleName=r.value,M=r.value,r=t.next();break;case 40:w.DIMSCALE=r.value,r=t.next();break;case 41:w.DIMASZ=r.value,r=t.next();break;case 42:w.DIMEXO=r.value,r=t.next();break;case 44:w.DIMEXE=r.value,r=t.next();break;case 75:w.DIMSE1=r.value,r=t.next();break;case 76:w.DIMSE2=r.value,r=t.next();break;case 77:w.DIMTAD=r.value,r=t.next();break;case 140:w.DIMTXT=r.value,r=t.next();break;case 144:w.DIMLFAC=r.value,r=t.next();break;case 147:w.DIMGAP=r.value,r=t.next();break;case 176:w.DIMCLRD=r.value,r=t.next();break;case 178:w.DIMCLRT=r.value,r=t.next();break;case 271:w.DIMDEC=r.value,r=t.next();break;case 341:w.DIMLDRBLK=r.value,r=t.next();break;case 70:r=t.next();break;case 0:r.value==="DIMSTYLE"&&(S.trace("}"),M&&(C[M]=w),S.trace("DimStyle {"),w={},M=void 0,r=t.next());break;default:r=t.next();break}return S.trace("}"),M&&(C[M]=w),C}function v(){const C={};let w={},M;for(S.trace("BlockRecord {"),r=t.next();!Pe(r,0,"ENDTAB");)switch(r.code){case 5:w.handle=r.value,r=t.next();break;case 330:w.ownerHandle=r.value,r=t.next();break;case 2:w.blockName=r.value,M=w.blockName,r=t.next();break;case 340:w.layoutHandle=r.value,r=t.next();break;case 70:w.blockInsertUnits=r.value,r=t.next();break;case 280:w.blockExplodability=r.value,r=t.next();break;case 281:w.blockScalability=r.value,r=t.next();break;case 310:w.bitmap=r.value,r=t.next();break;case 0:if(r.value==="BLOCK_RECORD"){S.trace("}"),M&&(C[M]=w);const A=w.layoutHandle;M&&A&&A.length>0&&A!=="0"&&(s._layoutBlocks[A]=w),S.trace("BlockRecord {"),w={},M=void 0,r=t.next()}else Qe(r),r=t.next();break;default:Qe(r),r=t.next();break}S.trace("}"),M&&(C[M]=w);const P=w.layoutHandle;return M&&P&&P.length>0&&P!=="0"&&(s._layoutBlocks[P]=w),C}const b={VPORT:{tableRecordsProperty:"viewports",tableName:"viewport",dxfSymbolName:"VPORT",parseTableRecords:m},LTYPE:{tableRecordsProperty:"lineTypes",tableName:"lineType",dxfSymbolName:"LTYPE",parseTableRecords:g},LAYER:{tableRecordsProperty:"layers",tableName:"layer",dxfSymbolName:"LAYER",parseTableRecords:x},BLOCK_RECORD:{tableRecordsProperty:"blockRecords",tableName:"blockRecord",dxfSymbolName:"BLOCK_RECORD",parseTableRecords:v},STYLE:{tableRecordsProperty:"styles",tableName:"style",dxfSymbolName:"STYLE",parseTableRecords:y},DIMSTYLE:{tableRecordsProperty:"dimStyles",tableName:"dimStyle",dxfSymbolName:"DIMSTYLE",parseTableRecords:T}};function E(C){const w=[],M=C?"ENDBLK":"ENDSEC";for(C||(r=t.next());;)if(r.code===0){if(r.value===M)break;const P=s._entityHandlers[r.value];if(P!=null){S.trace(r.value+" {");const A=P.parseEntity(t,r);A&&(A.layer||(A.layer="0"),A.colorIndex===void 0&&(A.colorIndex=256),A.lineType||(A.lineType="BYLAYER"),r=t.lastReadGroup,S.trace("}"),_(A),w.push(A))}else{const A=r.value;s.unhandledEntities[A]||(s.unhandledEntities[A]=0),s.unhandledEntities[A]++,r=t.next();continue}}else r=t.next();return M==="ENDSEC"&&(r=t.next()),w}function O(){const C={},w="ENDSEC";for(r=t.next();r.value!=="EOF";)if(r.code===0){if(r.value===w)break;const M=s._objectHandlers[r.value];if(M!=null){S.trace(r.value+" {");const P=M.parseObject(t,r),A=r.value;r=t.lastReadGroup,S.trace("}"),_(P),C[A]||(C[A]=[]),C[A].push(P)}else{const P=r.value;s.unhandledObjects[P]||(s.unhandledObjects[P]=0),s.unhandledObjects[P]++,r=t.next();continue}}else r=t.next();return r=t.next(),C.LAYOUT&&(Object.keys(s._layoutBlocks).length!==C.LAYOUT.length&&console.warn("[DxfParser] The number of layout and block associations does not match!"),C.LAYOUT.forEach(M=>{s._layoutBlocks[M.handle]&&(M.associatedBlockName=s._layoutBlocks[M.handle].blockName)}),C.LAYOUT.sort((M,P)=>M.tabOrder-P.tabOrder)),C}function _(C){if(!C)throw new TypeError("entity cannot be undefined or null");C.handle||(C.handle=(i++).toString())}return n(),e}splitByLineSeparator(t){const e=[];let i=0;for(let s=0,r=t.length;s<r;++s){const n=t[s];if(n==="\r"||n===`
|
|
791
|
+
`;return new d.ShaderMaterial({uniforms:r,vertexShader:n,fragmentShader:a,clipping:!0})}var De=(h=>(h.Unitless="Unitless",h.Inches="Inches",h.Feet="Feet",h.Millimeters="Millimeters",h.Centimeters="Centimeters",h.Meters="Meters",h))(De||{});const Ps=h=>h==="Unitless"?1:h==="Inches"?.0254:h==="Feet"?.3048:h==="Millimeters"?.001:h==="Centimeters"?.01:(h==="Meters"||console.warn("[Units] Unsupported unit '"+h+"', will return 1 for unit scale."),1),Yo=(h,t)=>Ps(h)/Ps(t);class wn{constructor(){p(this,"pointer");p(this,"eof");p(this,"lastReadGroup");this.pointer=0,this.eof=!1}}class vi{constructor(t,e){p(this,"endian");p(this,"position");p(this,"data");p(this,"decoder");this.endian=e&&e==="big"?"big":"little",this.position=0,this.data=new DataView(t)}readAsciiString(t){if(this.data.byteLength<this.position+t)throw"range error";let e="";for(let i=0;i<t;i++)e+=String.fromCharCode(this.data.getInt8(this.position+i));return this.position+=t,e}readUtf8String(t){const e=this.readBytes(t);return this.decoder||(this.decoder=new TextDecoder("utf-8")),this.decoder.decode(e)}readBytes(t=1){if(this.data.byteLength<this.position+t)throw"range error";const e=new Uint8Array(t);for(let i=0;i<t;i++)e[i]=this.data.getUint8(this.position+i);return this.position+=t,e}readUint8(){if(this.data.byteLength<this.position+1)throw"range error";const t=this.data.getUint8(this.position);return this.position+=1,t}readInt8(){if(this.data.byteLength<this.position+1)throw"range error";const t=this.data.getInt8(this.position);return this.position+=1,t}readUint16(){if(this.data.byteLength<this.position+2)throw"range error";const t=this.data.getUint16(this.position,this.endian==="little");return this.position+=2,t}readInt16(){if(this.data.byteLength<this.position+2)throw"range error";const t=this.data.getInt16(this.position,this.endian==="little");return this.position+=2,t}readUint32(){if(this.data.byteLength<this.position+4)throw"range error";const t=this.data.getUint32(this.position,this.endian==="little");return this.position+=4,t}readInt32(){if(this.data.byteLength<this.position+4)throw"range error";const t=this.data.getInt32(this.position,this.endian==="little");return this.position+=4,t}readFloat32(){if(this.data.byteLength<this.position+4)throw"range error";const t=this.data.getFloat32(this.position,this.endian==="little");return this.position+=4,t}readFloat64(){if(this.data.byteLength<this.position+8)throw"range error";const t=this.data.getFloat64(this.position,this.endian==="little");return this.position+=8,t}readInt64(){if(this.data.byteLength<this.position+8)throw"range error";const t=wi.DataViewGetBigInt64(this.data,this.position,this.endian==="little");return this.position+=8,wi.toNumber(t)}readUint64(){if(this.data.byteLength<this.position+8)throw"range error";const t=wi.DataViewGetBigUint64(this.data,this.position,this.endian==="little");return this.position+=8,wi.toNumber(t)}getPosition(){return this.position}setPosition(t){if(this.data.byteLength<t)throw"range error";this.position=t}isEnd(){return this.position===this.data.byteLength-1}}const hr=1e3;class Xo extends wn{constructor(e){super();p(this,"reader");p(this,"decoder");p(this,"int8Array");p(this,"caches");this.int8Array=new Int8Array(hr),this.caches=new Map,this.reader=new vi(e);const i=this.reader.readBytes(22);let s="";for(let r=0;r<18;r++)s+=String.fromCharCode(i[r]);if(s!=="AutoCAD Binary DXF")throw new Error("Invalid DXF file")}next(){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.");const e={code:this.reader.readInt16()};return e.value=this.parseGroupValue(e.code),e.code===0&&e.value==="EOF"&&(this.eof=!0),this.lastReadGroup=e,e}hasNext(){return this.eof?!1:!this.reader.isEnd()}isEOF(){return this.eof}parseGroupValue(e){if(e>=0&&e<=9)return this.readNullTerminatedString();if(e>=10&&e<=59)return this.reader.readFloat64();if(e>=60&&e<=79)return this.reader.readInt16();if(e>=90&&e<=99)return this.reader.readInt32();if(e>=100&&e<=109)return this.readNullTerminatedString();if(e>=110&&e<=149)return this.reader.readFloat64();if(e>=160&&e<=169)return this.reader.readInt64();if(e>=170&&e<=179)return this.reader.readInt16();if(e>=210&&e<=239)return this.reader.readFloat64();if(e>=270&&e<=289)return this.reader.readInt16();if(e>=290&&e<=299)return this.reader.readInt8()>0;if(e>=300&&e<=309)return this.readNullTerminatedString();if(e>=310&&e<=319){const i=this.ReadBinaryData();return cr(i)}if(e>=320&&e<=369)return this.readNullTerminatedString();if(e>=370&&e<=389)return this.reader.readInt16();if(e>=390&&e<=399)return this.readNullTerminatedString();if(e>=400&&e<=409)return this.reader.readInt16();if(e>=410&&e<=419)return this.readNullTerminatedString();if(e>=420&&e<=429)return this.reader.readInt32();if(e>=430&&e<=439)return this.readNullTerminatedString();if(e>=440&&e<=449)return this.reader.readInt32();if(e>=450&&e<=459)return this.reader.readFloat64();if(e>=460&&e<=469)return this.readNullTerminatedString();if(e>=470&&e<=479)return this.readNullTerminatedString();if(e>=480&&e<=481)return this.readNullTerminatedString();if(e>=999&&e<=999)throw new Error("The comment group 999, is not used in binary DXF files at byte address!");if(e===1004){const i=this.ReadBinaryData();return cr(i)}if(e>=1e3&&e<=1009)return this.readNullTerminatedString();if(e>=1010&&e<=1059)return this.reader.readFloat64();if(e>=1060&&e<=1070)return this.reader.readInt16();if(e===1071)return this.reader.readInt32();console.warn("[DxfBinReader] Invalid code '"+e+"' at byte address "+this.reader.getPosition())}readNullTerminatedString(){this.decoder||(this.decoder=new TextDecoder("utf-8"));let e=0,i=this.reader.readInt8();for(;i!==0;)this.int8Array[e++]=i,i=this.reader.readInt8();if(e===0)return"";if(e>hr)return console.warn("[DxfBinReader] Failed to read string! The number of bytes is "+e+" !"),"";const s=this.int8Array.subarray(0,e),r=s.toString();if(this.caches.get(r))return this.caches.get(r);const n=this.decoder?.decode(s);return this.caches.set(r,n),n}ReadBinaryData(){const e=this.reader.readUint8();return this.reader.readBytes(e)}}function cr(h){return Array.prototype.map.call(h,t=>("00"+t.toString(16)).slice(-2)).join("")}class dr extends wn{constructor(e){super();p(this,"data");this.data=e}next(){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]);const e={code:parseInt(this.data[this.pointer])};return this.pointer++,e.value=Zo(e.code,this.data[this.pointer].trim(),this.data[this.pointer]),this.pointer++,e.code===0&&e.value==="EOF"&&(this.eof=!0),this.lastReadGroup=e,e}hasNext(){return!(this.eof||this.pointer>this.data.length-2)}isEOF(){return this.eof}}function Zo(h,t,e){return h>=0&&h<=9?e:h>=10&&h<=59?parseFloat(t):h>=60&&h<=99?parseInt(t):h>=100&&h<=109?t:h>=110&&h<=149?parseFloat(t):h>=160&&h<=179?parseInt(t):h>=210&&h<=239?parseFloat(t):h>=270&&h<=289?parseInt(t):h>=290&&h<=299?Ko(t):h>=300&&h<=369?t:h>=370&&h<=389?parseInt(t):h>=390&&h<=399?t:h>=400&&h<=409?parseInt(t):h>=410&&h<=419?t:h>=420&&h<=429?parseInt(t):h>=430&&h<=439?t:h>=440&&h<=449?parseInt(t):h>=450&&h<=459?parseFloat(t):h>=460&&h<=469||h===999||h>=1e3&&h<=1009?t:h>=1010&&h<=1059?parseFloat(t):h>=1060&&h<=1071?parseInt(t):(console.info("WARNING: Group code does not have a defined type: %j",{code:h,value:t}),t)}function Ko(h){if(h==="0")return!1;if(h==="1")return!0;throw TypeError("String '"+h+"' cannot be cast to Boolean type")}function $o(h){if(h==null)return!0;for(const t in h)if(Object.prototype.hasOwnProperty.call(h,t))return!1;return!0}function Jo(h,t){const e=[];let i=!1,s=!1;const r=4;for(let n=0;n<=r;n++){const a={};for(;!h.isEOF()&&!(t.code===0||s);){switch(t.code){case 10:case 11:case 12:case 13:if(i){s=!0;continue}a.x=t.value,i=!0;break;case 20:case 21:case 22:case 23:a.y=t.value;break;case 30:case 31:case 32:case 33:a.z=t.value;break;default:return e}t=h.next()}$o(a)||e.push(a),i=!1,s=!1}return e}class Qo{constructor(){p(this,"ForEntityName","3DFACE")}parseEntity(t,e){const i={type:e.value,vertices:[]};for(e=t.next();!t.isEOF()&&e.code!==0;)switch(e.code){case 70:if(e.value!==0){const s=Math.log2(e.value)-1;i.vertices.splice(s,0,1)}e=t.next();break;case 10:i.vertices=Jo(t,e),e=t.lastReadGroup;break;case 101:for(;e.code!=0;)e=t.next();break;default:Q(i,e),e=t.next();break}return i}}class el{constructor(){p(this,"ForEntityName","ARC")}parseEntity(t,e){const i={type:e.value};for(e=t.next();!t.isEOF()&&e.code!==0;)switch(e.code){case 10:i.center=tl(t),e=t.lastReadGroup;break;case 40:i.radius=e.value,e=t.next();break;case 50:i.startAngle=Math.PI/180*e.value,e=t.next();break;case 51:i.endAngle=Math.PI/180*e.value,i.angleLength=i.endAngle-i.startAngle,e=t.next();break;case 210:i.extrusionDirectionX=e.value,e=t.next();break;case 220:i.extrusionDirectionY=e.value,e=t.next();break;case 230:i.extrusionDirectionZ=e.value,e=t.next();break;case 101:for(;e.code!=0;)e=t.next();break;default:Q(i,e),e=t.next();break}return i}}function tl(h){const t={};let e=h.lastReadGroup||h.next();const i=e.code;for(;!h.isEOF();){if(e.code===i)t.x=e.value;else if(e.code===i+10)t.y=e.value;else if(e.code===i+20)t.z=e.value;else if(e.code===42)t.bulge=e.value;else return t;e=h.next()}return t}class il{constructor(){p(this,"ForEntityName","ATTDEF")}parseEntity(t,e){const i={type:e.value,xScale:1,textStyle:"STANDARD"};for(e=t.next();!t.isEOF()&&e.code!==0;)switch(e.code){case 1:i.text=e.value,e=t.next();break;case 2:i.tag=e.value,e=t.next();break;case 3:i.prompt=e.value,e=t.next();break;case 7:i.textStyle=e.value,e=t.next();break;case 10:i.startPoint=ur(t),e=t.lastReadGroup;break;case 11:i.endPoint=ur(t),e=t.lastReadGroup;break;case 39:i.thickness=e.value,e=t.next();break;case 40:i.textHeight=e.value,e=t.next();break;case 41:i.xScale=e.value,e=t.next();break;case 50:i.rotation=e.value,e=t.next();break;case 51:i.obliqueAngle=e.value,e=t.next();break;case 70:i.invisible=!!(e.value&1),i.constant=!!(e.value&2),i.verificationRequired=!!(e.value&4),i.preset=!!(e.value&8),e=t.next();break;case 71:i.backwards=!!(e.value&2),i.mirrored=!!(e.value&4),e=t.next();break;case 72:i.horizontalJustification=e.value,i.halign=e.value,e=t.next();break;case 73:i.fieldLength=e.value,e=t.next();break;case 74:i.verticalJustification=e.value,i.valign=e.value,e=t.next();break;case 100:e=t.next();break;case 210:i.extrusionDirectionX=e.value,e=t.next();break;case 220:i.extrusionDirectionY=e.value,e=t.next();break;case 230:i.extrusionDirectionZ=e.value,e=t.next();break;case 101:for(;e.code!=0;)e=t.next();break;default:Q(i,e),e=t.next();break}return i}}function ur(h){const t={};let e=h.lastReadGroup||h.next();const i=e.code;for(;!h.isEOF();){if(e.code===i)t.x=e.value;else if(e.code===i+10)t.y=e.value;else if(e.code===i+20)t.z=e.value;else if(e.code===42)t.bulge=e.value;else return t;e=h.next()}return t}class sl{constructor(){p(this,"ForEntityName","ATTRIB")}parseEntity(t,e){const i={type:e.value,xScale:1,textStyle:"STANDARD"};for(e=t.next();!t.isEOF()&&e.code!==0;)switch(e.code){case 1:i.text=e.value,e=t.next();break;case 2:i.tag=e.value,e=t.next();break;case 3:i.prompt=e.value,e=t.next();break;case 7:i.textStyle=e.value,e=t.next();break;case 10:i.startPoint=fr(t),e=t.lastReadGroup;break;case 11:i.endPoint=fr(t),e=t.lastReadGroup;break;case 39:i.thickness=e.value,e=t.next();break;case 40:i.textHeight=e.value,e=t.next();break;case 41:i.xScale=e.value,e=t.next();break;case 50:i.rotation=e.value,e=t.next();break;case 51:i.obliqueAngle=e.value,e=t.next();break;case 70:i.invisible=!!(e.value&1),i.constant=!!(e.value&2),i.verificationRequired=!!(e.value&4),i.preset=!!(e.value&8),e=t.next();break;case 71:i.backwards=!!(e.value&2),i.mirrored=!!(e.value&4),e=t.next();break;case 72:i.horizontalJustification=e.value,i.halign=e.value,e=t.next();break;case 73:i.fieldLength=e.value,e=t.next();break;case 74:i.verticalJustification=e.value,i.valign=e.value,e=t.next();break;case 100:e=t.next();break;case 210:i.extrusionDirectionX=e.value,e=t.next();break;case 220:i.extrusionDirectionY=e.value,e=t.next();break;case 230:i.extrusionDirectionZ=e.value,e=t.next();break;case 101:for(;e.code!=0;)e=t.next();break;default:Q(i,e),e=t.next();break}return i}}function fr(h){const t={};let e=h.lastReadGroup||h.next();const i=e.code;for(;!h.isEOF();){if(e.code===i)t.x=e.value;else if(e.code===i+10)t.y=e.value;else if(e.code===i+20)t.z=e.value;else if(e.code===42)t.bulge=e.value;else return t;e=h.next()}return t}class rl{constructor(){p(this,"ForEntityName","CIRCLE")}parseEntity(t,e){const i={type:e.value};for(e=t.next();!t.isEOF()&&e.code!==0;)switch(e.code){case 10:i.center=nl(t),e=t.lastReadGroup;break;case 40:i.radius=e.value,e=t.next();break;case 50:i.startAngle=Math.PI/180*e.value,e=t.next();break;case 51:const s=Math.PI/180*e.value;s<i.startAngle?i.angleLength=s+2*Math.PI-i.startAngle:i.angleLength=s-i.startAngle,i.endAngle=s,e=t.next();break;case 101:for(;e.code!=0;)e=t.next();break;default:Q(i,e),e=t.next();break}return i}}function nl(h){const t={};let e=h.lastReadGroup||h.next();const i=e.code;for(;!h.isEOF();){if(e.code===i)t.x=e.value;else if(e.code===i+10)t.y=e.value;else if(e.code===i+20)t.z=e.value;else if(e.code===42)t.bulge=e.value;else return t;e=h.next()}return t}class al{constructor(){p(this,"ForEntityName","DIMENSION")}parseEntity(t,e){const i={type:e.value};for(e=t.next();!t.isEOF()&&e.code!==0;)switch(e.code){case 2:i.block=e.value,e=t.next();break;case 3:i.dimStyleName=e.value,e=t.next();break;case 10:i.anchorPoint=xt(t),e=t.lastReadGroup;break;case 11:i.middleOfText=xt(t),e=t.lastReadGroup;break;case 12:i.insertionPoint=xt(t),e=t.lastReadGroup;break;case 13:i.linearOrAngularPoint1=xt(t),e=t.lastReadGroup;break;case 14:i.linearOrAngularPoint2=xt(t),e=t.lastReadGroup;break;case 15:i.diameterOrRadiusPoint=xt(t),e=t.lastReadGroup;break;case 16:i.arcPoint=xt(t),e=t.lastReadGroup;break;case 70:i.dimensionType=e.value,e=t.next();break;case 71:i.attachmentPoint=e.value,e=t.next();break;case 42:i.actualMeasurement=e.value,e=t.next();break;case 1:i.text=e.value,e=t.next();break;case 50:i.angle=e.value,e=t.next();break;case 101:for(;e.code!=0;)e=t.next();break;default:Q(i,e),e=t.next();break}return i}}function xt(h){const t={};let e=h.lastReadGroup||h.next();const i=e.code;for(;!h.isEOF();){if(e.code===i)t.x=e.value;else if(e.code===i+10)t.y=e.value;else if(e.code===i+20)t.z=e.value;else if(e.code===42)t.bulge=e.value;else return t;e=h.next()}return t}class ol{constructor(){p(this,"ForEntityName","MULTILEADER")}parseEntity(t,e){const i={type:e.value};i.contextData={leaders:[]},e=t.next();const s=()=>{const o=i.contextData.leaders[i.contextData.leaders.length-1],l={vertices:[[]]};for(o.leaderLines.push(l);!t.isEOF();)switch(e.code){case 10:l.vertices[0].push(_e(t)),e=t.lastReadGroup;break;case 305:return;default:e=t.next();break}},r=()=>{const o={leaderLines:[]};for(i.contextData.leaders.push(o);!t.isEOF();)switch(e.code){case 290:o.hasSetLastLeaderLinePoint=e.value,e=t.next();break;case 291:o.hasSetDoglegVector=e.value,e=t.next();break;case 10:o.lastLeaderLinePoint=_e(t),e=t.lastReadGroup;break;case 11:o.doglegVector=_e(t),e=t.lastReadGroup;break;case 90:o.leaderBranchIndex=e.value,e=t.next();break;case 40:o.doglegLength=e.value,e=t.next();break;case 303:return;case 304:s(),e=t.lastReadGroup;break;default:e=t.next();break}},n=()=>{for(;!t.isEOF();)switch(e.code){case 40:i.contextData.contentScale=e.value,e=t.next();break;case 10:i.contextData.contentBasePosition=_e(t),e=t.lastReadGroup;break;case 145:i.contextData.landingGap=e.value,e=t.next();break;case 290:i.contextData.hasMText=e.value,e=t.next();break;case 300:i.contextData.defaultTextContents=e.value,e=t.next();break;case 11:i.contextData.textNormalDirection=_e(t),e=t.lastReadGroup;break;case 12:i.contextData.textLocation=_e(t),e=t.lastReadGroup;break;case 13:i.contextData.textDirection=_e(t),e=t.lastReadGroup;break;case 140:i.contextData.arrowHeadSize=e.value,e=t.next();break;case 41:i.contextData.textHeight=e.value,e=t.next();break;case 42:i.contextData.textRotation=e.value,e=t.next();break;case 43:i.contextData.textWidth=e.value,e=t.next();break;case 44:e=t.next();break;case 45:i.contextData.textLineSpacingFactor=e.value,e=t.next();break;case 90:i.contextData.textColor=e.value,e=t.next();break;case 170:i.contextData.textLineSpacingStyle=e.value,e=t.next();break;case 171:i.contextData.textAttachment=e.value,e=t.next();break;case 172:i.contextData.textFlowDirection=e.value,e=t.next();break;case 141:i.contextData.textBackgroundScaleFactor=e.value,e=t.next();break;case 92:i.contextData.textBackgroundTransparency=e.value,e=t.next();break;case 291:i.contextData.textBackgroundColorOn=e.value,e=t.next();break;case 292:i.contextData.textBackgroundFillOn=e.value,e=t.next();break;case 293:i.contextData.textUseAutoHeight=e.value,e=t.next();break;case 173:i.contextData.textColumnType=e.value,e=t.next();break;case 142:i.contextData.textColumnWidth=e.value,e=t.next();break;case 143:i.contextData.textColumnGutterWidth=e.value,e=t.next();break;case 144:i.contextData.textColumnHeight=e.value,e=t.next();break;case 295:i.contextData.textUseWordBreak=e.value,e=t.next();break;case 296:i.contextData.hasBlock=e.value,e=t.next();break;case 341:i.contextData.blockContentId=e.value,e=t.next();break;case 14:i.contextData.blockContentNormalDirection=_e(t),e=t.lastReadGroup;break;case 15:i.contextData.blockContentPosition=_e(t),e=t.lastReadGroup;break;case 16:i.contextData.blockContentScale=e.value,e=t.next();break;case 46:i.contextData.blockContentRotation=e.value,e=t.next();break;case 93:i.contextData.blockContentColor=e.value,e=t.next();break;case 47:i.contextData.blockTransformationMatrix=ll(t,47),e=t.lastReadGroup;break;case 110:i.contextData.planeOriginPoint=_e(t),e=t.lastReadGroup;break;case 111:i.contextData.planeXAxisDirection=_e(t),e=t.lastReadGroup;break;case 112:i.contextData.planeYAxisDirection=_e(t),e=t.lastReadGroup;break;case 297:i.contextData.planeNormalReversed=e.value,e=t.next();break;case 301:return;case 302:r(),e=t.lastReadGroup;break;default:e=t.next();break}};return(()=>{for(;!t.isEOF();)switch(e.code){case 0:return;case 340:i.leaderStyleId=e.value,e=t.next();break;case 170:i.leaderLineType=e.value,e=t.next();break;case 91:i.leaderLineColor=e.value,e=t.next();break;case 341:i.leaderLineTypeId=e.value,e=t.next();break;case 171:i.leaderLineWeight=e.value,e=t.next();break;case 41:i.doglegLength=e.value,e=t.next();break;case 290:i.enableLanding=e.value,e=t.next();break;case 291:i.enableDogLeg=e.value,e=t.next();break;case 342:i.arrowHeadId=e.value,e=t.next();break;case 42:i.arrowHeadSize=e.value,e=t.next();break;case 172:i.contentType=e.value,e=t.next();break;case 173:i.textLeftAttachmentType=e.value,e=t.next();break;case 95:i.textLeftAttachmentType=e.value,e=t.next();break;case 174:i.textAngleType=e.value,e=t.next();break;case 175:i.textAlignmentType=e.value,e=t.next();break;case 343:i.textStyleId=e.value,e=t.next();break;case 92:i.textColor=e.value,e=t.next();break;case 292:i.enableFrameText=e.value,e=t.next();break;case 344:i.blockContentId=e.value,e=t.next();break;case 93:i.blockContentColor=e.value,e=t.next();break;case 10:i.blockContentScale=_e(t),e=t.lastReadGroup;break;case 43:i.blockContentRotation=e.value,e=t.next();break;case 176:i.blockContentConnectionType=e.value,e=t.next();break;case 293:i.enableAnotationScale=e.value,e=t.next();break;case 94:i.arrowHeadIndex=e.value,e=t.next();break;case 177:i.blockAttributeIndex=e.value,e=t.next();break;case 44:i.blockAttributeWidth=e.value,e=t.next();break;case 302:i.blockAttributeTextString=e.value,e=t.next();break;case 294:i.textDirectionNegative=e.value,e=t.next();break;case 178:i.textAlignInIPE=e.value,e=t.next();break;case 179:i.textAttachmentPoint=e.value,e=t.next();break;case 271:i.textAttachmentDirectionMText=e.value,e=t.next();break;case 272:i.textAttachmentDirectionBottom=e.value,e=t.next();break;case 273:i.textAttachmentDirectionTop=e.value,e=t.next();break;case 300:n(),e=t.lastReadGroup;break;case 101:for(;e.code!=0;)e=t.next();break;default:Q(i,e),e=t.next();break}})(),i}}function _e(h){const t={};let e=h.lastReadGroup||h.next();for(;!h.isEOF();){switch(e.code){case 10:case 11:case 12:case 13:case 14:case 15:case 16:case 110:case 111:case 112:t.x=e.value;break;case 20:case 21:case 22:case 23:case 24:case 25:case 26:case 120:case 121:case 122:t.y=e.value;break;case 30:case 31:case 32:case 33:case 34:case 35:case 36:case 130:case 131:case 132:t.z=e.value;break;case 42:t.bulge=e.value;break;default:return t}e=h.next()}return t}function ll(h,t){const e=[];let i=h.lastReadGroup||h.next();for(;!h.isEOF()&&(i.code>=t&&i.code<t+16);){e.push(i.value);i=h.next()}return e}class hl{constructor(){p(this,"ForEntityName","ELLIPSE")}parseEntity(t,e){const i={type:e.value};for(e=t.next();!t.isEOF()&&e.code!==0;)switch(e.code){case 10:i.center=hs(t),e=t.lastReadGroup;break;case 11:i.majorAxisEndPoint=hs(t),e=t.lastReadGroup;break;case 40:i.axisRatio=e.value,e=t.next();break;case 41:i.startAngle=e.value,e=t.next();break;case 42:i.endAngle=e.value,e=t.next();break;case 210:i.extrusionDirection=hs(t),e=t.lastReadGroup;break;case 2:i.name=e.value,e=t.next();break;default:Q(i,e),e=t.next();break}return i}}function hs(h){const t={};let e=h.lastReadGroup||h.next();const i=e.code;for(;!h.isEOF();){if(e.code===i)t.x=e.value;else if(e.code===i+10)t.y=e.value;else if(e.code===i+20)t.z=e.value;else if(e.code===42)t.bulge=e.value;else return t;e=h.next()}return t}var Mn=(h=>(h[h.Default=0]="Default",h[h.External=1]="External",h[h.Polyline=2]="Polyline",h[h.Derived=4]="Derived",h[h.Textbox=8]="Textbox",h[h.Outermost=16]="Outermost",h[h.MaxFlags=31]="MaxFlags",h))(Mn||{}),Lt=(h=>(h[h.Polyline=0]="Polyline",h[h.Line=1]="Line",h[h.Arc=2]="Arc",h[h.Ellipse=3]="Ellipse",h[h.Spline=4]="Spline",h))(Lt||{});function Rt(h){const t={};let e=h.lastReadGroup||h.next();const i=e.code;if(e.code===i)if(t.x=e.value,!h.isEOF()&&h.hasNext())e=h.next();else return t;if(e.code===i+10)if(t.y=e.value,!h.isEOF()&&h.hasNext())e=h.next();else return t;return e.code===i+20&&(t.z=e.value,!h.isEOF()&&h.hasNext()&&(e=h.next())),t}function cl(h){const t={type:0,points:[],isClosed:!0};let e=h.next();const i=e.value!==0;e=h.next(),t.isClosed=e.value!==0,e=h.next();const s=e.value;e=h.next();for(let n=0;n<s;n++){const a=Rt(h);e=h.lastReadGroup,i&&(a.bulge=e.value,e=h.next()),t.points.push(a)}e=h.lastReadGroup,console.assert(e.code===97,"The reference count code 97 was expected.");const r=e.value;e=h.next();for(let n=0;n<r;n++)console.assert(e.code===330,"The reference handle code 330 was expected."),e=h.next();return{edges:[t],pathTypeFlag:-1}}function dl(h,t){const e=[];let i=t.next();for(;e.length<h;){if(i.code!==72){i=t.next();continue}switch(i.value){case 1:{i=t.next();const n={type:1,startPoint:Rt(t),endPoint:Rt(t)};i=t.lastReadGroup,e.push(n);break}case 2:{i=t.next();const n={type:2,center:Rt(t),radius:0,startAngle:0,endAngle:0,bCounterclockwise:!1};i=t.lastReadGroup,n.radius=i.value,i=t.next(),n.startAngle=i.value,i=t.next(),n.endAngle=i.value,i=t.next(),n.bCounterclockwise=i.value!==0,i=t.next(),e.push(n);break}case 3:{i=t.next();const n={type:3,center:Rt(t),majorAxisEndPoint:Rt(t),minorRatio:0,startAngle:0,endAngle:0,bCounterclockwise:!1};i=t.lastReadGroup,n.minorRatio=i.value,i=t.next(),n.startAngle=i.value,i=t.next(),n.endAngle=i.value,i=t.next(),n.bCounterclockwise=i.value!==0,i=t.next(),e.push(n);break}case 4:{i=t.next();const n={type:4,degreeOfSplineCurve:i.value,bRational:!1,bPeriodic:!1,numKnots:0,numControlPoints:0,knotValues:[],controlPoints:[]};i=t.next(),n.bRational=i.value!==0,i=t.next(),n.bPeriodic=i.value!==0,i=t.next(),n.numKnots=i.value,i=t.next(),n.numControlPoints=i.value,i=t.next();for(let a=0;a<n.numKnots;a++)n.knotValues.push(i.value),i=t.next();for(let a=0;a<n.numControlPoints;a++){const o=i.value;i=t.next();const l=i.value;let c=1;i=t.next(),i.code===42&&(c=i.value,i=t.next()),n.controlPoints.push({x:o,y:l,z:c})}e.push(n);break}default:i=t.next();break}}i=t.lastReadGroup,console.assert(i.code===97,"The reference count code 97 was expected.");const s=i.value;i=t.next();for(let r=0;r<s;r++)console.assert(i.code===330,"The reference handle code 330 was expected."),i=t.next();return{edges:e,pathTypeFlag:-1}}function ul(h,t){const e=[];let i=-1,s=t.next();for(;e.length<h;){let r;switch(s.code){case 92:if(i=s.value,i&2){if(r=cl(t),r)r.pathTypeFlag=i,e.push(r);else throw new Error("[Hatch] Failed to parse hatch polyline boundary path !");s=t.lastReadGroup}else s=t.next();break;case 93:{const n=s.value;r=dl(n,t),r.pathTypeFlag=i,e.push(r),s=t.lastReadGroup;break}default:s=t.next();break}}return e}function fl(h,t){if(h<=0){t.next();return}const e=[];let i=t.next();for(let s=0;s<h;s++){let r=0;const n={x:0,y:0},a={x:0,y:0};let o=-1;const l=[];for(;!t.isEOF()&&i.code!==0;){let c=!1;switch(i.code){case 53:r=i.value;break;case 43:n.x=i.value;break;case 44:n.y=i.value;break;case 45:a.x=i.value;break;case 46:a.y=i.value;break;case 79:o=i.value;break;case 49:l.push(i.value);break;default:c=!0}if(i=t.next(),c||l.length===o)break}o>=0&&e.push({angle:r,origin:n,delta:a,dashPattern:l})}return e}function pl(h,t){const e=[];let i=t.next();for(;e.length<h&&!t.isEOF()&&i.code!==void 0&&i.code!==0;)switch(i.code){case 63:i=t.next();break;case 421:e.push(i.value),i=t.next();break;default:i=t.next();break}return e}class ml{constructor(){p(this,"ForEntityName","HATCH")}parseEntity(t,e){const i={type:e.value,boundaryPaths:[]};for(e=t.next();!t.isEOF()&&e.code!==0;)switch(e.code){case 2:i.patternName=e.value,e=t.next();break;case 10:i.elevationX=e.value,e=t.next();break;case 20:i.elevationY=e.value,e=t.next();break;case 30:i.elevationZ=e.value,e=t.next();break;case 41:i.patternScale=e.value,e=t.next();break;case 47:i.pixelSize=e.value,e=t.next();break;case 52:i.patternAngle=e.value,e=t.next();break;case 63:i.patternFillColor=e.value,e=t.next();break;case 70:i.solidFill=(e.value&1)!==0,e=t.next();break;case 71:i.associativity=(e.value&1)!==0,e=t.next();break;case 73:i.annotatedBoundary=(e.value&1)!==0,e=t.next();break;case 75:i.style=e.value,e=t.next();break;case 76:i.patternType=e.value,e=t.next();break;case 78:i.patternLines=fl(e.value,t),e=t.lastReadGroup;break;case 91:i.boundaryPathsCount=e.value,i.boundaryPaths=ul(i.boundaryPathsCount,t),e=t.lastReadGroup;break;case 98:i.seedPointsCount=e.value,e=t.next();break;case 210:i.extrusionDirectionX=e.value,e=t.next();break;case 220:i.extrusionDirectionY=e.value,e=t.next();break;case 230:i.extrusionDirectionZ=e.value,e=t.next();break;case 450:i.isGradientColor=e.value===1,e=t.next();break;case 451:e=t.next();break;case 452:e=t.next();break;case 453:i.gradientColorCount=e.value,i.gradientColors=pl(i.gradientColorCount,t),e=t.next();break;case 460:e=t.next();break;case 461:e=t.next();break;case 462:e=t.next();break;case 463:e=t.next();break;case 470:e=t.next();break;case 101:for(;e.code!=0;)e=t.next();break;default:Q(i,e),e=t.next();break}return i}}var Gi=(h=>(h[h.ShowImage=1]="ShowImage",h[h.ShowImageWhenNotAlignedWithScreen=2]="ShowImageWhenNotAlignedWithScreen",h[h.UseClippingBoundary=4]="UseClippingBoundary",h[h.TransparencyIsOn=8]="TransparencyIsOn",h))(Gi||{});let gl=class{constructor(){p(this,"ForEntityName","IMAGE")}parseEntity(t,e){const i={type:e.value,clippingBoundaryPath:[]};for(e=t.next();!t.isEOF()&&e.code!==0;)switch(e.code){case 10:i.position=Kt(t),e=t.lastReadGroup;break;case 11:i.uPixel=Kt(t),e=t.lastReadGroup;break;case 12:i.vPixel=Kt(t),e=t.lastReadGroup;break;case 13:i.imageSize=Kt(t),e=t.lastReadGroup;break;case 340:i.imageDefHandle=e.value,e=t.next();break;case 70:i.flags=e.value,e=t.next();break;case 280:i.clipping=e.value,e=t.next();break;case 281:i.brightness=e.value,e=t.next();break;case 282:i.contrast=e.value,e=t.next();break;case 283:i.fade=e.value,e=t.next();break;case 360:i.imageDefReactorHandle=e.value,e=t.next();break;case 71:i.clippingBoundaryType=e.value,e=t.next();break;case 91:i.countBoundaryPoints=e.value,e=t.next();break;case 14:i.clippingBoundaryPath.push(Kt(t)),e=t.lastReadGroup;break;case 290:i.clipMode=e.value,e=t.next();break;default:Q(i,e),e=t.next();break}return i}};function Kt(h){const t={};let e=h.lastReadGroup||h.next();for(;!h.isEOF();){switch(e.code){case 10:case 11:case 12:case 13:case 14:t.x=e.value;break;case 20:case 21:case 22:case 23:case 24:t.y=e.value;break;case 30:case 31:case 32:case 33:case 34:t.z=e.value;break;case 42:t.bulge=e.value;break;default:return t}e=h.next()}return t}class yl{constructor(){p(this,"ForEntityName","INSERT")}parseEntity(t,e){const i={type:e.value};for(e=t.next();!t.isEOF()&&e.code!==0;)switch(e.code){case 2:i.block=e.value,e=t.next();break;case 66:i.attributesFollow=e.value!=0,e=t.next();break;case 41:i.xScale=e.value,e=t.next();break;case 42:i.yScale=e.value,e=t.next();break;case 43:i.zScale=e.value,e=t.next();break;case 10:i.position=pr(t),e=t.lastReadGroup;break;case 50:i.rotation=e.value,e=t.next();break;case 70:i.columnCount=e.value,e=t.next();break;case 71:i.rowCount=e.value,e=t.next();break;case 44:i.columnSpacing=e.value,e=t.next();break;case 45:i.rowSpacing=e.value,e=t.next();break;case 210:i.extrusionDirection=pr(t),e=t.lastReadGroup;break;case 101:for(;e.code!=0;)e=t.next();break;case 1e3:i.zdysx?i.zdysx+=e.value:i.zdysx=e.value,e=t.next();break;default:Q(i,e),e=t.next();break}return i}}function pr(h){const t={};let e=h.lastReadGroup||h.next();const i=e.code;for(;!h.isEOF();){if(e.code===i)t.x=e.value;else if(e.code===i+10)t.y=e.value;else if(e.code===i+20)t.z=e.value;else if(e.code===42)t.bulge=e.value;else return t;e=h.next()}return t}function xl(h){switch(h){case 40:return"DIMSCALE";case 41:return"DIMASZ";case 42:return"DIMEXO";case 44:return"DIMEXE";case 75:return"DIMSE1";case 76:return"DIMSE2";case 77:return"DIMTAD";case 140:return"DIMTXT";case 144:return"DIMLFAC";case 147:return"DIMGAP";case 176:return"DIMCLRD";case 178:return"DIMCLRT";case 271:return"DIMDEC";case 341:return"DIMLDRBLK";default:return null}}class bl{constructor(){p(this,"ForEntityName","LEADER")}parseEntity(t,e){const i={type:e.value,arrowFlag:1,vertices:[]};e=t.next();let s=!1;for(;!t.isEOF()&&e.code!==0;)switch(e.code){case 10:i.vertices.push(vl(t)),e=t.lastReadGroup;break;case 3:i.dimensionStyle=e.value,e=t.next();break;case 40:i.textHeight=e.value,e=t.next();break;case 41:i.textWidth=e.value,e=t.next();break;case 71:i.arrowFlag=e.value,e=t.next();break;case 72:i.pathType=e.value,e=t.next();break;case 73:i.creationFlag=e.value,e=t.next();break;case 74:i.direction=e.value,e=t.next();break;case 75:i.hasHookline=e.value===1,e=t.next();break;case 1001:s=e.value==="ACAD",e=t.next();break;case 1070:if(s){const r=xl(e.value);r&&(e=t.next(),(e.code==1005||e.code==1040||e.code==1070)&&(r==="DIMLDRBLK"?i.arrowHeadBlockHandle=e.value:r==="DIMASZ"?i.arrowHeight=e.value:r==="DIMSCALE"?i.arrowHeadScale=e.value:r==="DIMCLRD"&&e.value>0&&(i.colorIndex=e.value,i.color=Nt(Math.abs(e.value)))))}e=t.next();break;default:Q(i,e),e=t.next();break}return i}}function vl(h){const t={};let e=h.lastReadGroup||h.next();const i=e.code;for(;!h.isEOF();){if(e.code===i)t.x=e.value;else if(e.code===i+10)t.y=e.value;else if(e.code===i+20)t.z=e.value;else if(e.code===42)t.bulge=e.value;else return t;e=h.next()}return t}class wl{constructor(){p(this,"ForEntityName","LINE")}parseEntity(t,e){const i={type:e.value,vertices:[]};for(e=t.next();!t.isEOF()&&e.code!==0;)switch(e.code){case 10:i.vertices.unshift(cs(t)),e=t.lastReadGroup;break;case 11:i.vertices.push(cs(t)),e=t.lastReadGroup;break;case 210:i.extrusionDirection=cs(t),e=t.lastReadGroup;break;case 100:e=t.next();break;case 101:for(;e.code!=0;)e=t.next();break;default:Q(i,e),e=t.next();break}return i}}function cs(h){const t={};let e=h.lastReadGroup||h.next();const i=e.code;for(;!h.isEOF();){if(e.code===i)t.x=e.value;else if(e.code===i+10)t.y=e.value;else if(e.code===i+20)t.z=e.value;else if(e.code===42)t.bulge=e.value;else return t;e=h.next()}return t}function Ml(h,t){if(!h||h<=0)throw Error("n must be greater than 0 verticies");const e=[];let i=!1,s=!1,r=t.lastReadGroup;const n={};for(;!t.isEOF()&&!(r.code===0||s);)switch(r.code){case 10:if(i){s=!0;continue}n.x=r.value,i=!0,r=t.next();break;case 20:n.y=r.value,r=t.next();break;case 30:n.z=r.value,r=t.next();break;case 40:n.startWidth=r.value,r=t.next();break;case 41:n.endWidth=r.value,r=t.next();break;case 42:r.value!=0&&(n.bulge=r.value),r=t.next();break;default:return i&&e.push(n),e}return e.push(n),i=!1,s=!1,e}class Tl{constructor(){p(this,"ForEntityName","LWPOLYLINE")}parseEntity(t,e){const i={type:e.value,vertices:[]};let s=0;for(e=t.next();!t.isEOF()&&e.code!==0;)switch(e.code){case 38:i.elevation=e.value,e=t.next();break;case 39:i.thickness=e.value,e=t.next();break;case 70:i.shape=(e.value&1)===1,i.hasContinuousLinetypePattern=(e.value&128)===128,e=t.next();break;case 90:s=e.value,e=t.next();break;case 10:i.vertices.push(...Ml(s,t)),e=t.lastReadGroup;break;case 43:e.value!==0&&(i.constantWidth=e.value),e=t.next();break;case 210:i.extrusionDirectionX=e.value,e=t.next();break;case 220:i.extrusionDirectionY=e.value,e=t.next();break;case 230:i.extrusionDirectionZ=e.value,e=t.next();break;case 101:for(;e.code!=0;)e=t.next();break;default:Q(i,e),e=t.next();break}return i}}class Cl{constructor(){p(this,"ForEntityName","MTEXT")}parseEntity(t,e){const i={type:e.value};for(e=t.next();!t.isEOF()&&e.code!==0;)switch(e.code){case 3:const s=e.value;i.text?i.text+=s:i.text=s,e=t.next();break;case 1:const r=e.value;i.text?i.text+=r:i.text=r,e=t.next();break;case 10:i.position=mr(t),e=t.lastReadGroup;break;case 7:i.textStyle=e.value,e=t.next();break;case 44:i.lineSpaceFactor=e.value,e=t.next();break;case 11:i.directionVector=mr(t),i.rotation=void 0,e=t.lastReadGroup;break;case 40:i.height=e.value,e=t.next();break;case 41:const n=e.value;Math.abs(n)<1e-6?i.width=void 0:i.width=n,e=t.next();break;case 50:i.rotation=e.value,i.directionVector=void 0,e=t.next();break;case 71:i.attachmentPoint=e.value,e=t.next();break;case 72:i.drawingDirection=e.value,e=t.next();break;case 101:for(;e.code!=0;)e=t.next();break;default:Q(i,e),e=t.next();break}return i}}function mr(h){const t={};let e=h.lastReadGroup||h.next();const i=e.code;for(;!h.isEOF();){if(e.code===i)t.x=e.value;else if(e.code===i+10)t.y=e.value;else if(e.code===i+20)t.z=e.value;else if(e.code===42)t.bulge=e.value;else return t;e=h.next()}return t}class Sl{constructor(){p(this,"ForEntityName","OLE2FRAME")}parseEntity(t,e){const i={type:e.value,binaryData:""};for(e=t.next();e.value!=="OLE"&&e.code!==0;)switch(e.code){case 3:i.documentType=e.value,e=t.next();break;case 70:i.version=e.value,e=t.next();break;case 10:i.leftUpX=e.value,e=t.next();break;case 20:i.leftUpY=e.value,e=t.next();break;case 30:i.leftUpZ=e.value,e=t.next();break;case 11:i.rightDownX=e.value,e=t.next();break;case 21:i.rightDownY=e.value,e=t.next();break;case 31:i.rightDownZ=e.value,e=t.next();break;case 90:i.lengthOfBinaryData=e.value,e=t.next();break;case 310:i.binaryData+=e.value,e=t.next();break;case 101:for(;e.code!=0;)e=t.next();break;default:Q(i,e),e=t.next();break}return i}}class Ol{constructor(){p(this,"ForEntityName","POINT")}parseEntity(t,e){const i={type:e.value};for(e=t.next();!t.isEOF()&&e.code!==0;)switch(e.code){case 10:i.position=gr(t),e=t.lastReadGroup;break;case 39:i.thickness=e.value,e=t.next();break;case 210:i.extrusionDirection=gr(t),e=t.lastReadGroup;break;case 100:e=t.next();break;case 101:for(;e.code!=0;)e=t.next();break;default:Q(i,e),e=t.next();break}return i}}function gr(h){const t={};let e=h.lastReadGroup||h.next();const i=e.code;for(;!h.isEOF();){if(e.code===i)t.x=e.value;else if(e.code===i+10)t.y=e.value;else if(e.code===i+20)t.z=e.value;else if(e.code===42)t.bulge=e.value;else return t;e=h.next()}return t}class El{constructor(){p(this,"ForEntityName","VERTEX")}parseEntity(t,e){const i={type:e.value};for(e=t.next();!t.isEOF()&&e.code!==0;)switch(e.code){case 10:i.x=e.value,e=t.next();break;case 20:i.y=e.value,e=t.next();break;case 30:i.z=e.value,e=t.next();break;case 40:e=t.next();break;case 41:e=t.next();break;case 42:e.value!=0&&(i.bulge=e.value),e=t.next();break;case 70:i.curveFittingVertex=(e.value&1)!==0,i.curveFitTangent=(e.value&2)!==0,i.splineVertex=(e.value&8)!==0,i.splineControlPoint=(e.value&16)!==0,i.threeDPolylineVertex=(e.value&32)!==0,i.threeDPolylineMesh=(e.value&64)!==0,i.polyfaceMeshVertex=(e.value&128)!==0,e=t.next();break;case 50:e=t.next();break;case 71:i.faceA=e.value,e=t.next();break;case 72:i.faceB=e.value,e=t.next();break;case 73:i.faceC=e.value,e=t.next();break;case 74:i.faceD=e.value,e=t.next();break;case 101:for(;e.code!=0;)e=t.next();break;default:Q(i,e),e=t.next();break}return i}}function _l(h,t){const e=new El,i=[];for(;!h.isEOF();)if(t.code===0){if(t.value==="VERTEX")i.push(e.parseEntity(h,t)),t=h.lastReadGroup;else if(t.value==="SEQEND"){Pl(h,t);break}}return i}function Pl(h,t){const e={type:t.value};for(t=h.next();!h.isEOF()&&t.code!==0;)if(t.code===101)for(;t.code!=0;)t=h.next();else Q(e,t),t=h.next();return e}class Al{constructor(){p(this,"ForEntityName","POLYLINE")}parseEntity(t,e){const i={type:e.value,vertices:[]};for(e=t.next();!t.isEOF()&&e.code!==0;)switch(e.code){case 10:e=t.next();break;case 20:e=t.next();break;case 30:e=t.next();break;case 39:e=t.next(),i.thickness=e.value;break;case 40:e=t.next();break;case 41:e=t.next();break;case 70:i.shape=(e.value&1)!==0,i.includesCurveFitVertices=(e.value&2)!==0,i.includesSplineFitVertices=(e.value&4)!==0,i.is3dPolyline=(e.value&8)!==0,i.is3dPolygonMesh=(e.value&16)!==0,i.is3dPolygonMeshClosed=(e.value&32)!==0,i.isPolyfaceMesh=(e.value&64)!==0,i.hasContinuousLinetypePattern=(e.value&128)!==0,e=t.next();break;case 71:e=t.next();break;case 72:e=t.next();break;case 73:e=t.next();break;case 74:e=t.next();break;case 75:e=t.next();break;case 210:i.extrusionDirection=Il(t),e=t.lastReadGroup;break;case 101:for(;e.code!=0;)e=t.next();break;default:Q(i,e),e=t.next();break}return i.vertices=_l(t,e),i}}function Il(h){const t={};let e=h.lastReadGroup||h.next();const i=e.code;for(;!h.isEOF();){if(e.code===i)t.x=e.value;else if(e.code===i+10)t.y=e.value;else if(e.code===i+20)t.z=e.value;else if(e.code===42)t.bulge=e.value;else return t;e=h.next()}return t}class kl{constructor(){p(this,"ForEntityName","REGION")}parseEntity(t,e){const i={type:e.value};for(e=t.next();!t.isEOF()&&e.code!==0;)switch(e.code){case 70:i.modelerVersion=e.value,e=t.next();break;case 1:i.proprietaryData=e.value,e=t.next();break;case 3:i.proprietaryData+=e.value,e=t.next();break;case 101:for(;e.code!=0;)e=t.next();break;default:Q(i,e),e=t.next();break}return i}}class Dl{constructor(){p(this,"ForEntityName","RAY")}parseEntity(t,e){const i={type:e.value,vertices:[]};for(e=t.next();!t.isEOF()&&e.code!==0;)switch(e.code){case 10:i.vertices.unshift(yr(t)),e=t.lastReadGroup;break;case 11:i.directionVector=yr(t),e=t.lastReadGroup;break;case 100:e=t.next();break;case 101:for(;e.code!=0;)e=t.next();break;default:Q(i,e),e=t.next();break}return i}}function yr(h){const t={};let e=h.lastReadGroup||h.next();const i=e.code;for(;!h.isEOF();){if(e.code===i)t.x=e.value;else if(e.code===i+10)t.y=e.value;else if(e.code===i+20)t.z=e.value;else if(e.code===42)t.bulge=e.value;else return t;e=h.next()}return t}class Bl{constructor(){p(this,"ForEntityName","SEQEND")}parseEntity(t,e){const i={type:e.value};for(e=t.next();!t.isEOF()&&e.code!==0;)e.code===-2||(Q(i,e),e=t.next());return i}}class Ll{constructor(){p(this,"ForEntityName","SOLID")}parseEntity(t,e){const i={type:e.value,points:[]};for(e=t.next();!t.isEOF()&&e.code!==0;)switch(e.code){case 10:i.points[0]=$t(t),e=t.lastReadGroup;break;case 11:i.points[1]=$t(t),e=t.lastReadGroup;break;case 12:i.points[2]=$t(t),e=t.lastReadGroup;break;case 13:i.points[3]=$t(t),e=t.lastReadGroup;break;case 210:i.extrusionDirection=$t(t),e=t.lastReadGroup;break;case 101:for(;e.code!=0;)e=t.next();break;default:Q(i,e),e=t.next();break}return i}}function $t(h){const t={};let e=h.lastReadGroup||h.next();const i=e.code;for(;!h.isEOF();){if(e.code===i)t.x=e.value;else if(e.code===i+10)t.y=e.value;else if(e.code===i+20)t.z=e.value;else if(e.code===42)t.bulge=e.value;else return t;e=h.next()}return t}class Rl{constructor(){p(this,"ForEntityName","SPLINE")}parseEntity(t,e){const i={type:e.value};for(e=t.next();!t.isEOF()&&e.code!==0;)switch(e.code){case 10:i.controlPoints||(i.controlPoints=[]),i.controlPoints.push(Jt(t)),e=t.lastReadGroup;break;case 11:i.fitPoints||(i.fitPoints=[]),i.fitPoints.push(Jt(t)),e=t.lastReadGroup;break;case 12:i.startTangent=Jt(t),e=t.lastReadGroup;break;case 13:i.endTangent=Jt(t),e=t.lastReadGroup;break;case 40:i.knotValues||(i.knotValues=[]),i.knotValues.push(e.value),e=t.next();break;case 70:(e.value&1)!=0&&(i.closed=!0),(e.value&2)!=0&&(i.periodic=!0),(e.value&4)!=0&&(i.rational=!0),(e.value&8)!=0&&(i.planar=!0),(e.value&16)!=0&&(i.planar=!0,i.linear=!0),e=t.next();break;case 71:i.degreeOfSplineCurve=e.value,e=t.next();break;case 72:i.numberOfKnots=e.value,e=t.next();break;case 73:i.numberOfControlPoints=e.value,e=t.next();break;case 74:i.numberOfFitPoints=e.value,e=t.next();break;case 210:i.normalVector=Jt(t),e=t.lastReadGroup;break;case 101:for(;e.code!=0;)e=t.next();break;default:Q(i,e),e=t.next();break}return i}}function Jt(h){const t={};let e=h.lastReadGroup||h.next();const i=e.code;for(;!h.isEOF();){if(e.code===i)t.x=e.value;else if(e.code===i+10)t.y=e.value;else if(e.code===i+20)t.z=e.value;else if(e.code===42)t.bulge=e.value;else return t;e=h.next()}return t}function Fl(h,t,e){let i=h;for(;i.code!==304;)switch(i.code){case 301:i=e.next();break;case 93:i=e.next();break;case 90:i=e.next();break;case 1:t.text=i.value,i=e.next();break;case 94:i=e.next();break;case 300:t.attrText=i.value,i=e.next();break;case 302:t.text=i.value?i.value:t.text,i=e.next();break;default:console.log("[DXF ACAD_TABLE] ignore code: "+i.code+", value: "+i.value),i=e.next();break}}function xr(h,t){const e={};for(h.code===171&&(e.cellType=h.value);!t.isEOF();){const i=t.next();if(i.code===0||i.code===171){t.lastReadGroup=i;break}if(i.code===301){Fl(i,e,t);continue}switch(i.code){case 172:e.flagValue=i.value;break;case 173:e.mergedValue=i.value;break;case 174:e.autoFit=i.value;break;case 175:e.borderWidth=i.value;break;case 176:e.borderHeight=i.value;break;case 177:e.overrideFlag=i.value;break;case 178:e.virtualEdgeFlag=i.value;break;case 145:e.rotation=i.value;break;case 140:e.textHeight=i.value;break;case 170:e.attachmentPoint=i.value;break;case 91:e.extendedCellFlags=i.value;break;case 7:e.textStyle=i.value;break;case 340:e.blockTableRecordId=i.value;break;case 345:e.fieldObjetId=i.value;break;case 146:e.blockScale=i.value;break;case 179:e.blockAttrNum=i.value;break;case 1:e.text=i.value;break;case 302:e.attrText=i.value;break}}return e}class zl{constructor(){p(this,"ForEntityName","ACAD_TABLE")}parseEntity(t,e){const i={type:e.value};for(e=t.next();!t.isEOF()&&e.code!==0;)switch(e.code){case 10:i.startPoint=br(t),e=t.lastReadGroup;break;case 11:i.directionVector=br(t),e=t.lastReadGroup;break;case 90:i.tableValue=e.value,e=t.next();break;case 91:i.rowCount=e.value,e=t.next();break;case 92:i.columnCount=e.value,e=t.next();break;case 93:i.overrideFlag=e.value,e=t.next();break;case 94:i.borderColorOverrideFlag=e.value,e=t.next();break;case 95:i.borderLineWeightOverrideFlag=e.value,e=t.next();break;case 96:i.borderVisibilityOverrideFlag=e.value,e=t.next();break;case 141:i.rowHeightArr?i.rowHeightArr.push(e.value):i.rowHeightArr=[e.value],e=t.next();break;case 142:i.columnWidthArr?i.columnWidthArr.push(e.value):i.columnWidthArr=[e.value],e=t.next();break;case 280:i.version=e.value,e=t.next();break;case 342:i.tableStyleId=e.value,e=t.next();break;case 343:i.blockRecordHandle=e.value,e=t.next();break;case 171:i.cells?i.cells.push(xr(e,t)):i.cells=[xr(e,t)],e=t.lastReadGroup;break;default:Q(i,e),e=t.next();break}return i}}function br(h){const t={};let e=h.lastReadGroup||h.next();const i=e.code;for(;!h.isEOF();){if(e.code===i)t.x=e.value;else if(e.code===i+10)t.y=e.value;else if(e.code===i+20)t.z=e.value;else if(e.code===42)t.bulge=e.value;else return t;e=h.next()}return t}class jl{constructor(){p(this,"ForEntityName","TEXT")}parseEntity(t,e){const i={type:e.value};for(e=t.next();!t.isEOF()&&e.code!==0;)switch(e.code){case 10:i.startPoint=vr(t),e=t.lastReadGroup;break;case 11:i.endPoint=vr(t),e=t.lastReadGroup;break;case 40:i.textHeight=e.value,e=t.next();break;case 41:i.xScale=e.value,e=t.next();break;case 50:i.rotation=e.value,e=t.next();break;case 1:i.text=e.value,e=t.next();break;case 72:i.halign=e.value,e=t.next();break;case 73:i.valign=e.value,e=t.next();break;case 7:i.textStyle=e.value,e=t.next();break;case 71:i.mirrored=e.value,e=t.next();break;case 101:for(;e.code!=0;)e=t.next();break;default:Q(i,e),e=t.next();break}return i}}function vr(h){const t={};let e=h.lastReadGroup||h.next();const i=e.code;for(;!h.isEOF();){if(e.code===i)t.x=e.value;else if(e.code===i+10)t.y=e.value;else if(e.code===i+20)t.z=e.value;else if(e.code===42)t.bulge=e.value;else return t;e=h.next()}return t}class Vl{constructor(){p(this,"ForEntityName","VIEWPORT")}parseEntity(t,e){const i={type:e.value};for(e=t.next();!t.isEOF()&&e.code!==0;)switch(e.code){case 68:i.viewportStatus=e.value,e=t.next();break;case 40:i.width_paperSpace=e.value,e=t.next();break;case 41:i.height_paperSpace=e.value,e=t.next();break;case 69:i.viewportId=e.value,e=t.next();break;case 10:i.centerPoint=qe(t),e=t.lastReadGroup;break;case 12:i.centerPoint_dcs=qe(t),e=t.lastReadGroup;break;case 13:i.snapBasePoint_dcs=qe(t),e=t.lastReadGroup;break;case 14:i.snapSpacing_dcs=qe(t),e=t.lastReadGroup;break;case 15:i.gridSpacing_dcs=qe(t),e=t.lastReadGroup;break;case 16:i.viewDirection=qe(t),e=t.lastReadGroup;break;case 17:i.viewTarget=qe(t),e=t.lastReadGroup;break;case 42:i.perspectiveLens=e.value,e=t.next();break;case 43:i.frontClippingPlaneZ=e.value,e=t.next();break;case 44:i.backClippingPlaneZ=e.value,e=t.next();break;case 45:i.viewHeight=e.value,e=t.next();break;case 50:i.snapAngle=e.value,e=t.next();break;case 51:i.viewTwistAngle=e.value,e=t.next();break;case 72:i.circleZoomPercent=e.value,e=t.next();break;case 331:i.frozenLayerHandles=i.frozenLayerHandles||[],i.frozenLayerHandles.push(e.value),e=t.next();break;case 90:i.viewportStatusFlags=e.value,e=t.next();break;case 340:i.viewportClippingBoundaryhandleId=e.value,e=t.next();break;case 1:i.plotStyleSheetName=e.value,e=t.next();break;case 281:i.renderMode=e.value,e=t.next();break;case 71:i.viewportFlag_ucs=e.value,e=t.next();break;case 74:i.ucsIcon=e.value,e=t.next();break;case 110:i.ucsOrigin=qe(t),e=t.lastReadGroup;break;case 111:i.ucsXAxis=qe(t),e=t.lastReadGroup;break;case 112:i.ucsYAxis=qe(t),e=t.lastReadGroup;break;case 345:i.ucsTableRecordHandle=e.value,e=t.next();break;case 346:i.baseUcsTableRecordHandle=e.value,e=t.next();break;case 79:i.orthographicType=e.value,e=t.next();break;case 146:i.elevation=e.value,e=t.next();break;case 170:i.shadePlotMode=e.value,e=t.next();break;case 61:i.frequency=e.value,e=t.next();break;case 292:i.lightingFlag=e.value,e=t.next();break;case 282:i.lightingType=e.value,e=t.next();break;case 141:i.viewBrightness=e.value,e=t.next();break;case 142:i.viewContrast=e.value,e=t.next();break;case 101:for(;e.code!=0;)e=t.next();break;default:Q(i,e),e=t.next();break}return i}}function qe(h){const t={};let e=h.lastReadGroup||h.next();for(;!h.isEOF();){switch(e.code){case 10:case 12:case 13:case 14:case 15:case 16:case 17:case 110:case 111:case 112:t.x=e.value;break;case 20:case 22:case 23:case 24:case 25:case 26:case 27:case 120:case 121:case 122:t.y=e.value;break;case 30:case 32:case 33:case 34:case 35:case 36:case 37:case 130:case 131:case 132:t.z=e.value;break;case 42:t.bulge=e.value;break;default:return t}e=h.next()}return t}class Ul{constructor(){p(this,"ForEntityName","XLINE")}parseEntity(t,e){const i={type:e.value,vertices:[]};for(e=t.next();!t.isEOF()&&e.code!==0;)switch(e.code){case 10:i.vertices.unshift(wr(t)),e=t.lastReadGroup;break;case 11:i.directionVector=wr(t),e=t.lastReadGroup;break;case 100:e=t.next();break;case 101:for(;e.code!=0;)e=t.next();break;default:Q(i,e),e=t.next();break}return i}}function wr(h){const t={};let e=h.lastReadGroup||h.next();const i=e.code;for(;!h.isEOF();){if(e.code===i)t.x=e.value;else if(e.code===i+10)t.y=e.value;else if(e.code===i+20)t.z=e.value;else if(e.code===42)t.bulge=e.value;else return t;e=h.next()}return t}class Hl{constructor(){p(this,"ForObjectName","DICTIONARY")}parseObject(t,e){const s={type:e.value},r=[],n=[];for(e=t.next();!t.isEOF()&&e.code!==0;)switch(e.code){case 280:s.isHardOwner=e.value===1,e=t.next();break;case 281:s.cloningFlag=e.value,e=t.next();break;case 3:r.push(e.value),e=t.next();break;case 350:n.push(e.value),e=t.next();break;case 360:n.push(e.value),e=t.next();break;case 100:e=t.next();break;case 102:e=t.next();break;default:Xt(s,e),e=t.next();break}if(r.length!==n.length)throw new Error("The number of Dictionary entries does not match !");return s.entries={},r.forEach((a,o)=>{s.entries[n[o]]=a}),s}}class Nl{constructor(){p(this,"ForObjectName","IMAGEDEF")}parseObject(t,e){const s={type:e.value};for(e=t.next();!t.isEOF()&&e.code!==0;)switch(e.code){case 90:s.classVersion=e.value,e=t.next();break;case 1:s.filename=e.value,e=t.next();break;case 10:s.imageSize=Mr(t),e=t.next();break;case 11:s.pixelSize=Mr(t),e=t.next();break;case 280:s.loaded=e.value,e=t.next();break;case 281:s.resolutionUnits=e.value,e=t.next();break;default:Xt(s,e),e=t.next();break}return s}}function Mr(h){const t={};let e=h.lastReadGroup||h.next();const i=e.code;for(;!h.isEOF();){if(e.code===i)t.x=e.value;else if(e.code===i+10)t.y=e.value;else if(e.code===i+20)t.z=e.value;else if(e.code===42)t.bulge=e.value;else return t;e=h.next()}return t}class Gl{constructor(){p(this,"ForObjectName","LAYOUT")}parseObject(t,e){const s={type:e.value};for(e=t.next();!t.isEOF()&&e.code!==0;)switch(e.code){case 100:e=t.next();break;case 1:s.layoutName=e.value,e=t.next();break;case 70:s.flag=e.value,e=t.next();break;case 71:s.tabOrder=e.value,e=t.next();break;case 76:s.orthographicType=e.value,e=t.next();break;case 10:s.minLimit=ot(t),e=t.lastReadGroup;break;case 11:s.maxLimit=ot(t),e=t.lastReadGroup;break;case 12:s.basePoint=ot(t),e=t.lastReadGroup;break;case 13:s.origin=ot(t),e=t.lastReadGroup;break;case 14:s.minExtent=ot(t),e=t.lastReadGroup;break;case 15:s.maxExtent=ot(t),e=t.lastReadGroup;break;case 16:s.XAxis=ot(t),e=t.lastReadGroup;break;case 17:s.YAxis=ot(t),e=t.lastReadGroup;break;case 146:s.elevation=e.value,e=t.next();break;case 330:s.viewportHandle=e.value,e=t.next();break;default:Xt(s,e),e=t.next();break}return s.blockTableHandle=s.ownerHandle,s}}function ot(h){const t={};let e=h.lastReadGroup||h.next();const i=e.code;for(;!h.isEOF();){if(e.code===i)t.x=e.value;else if(e.code===i+10)t.y=e.value;else if(e.code===i+20)t.z=e.value;else if(e.code===42)t.bulge=e.value;else return t;e=h.next()}return t}class ql{constructor(){p(this,"ForObjectName","SORTENTSTABLE")}parseObject(t,e){const s={type:e.value};let r=!1;s.sortEntsObject={},s.sortEntsObject.entityHandles=[];let n=[];for(e=t.next();!t.isEOF()&&e.code!==0;)switch(e.code){case 5:r?(n.push(e.value),s.sortEntsObject.entityHandles.push(n),n=[]):s.handle=e.value,e=t.next();break;case 100:e=t.next(),r=!0;break;case 102:e=t.next();break;case 330:r?s.sortEntsObject.ownerHandle=e.value:s.ownerHandle=e.value,e=t.next();break;case 331:n.push(e.value),e=t.next();break;default:Xt(s,e),e=t.next();break}return s}}class Wl{constructor(){p(this,"ForObjectName","SPATIAL_FILTER")}parseObject(t,e){const s={type:e.value};s.vertices=[];let r,n;for(e=t.next();!t.isEOF()&&e.code!==0;)switch(e.code){case 11:s.origin=qi(t),e=t.lastReadGroup;break;case 70:s.numberOfPointsOnClipBoundary=e.value,s.numberOfPointsOnClipBoundary===2?(e=t.next(),r=qi(t),e=t.lastReadGroup,n=qi(t),e=t.lastReadGroup,s.vertices.push(r,{x:n.x,y:r.y},n,{x:r.x,y:n.y},r)):s.numberOfPointsOnClipBoundary>2?(s.vertices=Yl(s.numberOfPointsOnClipBoundary,t),e=t.lastReadGroup):e=t.next();break;case 71:s.clipBoundaryVisible=e.value===1,e=t.next();break;case 72:s.frontClippingPlaneFlag=e.value===1,e=t.next(),s.frontClippingPlaneFlag&&e.code===40&&(s.frontClippingPlaneDistance=e.value,e=t.next());break;case 73:s.backClippingPlaneFlag=e.value===1,e=t.next(),s.backClippingPlaneFlag&&e.code===41&&(s.backClippingPlaneDistance=e.value,e=t.next());break;case 100:e=t.next();break;case 102:e=t.next();break;case 210:s.extrusionDirectionX=e.value,e=t.next();break;case 220:s.extrusionDirectionY=e.value,e=t.next();break;case 230:s.extrusionDirectionZ=e.value,e=t.next();break;case 40:s.invertBlockMatrix=Tr(t,40),s.matrix=Tr(t,40),e=t.lastReadGroup;break;default:Xt(s,e),e=t.next();break}return s}}function Yl(h,t){t.next();const e=[];for(;e.length<h;)e.push(qi(t));return e}function Tr(h,t){let e=h.lastReadGroup;const i=[];for(let s=0;s<12;s++){if(e.code!==t)throw new Error("Expected code for matrix value to be "+t+" but got "+e.code);i.push(e.value),e=h.next()}return i}function qi(h){const t={};let e=h.lastReadGroup||h.next();const i=e.code;for(;!h.isEOF();){if(e.code===i)t.x=e.value;else if(e.code===i+10)t.y=e.value;else if(e.code===i+20)t.z=e.value;else if(e.code===42)t.bulge=e.value;else return t;e=h.next()}return t}class Xl{constructor(){p(this,"ForObjectName","XRECORD")}parseObject(t,e){const s={type:e.value,binaryData:""};for(e=t.next();!t.isEOF()&&e.code!==0;)switch(e.code){case 100:e=t.next();break;case 280:s.cloningFlag=e.value,e=t.next();break;case 310:s.binaryData+=e.value,e=t.next();break;case 311:e=t.next();break;default:Xt(s,e),e=t.next();break}return s}}function Zl(h){h.registerEntityHandler(Qo),h.registerEntityHandler(el),h.registerEntityHandler(il),h.registerEntityHandler(sl),h.registerEntityHandler(rl),h.registerEntityHandler(al),h.registerEntityHandler(ol),h.registerEntityHandler(hl),h.registerEntityHandler(ml),h.registerEntityHandler(gl),h.registerEntityHandler(yl),h.registerEntityHandler(bl),h.registerEntityHandler(wl),h.registerEntityHandler(Tl),h.registerEntityHandler(Cl),h.registerEntityHandler(Sl),h.registerEntityHandler(Ol),h.registerEntityHandler(Al),h.registerEntityHandler(kl),h.registerEntityHandler(Dl),h.registerEntityHandler(Bl),h.registerEntityHandler(Ll),h.registerEntityHandler(Rl),h.registerEntityHandler(zl),h.registerEntityHandler(jl),h.registerEntityHandler(Vl),h.registerEntityHandler(Ul)}function Kl(h){h.registerObjectHandler(Hl),h.registerObjectHandler(Nl),h.registerObjectHandler(Gl),h.registerObjectHandler(ql),h.registerObjectHandler(Wl),h.registerObjectHandler(Xl)}function $l(h){const t=new Uint8Array(h,0,18);let e="";for(let i=0;i<18;i++)e+=String.fromCharCode(t[i]);return e==="AutoCAD Binary DXF"}class Tn{constructor(t){p(this,"_entityHandlers",{});p(this,"_objectHandlers",{});p(this,"_layoutBlocks",{});p(this,"unhandledSections",{});p(this,"unhandledObjects",{});p(this,"unhandledEntities",{});p(this,"unsupportedLineTypes",{});p(this,"encoding");this.encoding=t,Zl(this),Kl(this)}parse(t){if(typeof t=="string"){const e=this.splitByLineSeparator(t),i=new dr(e);return this._parse(i)}else{let e;if($l(t))e=new Xo(t);else{const i=new TextDecoder(this.encoding).decode(t),s=Date.now(),r=this.splitByLineSeparator(i);console.info("[DxfParser] string.split took "+(Date.now()-s)/1e3+"s, it is avoidable by using dxf in binary."),e=new dr(r)}return this._parse(e)}}registerEntityHandler(t){const e=new t;this._entityHandlers[e.ForEntityName]=e}registerObjectHandler(t){const e=new t;this._objectHandlers[e.ForObjectName]=e}parseSync(t){return this.parse(t)}parseStream(t){let e="";const i=this;return new Promise((s,r)=>{t.on("data",n=>{e+=n}),t.on("end",()=>{try{s(i.parse(e))}catch(n){r(n)}}),t.on("error",n=>{r(n)})})}_parse(t){const e={};let i=0;if(!t.hasNext())throw Error("Empty file");const s=this;let r;function n(){for(r=t.next();r.code===999;)r=t.next();for(;!t.isEOF();)if(r.code===0&&r.value==="SECTION"){if(r=t.next(),r.code!==2){console.error("Unexpected code %s after 0:SECTION",Cn(r)),r=t.next();continue}if(r.value==="HEADER")S.trace("> HEADER"),e.header=a(),S.trace("<");else if(r.value==="TABLES")S.trace("> TABLES"),e.tables=c(),S.trace("<");else if(r.value==="BLOCKS")S.trace("> BLOCKS"),e.blocks=o(),S.trace("<");else if(r.value==="ENTITIES")S.trace("> ENTITIES"),e.entities=E(!1),S.trace("<");else if(r.value==="OBJECTS")S.trace("> OBJECTS"),e.objects=O(),S.trace("<");else if(r.value==="EOF")S.trace("EOF");else{const C=r.value;s.unhandledSections[C]?s.unhandledSections[C]++:s.unhandledSections[C]=1}}else r=t.next();s.unhandledSections={},s.unhandledEntities={},s.unhandledObjects={},s.unsupportedLineTypes={}}function a(){let C=null,w=null;const M={};for(r=t.next();;){if(Pe(r,0,"ENDSEC")){C&&(M[C]=w);break}else r.code===9?(C&&(M[C]=w),C=r.value):r.code===10?w={x:r.value}:r.code===20?w.y=r.value:r.code===30?w.z=r.value:w=r.value;r=t.next()}return r=t.next(),M}function o(){const C={};for(r=t.next();r.value!=="EOF"&&!Pe(r,0,"ENDSEC");)if(Pe(r,0,"BLOCK")){S.trace("block {");const w=l();S.trace("}"),_(w),w.name?C[w.name]=w:console.error("[DxfParser] Block with handle '"+w.handle+"' is missing a name, ignored!")}else Qe(r),r=t.next();return C}function l(){const C={};for(r=t.next();r.value!=="EOF";){switch(r.code){case 1:C.xrefPath=r.value,r=t.next();break;case 2:C.name=r.value,r=t.next();break;case 3:C.name2=r.value,r=t.next();break;case 4:C.description=r.value,r=t.next();break;case 5:C.handle=r.value,r=t.next();break;case 8:C.layer=r.value,r=t.next();break;case 10:C.position=Ie(t),r=t.lastReadGroup;break;case 67:C.paperSpace=!!(r.value&&r.value===1),r=t.next();break;case 70:C.blockType=r.value,r=t.next();break;case 100:r=t.next();break;case 330:C.ownerHandle=r.value,r=t.next();break;case 0:if(r.value==="ENDBLK")break;C.entities=E(!0);break;default:Qe(r),r=t.next();break}if(Pe(r,0,"ENDBLK")){r=t.next();break}}return C}function c(){const C={};for(r=t.next();r.value!=="EOF"&&!Pe(r,0,"ENDSEC");)Pe(r,0,"TABLE")?(r=t.next(),b[r.value]?(S.trace(r.value+" Table {"),C[b[r.value].tableName]=f(r),S.trace("}")):S.trace("Unhandled Table "+r.value)):r=t.next();return r=t.next(),C}const u="ENDTAB";function f(C){const w=b[C.value],M={};let P=0;for(r=t.next();!Pe(r,0,u);)switch(r.code){case 5:M.handle=r.value,r=t.next();break;case 330:M.ownerHandle=r.value,r=t.next();break;case 100:r.value==="AcDbSymbolTable"||Qe(r),r=t.next();break;case 70:P=r.value,r=t.next();break;case 0:r.value===w.dxfSymbolName?M[w.tableRecordsProperty]=w.parseTableRecords():(Qe(r),r=t.next());break;default:Qe(r),r=t.next();break}const A=M[w.tableRecordsProperty];if(A){const I=(()=>{if(A.constructor===Array)return A.length;if(typeof A=="object")return Object.keys(A).length})();P!==I&&console.warn("[DxfParser] Parsed "+I+" "+w.dxfSymbolName+"s but expected "+P)}return r=t.next(),M}function m(){const C=[];let w={};for(S.trace("Viewport {"),r=t.next();!Pe(r,0,u);)switch(r.code){case 2:w.name=r.value,r=t.next();break;case 10:w.lowerLeftCorner=Ie(t),r=t.lastReadGroup;break;case 11:w.upperRightCorner=Ie(t),r=t.lastReadGroup;break;case 12:w.center=Ie(t),r=t.lastReadGroup;break;case 13:w.snapBasePoint=Ie(t),r=t.lastReadGroup;break;case 14:w.snapSpacing=Ie(t),r=t.lastReadGroup;break;case 15:w.gridSpacing=Ie(t),r=t.lastReadGroup;break;case 16:w.viewDirectionFromTarget=Ie(t),r=t.lastReadGroup;break;case 17:w.viewTarget=Ie(t),r=t.lastReadGroup;break;case 40:w.viewHeight=r.value,r=t.next();break;case 41:w.aspectRatio=r.value,r=t.next();break;case 42:w.lensLength=r.value,r=t.next();break;case 43:w.frontClippingPlane=r.value,r=t.next();break;case 44:w.backClippingPlane=r.value,r=t.next();break;case 45:w.viewHeight=r.value,r=t.next();break;case 50:w.snapRotationAngle=r.value,r=t.next();break;case 51:w.viewTwistAngle=r.value,r=t.next();break;case 79:w.orthographicType=r.value,r=t.next();break;case 110:w.ucsOrigin=Ie(t),r=t.lastReadGroup;break;case 111:w.ucsXAxis=Ie(t),r=t.lastReadGroup;break;case 112:w.ucsYAxis=Ie(t),r=t.lastReadGroup;break;case 281:w.renderMode=r.value,r=t.next();break;case 282:w.defaultLightingType=r.value,r=t.next();break;case 292:w.defaultLightingOn=r.value,r=t.next();break;case 330:w.ownerHandle=r.value,r=t.next();break;case 63:case 421:case 431:w.ambientColor=r.value,r=t.next();break;case 0:r.value==="VPORT"&&(S.trace("}"),C.push(w),S.trace("Viewport {"),w={},r=t.next());break;default:Qe(r),r=t.next();break}return S.trace("}"),C.push(w),C}function g(){const C={};let w={},M=0,P="",A=!1;for(S.trace("LType {"),r=t.next();!Pe(r,0,"ENDTAB");)switch(r.code){case 2:w.name=r.value.toUpperCase(),P=w.name,r=t.next();break;case 3:w.description=r.value,r=t.next();break;case 9:r=t.next();break;case 40:w.patternLength=r.value,r=t.next();break;case 44:r=t.next();break;case 45:r=t.next();break;case 46:r=t.next();break;case 49:let I=r.value;A&&(I=Math.abs(I),A=!1),w.pattern.push(I),r=t.next();break;case 70:r=t.next();break;case 73:M=r.value,M>0&&(w.pattern=[]),r=t.next();break;case 74:r.value!==0&&(A=!0,s.unsupportedLineTypes[w.name]?s.unsupportedLineTypes[w.name]++:s.unsupportedLineTypes[w.name]=1),r=t.next();break;case 75:r=t.next();break;case 0:S.trace("}"),M>0&&M!==w.pattern.length&&console.warn("[DxfParser] lengths do not match on LTYPE pattern"),C[P]=w,w={},S.trace("LType {"),r=t.next();break;default:r=t.next();break}return S.trace("}"),C[P]=w,C}function x(){const C={};let w={},M;for(S.trace("Layer {"),r=t.next();!Pe(r,0,"ENDTAB");)switch(r.code){case 2:w.name=r.value,M=r.value,r=t.next();break;case 5:w.handle=r.value,r=t.next();break;case 62:w.visible=r.value>=0,w.colorIndex=Math.abs(r.value),w.color=Nt(w.colorIndex),r=t.next();break;case 70:w.flag=r.value,w.frozen=(w.flag&1)>0,r=t.next();break;case 420:w.color=Math.abs(r.value),r=t.next();break;case 6:w.lineType=r.value.toUpperCase(),r=t.next();break;case 370:w.lineweight=r.value,r=t.next();break;case 0:r.value==="LAYER"&&(S.trace("}"),M&&(C[M]=w),S.trace("Layer {"),w={},M=void 0,r=t.next());break;default:Qe(r),r=t.next();break}return S.trace("}"),M&&(C[M]=w),C}function y(){const C={};let w={},M;for(S.trace("Style {"),r=t.next();!Pe(r,0,"ENDTAB");)switch(r.code){case 2:w.styleName=r.value,M=r.value,r=t.next();break;case 3:w.fontFile=r.value,r=t.next();break;case 4:w.bigFontFile=r.value,r=t.next();break;case 5:w.handle=r.value,r=t.next();break;case 40:w.textHeight=r.value,r=t.next();break;case 41:w.xScale=r.value,r=t.next();break;case 42:w.priorTextHeight=r.value,r=t.next();break;case 50:w.rotation=r.value,r=t.next();break;case 70:r=t.next();break;case 71:w.mirrorType=r.value,r=t.next();break;case 330:w.ownerHandle=r.value,r=t.next();break;case 0:r.value==="STYLE"&&(S.trace("}"),M&&(C[M]=w),S.trace("Style {"),w={},M=void 0,r=t.next());break;default:r=t.next();break}return S.trace("}"),M&&(C[M]=w),C}function T(){const C={};let w={},M;for(S.trace("DimStyle {"),r=t.next();!Pe(r,0,"ENDTAB");)switch(r.code){case 2:w.styleName=r.value,M=r.value,r=t.next();break;case 40:w.DIMSCALE=r.value,r=t.next();break;case 41:w.DIMASZ=r.value,r=t.next();break;case 42:w.DIMEXO=r.value,r=t.next();break;case 44:w.DIMEXE=r.value,r=t.next();break;case 75:w.DIMSE1=r.value,r=t.next();break;case 76:w.DIMSE2=r.value,r=t.next();break;case 77:w.DIMTAD=r.value,r=t.next();break;case 140:w.DIMTXT=r.value,r=t.next();break;case 144:w.DIMLFAC=r.value,r=t.next();break;case 147:w.DIMGAP=r.value,r=t.next();break;case 176:w.DIMCLRD=r.value,r=t.next();break;case 178:w.DIMCLRT=r.value,r=t.next();break;case 271:w.DIMDEC=r.value,r=t.next();break;case 341:w.DIMLDRBLK=r.value,r=t.next();break;case 70:r=t.next();break;case 0:r.value==="DIMSTYLE"&&(S.trace("}"),M&&(C[M]=w),S.trace("DimStyle {"),w={},M=void 0,r=t.next());break;default:r=t.next();break}return S.trace("}"),M&&(C[M]=w),C}function v(){const C={};let w={},M;for(S.trace("BlockRecord {"),r=t.next();!Pe(r,0,"ENDTAB");)switch(r.code){case 5:w.handle=r.value,r=t.next();break;case 330:w.ownerHandle=r.value,r=t.next();break;case 2:w.blockName=r.value,M=w.blockName,r=t.next();break;case 340:w.layoutHandle=r.value,r=t.next();break;case 70:w.blockInsertUnits=r.value,r=t.next();break;case 280:w.blockExplodability=r.value,r=t.next();break;case 281:w.blockScalability=r.value,r=t.next();break;case 310:w.bitmap=r.value,r=t.next();break;case 0:if(r.value==="BLOCK_RECORD"){S.trace("}"),M&&(C[M]=w);const A=w.layoutHandle;M&&A&&A.length>0&&A!=="0"&&(s._layoutBlocks[A]=w),S.trace("BlockRecord {"),w={},M=void 0,r=t.next()}else Qe(r),r=t.next();break;default:Qe(r),r=t.next();break}S.trace("}"),M&&(C[M]=w);const P=w.layoutHandle;return M&&P&&P.length>0&&P!=="0"&&(s._layoutBlocks[P]=w),C}const b={VPORT:{tableRecordsProperty:"viewports",tableName:"viewport",dxfSymbolName:"VPORT",parseTableRecords:m},LTYPE:{tableRecordsProperty:"lineTypes",tableName:"lineType",dxfSymbolName:"LTYPE",parseTableRecords:g},LAYER:{tableRecordsProperty:"layers",tableName:"layer",dxfSymbolName:"LAYER",parseTableRecords:x},BLOCK_RECORD:{tableRecordsProperty:"blockRecords",tableName:"blockRecord",dxfSymbolName:"BLOCK_RECORD",parseTableRecords:v},STYLE:{tableRecordsProperty:"styles",tableName:"style",dxfSymbolName:"STYLE",parseTableRecords:y},DIMSTYLE:{tableRecordsProperty:"dimStyles",tableName:"dimStyle",dxfSymbolName:"DIMSTYLE",parseTableRecords:T}};function E(C){const w=[],M=C?"ENDBLK":"ENDSEC";for(C||(r=t.next());;)if(r.code===0){if(r.value===M)break;const P=s._entityHandlers[r.value];if(P!=null){S.trace(r.value+" {");const A=P.parseEntity(t,r);A&&(A.layer||(A.layer="0"),A.colorIndex===void 0&&(A.colorIndex=256),A.lineType||(A.lineType="BYLAYER"),r=t.lastReadGroup,S.trace("}"),_(A),w.push(A))}else{const A=r.value;s.unhandledEntities[A]||(s.unhandledEntities[A]=0),s.unhandledEntities[A]++,r=t.next();continue}}else r=t.next();return M==="ENDSEC"&&(r=t.next()),w}function O(){const C={},w="ENDSEC";for(r=t.next();r.value!=="EOF";)if(r.code===0){if(r.value===w)break;const M=s._objectHandlers[r.value];if(M!=null){S.trace(r.value+" {");const P=M.parseObject(t,r),A=r.value;r=t.lastReadGroup,S.trace("}"),_(P),C[A]||(C[A]=[]),C[A].push(P)}else{const P=r.value;s.unhandledObjects[P]||(s.unhandledObjects[P]=0),s.unhandledObjects[P]++,r=t.next();continue}}else r=t.next();return r=t.next(),C.LAYOUT&&(Object.keys(s._layoutBlocks).length!==C.LAYOUT.length&&console.warn("[DxfParser] The number of layout and block associations does not match!"),C.LAYOUT.forEach(M=>{s._layoutBlocks[M.handle]&&(M.associatedBlockName=s._layoutBlocks[M.handle].blockName)}),C.LAYOUT.sort((M,P)=>M.tabOrder-P.tabOrder)),C}function _(C){if(!C)throw new TypeError("entity cannot be undefined or null");C.handle||(C.handle=(i++).toString())}return n(),e}splitByLineSeparator(t){const e=[];let i=0;for(let s=0,r=t.length;s<r;++s){const n=t[s];if(n==="\r"||n===`
|
|
792
792
|
`){let a=t.substring(i,s);a&&a.indexOf("M+")>-1&&(a=Ho(a)),a&&(a=a),e.push(a),n==="\r"&&t[s+1]===`
|
|
793
793
|
`&&s++,i=s+1}}return e.push(t.substring(i,t.length)),e}}function Pe(h,t,e){return h.code===t&&h.value===e}function Qe(h){S.trace("unhandled group "+Cn(h))}function Cn(h){return h.code+":"+h.value}const Sn="0.4.0",On="VERSION",Jl=()=>window.localStorage.getItem(On),Ql=()=>{window.localStorage.setItem(On,Sn)},eh=()=>Jl()!==Sn?(Ql(),!0):!1,Tt=class Tt{constructor(){p(this,"DATABASE_NAME","x_viewer");p(this,"DEFAULT_TABLES",[{name:"dxf_data",options:{keyPath:"dxfDataId",autoIncrement:!1}},{name:"fonts",options:{keyPath:"fileName",autoIncrement:!0}}]);p(this,"db");p(this,"tables");this.db=void 0,this.tables=this.DEFAULT_TABLES}static instance(){return!Tt._instance&&(Tt._instance=new Tt),Tt._instance}setTables(t){this.tables=t}getTables(){return this.tables}async getDatabase(){let t=await this.getDB(this.DATABASE_NAME);return this.db||(t.close(),eh()&&await this.deleteDataBase(this.DATABASE_NAME),t=await this.getUpgradedDB(t)),t.onclose=()=>{this.db=void 0,S.debug("[DB] Db "+t.name+" is closed.")},t.onerror=e=>{this.db=void 0,S.debug("[DB] Db "+t.name+" encountered error.",e)},t.onabort=e=>{this.db=void 0,S.debug("[DB] Db "+t.name+" aborted.",e)},t.onversionchange=e=>{S.debug("onversionchange",e)},this.db=t,Promise.resolve(this.db)}closeDatabase(){this.db&&this.db.close()}deleteDataBase(t){return new Promise((e,i)=>{const s=window.indexedDB.deleteDatabase(t);s.onerror=r=>{S.debug(r),i(r)},s.onsuccess=r=>{const n=r.target;S.debug("[DB] Db "+t+" delete old version "+r.oldVersion+"."),e(n)}})}async getDB(t){return new Promise((e,i)=>{const s=window.indexedDB.open(t);s.onerror=i,s.onsuccess=r=>{const n=r.target.result;S.debug("[DB] Db "+n.name+" opened (version "+n.version+")."),e(n)}})}async getUpgradedDB(t){return new Promise((e,i)=>{S.debug("[DB] Upgrading db "+t.name+" (version "+t.version+")");const s=window.indexedDB.open(t.name,t.version+1);s.onerror=i,s.onblocked=r=>{S.debug("onblocked",r)},s.onupgradeneeded=r=>{const n=r.target.transaction;n.oncomplete=()=>{S.debug("[DB] Upgrade is done (new version: "+a.version+").")};const a=r.target.result,o=[];for(let l=0;l<this.tables.length;++l){const c=this.tables[l];if(!a.objectStoreNames.contains(c.name)){S.debug("[DB] Creating table "+c.name+"...");const u=this.createTable(a,c.name,c.options,c.indexArray);o.push(u)}}o.length>0&&Promise.all(o).then(()=>{S.debug("[DB] All("+o.length+") tables created.")})},s.onsuccess=r=>{const n=r.target.result;S.debug("[DB] Db "+n.name+" opened (version "+n.version+")."),e(n)}})}async createTable(t,e,i,s){return new Promise(r=>{const n=t.createObjectStore(e,i);s&&s.forEach(a=>{n.createIndex(a.name,a.fields,{unique:a.unique})}),S.debug("[DB] Table "+e+" created."),r(t)})}};p(Tt,"_instance");let ae=Tt;class En{constructor(){p(this,"db");p(this,"isCreatingTable");if(this.db=void 0,this.isCreatingTable=!1,ae.instance().getTables().findIndex(i=>i.name===this.tableName())===-1)throw new Error("Failed to find table '"+this.tableName()+"' from indexeddb!")}tableName(){throw new Error("Derived class have to override 'tableName', and set a proper table name!")}add(t,e,i){const s=this.tableName();ae.instance().getDatabase().then(r=>{const n=r.transaction([s],"readwrite").objectStore(s),a=n.add(t);a.onsuccess=e,a.onerror=i}).finally(()=>{ae.instance().closeDatabase()}).catch(r=>{i&&i(r)})}save(t,e,i){const s=this.tableName();ae.instance().getDatabase().then(r=>{const n=r.transaction([s],"readwrite").objectStore(s),a=n.put(t);a.onsuccess=e,a.onerror=i}).finally(()=>{ae.instance().closeDatabase()})}delete(t,e,i){const s=this.tableName();ae.instance().getDatabase().then(r=>{const n=r.transaction([s],"readwrite").objectStore(s),a=n.delete(t);a.onsuccess=e,a.onerror=i}).finally(()=>{ae.instance().closeDatabase()})}update(){ae.instance().getDatabase().then(()=>{})}query(t,e){const i=this.tableName();ae.instance().getDatabase().then(s=>{const r=s.transaction([i],"readonly").objectStore(i),n=r.openCursor();n.onsuccess=a=>{const o=a.target.result;o&&o.continue(),t&&t(o)},n.onerror=e}).finally(()=>{ae.instance().closeDatabase()})}queryByIndex(t,e,i,s){const r=this.tableName();ae.instance().getDatabase().then(n=>{const a=n.transaction([r],"readonly").objectStore(r),o=a.index(t).get(e);o.onerror=s,o.onsuccess=function(l){const c=l.target?.result;i&&i(c)}}).finally(()=>{ae.instance().closeDatabase()})}queryAll(t,e){const i=this.tableName();ae.instance().getDatabase().then(s=>{const r=s.transaction([i],"readonly").objectStore(i),n=r.getAll();n.onsuccess=a=>{t&&t(a.target.result)},n.onerror=e}).finally(()=>{ae.instance().closeDatabase()})}clearAll(t,e){const i=this.tableName();ae.instance().getDatabase().then(s=>{const r=s.transaction([i],"readwrite").objectStore(i),n=r.clear();n.onsuccess=a=>{t&&t(a)},n.onerror=a=>{e&&e(a)}}).finally(()=>{ae.instance().closeDatabase()})}}const Ct=class Ct extends En{tableName(){return"dxf_data"}static instance(){return!Ct._instance&&(Ct._instance=new Ct),Ct._instance}query(t,e,i){const s=[],r=this.tableName();ae.instance().getDatabase().then(n=>{const a=n.transaction([r],"readonly").objectStore(r),o=a.get(t);o.onerror=l=>{i&&i(l),S.info("[DxfDataTable] Failed to query !",l)},o.onsuccess=()=>{o.result&&s.push(o.result),e&&e(s)}}).finally(()=>{ae.instance().closeDatabase()})}};p(Ct,"_instance");let Yi=Ct;const Ae=new d.Vector3(1,0,0),ds=new d.Vector3(0,1,0),Et=new d.Vector3(0,0,1),Cr=new d.Vector3(0,0,0),ct=16777215,th="CONTINUOUS",Ei=new d.PointsMaterial({color:ct}),le=new d.LineBasicMaterial({color:ct}),_t=new d.MeshBasicMaterial({color:ct}),Sr=new d.BufferGeometry().setFromPoints([new d.Vector3]),Or=new d.Matrix4,Fe=new d.Matrix4,ne=new d.Matrix4,j=new d.Vector3,Z=new d.Vector3,ze=new d.Vector3,Qt=new d.Vector2,he=new d.Quaternion,_i=new d.Object3D,We=new d.Box3,Er=new d.PointsMaterial({color:65280,size:5,depthTest:!1}),_r=new d.PointsMaterial({color:65280,depthTest:!1}),Pr=new d.PointsMaterial({color:65280,depthTest:!1}),ih=h=>h.viewDirectionFromTarget!==void 0,sh=h=>{if(h){const t=h.match(/data:([a-zA-Z0-9]+\/[a-zA-Z0-9-.+]+).*,.*/);if(t&&t.length>0){const e=t[1],i=h.replace("data:"+e+";","").split(",");if(i&&i.length===2&&i[0]==="base64"){const s=i[1];return qa.decode(s)}}}return null},Ar=(h,t)=>{const e=new d.Vector2(h.x,h.y),i=new d.Vector2(t.x,t.y);return i.sub(e),i.normalize(),i.y<0?-Math.acos(i.x):Math.acos(i.x)},Ir=(h,t,e)=>({x:h.x+t*Math.cos(e),y:h.y+t*Math.sin(e)}),rh=(h,t,e,i)=>{const s=h?new d.Vector2(h.x,h.y):new d.Vector2(0,0),r=t?new d.Vector2(t.x,t.y):new d.Vector2(1,0);e=e||1;const n=4*Math.atan(e),a=s.distanceTo(r)/2/Math.sin(n/2),o=Ir(h,a,Ar(s,r)+(Math.PI/2-n/2));i=i||Math.max(Math.abs(Math.ceil(n/(Math.PI/18))),6);const l=Ar(o,s),c=n/i,u=[];u.push(new d.Vector3(s.x,s.y,0));for(let f=1;f<=i-1;f++){const m=Ir(o,Math.abs(a),l+c*f);u.push(new d.Vector3(m.x,m.y,0))}return u},kr=(h,t,e,i=h.length*2,s)=>{const r=[];if(!h||h.length<t+1||t<1)return r;const n=h.map(a=>[a.x,a.y]);try{for(let a=0;a<1;a+=1/i){const o=mn(a,t,n,e,s);r.push(new d.Vector3(o[0],o[1],0))}}catch{if(r.length===0)return r}return r},us=(h,t=!1)=>{const e=[],i=h.length;for(let s=0;s<i;s++){const r=h[s];if(r.bulge&&(s!==i-1||t)){const n=r.bulge,a=s+1<i?h[s+1]:e[0],o=rh(r,a,n);e.push(...o)}else e.push(new d.Vector3(r.x,r.y,0))}return e},nh=h=>{const t=[];return h.faceA&&t.push(h.faceA),h.faceB&&t.push(h.faceB),h.faceC&&t.push(h.faceC),h.faceD&&t.push(h.faceD),t},ah=h=>{const t=[],e=[];h.forEach(s=>{s.polyfaceMeshVertex&&(s.threeDPolylineMesh?t.push(new d.Vector3(s.x,s.y,s.z)):e.push(nh(s)))});const i=[];for(let s=0;s<e.length;s++){const r=e[s];if(r.length===0)continue;const n=[];let a=!0;for(let o=0;o<r.length;o++){const l=r[o]-1;if(l>=t.length||l<0){a=!1;break}n.push(t[l])}!a||n.length===0||(n.push(n[0]),i.push(n))}return i},V=class V extends d.Loader{constructor(e,i){super(e);p(this,"timer");p(this,"ignorePaperSpace");p(this,"font");p(this,"encoding");p(this,"overrideColor");p(this,"overrideHatchPatternLineThickness");p(this,"angBase");p(this,"angDir");p(this,"header");p(this,"pointsMaterials");p(this,"lineBasicMaterials");p(this,"lineShaderMaterials");p(this,"meshBasicMaterials");p(this,"meshTextureMaterials");p(this,"hatchShaderMaterials");p(this,"entityCount");p(this,"curveCount");p(this,"averageCurveSize");p(this,"enableRenderOrder");p(this,"enableLocalCache");p(this,"enableReleaseData");p(this,"enableMerge");p(this,"enableRTC");p(this,"enablePlineWidth");p(this,"dxfDataId");p(this,"compareContext");p(this,"statsInfo");p(this,"llbDatas");p(this,"mtextDatas");p(this,"requestHeader");p(this,"blockReferencesCache");p(this,"blockRecordsCache");p(this,"entitiesCache");p(this,"blocksCache");p(this,"dictionaryOwnerHandleAndSpatialFilterHandlesCache");p(this,"spatialFiltersCache");p(this,"entityThreejsCache");p(this,"entityTypesAndTimes");p(this,"nonSnapableTypes");p(this,"layoutsSnapObjectsMap");p(this,"aborted");p(this,"entityHandlesWithRenderOrder");p(this,"addViewport");this.timer=Date.now(),this.ignorePaperSpace=!1,this.encoding="UTF-8",this.angBase=0,this.angDir=0,this.header=void 0,this.pointsMaterials={},this.lineBasicMaterials={},this.lineShaderMaterials={},this.meshBasicMaterials={},this.meshTextureMaterials={},this.hatchShaderMaterials=[],this.entityCount=0,this.curveCount=0,this.averageCurveSize=0,this.enableRenderOrder=!1,this.enableLocalCache=!1,this.enableReleaseData=!0,this.enableMerge=!0,this.enableRTC=!0,this.enablePlineWidth=!0,this.dxfDataId=void 0,this.compareContext=void 0,this.statsInfo={unsupportedEntity:{},unsupportedEntityTypes:{},unsupportedTextStyles:{},unsupportedHatchPatterns:{},unsupportedPolylineCount:0,invisibleEntities:{},ignoredFrozenLayersAndEntityCount:{},ignoredInserts:{},entityTypesAndMeshCount:{},ignoredPaperSpaceEntityTypesAndCount:{},rebasedEntityCount:0,requestHeader:{}},this.llbDatas=[],this.mtextDatas=[],this.blockReferencesCache={},this.blockRecordsCache=void 0,this.entitiesCache=void 0,this.blocksCache=void 0,this.dictionaryOwnerHandleAndSpatialFilterHandlesCache=void 0,this.spatialFiltersCache=void 0,this.entityThreejsCache=void 0,this.entityTypesAndTimes=void 0,this.nonSnapableTypes=new Set(["ATTDEF","ATTRIB","LEADER","MTEXT","MULTILEADER","OLE2FRAME","TEXT"]),this.layoutsSnapObjectsMap={},this.aborted=!1,this.entityHandlesWithRenderOrder={},this.addViewport=(s,r)=>{if(s.type==="VIEWPORT"){!r[s.ownerHandle]&&(r[s.ownerHandle]=[]);const n=s;r[s.ownerHandle].push(n)}},i&&(this.ignorePaperSpace=i.ignorePaperSpace===!0,this.enableLocalCache=i.enableLocalCache===!0,this.enableMerge=V.LOADLLDATA?!1:i.enableMerge!==!1,this.encoding=i.encoding||"UTF-8",i.overrideColor!=null&&(this.overrideColor=qt.rgb2Hex(i.overrideColor)),i.overrideHatchPatternLineThickness!=null&&(this.overrideHatchPatternLineThickness=i.overrideHatchPatternLineThickness)),this.pointsMaterials[ct]=Ei,this.lineBasicMaterials[ct]=le,this.meshBasicMaterials[ct]=_t}setRequestHeader(e){this.requestHeader=e}setFont(e){this.font=e}async download(e,i){let s=sh(e);if(!s){const r=Date.now(),n=new d.FileLoader(this.manager),a=V.REQUWSTHEADER;a&&n.setRequestHeader(a),n.setResponseType("arraybuffer"),n.setPath(this.path),s=await n.loadAsync(e,i),S.info("[Dxf] "+e+" dxf file downloaded in "+(Date.now()-r)/1e3+"s")}return s}async loadEx(e,i,s){return this.enableLocalCache&&i&&(i=i.trim()).length>0&&(this.dxfDataId=i),this.loadAsync(e,s)}async loadAsync(e,i){const s=z.getUpdateSubProgressFunc(0,50,i),r=z.getUpdateSubProgressFunc(50,100,i),n=z.getUpdateSubProgressFunc(10,100,i);if(be.isBrowser&&this.enableLocalCache&&this.dxfDataId){let l;try{if(this.timer=Date.now(),l=await this.getDxfDataFromIndexedDb(this.dxfDataId),l){this.tryFixDxfData(l),S.info("[Dxf] Loaded DxfData from indexedDb in "+(Date.now()-this.timer)/1e3+"s");const c=await this.loadEntities(l,n);return Promise.resolve(c)}}catch(c){S.warn("[Dxf] Failed to parse data from indexedDb",c)}}const a=await this.parse(e,s);return this.tryFixDxfData(a),await this.loadEntities(a,r)}async parse(e,i){const s=z.getUpdateProgressFunc(i),r=z.getUpdateSubProgressFunc(0,40,i),n=await this.download(e,r);if(!n)return Promise.reject("[Dxf] Failed to download "+e);if(this.aborted)return Promise.reject("[Dxf] Job aborted");this.timer=Date.now(),S.info("[Dxf] Start parsing...");const a=new Tn(this.encoding).parseSync(n);if(this.tryFixDxfData(a),s(80),S.info("[Dxf] Parsed in "+(Date.now()-this.timer)/1e3+"s, creating entities..."),this.aborted)return Promise.reject("[Dxf] Job aborted");if(a&&be.isBrowser&&this.enableLocalCache&&this.dxfDataId){const o=Date.now();try{await this.setDxfDataToIndexedDb(this.dxfDataId,a),S.info("[Dxf] Saved to indexedDb in "+(Date.now()-o)/1e3+"s")}catch(l){S.warn("[Dxf] Failed to save '"+this.dxfDataId+"' to indexedDb!",l)}}return s(100),a}abort(){this.aborted=!0}isAborted(){return this.aborted}parseHeader(e){if(!e){S.error("[Dxf]: Invalid header!");return}this.header=e;const i=e.$ACADVER.toString();i!=="AC1032"&&S.warn("[Dxf] Unexpected version: "+i+". But we'll try to continue."),this.angBase=e.$ANGBASE||0,this.angDir=e.$ANGDIR||0}tryFixDxfData(e){e&&(!e.objects&&(S.warn("[Dxf] No objects found, Will add one."),e.objects={}),!e.objects.LAYOUT&&(S.warn("[Dxf] No layout defined! Will add a default 'Model' layout!"),e.objects.LAYOUT=[{layoutName:V.MODEL_LAYOUT_NAME}]),!e.tables&&(S.warn("[Dxf] No tables found, Will add one."),e.tables={}),!e.tables.layer&&(e.tables.layer={}),!e.tables.layer.layers&&(e.tables.layer.layers={}))}async loadEntities(e,i){const s=Date.now();this.parseHeader(e.header),this.enableRenderOrder&&(this.initRenderOrderInfo(e),this.enableMerge=!1),this.getFontFilesFromDxf(e);let r=0;const n=e.entities.length;this.entityCount=n,Object.keys(e.blocks).forEach(b=>{this.entityCount+=e.blocks[b].entities?.length||0});const a=z.getUpdateProgressFuncForLoop(n,i);let o={};const l=b=>{const E=b.userData.layerName;let O=o[E];!O&&(O=[],o[E]=O),O.push(b)},c={},u={},f=new F;for(let b=0;b<n&&!this.aborted;b++){const E=e.entities[b];this.addViewport(E,c);const O=this.loadEntity(E,e);if(!O&&await a(b),!O)continue;const _=this.getLayout(e,E),C=_.layoutName;let w=f.children.find(M=>M.name===C);if(!w&&(w=new F,w.name=C,w.userData.isLayoutLevelObject=!0,f.add(w)),O.traverse(M=>{M.userData.isSnapObject&&(!this.layoutsSnapObjectsMap[C]&&(this.layoutsSnapObjectsMap[C]=[]),this.layoutsSnapObjectsMap[C].push(M))}),this.enableMerge){et.merge(O,!1),!u[C]&&(u[C]={object:w,layerObjects:{}});const P=u[C];if(O.geometry){const A=O.userData.layerName;!P.layerObjects[A]&&(P.layerObjects[A]=[]),P.layerObjects[A].push(O),O.children.forEach(I=>{I.userData.isSnapObject&&l(I)})}else O.children.length>0&&(w.add(O),O.traverse(A=>{A.geometry&&l(A)}))}else w.add(O),O.traverse(M=>{M.geometry&&l(M)});r++,await a(b)}e.objects.LAYOUT.forEach(b=>{const E=b,O=E.layoutName;if(this.ignorePaperSpace&&O!==V.MODEL_LAYOUT_NAME)return;const _=E.associatedBlockName,C=e.blocks[_];C&&this.loadLayout(C,e,E,f,o,c)}),S.debug("[Dxf] Drew entities in "+(Date.now()-s)/1e3+"s");for(const b in this.layoutsSnapObjectsMap){const E=f.children.find(C=>C.name===b),O=new F;O.name=V.SNAP_GROUP_NAME,O.userData.isSnapGroup=!0,E.add(O);const _=this.layoutsSnapObjectsMap[b];for(let C=0;C<_.length;C++){const w=_[C],M=w.userData.layerName;this.getLayerVisible(e,M)===!1&&w.layers.disable(Ce),V.SHOW_SNAP_OBJECT&&(w.layers.enableAll(),w.material instanceof d.PointsMaterial?w.material=Er:w.material instanceof d.LineBasicMaterial?w.material=_r:w.material instanceof d.MeshBasicMaterial&&(w.material=Pr));let P=w;const A=ne.identity();for(;P&&P.userData.isLayoutLevelObject!==!0;)A.premultiply(P.matrix),P=P.parent;w.matrix.copy(A),O.add(w)}}if(this.enableMerge)for(const b in u){const E=u[b],O=E.object;for(const _ in E.layerObjects){const C=E.layerObjects[_],w=et.deepMerge(C,void 0,!1,!1,!0),M=w.added,P=w.removed;if(P.length!==C.length){let A=P;P.length>=100&&(A=new Set(P));const I=k=>Array.isArray(A)?A.indexOf(k)>=0:A.has(k);for(let k=0,B=C.length;k<B;k++){const L=C[k];!I(L)&&(O.add(L),l(L))}}for(let A=0;A<M.length;A++){const I=M[A];O.add(I),l(I)}E.layerObjects[_]=[]}}this.printStatsInfo(),this.enableReleaseData&&(this.releaseCachedData(),this.releaseDxfData(e)),this.enableMerge&&V.mergeDxfObjects({root:f,layersAndObjects:o});const g=f.convertToThreejsObject();f.clear(),o={};const x={};e.objects.LAYOUT.forEach(b=>{const E=b;x[E.layoutName]=E});const y={},T=b=>{const E=b.userData.layerName;let O=y[E];!O&&(O=[],y[E]=O),O.push(b)};g.children.forEach(b=>{if($.setSharedVariablesOfObject(b),!b.userData.isLayoutLevelObject)return;const E=b.name;let O;if(E!==V.MODEL_LAYOUT_NAME){const _=x[E];!_.directAssociatedLeafObjectSet&&(_.directAssociatedLeafObjectSet=new Set),O=_.directAssociatedLeafObjectSet}b.traverse(_=>{if($.setSharedVariablesOfObject(_),_.userData.isSnapGroup&&(_.visible=V.SHOW_SNAP_OBJECT),_.geometry){const C=_.userData.layerName;this.getLayerVisible(e,C)===!1&&(_.visible=!1,_.userData.layerVisible=!1),T(_),O&&O.add(_)}})}),S.info("[Dxf] loadEntities() done in "+(Date.now()-s)/1e3+"s");const v=Object.assign(Object.assign({},e),{threejsObject:g,layersAndThreejsObjects:y,loadedEntityCount:r,layoutViewportsMap:c});if(V.LOADLLDATA){const b=g.children[0].children,E=[];for(let O=0;O<b.length;O++){const _=b[O];if(_?.userData?.llbData){const C=new d.Box3().setFromObject(_);C.getSize(new d.Vector3);const w=C.getCenter(new d.Vector3);E.push({..._,boundingBox:{max:C.max,min:C.min,center:w}})}else if(_.children&&_.children.some(C=>C.userData?.llbData))for(let C=0;C<_.children.length;C++){const w=_.children[C];if(w.userData?.llbData){w.updateWorldMatrix(!0,!0);const M=new d.Box3().setFromObject(w);M.getSize(new d.Vector3);const P=M.getCenter(new d.Vector3);E.push({...w,boundingBox:{max:M.max,min:M.min,center:P}})}}}v.llbMesh=E}return Promise.resolve(v)}getFontFilesFromDxf(e){const i=new Set,s=e.tables?.style?.styles;if(s)for(const r in s){const n=s[r],a=n.fontFile,o=n.bigFontFile;a&&i.add(a),o&&i.add(o)}S.info("[Dxf] Fonts used by dxf: "+Array.from(i).join())}async loadEntitiesForCompare(e,i,s,r=!0,n){const a=e.entities.length,o=i.entities.length,l=async()=>{const u=this.compareContext,f=u.isTheFirstFile,m=f?e:i,g=new F,x=f?a:o;this.entityCount=x,Object.keys(m.blocks).forEach(w=>{this.entityCount+=m.blocks[w].entities?.length||0});const y=Math.round(Math.pow(x,.5));let T=Date.now();const v=async w=>{if(n&&(w%y===0||w===x-1)){let M=w+1;!f&&(M+=a),n(new ProgressEvent("parseProgress",{loaded:M,total:a+o}));const P=500,A=Date.now();(A-T>P||w===x-1)&&(await z.sleep(0),T=A)}};this.parseHeader(m.header);let b={};for(let w=0;w<x;w++){if(this.aborted)return;const M=m.entities[w],P=this.getLayout(m,M);if(P.layoutName!==V.MODEL_LAYOUT_NAME){await v(w);continue}const A=this.loadEntity(M,m);if(!A){await v(w);continue}let I=g.children.find(k=>k.name===V.MODEL_LAYOUT_NAME);!I&&(I=new F,I.name=V.MODEL_LAYOUT_NAME,I.userData.isLayoutLevelObject=!0,g.add(I)),I.add(A),A.traverse(k=>{if(k.geometry){const B=k.userData.layerName,L=this.getLayerVisible(m,B);k.userData.isSnapObject&&(!this.layoutsSnapObjectsMap[P.layoutName]&&(this.layoutsSnapObjectsMap[P.layoutName]=[]),this.layoutsSnapObjectsMap[P.layoutName].push(k),L===!1&&A.layers.disable(Ce));let q=b[B];!q&&(q=[],b[B]=q),q.push(k)}}),await v(w)}r&&f&&!u.preservedHandles&&(u.preservedHandles=new Set);for(const w in s){const M=s[w];f&&(M.type===Te.Added||M.type===Te.Modified)&&(u.preservedHandles?.add(M.handle),M.parentHandles&&M.parentHandles.forEach(A=>u.preservedHandles?.add(A)));let P=this.entityThreejsCache&&this.entityThreejsCache[M.handle];if(M.parentHandles&&(P=this.entityThreejsCache&&this.entityThreejsCache[M.parentHandles[M.parentHandles.length-1]]),P){if(P.parent&&P.parent.userData.originalType){this.setObjectColorByChange(P,{type:Te.NoChange});continue}P=this.setObjectColorByChange(P,M)}if(M.type!==Te.NoChange&&P){let A=P.parent;const I=ne.identity();for(;A&&A.userData.isLayoutLevelObject!==!0;)I.premultiply(A.matrix),A=A.parent;We.makeEmpty();const k=F.getBox(P,We);k.applyMatrix4(I),M.type===Te.Added?!f&&(M.box=new d.Box3().copy(k)):M.type===Te.Removed?f&&(M.box=new d.Box3().copy(k)):M.type===Te.Modified&&(M.box?M.box.union(k):M.box=new d.Box3().copy(k))}}for(const w in this.layoutsSnapObjectsMap){const M=g.children.find(I=>I.name===w),P=new F;P.name=V.SNAP_GROUP_NAME,M.add(P);const A=this.layoutsSnapObjectsMap[w];for(let I=0;I<A.length;I++){const k=A[I];V.SHOW_SNAP_OBJECT&&(k.layers.enableAll(),k.material instanceof d.PointsMaterial?k.material=Er:k.material instanceof d.LineBasicMaterial?k.material=_r:k.material instanceof d.MeshBasicMaterial&&(k.material=Pr));let B=k;const L=ne.identity();for(;B&&B.userData.isLayoutLevelObject!==!0;)L.premultiply(B.matrix),B=B.parent;k.matrix.copy(L),P.add(k)}}this.enableMerge&&V.mergeDxfObjects({root:g,layersAndObjects:b});const E=g.convertToThreejsObject();g.clear(),b={};const O={},_=w=>{const M=w.userData.layerName;let P=O[M];!P&&(P=[],O[M]=P),P.push(w)};E.children.forEach(w=>{$.setSharedVariablesOfObject(w),w.userData.isLayoutLevelObject&&w.traverse(M=>{if($.setSharedVariablesOfObject(M),M.userData.isSnapGroup&&(M.visible=V.SHOW_SNAP_OBJECT),M.geometry){const P=M.userData.layerName;this.getLayerVisible(m,P)===!1&&(M.visible=!1,M.userData.layerVisible=!1),_(M)}})});const C=m;C.threejsObject=E,C.layersAndThreejsObjects=O,C.layoutViewportsMap={}};let c=Date.now();this.compareContext={changes:s,isTheFirstFile:!0},z.printMemory("Before loading entities for first dxf"),await l(),S.info("[Dxf] loadEntities for first dxf in "+(Date.now()-c)/1e3+"s"),z.printMemory("After loading entities for first dxf"),this.releaseCachedData(!1),this.releaseDxfData(e),z.printMemory("Before loading entities for second dxf"),c=Date.now(),this.compareContext.isTheFirstFile=!1,await l(),S.info("[Dxf] loadEntities for second dxf in "+(Date.now()-c)/1e3+"s"),this.printStatsInfo();for(const u of Object.values(s))!u.box&&delete s[u.id];this.compareContext.preservedHandles=void 0,this.enableReleaseData&&(this.releaseCachedData(),this.releaseDxfData(i)),z.printMemory("After loading entities for second dxf")}setObjectColorByChange(e,i){const s=a=>{let o=Ue.ENTITY_COLOR_NO_CHANGE;return a.type===Te.Added?o=Ue.ENTITY_COLOR_ADDED:a.type===Te.Removed?o=Ue.ENTITY_COLOR_REMOVED:a.type===Te.Modified&&(o=this.compareContext?.isTheFirstFile?Ue.ENTITY_COLOR_REMOVED:Ue.ENTITY_COLOR_ADDED),o},r=(a,o)=>{a.traverse(l=>{if(l.material){if(l.material instanceof d.LineBasicMaterial)l.material=this.getLineBasicMaterial(o);else if(l.material instanceof d.MeshBasicMaterial)l.material=this.getMeshBasicMaterial(o);else if(l.material instanceof d.PointsMaterial)l.material=this.getPointsMaterial(o);else if(l.material instanceof d.ShaderMaterial){const c=l.material.clone();V.updateMaterialUniforms(c),c.uniforms.u_color.value.set(o),l.material=c}}})},n=s(i);return e.traverse(a=>{i.parentHandles?a.userData&&a.userData.handle&&a.userData.handle===i.handle&&(r(a,n),e=a):r(a,n)}),e}releaseCachedData(e=!0){e&&(this.pointsMaterials={},this.lineBasicMaterials={},this.lineShaderMaterials={},this.meshBasicMaterials={},this.meshTextureMaterials={},this.hatchShaderMaterials=[]),this.header=void 0,this.blockReferencesCache={},this.blockRecordsCache=void 0,this.blocksCache=void 0,this.entitiesCache=void 0,this.dictionaryOwnerHandleAndSpatialFilterHandlesCache=void 0,this.spatialFiltersCache=void 0,this.entityThreejsCache=void 0,this.entityTypesAndTimes=void 0,this.entityHandlesWithRenderOrder={},this.layoutsSnapObjectsMap={},this.statsInfo={unsupportedEntity:{},unsupportedEntityTypes:{},unsupportedTextStyles:{},unsupportedHatchPatterns:{},unsupportedPolylineCount:0,invisibleEntities:{},ignoredFrozenLayersAndEntityCount:{},ignoredInserts:{},entityTypesAndMeshCount:{},ignoredPaperSpaceEntityTypesAndCount:{},rebasedEntityCount:0}}releaseEntity(e){e.vertices&&(e.vertices=void 0),e.knotValues&&(e.knotValues=void 0),e.controlPoints&&(e.controlPoints=void 0),e.binaryData&&(e.binaryData=void 0),e.text&&(e.text=void 0),e.extendedData&&(e.extendedData=void 0),e.contextData&&(e.contextData=void 0);const i=e;i.boundaryPaths&&(i.boundaryPaths=[]),i.patternLines&&(i.patternLines=void 0)}releaseDxfData(e){delete e.objects.DICTIONARY,delete e.objects.SORTENTSTABLE,delete e.objects.XRECORD,e.tables&&(delete e.tables.dimStyle,delete e.tables.lineType,delete e.tables.style,delete e.tables.blockRecord),e.entities=[],e.blocks={}}loadEntity(e,i,s,r=!1){if(this.compareContext&&this.compareContext.preservedHandles&&this.compareContext.preservedHandles.has(e.handle)&&oi.includes(e.type)&&(r=!0),!r&&this.compareContext&&this.compareContext.preservedHandles&&!oi.includes(e.type)&&!this.compareContext.preservedHandles.has(e.handle)&&(!s||s&&!this.compareContext.preservedHandles.has(s.handle)))return;if(this.getLayerFrozen(i,e)===!0){const m=e.layer;return!this.statsInfo.ignoredFrozenLayersAndEntityCount[m]&&(this.statsInfo.ignoredFrozenLayersAndEntityCount[m]=0),this.statsInfo.ignoredFrozenLayersAndEntityCount[m]++,void 0}if(e.visible===!1||e.invisible)return!this.statsInfo.invisibleEntities[e.type]&&(this.statsInfo.invisibleEntities[e.type]=0),this.statsInfo.invisibleEntities[e.type]++,void 0;if(this.ignorePaperSpace&&e.inPaperSpace)return!this.statsInfo.ignoredPaperSpaceEntityTypesAndCount[e.type]&&(this.statsInfo.ignoredPaperSpaceEntityTypesAndCount[e.type]=0),this.statsInfo.ignoredPaperSpaceEntityTypesAndCount[e.type]++,void 0;!this.entityThreejsCache&&(this.entityThreejsCache={});const a=Date.now();let o,l=!1;if(!this.compareContext&&this.entityThreejsCache[e.handle])o=this.entityThreejsCache[e.handle].clone(),l=!0;else if(!this.statsInfo.unsupportedEntity[e.handle]){const m=e.isTable;if(e.type==="CIRCLE"||e.type==="ARC")o=this.loadArc(e,i,s);else if(e.type==="LINE"||e.type==="POLYLINE")o=this.loadLine(e,i);else if(e.type==="XLINE")o=this.loadXLine(e);else if(e.type!=="SEQEND"){if(e.type==="RAY")o=this.loadRay(e);else if(e.type==="LWPOLYLINE")o=this.loadLWPolyline(e,i,s);else if(e.type==="3DFACE")o=this.load3DFace(e);else if(e.type==="TEXT")o=this.loadText(e,i,s);else if(e.type==="SOLID")o=this.loadSolid(e,i,s);else if(e.type==="POINT")o=this.loadPoint(e,i,s);else if(e.type==="IMAGE")o=this.loadImage(e,i,s);else if(e.type==="INSERT")o=this.loadInsert(e,i,s,r);else if(e.type==="SPLINE")o=this.loadSpline(e,s);else if(e.type==="MTEXT")m?o=this.loadTableMText(e,i,s):o=this.loadMText(e,i,s);else if(e.type==="ELLIPSE")o=this.loadEllipse(e,i,s);else if(e.type==="DIMENSION")o=this.loadDimension(e,i);else if(e.type!=="REGION")if(e.type==="ATTDEF")o=this.loadAttDef(e,i,s);else if(e.type==="ATTRIB"){if(!s)for(let g=0;g<i.entities.length;g++){const x=i.entities[g];if(e.ownerHandle===x.handle&&(s=x,s.attributesFollow))break}o=this.loadAttrib(e,i,s)}else e.type==="HATCH"?o=this.loadHatch(e,i,s):e.type==="VIEWPORT"?o=this.loadViewport(e,i,s):e.type==="LEADER"?o=this.loadLeader(e,i,s):e.type==="MULTILEADER"?o=this.loadMLeader(e,i,s):e.type==="OLE2FRAME"?o=this.loadOle2frame(e,i):e.type==="ACAD_TABLE"&&(o=this.loadTable(e,i))}o&&(this.entityThreejsCache[e.handle]=o),this.enableReleaseData&&!this.compareContext&&this.releaseEntity(e)}if(o){const m=this.getLayerName(e,i,s);o.userData.handle=e.handle,e.type!=="INSERT"&&e.type!=="DIMENSION"&&o.traverse(g=>{g.geometry&&(g.userData.layerName=m,g.userData.handle=e.handle,g.userData.dxfType=e.type,this.setMaterial(g,e,i,s))}),!l&&(this.nonSnapableTypes.has(e.type)&&o.traverse(g=>{g.layers.disable(Ce)}),this.enableRenderOrder&&(this.entityHandlesWithRenderOrder[e.handle]?o.renderOrder=parseInt(this.entityHandlesWithRenderOrder[e.handle],16)+.1:o.renderOrder=parseInt(e.handle,16)))}const c=e.type,u=e.handle,f=oi.includes(c);if(!f){this.entityTypesAndTimes||(this.entityTypesAndTimes={}),this.entityTypesAndTimes[c]||(this.entityTypesAndTimes[c]={createCount:0,totalTime:0,averageTime:0});const m=this.entityTypesAndTimes[c];m.createCount++,m.totalTime+=Date.now()-a}return o?this.statsInfo.entityTypesAndMeshCount[c]?this.statsInfo.entityTypesAndMeshCount[c]++:this.statsInfo.entityTypesAndMeshCount[c]=1:(this.statsInfo.unsupportedEntityTypes[c]?this.statsInfo.unsupportedEntityTypes[c]++:this.statsInfo.unsupportedEntityTypes[c]=1,f||(this.statsInfo.unsupportedEntity[u]?this.statsInfo.unsupportedEntity[u]++:this.statsInfo.unsupportedEntity[u]=1)),o}loadEllipse(e,i,s){if(!e.majorAxisEndPoint||!e.center||e.axisRatio===void 0||e.startAngle===void 0||e.endAngle===void 0)return;let r=e.startAngle,n=e.endAngle;if(e.extrusionDirection&&e.extrusionDirection.z<0&&(r=Math.PI*2-e.endAngle,n=Math.PI*2-e.startAngle),R.areNumbersEqual(r,n,1e-5))return S.warn("[Dxf] Ellipse entity (handle '%s') contains the same start and end angle, ignored!",e.handle),void 0;let a=n-r;for(;a>Math.PI*2;)a-=Math.PI*2;Math.abs(a)<=1e-5&&(n=R.floorNumber(r+Math.PI*2,5));const o=Math.sqrt(Math.pow(e.majorAxisEndPoint.x,2)+Math.pow(e.majorAxisEndPoint.y,2)),l=o*e.axisRatio,c=Math.atan2(e.majorAxisEndPoint.y,e.majorAxisEndPoint.x),u=new d.EllipseCurve(e.center.x,e.center.y,o,l,r,n,!1,c);let f=1;const m=s;m?.xScale&&m?.yScale&&(f=Math.max(Math.abs(m.xScale),Math.abs(m.yScale)));const g=this.getDivision(r,n,Math.max(o,l)*f),x=u.getPoints(g),y=[],T=x.length;for(let C=0;C<T-1;C++)R.areVector2sEqual(x[C],x[C+1],1e-9)||y.push(x[C]);if(y.push(x[T-1]),y.length<2)return S.warn("[Dxf] Ellipse entity (handle '%s') contains less than 2 points, ignored!",e.handle),void 0;const v=new d.Vector3;let b=!1;this.enableRTC&&(b=U.checkAndRebasePositionsOnRTC(y,v));const E=new d.BufferGeometry().setFromPoints(y),O=new F(H.Line);O.geometry=E,O.material=le;const _=new F(H.Point);return _.geometry=Sr,_.material=Ei,_.matrix.setPosition(e.center.x,e.center.y,e.center.z),_.userData.isSnapObject=!0,_.userData.type="CircleCenter",_.layers.set(Ce),O.add(_),b&&(this.setRTCUserData(O),O.matrix.setPosition(v.x,v.y,0)),O.layers.enableAll(),O}loadMText(e,i,s){if(!e.text)return;if(!this.font)return S.info("[Dxf] Font file not set, ignoring text entity."),void 0;const r=this.getTextStyle(i,e),n=li(e.text,{encoding:this.getTextEncoding(r)}),a=this.getMTextGroup(n,e,r,i,s),o=a&&a.object;if(!o)return;o.matrix.decompose(Z,he,ze),e.position&&(Z.x+=e.position.x,Z.y+=e.position.y,o.matrix.compose(Z,he,ze)),We.makeEmpty();const l=F.getBox(o,We),c=l.getSize(j),u=e.width||c.x,f=e.height||c.y,m=e.lineSpaceFactor||1.657,g=e.text;let x=0,y=0;switch(document.createElement("canvas").getContext("2d"),e.attachmentPoint){case 1:x=0,y=0;break;case 2:x-=u/2,y=0;break;case 3:x-=u,y=0;break;case 4:x=0,y+=f/2;break;case 5:x-=u/2,y+=f/2;break;case 6:x-=u,y+=f/2;break;case 7:x=0;const k=g.split("\\P").length-1;k>0?y+=f*(k+1)+f*m*.8*k:y+=f;break;case 8:x-=u/2,y+=f;break;case 9:x-=u,y+=f;break;default:return}switch(e.drawingDirection){case 1:break;case 2:break;case 3:y+=f;break;case 4:break;case 5:const I=g.split("\\P");let k=0;I>1&&(k=I-1),k>1?y+=f*(k-1):y-=f/4;break;default:return}o.traverse(I=>{I.geometry&&I.geometry.translate(x,y,0),I.layers.enableAll()});let v=0;if(e.rotation&&(v=e.rotation*Math.PI/180),e.directionVector){const I=e.directionVector,k=new d.Vector3(I.x,I.y,I.z),B=k.clone().cross(Ae),L=Ae.angleTo(k);v=B.z>0?-L:L}U.shouldRebasePositionOnRTC(Z)&&this.setRTCUserData(o),o.matrix.compose(Z,he,ze);const b=e.position?Z.clone().sub(e.position):Z;Fe.makeTranslation(-b.x,-b.y,0),ne.makeRotationZ(v),o.matrix.multiply(Fe),o.matrix.multiply(ne),o.matrix.multiply(Fe.invert()),o.userData||(o.userData={});const E=o.matrix.elements,O=E&&E[12]||0,_=E&&E[13]||0,C=E&&E[14]||0,w=new d.Box3;F.getBox(o,w);const M=new d.Vector3;w.getCenter(M);const P=new d.Vector3;w.getSize(P),o.userData.renderArea={position:{x:O,y:_,z:C},bbox:{min:{x:w.min.x,y:w.min.y,z:w.min.z},max:{x:w.max.x,y:w.max.y,z:w.max.z},center:{x:M.x,y:M.y,z:M.z},width:P.x,height:P.y,depth:P.z},textSize:{width:u,height:f},rotation:v,attachmentPoint:e.attachmentPoint||0,drawingDirection:e.drawingDirection||0};const A=this;return o.userData.textContent=e.text||"",o.userData.cleanText=A.cleanMTextContent?A.cleanMTextContent(e.text):e.text,o.userData.dxfType="MTEXT",o.userData.isMText=!0,o.userData.layer=e.layer||"0",o.userData.handle=e.handle||"",o.traverse(I=>{I.geometry&&(I.userData.textContent=e.text||"",I.userData.dxfType="MTEXT",I.userData.layer=e.layer||"0",I.userData.handle=e.handle||"")}),o.userData.entityId=e.entityId||e.handle,o}loadTableMText(e,i,s){if(!e.text)return;if(!this.font)return S.info("[Dxf] Font file not set, ignoring text entity."),void 0;const r=this.getTextStyle(i,e),n=li(e.text,{encoding:this.getTextEncoding(r)}),a=this.getMTextGroup(n,e,r,i,s),o=a&&a.object;if(!o)return;o.matrix.decompose(Z,he,ze),e.position&&(Z.x+=e.position.x,Z.y+=e.position.y,o.matrix.compose(Z,he,ze)),We.makeEmpty();const l=F.getBox(o,We),c=l.getSize(j),u=e.width||c.x,f=e.height||c.y,m=e.lineSpaceFactor||1.657,g=e.text;let x=0,y=0;switch(e.attachmentPoint){case 1:x=0,y=0;break;case 2:x-=u/2,y=0;break;case 3:x-=u,y=0;break;case 4:x=0,y+=f/2;break;case 5:x-=u/2,y+=f/2;break;case 6:x-=u,y+=f/2;break;case 7:x=0;const E=g.split("\\P").length-1;E>0?y+=f*(E+1)+f*m*.8*E:y+=f;break;case 8:x-=u/2,y+=f;break;case 9:x-=u,y+=f;break;default:return}switch(e.drawingDirection){case 1:break;case 2:break;case 3:y+=f;break;case 4:break;case 5:break;default:return}o.traverse(b=>{b.geometry&&b.geometry.translate(x,y,0),b.layers.enableAll()});let T=0;if(e.rotation&&(T=e.rotation*Math.PI/180),e.directionVector){const b=e.directionVector,E=new d.Vector3(b.x,b.y,b.z),O=E.clone().cross(Ae),_=Ae.angleTo(E);T=O.z>0?-_:_}U.shouldRebasePositionOnRTC(Z)&&this.setRTCUserData(o),o.matrix.compose(Z,he,ze);const v=e.position?Z.clone().sub(e.position):Z;return Fe.makeTranslation(-v.x,-v.y,0),ne.makeRotationZ(T),o.matrix.multiply(Fe),o.matrix.multiply(ne),o.matrix.multiply(Fe.invert()),o}getMTextGroup(e,i,s,r,n,a=0,o=0,l=[]){if(e.length===0)return;let c=i.height||i.contextData&&i.contextData.textHeight||0;if(i.textStyle){if(s&&s.fontFile&&s.fontFile.endsWith(".shx")){const O=s.fontFile+"_"+s.styleName;!this.statsInfo.unsupportedTextStyles[O]&&(this.statsInfo.unsupportedTextStyles[O]=0),this.statsInfo.unsupportedTextStyles[O]++}c=c||s.textHeight}let u="Left";i.width&&i.attachmentPoint&&([1,4,7].includes(i.attachmentPoint)?u="Left":[2,5,8].includes(i.attachmentPoint)?u="Center":[3,6,9].includes(i.attachmentPoint)&&(u="Right"));const f=i.width||0,m=new F;let g,x=s.fontFile,y=1,T=1,v=256,b=c*.8,E=b+c;for(let O=0;O<e.length;O++){const _=e[O];if(typeof _=="string"){const C=[],w=A=>{let I;if(A.forEach((k,B)=>{!k.boundingBox&&k.computeBoundingBox(),B===0?I=k.boundingBox:I.union(k.boundingBox)}),I){const k=I.getSize(j);switch(u){case"Left":break;case"Center":A.forEach(B=>B.translate((f-k.x)/2,0,0));break;case"Right":A.forEach(B=>B.translate(f-k.x,0,0));break}}C.push(...A)};let M;for(let A=0;A<_.length;A++){const I=_[A];if(I===`
|
|
794
794
|
`){a=0,o-=E,l.length>0&&w(l),l=[];continue}if(b=c*.8,E=b+c,M=this.font?.getCharShape(I,x,c),s.bigFontFile&&!M&&(M=this.font?.getCharShape(I,s.bigFontFile,c)),!M&&(M=this.font?.getCharShape(I,"",c)),!M&&(M=this.font?.getNotFoundTextShape(c)),!M){a+=c+T*(c/3.5);continue}a>(f||1/0)&&(l.length>0&&w(l),a=0,o-=E,l=[]),M.translate(a,o,0),M.scale(y,1,1),M.boundingBox||M.computeBoundingBox(),_.T&&(T=_.T);const k=Uo(I,M,c,T,x);a+=k,l.push(M)}l.length>0&&(w(l),l=[]);const P=new F;if(C.length>0){!g&&(g=i.colorIndex),v!==void 0&&v!==256?(i.color=Nt(v),i.colorIndex=v):i.colorIndex=g;const A=this.getColor(i,r,n),I=C.filter(B=>B instanceof d.ExtrudeGeometry),k=C.filter(B=>!(B instanceof d.ExtrudeGeometry));if(I.length>0){const B=new F(H.Mesh);B.geometry=xe.mergeGeometries(I),B.material=this.getMeshBasicMaterial(A),P.add(B)}if(k.length>0){const B=new F(H.LineSegment);B.geometry=xe.mergeGeometries(k),B.material=this.getLineBasicMaterial(A),P.add(B)}}P.matrix.makeTranslation(0,-c,0),m.add(P),y=1,T=1,v=256}else if(Array.isArray(_)){const C=this.getMTextGroup(_,i,s,r,n,a,o,l);C&&(m.add(C.object),a=C.hOffset,o=C.vOffset)}else typeof _=="object"&&(_.f&&(x=_.f,x&&x.includes(".shx")&&S.info("[Dxf] Doesn't support custom fonts: "+x)),_.C&&(v=_.C),_.W&&(_.W[1]==="x"?y=_.W[0]*i.width:y=_.W[0]),_.H&&(_.H[1]==="x"?c=_.H[0]*i.height:c=_.H[0]),_.T&&(T=_.T))}if(m.children.length!==0)return et.merge(m,!1),g&&(i.colorIndex=g),m.children.length===1?{object:m.children[0],hOffset:a,vOffset:o}:{object:m,hOffset:a,vOffset:o}}mtextContentAndFormattingToTextAndStyle(e,i){const s={horizontalAlignment:"",textHeight:i.height||i.contextData&&i.contextData.textHeight},r={};let n=1;const a=[];for(let o=0;o<e.length;o++){const l=e[o];if(typeof l=="string"){if(l.startsWith("\\pxq")&&l.endsWith(";"))l.indexOf("c")!==-1?s.horizontalAlignment="center":l.indexOf("l")!==-1?s.horizontalAlignment="left":l.indexOf("r")!==-1?s.horizontalAlignment="right":l.indexOf("j")!==-1&&(s.horizontalAlignment="justify");else if(!l.startsWith("pi")){if(!l.startsWith("pxt")){if(!l.startsWith("pt")){const c=this.getTextLineNum(l);a.push({font:r.f,colorIndex:r.C,text:l,lineNum:n}),n+=c}}}}else if(Array.isArray(l)){const c=this.mtextContentAndFormattingToTextAndStyle(l,i);c.text.forEach(u=>{a.push(u)}),n=c.lineLength}else if(typeof l=="object")if(l.S&&l.S.length===3){const c=l.S[0]+"/"+l.S[2],u=this.getTextLineNum(c);a.push({text:l.S[0]+"/"+l.S[2],lineNum:n}),n+=u}else l.C!==void 0?r.C=l.C:l.W!==void 0?r.W=l.W:l.H!==void 0?r.H=l.H:l.f!==void 0&&(r.f=l.f)}return{text:a,lineLength:n,style:s}}getTextLineNum(e){const i=e.match(new RegExp("\\n","g"));return i?i.length:0}load3DFace(e){if(!e.vertices||e.vertices.length===0)return S.warn("[Dxf] Entity is missing vertices:",e.handle),void 0;const i=e.vertices.map(o=>new d.Vector3(o.x,o.y,o.z));if(i.length===0)return;!R.areVector3sEqual(i[0],i[i.length-1])&&i.push(i[0]);const s=new d.Vector3;let r=!1;this.enableRTC&&(r=U.checkAndRebasePositionsOnRTC(i,s));const n=new d.BufferGeometry().setFromPoints(i),a=new F(H.Line);return a.geometry=n,a.material=le,r&&(this.setRTCUserData(a),a.matrix.setPosition(s.x,s.y,0)),a.layers.enableAll(),a}loadSpline(e,i){if(!e.controlPoints||!e.degreeOfSplineCurve||!e.knotValues)return;if(e.controlPoints.length<e.degreeOfSplineCurve+1)return S.warn("[Dxf] Spline entity (handle '%s') has degree (%s) >= point count (%s), ignored!",e.handle,e.degreeOfSplineCurve,e.controlPoints.length),void 0;let s=1/0,r=1/0,n=-1/0,a=-1/0;for(const v of e.controlPoints)v.x<s&&(s=v.x),v.y<r&&(r=v.y),v.x>n&&(n=v.x),v.y>a&&(a=v.y);let o=1;const l=i;l?.xScale&&l?.yScale&&(o=Math.max(Math.abs(l.xScale),Math.abs(l.yScale)));const c=Math.max(n-s,a-r),u=this.getBSplineInterpolationsPerSplineSegment(e.controlPoints.length,c*o),f=kr(e.controlPoints,e.degreeOfSplineCurve,e.knotValues,u),m=new d.Vector3;let g=!1;this.enableRTC&&(g=U.checkAndRebasePositionsOnRTC(f,m));const x=U.getAdjacentNonRepeatPoints(f);if(x.length<2)return S.warn("[Dxf] Spline entity (handle '%s') contains less than 2 points, ignored!",e.handle),void 0;const y=new d.BufferGeometry().setFromPoints(x),T=new F(H.Line);return T.geometry=y,T.material=le,g&&(this.setRTCUserData(T),T.matrix.setPosition(m.x,m.y,0)),T.layers.enableAll(),T}loadXLine(e){if(!e.vertices||e.vertices.length===0)return S.warn("[Dxf] Entity is missing vertices:",e.handle),void 0;const i=z.arrayOrObjectToVector3(e.directionVector),s=new d.Vector3(e.vertices[0].x,e.vertices[0].y,0),r=[];if(r.push(i.clone().multiplyScalar(-1e6).add(s)),r.push(i.clone().multiplyScalar(1e6).add(s)),r.length===0)return;const n=new d.Vector3;let a=!1;this.enableRTC&&(a=U.checkAndRebasePositionsOnRTC(r,n));const o=new d.BufferGeometry().setFromPoints(r),l=new F(H.Line);return l.geometry=o,l.material=le,a&&(this.setRTCUserData(l),l.matrix.setPosition(n.x,n.y,0)),l.layers.enableAll(),l}loadRay(e){if(!e.vertices||e.vertices.length===0)return S.warn("[Dxf] Entity is missing vertices:",e.handle),void 0;const i=z.arrayOrObjectToVector3(e.directionVector),s=e.vertices.map(l=>new d.Vector3(l.x,l.y,0));if(s.push(i.multiplyScalar(1e6).add(s[0])),s.length===0)return;const r=new d.Vector3;let n=!1;this.enableRTC&&(n=U.checkAndRebasePositionsOnRTC(s,r));const a=new d.BufferGeometry().setFromPoints(s),o=new F(H.Line);return o.geometry=a,o.material=le,n&&(this.setRTCUserData(o),o.matrix.setPosition(r.x,r.y,0)),o.layers.enableAll(),o}loadLine(e,i){if(!e.vertices||e.vertices.length===0){S.warn("[Dxf] Entity is missing vertices:",e.handle);return}let s=[];if(e.isPolyfaceMesh)s=ah(e.vertices);else{const c=us(e.vertices,e.shape);e.shape&&c.length>0&&c.push(c[0]),c.length>0&&(s=[c])}if(s.length===0)return;const r=[];for(let c=0;c<s.length;){const[u,f]=s[c];R.areVector3sEqual(u,f)&&s[c].length<=2?(r.push(u.clone()),s.splice(c,1)):c++}const n=new d.Vector3;let a=!1,o=0;s.forEach(c=>{c.forEach(u=>n.add(u)),o+=c.length}),o>0&&(n.divideScalar(o),a=this.enableRTC&&U.shouldRebasePositionOnRTC(n));let l=null;if(s.length>0){let c=function(v){return Array.isArray(v.pattern)&&v.pattern.length>0};const u=[],f=[];let m=0;s.forEach(v=>{v.forEach(b=>{a?u.push(new d.Vector3(b.x-n.x,b.y-n.y,b.z-n.z)):u.push(b.clone())});for(let b=1;b<v.length;b++)f.push(m+b-1,m+b);m+=v.length});const g=this.getLineType(e,i),x=i.tables?.lineType?.lineTypes?.[g],y=new d.BufferGeometry().setFromPoints(u);let T=le;if(x&&c(x)){let v=function(_){const C=_.attributes.position,w=C.count,M=new Float32Array(w);for(let P=0;P<w;P+=2){const A=P*3,I=(P+1)*3,k=C.array[I]-C.array[A],B=C.array[I+1]-C.array[A+1],L=C.array[I+2]-C.array[A+2],q=Math.sqrt(k*k+B*B+L*L);M[P]=P===0?0:M[P-1],M[P+1]=M[P]+q}_.setAttribute("lineDistance",new d.Float32BufferAttribute(M,1))};const b=x.pattern?.[0]||.5,E=x.pattern?.[1]||.5,O=.1;T=new d.LineDashedMaterial({color:le.color,linewidth:le.linewidth||1,dashSize:b*O,gapSize:E*O,scale:O}),v(y)}else y.setIndex(f);l=new F(H.LineSegment),l.geometry=y,l.material=T}if(r.length>0){a&&U.checkAndRebasePositionsOnRTC(r,n);const c=new d.BufferGeometry().setFromPoints(r),u=new F(H.Point);u.geometry=c,u.material=Ei,l?console.warn("Line has both segments and points – consider using a Group"):l=u}if(l)return a&&(this.setRTCUserData(l),l.matrix.setPosition(n.x,n.y,n.z)),l.layers.enableAll(),l}loadLWPolyline(e,i,s){if(!e.vertices||e.vertices.length<2){S.warn("[Dxf] Invalid LWPolyline entity (handle '%s'), ignored!",e.handle);return}const r=[...e.vertices];if(e.extrusionDirectionX!==void 0&&e.extrusionDirectionY!==void 0&&e.extrusionDirectionZ!==void 0){j.set(e.extrusionDirectionX,e.extrusionDirectionY,e.extrusionDirectionZ);const g=V.getOcsMatrix(j).invert(),x=e.elevation!==void 0?e.elevation:0;r.forEach(y=>{j.set(y.x,y.y,x).applyMatrix4(g),y.x=j.x,y.y=j.y})}let n=us(r,e.shape);if(e.shape&&n.length>0&&!R.areVector3sEqual(n[0],n[n.length-1])&&n.push(n[0]),n.length<2){S.warn("[Dxf] Invalid LWPolyline entity (handle '%s'), ignored!",e.handle);return}let a=new F;const o=e.extendedData;if(o?.outlines){const g=o.outlines,x=[];g.forEach(v=>{const b=new d.Shape;v.forEach((E,O)=>{O===0?b.moveTo(E[0],E[1]):b.lineTo(E[0],E[1])}),b.closePath(),x.push(new d.ShapeGeometry(b))});const y=xe.mergeGeometries(x),T=new F(H.Mesh);T.geometry=y,T.material=_t,T.layers.enableAll(),T.layers.disable(Ce),a.add(T)}let l=!1;const c=new d.Vector3;this.enableRTC&&(l=U.checkAndRebasePositionsOnRTC(n,c));const u=U.getAdjacentNonRepeatPoints(n);if(u.length<2){S.warn("[Dxf] Invalid LWPolyline entity (handle '%s'), ignored!",e.handle);return}const f=e.constantWidth;if(this.enablePlineWidth){const g=r.some(x=>x.startWidth!==void 0||x.endWidth!==void 0);if(g||f!==void 0&&f>0){let x;const y=i.tables?.lineType?.lineTypes,T=this.getLineType(e,i,s),v=y?.[T];if(!v||!v.pattern||v.pattern.length===0)if(this.statsInfo.unsupportedPolylineCount++,g?x=this.createTaperedPolylineGeometry(r):x=U.convertWidthLineToMeshGeometry(u,f),!x)S.warn("[Dxf] Failed to convert line with width to mesh geometry: %s",e.handle);else{const b=new F(H.Mesh);b.geometry=x,b.material=_t,b.layers.enableAll(),b.layers.disable(Ce),a.add(b);const E=$.createOutline(x,le,b.matrix),O=new F(H.LineSegment);O.geometry=E.geometry,O.material=E.material,O.matrix=E.matrix,O.layers.enableAll(),O.layers.disable(Ce),a.add(O)}}}const m=new F(H.Line);return m.geometry=new d.BufferGeometry().setFromPoints(u),m.material=le,m.layers.enableAll(),a.children.length>0?a.add(m):a=m,l&&(this.setRTCUserData(a),a.matrix.setPosition(c)),a}createTaperedPolylineGeometry(e){if(!e||e.length<2)return null;const i=[],s=[],r=[],n=[];for(let l=0;l<e.length-1;l++){const c=e[l],u=e[l+1],f=u.x-c.x,m=u.y-c.y,g=Math.hypot(f,m);if(g===0)continue;const x=-m/g,y=f/g,T=l===0?c.startWidth:c.endWidth,v=u.startWidth,b=T/2,E=v/2;c.x+x*b,c.y+y*b,c.x-x*b,c.y-y*b;const O={x:u.x+x*E,y:u.y+y*E},_={x:u.x-x*E,y:u.y-y*E};r.push(O),n.push(_)}const a=r.length;for(let l=0;l<a;l++)i.push(r[l].x,r[l].y,0),i.push(n[l].x,n[l].y,0);for(let l=0;l<a-1;l++){const c=l*2;s.push(c,c+1,c+2),s.push(c+1,c+3,c+2)}const o=new d.BufferGeometry;return o.setAttribute("position",new d.Float32BufferAttribute(i,3)),o.setIndex(s),o}loadMLeader(e,i,s){const r=i.tables.dimStyle.dimStyles[e.dimensionStyle]||this.getDefaultDimensionStyle(i),n=e.contextData?.defaultTextContents;if(!n)return;const a=new F,o=li(n),l=this.getTextStyle(i,e),c=this.getMTextGroup(o,e,l,i,s),u=c&&c.object;if(u){u.matrix.decompose(Z,he,ze),e.contextData?.textLocation&&(Z.x+=e.contextData.textLocation.x,Z.y+=e.contextData.textLocation.y,u.matrix.compose(Z,he,ze)),We.makeEmpty();const f=F.getBox(u,We),m=f.getSize(j),g=m.x,x=m.y;let y=0,T=0;switch(e.contextData?.textAttachment){case 1:y=0,T=0;break;case 2:y-=g/2,T=0;break;case 3:y-=g,T=0;break;case 4:y=0,T+=x/2;break;case 5:y-=g/2,T+=x/2;break;case 6:y-=g,T+=x/2;break;case 7:y=0,T+=x;break;case 8:y-=g/2,T+=x;break;case 9:y-=g,T+=x;break;default:return}u.traverse(E=>{E.geometry&&E.geometry.translate(y,T,0)});let v=0;if(e.contextData?.textRotation&&(v=e.contextData.textRotation*Math.PI/180),e.contextData?.textDirection){const E=e.contextData.textDirection,O=new d.Vector3(E.x,E.y,E.z),_=O.clone().cross(Ae),C=Ae.angleTo(O);v+=_.z>0?-C:C}U.shouldRebasePositionOnRTC(Z)&&this.setRTCUserData(u),u.matrix.compose(Z,he,ze),e.contextData?.textLocation?j.set(e.contextData.textLocation.x,e.contextData.textLocation.y,0):j.set(0,0,0);const b=Z.clone().sub(j);Fe.makeTranslation(-b.x,-b.y,0),ne.makeRotationZ(v),u.matrix.multiply(Fe),u.matrix.multiply(ne),u.matrix.multiply(Fe.invert()),u.renderOrder=ge.Text,a.add(u)}if(e.leaderLineType!==0){const f=[],m=e.contextData?.leaders[0];if(!m)return a;const g=m.lastLeaderLinePoint;if(e.enableDogLeg){const E=new d.Vector3(g.x,g.y,g.z),O=m.doglegLength,_=new d.Vector3(m.doglegVector.x,m.doglegVector.y,m.doglegVector.z),C=_.multiplyScalar(O),w=E.clone().add(C);f.push(w,E)}const x=e.contextData?.leaders[0].leaderLines||[];for(let E=0;E<x.length;E++){const O=x[E].vertices[0],_=O.reverse().map(k=>new d.Vector3(k.x,k.y,k.z));let C=new d.Vector3(g.x,g.y,g.z);for(let k=0;k<_.length;k++)f.push(C,_[k]),C=_[k];const w=j.subVectors(f[0],f[1]).length(),M=e.arrowHeadSize||r.DIMASZ||2.5,P=e.arrowHeadScale||r.DIMSCALE||1,A=M*P;e.leaderLineType;let I="";if(e.arrowHeadId?I=e.arrowHeadId:r&&r.DIMLDRBLK&&(I=r.DIMLDRBLK),I){const k=this.getBlockByHandle(i.blocks,I);if(k&&k.entities)for(let B=0;B<k.entities.length;B++){const L=this.loadEntity(k.entities[B],i,e);if(L){const q=new d.Vector3(f[f.length-1].x,f[f.length-1].y,f[f.length-1].z),me=new d.Vector3(f[f.length-2].x,f[f.length-2].y,f[f.length-2].z),ue=Math.atan2(q.y-me.y,q.x-me.x);j.copy(q),Z.setScalar(A),he.setFromAxisAngle(Et,ue),L.matrix.compose(j,he,Z),a.add(L)}}}else this.loadDefaultLeadArrow(f[f.length-2],f[f.length-1],w/2e3,f)}const y=new d.Vector3;let T=!1;this.enableRTC&&(T=U.checkAndRebasePositionsOnRTC(f,y));const v=new d.BufferGeometry().setFromPoints(f),b=new F(H.LineSegment);b.geometry=v,b.material=le,b.renderOrder=ge.Line,T&&(this.setRTCUserData(b),b.matrix.setPosition(y.x,y.y,0)),a.add(b)}else return u?.traverse(f=>{f.layers.enableAll()}),u;return et.merge(a,!1),a.traverse(f=>{f.layers.enableAll()}),a.children.length===1?a.children[0]:a}loadLeader(e,i,s){const r=[];if(!e.vertices)return S.warn("[Dxf] Entity is missing vertices:",e.handle),void 0;if(e.vertices.length<2)return S.warn("leader's vertices number must be greater than 2"),void 0;const n=i.tables.dimStyle.dimStyles[e.dimensionStyle]||this.getDefaultDimensionStyle(i);let a=e.vertices;if(e.pathType===1&&(a=new d.SplineCurve(e.vertices).getPoints(50)),e.textWidth){const T=e.textWidth,v=new d.Vector3(a[a.length-1].x,a[a.length-1].y,a[a.length-1].z);if(e.direction===0){const b=new d.Vector3(1,0,0).multiplyScalar(T);a.push(b.add(v))}else{const b=new d.Vector3(-1,0,0).multiplyScalar(T);a.push(b.add(v))}}for(let T=0;T<a.length-1;T++){const v=a[T],b=a[T+1];r.push(v,b)}const o=j.subVectors(r[0],r[1]).setZ(0).length(),l=e.arrowHeight||n.DIMASZ||2.5,c=e.arrowHeadScale||n.DIMSCALE||1,u=l*c,f=new F;if(e.arrowFlag===1){let T="";e.arrowHeadBlockHandle?T=e.arrowHeadBlockHandle:n&&n.DIMLDRBLK&&(T=n.DIMLDRBLK);const v=this.getBlockByHandle(i.blocks,T);if(v&&v.entities){n&&(e.colorIndex=n.DIMCLRD||256,e.color=Nt(e.colorIndex));for(let b=0;b<v.entities.length;b++){const E=this.loadEntity(v.entities[b],i,e);if(E){const O=new d.Vector3(r[0].x,r[0].y,r[0].z),_=new d.Vector3(r[1].x,r[1].y,r[1].z),C=Math.atan2(O.y-_.y,O.x-_.x);j.copy(O),Z.setScalar(u),he.setFromAxisAngle(Et,C),E.matrix.compose(j,he,Z),f.add(E)}}}else this.loadDefaultLeadArrow(r[1],r[0],u/o/2,r)}if(r.length===0)return;const m=new d.Vector3;let g=!1;this.enableRTC&&(g=U.checkAndRebasePositionsOnRTC(r,m));const x=new d.BufferGeometry().setFromPoints(r),y=new F(H.Line);return y.geometry=x,y.material=le,y.renderOrder=ge.Line,g&&(this.setRTCUserData(y),y.matrix.setPosition(m.x,m.y,0)),f.children.length>0?(f.add(y),et.merge(f,!1),f.traverse(T=>{T.layers.enableAll()}),f.children.length===1?f.children[0]:f):(y.layers.enableAll(),y)}getTableTextOffset(e,i,s){const r=new d.Vector3;switch(e){case 1:break;case 2:r.setX(i/2);break;case 3:r.setX(i);break;case 4:r.setY(-s/2);break;case 5:r.set(i/2,-s/2,0);break;case 6:r.set(i,-s/2,0);break;case 7:r.setY(-s);break;case 8:r.set(i/2,-s,0);break;case 9:r.set(i,-s,0);break}return r}loadTable(e,i,s){if(!e.startPoint){S.warn("[Dxf] Entity is missing startPoint:",e.handle);return}if(e.cells.length===0){S.warn("[Dxf] Entity is missing cells:",e.handle);return}if(e.rowHeightArr.length===0){S.warn("[Dxf] Entity is missing rowHeightArr:",e.handle);return}if(e.columnWidthArr.length===0){S.warn("[Dxf] Entity is missing columnWidthArr:",e.handle);return}const r=new F,{cells:n,rowCount:a,columnCount:o,rowHeightArr:l,columnWidthArr:c}=e,u=[];let f=0;for(let y=0;y<a;y++){u[y]=[];for(let T=0;T<o;T++)u[y][T]=f<n.length?n[f++]:null}for(let y=0;y<a;y++)for(let T=0;T<o;T++){const v=u[y][T];if(!v||v.mergedValue!==0)continue;let b=1,E=1;for(;y+b<a&&u[y+b][T]&&u[y+b][T].mergedValue===1;)b++;for(;T+E<o&&u[y][T+E]&&u[y][T+E].mergedValue===1;)E++;v.rowSpan=b,v.colSpan=E}const m=[0];for(let y=0;y<a;y++)m.push(m[y]-l[y]);const g=[0];for(let y=0;y<o;y++)g.push(g[y]+c[y]);const x=[];for(let y=0;y<=a;y++){let T=g[0],v=!1;for(let b=0;b<o;b++){y>0&&u[y-1][b],y<a&&u[y][b];let E=!0;if(y===0||y===a)E=!0;else{const O=this._getMergeOwner(u,y-1,b,a,o),_=this._getMergeOwner(u,y,b,a,o);E=O!==_}E?v||(v=!0,T=g[b]):v&&(x.push(new d.Vector3(T,m[y],0),new d.Vector3(g[b],m[y],0)),v=!1)}v&&x.push(new d.Vector3(T,m[y],0),new d.Vector3(g[o],m[y],0))}for(let y=0;y<=o;y++){let T=m[0],v=!1;for(let b=0;b<a;b++){y>0&&u[b][y-1],y<o&&u[b][y];let E=!0;if(y===0||y===o)E=!0;else{const O=this._getMergeOwner(u,b,y-1,a,o),_=this._getMergeOwner(u,b,y,a,o);E=O!==_}E?v||(v=!0,T=m[b]):v&&(x.push(new d.Vector3(g[y],T,0),new d.Vector3(g[y],m[b],0)),v=!1)}v&&x.push(new d.Vector3(g[y],T,0),new d.Vector3(g[y],m[a],0))}if(x.length>0){const y=new d.BufferGeometry().setFromPoints(x),T=new F(H.LineSegment);T.geometry=y,T.material=le,T.layers.enableAll(),r.add(T)}for(let y=0;y<a;y++)for(let T=0;T<o;T++){const v=u[y][T];if(!v||v.mergedValue!==0)continue;const b=g[T],E=m[y];let O=0;for(let M=0;M<(v.colSpan||1);M++)O+=c[T+M];let _=0;for(let M=0;M<(v.rowSpan||1);M++)_+=l[y+M];v.colorIndex=e.colorIndex,v.height=v.textHeight||2.5;const C=this.getTableTextOffset(v.attachmentPoint||1,O,_);j.set(b,E,0),j.add(C),v.position=j.clone();const w=this.loadMText(v,i,s);w&&r.add(w)}if(e.blockRecordHandle){const y=this.getBlockByHandle(i.blocks,e.blockRecordHandle);if(y&&y.entities)for(const T of y.entities){T.isTable=!0;const v=this.loadEntity(T,i,e);v&&r.add(v)}}return r.matrix.decompose(j,he,ze),j.x+=e.startPoint.x,j.y+=e.startPoint.y,r.matrix.compose(j,he,ze),r}_getMergeOwner(e,i,s,r,n){let a=i,o=s;for(;a>=0&&e[a][o]&&e[a][o].mergedValue===1;){if(a>0&&e[a-1][o]&&e[a-1][o].mergedValue!==1){a--;break}if(o>0&&e[a][o-1]&&e[a][o-1].mergedValue!==1){o--;break}if(a>0)a--;else if(o>0)o--;else break}return e[a]?.[o]||null}loadDefaultLeadArrow(e,i,s,r){const n=s*(e.x-i.x),a=s*(e.y-i.y),o=a,l=-n,c=new d.Vector3(i.x+n+o/6,i.y+a+l/6,0),u=new d.Vector3(i.x+n-o/6,i.y+a-l/6,0);r.push(i,c),r.push(i,u),r.push(c,u)}getBlockByHandle(e,i){if(!this.blocksCache){this.blocksCache={};for(const s in e){const r=e[s];!this.blocksCache[r.ownerHandle]&&(this.blocksCache[r.ownerHandle]=r)}}return this.blocksCache[i]}static updateMaterialUniforms(e){e instanceof d.ShaderMaterial&&(e.uniforms.u_cameraZoom&&(e.uniforms.u_cameraZoom=V.CameraZoomUniform),e.uniforms.u_viewportScale&&(e.uniforms.u_viewportScale=V.ViewportScaleUniform))}static transformAngleByOcsMatrix(e,i){const s=j.set(Math.cos(i)*1,Math.sin(i)*1,0),r=s.applyMatrix4(e);return Math.atan2(r.y,r.x)}static getArcAnglesByOcsMatrix(e,i,s){let r=R.getArcAngleSpanInRadian(i,s);const n=V.transformAngleByOcsMatrix(e,i),a=V.transformAngleByOcsMatrix(e,s);let o;if(R.areNumbersClose(r,Math.PI)){r=1;const l=V.transformAngleByOcsMatrix(e,i+r);o=R.getArcAngleSpanInRadian(n,l)}else{if(R.areNumbersClose(r,Math.PI*2))return[n,n+Math.PI*2];o=R.getArcAngleSpanInRadian(n,a)}return R.areNumbersClose(r,o,1e-5)?[n,a]:[a,n]}loadArc(e,i,s){if(!e.radius||e.radius<.001)return S.warn("[Dxf] The radius of arc (handle '"+e.handle+"') is undefined, ignored!"),void 0;if(!e.radius||e.radius<.001)return S.warn("[Dxf] The radius of arc (handle '"+e.handle+"') is too small, ignored!"),void 0;const r=new d.Vector3(0,0,1);e.extrusionDirectionX!==void 0&&e.extrusionDirectionY!==void 0&&e.extrusionDirectionZ!==void 0&&r.set(e.extrusionDirectionX,e.extrusionDirectionY,e.extrusionDirectionZ);const n=V.getOcsMatrix(r);let a,o;if(e.type==="CIRCLE")a=e.startAngle||0,o=a+2*Math.PI;else{if(e.startAngle==null||e.endAngle==null||(a=e.startAngle,o=e.endAngle,R.areNumbersEqual(a,o,1e-6)))return;if(!R.areNumbersClose(R.getArcAngleSpanInRadian(a,o),Math.PI*2)){const _=V.getArcAnglesByOcsMatrix(n,a,o);a=_[0],o=_[1]}}const l=new d.ArcCurve(0,0,e.radius,a,o,this.angBase!==0);let c=1;const u=s;u?.xScale&&u?.yScale&&(c=Math.max(Math.abs(u.xScale),Math.abs(u.yScale)));const f=this.getDivision(a,o,e.radius*c),m=l.getPoints(f),g=new d.Vector3;let x=!1;this.enableRTC&&(x=U.checkAndRebasePositionsOnRTC(m,g));const y=new d.BufferGeometry().setFromPoints(m),T=new F(H.Line);T.geometry=y,T.material=le;const v=new d.Vector3;e.center&&(v.x=e.center.x,v.y=e.center.y);const b=new d.Vector3(e.center?.x,e.center?.y,e.center?.z).applyMatrix4(n.invert());v.x=b.x,v.y=b.y;const E=v,O=new F(H.Point);return O.geometry=Sr,O.material=Ei,O.userData.handle=e.handle,O.userData.isSnapObject=!0,O.userData.type="CircleCenter",O.layers.set(Ce),T.add(O),x?(this.setRTCUserData(T),E.x+=g.x,E.y+=g.y):U.shouldRebasePositionOnRTC(E)&&this.setRTCUserData(T),T.matrix.setPosition(E),T.layers.enableAll(),T}addTriangleFacingCamera(e,i,s,r){const n=new d.Vector3,a=new d.Vector3;n.subVectors(s,i),a.subVectors(r,i),n.cross(a);const o=new d.Vector3(i.x,i.y,i.z),l=new d.Vector3(s.x,s.y,s.z),c=new d.Vector3(r.x,r.y,r.z);n.z<0?e.push(c,l,o):e.push(o,l,c)}loadSolid(e,i,s){const r=e.points;if(!r||r.length<4)return;if(e.extrusionDirection&&e.extrusionDirection.z){j.set(0,0,e.extrusionDirection.z);const f=V.getOcsMatrix(j).invert();r.forEach(m=>{const g=j.set(m.x,m.y,0).applyMatrix4(f);m.x=g.x,m.y=g.y})}const n=[],a=[];this.addTriangleFacingCamera(n,r[0],r[1],r[2]),a.push(0,1,2),this.addTriangleFacingCamera(n,r[1],r[2],r[3]),a.push(3,4,5);const o=new d.Vector3;let l=!1;this.enableRTC&&(l=U.checkAndRebasePositionsOnRTC(n,o));const c=new d.BufferGeometry().setFromPoints(n);c.setIndex(a);const u=new F(H.Mesh);return u.geometry=c,u.material=_t,l&&(this.setRTCUserData(u),u.matrix.setPosition(o.x,o.y,0)),u.layers.enableAll(),u}getTextStyle(e,i){const s=e.tables?.style?.styles;return s?s[i.textStyle]||s.STANDARD||s.Standard||{}:{}}getDefaultDimensionStyle(e){return e.tables.dimStyle.dimStyles.STANDARD||e.tables.dimStyle.dimStyles.Standard||{}}getTextEncoding(e){return e?.bigFontFile&&e.bigFontFile.toUpperCase().startsWith("GB")?"gbk":"utf8"}getTextMesh(e,i,s,r){if(!e)return;const n=s?.styleName||"";if(s&&s.fontFile&&s.fontFile.endsWith(".shx")){const c=s.fontFile+"_"+s.styleName;!this.statsInfo.unsupportedTextStyles[c]&&(this.statsInfo.unsupportedTextStyles[c]=0),this.statsInfo.unsupportedTextStyles[c]++}let a=.8;const o={_TCH_DIM:1.45,ROMANS:1};n&&o[n]&&(a=o[n]),r.xScale&&(a*=r.xScale),a>1&&n&&(a*=s?.xScale||1,i=i||s?.textHeight||0),i===0&&(n?i=1:i=.2);const l=this.createTextMeshByText(e,s,i,0,i/12,a);return l.traverse(c=>{c.geometry&&c.geometry.scale(a,1,1)}),l}createTextMeshByText(e,i,s=12,r=0,n=0,a=1,o=1/0,l=0){const c=new F,u=[];let f=0,m=0;i?.xScale;const g=r+s,x=i?.fontFile||"",y=typeof x=="string"&&x.toLowerCase().endsWith(".shx"),T=y?s*.06:s*.04,v=[];for(let O=0;O<e.length;O++){const _=e[O];_!==" "&&_!==`
|
package/dist/dxf-viewer.js
CHANGED
|
@@ -14323,13 +14323,13 @@ class So {
|
|
|
14323
14323
|
i.backwards = !!(e.value & 2), i.mirrored = !!(e.value & 4), e = t.next();
|
|
14324
14324
|
break;
|
|
14325
14325
|
case 72:
|
|
14326
|
-
i.horizontalJustification = e.value, e = t.next();
|
|
14326
|
+
i.horizontalJustification = e.value, i.halign = e.value, e = t.next();
|
|
14327
14327
|
break;
|
|
14328
14328
|
case 73:
|
|
14329
14329
|
i.fieldLength = e.value, e = t.next();
|
|
14330
14330
|
break;
|
|
14331
14331
|
case 74:
|
|
14332
|
-
i.verticalJustification = e.value, e = t.next();
|
|
14332
|
+
i.verticalJustification = e.value, i.valign = e.value, e = t.next();
|
|
14333
14333
|
break;
|
|
14334
14334
|
case 100:
|
|
14335
14335
|
e = t.next();
|
|
@@ -14420,13 +14420,13 @@ class Oo {
|
|
|
14420
14420
|
i.backwards = !!(e.value & 2), i.mirrored = !!(e.value & 4), e = t.next();
|
|
14421
14421
|
break;
|
|
14422
14422
|
case 72:
|
|
14423
|
-
i.horizontalJustification = e.value, e = t.next();
|
|
14423
|
+
i.horizontalJustification = e.value, i.halign = e.value, e = t.next();
|
|
14424
14424
|
break;
|
|
14425
14425
|
case 73:
|
|
14426
14426
|
i.fieldLength = e.value, e = t.next();
|
|
14427
14427
|
break;
|
|
14428
14428
|
case 74:
|
|
14429
|
-
i.verticalJustification = e.value, e = t.next();
|
|
14429
|
+
i.verticalJustification = e.value, i.valign = e.value, e = t.next();
|
|
14430
14430
|
break;
|
|
14431
14431
|
case 100:
|
|
14432
14432
|
e = t.next();
|