@mlightcad/libredwg-converter 3.4.1 → 3.4.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.
@@ -558,7 +558,7 @@ class Ae extends se {
558
558
  }
559
559
  processHeader(e, n) {
560
560
  const s = e.header;
561
- s.CECOLOR && (s.CECOLOR.index >= 0 && s.CECOLOR.index <= 256 ? n.cecolor.colorIndex = s.CECOLOR.index : n.cecolor.setRGBValue(s.CECOLOR.rgb)), n.angBase = s.ANGBASE ?? 0, n.angDir = s.ANGDIR ?? 0, n.aunits = s.AUNITS ?? 0, s.EXTMAX && (n.extmax = s.EXTMAX), s.EXTMIN && (n.extmin = s.EXTMIN), n.insunits = s.INSUNITS ?? 1, n.pdmode = s.PDMODE ?? 0, n.pdsize = s.PDSIZE ?? 0;
561
+ s.CECOLOR && (s.CECOLOR.index >= 0 && s.CECOLOR.index <= 256 ? n.cecolor.colorIndex = s.CECOLOR.index : n.cecolor.setRGBValue(s.CECOLOR.rgb)), n.angBase = s.ANGBASE ?? 0, n.angDir = s.ANGDIR ?? 0, n.aunits = s.AUNITS ?? 0, n.celtscale = s.CELTSCALE ?? 1, n.ltscale = s.LTSCALE ?? 1, s.EXTMAX && (n.extmax = s.EXTMAX), s.EXTMIN && (n.extmin = s.EXTMIN), n.insunits = s.INSUNITS ?? 1, n.pdmode = s.PDMODE ?? 0, n.pdsize = s.PDSIZE ?? 0;
562
562
  }
563
563
  processCommonTableEntryAttrs(e, n) {
564
564
  n.name = e.name, n.objectId = e.handle.toString(), n.ownerId = e.ownerHandle.toString();
@@ -1 +1 @@
1
- (function(d,r){typeof exports=="object"&&typeof module<"u"?r(exports,require("@mlightcad/data-model")):typeof define=="function"&&define.amd?define(["exports","@mlightcad/data-model"],r):(d=typeof globalThis<"u"?globalThis:d||self,r(d["libredwg-converter"]={},d.dataModel))})(this,function(d,r){"use strict";class b{convert(e){const n=this.createEntity(e);return n&&this.processCommonAttrs(e,n),n}createEntity(e){return e.type=="3DFACE"?this.convertFace(e):e.type=="ARC"?this.convertArc(e):e.type=="CIRCLE"?this.convertCirle(e):e.type=="DIMENSION"?this.convertDimension(e):e.type=="ELLIPSE"?this.convertEllipse(e):e.type=="HATCH"?this.convertHatch(e):e.type=="IMAGE"?this.convertImage(e):e.type=="LEADER"?this.convertLeader(e):e.type=="LINE"?this.convertLine(e):e.type=="LWPOLYLINE"?this.convertLWPolyline(e):e.type=="MTEXT"?this.convertMText(e):e.type=="POINT"?this.convertPoint(e):e.type=="POLYLINE2D"?this.convertPolyline2d(e):e.type=="POLYLINE3D"?this.convertPolyline3d(e):e.type=="RAY"?this.convertRay(e):e.type=="SPLINE"?this.convertSpline(e):e.type=="ACAD_TABLE"?this.convertTable(e):e.type=="TEXT"?this.convertText(e):e.type=="SOLID"?this.convertSolid(e):e.type=="VIEWPORT"?this.convertViewport(e):e.type=="WIPEOUT"?this.convertWipeout(e):e.type=="XLINE"?this.convertXline(e):e.type=="INSERT"?this.convertBlockReference(e):null}convertFace(e){const n=new r.AcDbFace;return e.corner1&&n.setVertexAt(0,e.corner1),e.corner2&&n.setVertexAt(1,e.corner2),e.corner3&&n.setVertexAt(2,e.corner3),e.corner4&&n.setVertexAt(3,e.corner4),n.setEdgeInvisibilities(e.flag),n}convertArc(e){return new r.AcDbArc(e.center,e.radius,e.startAngle,e.endAngle,e.extrusionDirection??r.AcGeVector3d.Z_AXIS)}convertCirle(e){return new r.AcDbCircle(e.center,e.radius,e.extrusionDirection??r.AcGeVector3d.Z_AXIS)}convertEllipse(e){const n=new r.AcGeVector3d(e.majorAxisEndPoint),s=n.length();return new r.AcDbEllipse(e.center,e.extrusionDirection??r.AcGeVector3d.Z_AXIS,n,s,s*e.axisRatio,e.startAngle,e.endAngle)}convertLine(e){const n=e.startPoint,s=e.endPoint;return new r.AcDbLine(new r.AcGePoint3d(n.x,n.y,n.z),new r.AcGePoint3d(s.x,s.y,s.z))}convertSpline(e){try{if(e.numberOfControlPoints>0&&e.numberOfKnots>0)return new r.AcDbSpline(e.controlPoints,e.knots,e.weights,e.degree,!!(e.flag&1));if(e.numberOfFitPoints>0)return new r.AcDbSpline(e.fitPoints,"Uniform",e.degree,!!(e.flag&1))}catch(n){console.log(`Failed to convert spline with error: ${n}`)}return null}convertPoint(e){const n=new r.AcDbPoint;return n.position=e.position,n}convertSolid(e){const n=new r.AcDbTrace;return n.setPointAt(0,{...e.corner1,z:0}),n.setPointAt(1,{...e.corner2,z:0}),n.setPointAt(2,{...e.corner3,z:0}),n.setPointAt(3,e.corner4?{...e.corner4,z:0}:{...e.corner3,z:0}),n.thickness=e.thickness,n}convertLWPolyline(e){const n=new r.AcDbPolyline;return n.closed=!!(e.flag&512),e.vertices.forEach((s,t)=>{n.addVertexAt(t,new r.AcGePoint2d(s.x,s.y),s.bulge,s.startWidth,s.endWidth)}),n}convertPolyline2d(e){const n=!!(e.flag&1),s=[],t=[];e.vertices.map(i=>{i.flag&16||(s.push({x:i.x,y:i.y,z:i.z}),t.push(i.bulge??0))});let o=r.AcDbPoly2dType.SimplePoly;return e.flag&2?o=r.AcDbPoly2dType.FitCurvePoly:e.flag&4&&(e.smoothType==6?o=r.AcDbPoly2dType.CubicSplinePoly:e.smoothType==5&&(o=r.AcDbPoly2dType.QuadSplinePoly)),new r.AcDb2dPolyline(o,s,0,n,e.startWidth,e.endWidth,t)}convertPolyline3d(e){const n=!!(e.flag&1),s=[];e.vertices.map(o=>{o.flag&16||s.push({x:o.x,y:o.y,z:o.z})});let t=r.AcDbPoly3dType.SimplePoly;return e.flag&4&&(e.smoothType==6?t=r.AcDbPoly3dType.CubicSplinePoly:e.smoothType==5&&(t=r.AcDbPoly3dType.QuadSplinePoly)),new r.AcDb3dPolyline(t,s,n)}convertHatch(e){var t;const n=new r.AcDbHatch;return(t=e.definitionLines)==null||t.forEach(o=>{n.definitionLines.push({angle:o.angle,base:o.base,offset:o.offset,dashLengths:o.numberOfDashLengths>0?o.dashLengths:[]})}),n.isSolidFill=e.solidFill==1,n.hatchStyle=e.hatchStyle,n.patternName=e.patternName,n.patternType=e.patternType,n.patternAngle=e.patternAngle==null?0:e.patternAngle,n.patternScale=e.patternScale==null?0:e.patternScale,e.boundaryPaths.forEach(o=>{if(o.boundaryPathTypeFlag&2){const a=o,c=new r.AcGePolyline2d;c.closed=a.isClosed,a.vertices.forEach((p,l)=>{c.addVertexAt(l,{x:p.x,y:p.y,bulge:p.bulge})}),n.add(c)}else{const a=o,c=new r.AcGeLoop2d;a.edges.forEach(p=>{if(p!=null){if(p.type==1){const l=p;c.add(new r.AcGeLine2d(l.start,l.end))}else if(p.type==2){const l=p;c.add(new r.AcGeCircArc2d(l.center,l.radius,l.startAngle,l.endAngle,!l.isCCW))}else if(p.type==3){const l=p;new r.AcGeVector2d().subVectors(l.end,l.center);const f=Math.sqrt(Math.pow(l.end.x,2)+Math.pow(l.end.y,2)),D=f*l.lengthOfMinorAxis;let u=l.startAngle,g=l.endAngle;const A=Math.atan2(l.end.y,l.end.x);l.isCCW||(u=Math.PI*2-u,g=Math.PI*2-g),c.add(new r.AcGeEllipseArc2d({...l.center,z:0},f,D,u,g,!l.isCCW,A))}else if(p.type==4){const l=p;if(l.numberOfControlPoints>0&&l.numberOfKnots>0){const h=l.controlPoints.map(u=>({x:u.x,y:u.y,z:0}));let f=!0;const D=l.controlPoints.map(u=>(u.weight==null&&(f=!1),u.weight||1));c.add(new r.AcGeSpline3d(h,l.knots,f?D:void 0))}else if(l.numberOfFitData>0){const h=l.fitDatum.map(f=>({x:f.x,y:f.y,z:0}));c.add(new r.AcGeSpline3d(h,"Uniform"))}}}}),n.add(c)}}),n}convertTable(e){const n=new r.AcDbTable(e.name,e.rowCount,e.columnCount);return n.attachmentPoint=e.attachmentPoint,n.position.copy(e.startPoint),e.columnWidthArr.forEach((s,t)=>n.setColumnWidth(t,s)),e.rowHeightArr.forEach((s,t)=>n.setRowHeight(t,s)),e.cells.forEach((s,t)=>{n.setCell(t,s)}),n}convertText(e){const n=new r.AcDbText;return n.textString=e.text,n.styleName=e.styleName,n.height=e.textHeight,n.position.copy(e.startPoint),n.rotation=e.rotation,n.oblique=e.obliqueAngle??0,n.thickness=e.thickness,n.horizontalMode=e.halign,n.verticalMode=e.valign,n.widthFactor=e.xScale??1,n}convertMText(e){const n=new r.AcDbMText;return n.contents=e.text,e.styleName!=null&&(n.styleName=e.styleName),n.height=e.textHeight,n.width=e.rectWidth,n.rotation=e.rotation||0,n.location=e.insertionPoint,n.attachmentPoint=e.attachmentPoint,e.direction&&(n.direction=new r.AcGeVector3d(e.direction)),n.drawingDirection=e.drawingDirection,n}convertLeader(e){const n=new r.AcDbLeader;return e.vertices.forEach(s=>{n.appendVertex(s)}),n.hasArrowHead=e.isArrowheadEnabled,n.hasHookLine=e.isHooklineExists,n.isSplined=e.isSpline,n.dimensionStyle=e.styleName,n.annoType=e.leaderCreationFlag,n}convertDimension(e){if(e.subclassMarker=="AcDbAlignedDimension"||e.subclassMarker=="AcDbRotatedDimension"){const n=e,s=new r.AcDbAlignedDimension(n.subDefinitionPoint1,n.subDefinitionPoint2,n.definitionPoint);return n.insertionPoint&&(s.dimBlockPosition={x:n.insertionPoint.x,y:n.insertionPoint.y,z:0}),s.rotation=n.rotationAngle,this.processDimensionCommonAttrs(e,s),s}else if(e.subclassMarker=="AcDb3PointAngularDimension"){const n=e,s=new r.AcDb3PointAngularDimension(n.centerPoint,n.subDefinitionPoint1,n.subDefinitionPoint2,n.definitionPoint);return this.processDimensionCommonAttrs(e,s),s}else if(e.subclassMarker=="AcDbOrdinateDimension"){const n=e,s=new r.AcDbOrdinateDimension(n.subDefinitionPoint1,n.subDefinitionPoint2);return this.processDimensionCommonAttrs(e,s),s}else if(e.subclassMarker=="AcDbRadialDimension"){const n=e,s=new r.AcDbRadialDimension(n.definitionPoint,n.centerPoint,n.leaderLength);return this.processDimensionCommonAttrs(e,s),s}else if(e.subclassMarker=="AcDbDiametricDimension"){const n=e,s=new r.AcDbDiametricDimension(n.definitionPoint,n.centerPoint,n.leaderLength);return this.processDimensionCommonAttrs(e,s),s}return null}processImage(e,n){n.position.copy(e.position),n.brightness=e.brightness,n.contrast=e.contrast,n.fade=e.fade,n.imageDefId=e.imageDefHandle.toString(),n.isClipped=e.clipping>0,n.isShownClipped=(e.flags|4)>0,n.isImageShown=(e.flags|3)>0,n.isImageTransparent=(e.flags|8)>0,e.clippingBoundaryPath.forEach(s=>{n.clipBoundary.push(new r.AcGePoint2d(s))}),n.clipBoundaryType=e.clippingBoundaryType,n.width=Math.sqrt(e.uPixel.x**2+e.uPixel.y**2+e.uPixel.z**2)*e.imageSize.x,n.height=Math.sqrt(e.vPixel.x**2+e.vPixel.y**2+e.vPixel.z**2)*e.imageSize.y,n.rotation=Math.atan2(e.uPixel.y,e.uPixel.x)}convertImage(e){const n=new r.AcDbRasterImage;return this.processImage(e,n),n}convertWipeout(e){const n=new r.AcDbWipeout;return this.processImage(e,n),n}convertViewport(e){const n=new r.AcDbViewport;return n.number=e.viewportId,n.centerPoint.copy(e.viewportCenter),n.height=e.height,n.width=e.width,n.viewCenter.copy(e.displayCenter),n.viewHeight=e.viewHeight,n}convertRay(e){const n=new r.AcDbRay;return n.basePoint.copy(e.firstPoint),n.unitDir.copy(e.unitDirection),n}convertXline(e){const n=new r.AcDbXline;return n.basePoint.copy(e.firstPoint),n.unitDir.copy(e.unitDirection),n}convertBlockReference(e){const n=new r.AcDbBlockReference(e.name);return e.insertionPoint&&n.position.copy(e.insertionPoint),n.scaleFactors.x=e.xScale,n.scaleFactors.y=e.yScale,n.scaleFactors.z=e.zScale,n.rotation=e.rotation,n.normal.copy(e.extrusionDirection),n}processDimensionCommonAttrs(e,n){n.dimBlockId=e.name,n.textPosition.copy(e.textPoint),n.textRotation=e.textRotation||0,e.textLineSpacingFactor&&(n.textLineSpacingFactor=e.textLineSpacingFactor),e.textLineSpacingStyle&&(n.textLineSpacingStyle=e.textLineSpacingStyle),n.dimensionStyleName=e.styleName,n.dimensionText=e.text||"",n.measurement=e.measurement}processCommonAttrs(e,n){if(n.layer=e.layer||"0",n.objectId=e.handle.toString(),n.ownerId=e.ownerBlockRecordSoftId.toString(),e.lineType!=null&&(n.lineType=e.lineType),e.lineweight!=null&&(n.lineWeight=e.lineweight),e.lineTypeScale!=null&&(n.linetypeScale=e.lineTypeScale),e.color!=null&&n.color.setRGBValue(e.color),e.colorIndex!=null&&(n.color.colorIndex=e.colorIndex),e.colorName&&(n.color.colorName=e.colorName),e.isVisible!=null&&(n.visibility=e.isVisible),e.transparency!=null){const s=new r.AcCmTransparency;s.method=e.transparencyType,(s.isByBlock||s.isByBlock)&&(s.alpha=e.transparency),n.transparency=s}}}class y extends r.AcDbDatabaseConverter{constructor(e={}){super(e),e.useWorker=!0,e.parserWorkerUrl||(e.parserWorkerUrl="/assets/libredwg-parser-worker.js")}async parse(e){if(this.config.useWorker&&this.config.parserWorkerUrl){const n=r.createWorkerApi({workerUrl:this.config.parserWorkerUrl,maxConcurrentWorkers:1}),s=await n.execute(e);return n.destroy(),s.data}else throw new Error("dwg converter can run in web worker only!")}getFonts(e){const n=new Map;e.tables.BLOCK_RECORD.entries.forEach(i=>{n.set(i.name,i)});const s=new Map,t=i=>{if(i){const a=i.lastIndexOf(".");return a>=0?i.substring(0,a).toLowerCase():i.toLowerCase()}};e.tables.STYLE.entries.forEach(i=>{const a=[];let c=t(i.font);c&&a.push(c),c=t(i.bigFont),c&&a.push(c),s.set(i.name,a)});const o=new Set;return this.getFontsInBlock(e.entities,n,s,o),Array.from(o)}getFontsInBlock(e,n,s,t){const o=/\\f(.*?)\|/g;e.forEach(i=>{if(i.type=="MTEXT"){const a=i;[...a.text.matchAll(o)].forEach(p=>{t.add(p[1].toLowerCase())});const c=s.get(a.styleName);c==null||c.forEach(p=>t.add(p))}else if(i.type=="TEXT"){const a=i,c=s.get(a.styleName);c==null||c.forEach(p=>t.add(p))}else if(i.type=="INSERT"){const a=i,c=n.get(a.name);c&&this.getFontsInBlock(c.entities,n,s,t)}})}processLineTypes(e,n){e.tables.LTYPE.entries.forEach(t=>{const o={name:t.name,description:t.description,standardFlag:t.standardFlag,totalPatternLength:t.totalPatternLength,pattern:t.pattern},i=new r.AcDbLinetypeTableRecord(o);this.processCommonTableEntryAttrs(t,i),i.name=t.name,n.tables.linetypeTable.add(i)})}processTextStyles(e,n){e.tables.STYLE.entries.forEach(t=>{const o=new r.AcDbTextStyleTableRecord(t);this.processCommonTableEntryAttrs(t,o),n.tables.textStyleTable.add(o)})}processDimStyles(e,n){e.tables.DIMSTYLE.entries.forEach(t=>{const o={name:t.name,ownerId:t.ownerHandle.toString(),dimpost:t.DIMPOST||"",dimapost:t.DIMAPOST||"",dimscale:t.DIMSCALE,dimasz:t.DIMASZ,dimexo:t.DIMEXO,dimdli:t.DIMDLI,dimexe:t.DIMEXE,dimrnd:t.DIMRND,dimdle:t.DIMDLE,dimtp:t.DIMTP,dimtm:t.DIMTM,dimtxt:t.DIMTXT,dimcen:t.DIMCEN,dimtsz:t.DIMTSZ,dimaltf:t.DIMALTF,dimlfac:t.DIMLFAC,dimtvp:t.DIMTVP,dimtfac:t.DIMTFAC,dimgap:t.DIMGAP,dimaltrnd:t.DIMALTRND,dimtol:t.DIMTOL==null||t.DIMTOL==0?0:1,dimlim:t.DIMLIM==null||t.DIMLIM==0?0:1,dimtih:t.DIMTIH==null||t.DIMTIH==0?0:1,dimtoh:t.DIMTOH==null||t.DIMTOH==0?0:1,dimse1:t.DIMSE1==null||t.DIMSE1==0?0:1,dimse2:t.DIMSE2==null||t.DIMSE2==0?0:1,dimtad:t.DIMTAD,dimzin:t.DIMZIN,dimazin:t.DIMAZIN,dimalt:t.DIMALT,dimaltd:t.DIMALTD,dimtofl:t.DIMTOFL,dimsah:t.DIMSAH,dimtix:t.DIMTIX,dimsoxd:t.DIMSOXD,dimclrd:t.DIMCLRD,dimclre:t.DIMCLRE,dimclrt:t.DIMCLRT,dimadec:t.DIMADEC||0,dimunit:t.DIMUNIT||2,dimdec:t.DIMDEC,dimtdec:t.DIMTDEC,dimaltu:t.DIMALTU,dimalttd:t.DIMALTTD,dimaunit:t.DIMAUNIT,dimfrac:t.DIMFRAC,dimlunit:t.DIMLUNIT,dimdsep:t.DIMDSEP,dimtmove:t.DIMTMOVE||0,dimjust:t.DIMJUST,dimsd1:t.DIMSD1,dimsd2:t.DIMSD2,dimtolj:t.DIMTOLJ,dimtzin:t.DIMTZIN,dimaltz:t.DIMALTZ,dimalttz:t.DIMALTTZ,dimfit:t.DIMFIT||0,dimupt:t.DIMUPT,dimatfit:t.DIMATFIT,dimtxsty:"Standard",dimldrblk:"",dimblk:t.DIMBLK||"",dimblk1:t.DIMBLK1||"",dimblk2:t.DIMBLK2||"",dimlwd:t.DIMLWD,dimlwe:t.DIMLWE},i=new r.AcDbDimStyleTableRecord(o);this.processCommonTableEntryAttrs(t,i),n.tables.dimStyleTable.add(i)})}processLayers(e,n){e.tables.LAYER.entries.forEach(t=>{const o=new r.AcCmColor;o.colorIndex=t.colorIndex;const i=new r.AcDbLayerTableRecord({name:t.name,standardFlags:t.standardFlag,linetype:t.lineType,lineWeight:t.lineweight,isOff:t.off,color:o,isPlottable:t.plotFlag!=0});this.processCommonTableEntryAttrs(t,i),n.tables.layerTable.add(i)})}processViewports(e,n){e.tables.VPORT.entries.forEach(t=>{const o=new r.AcDbViewportTableRecord;this.processCommonTableEntryAttrs(t,o),t.circleSides&&(o.circleSides=t.circleSides),o.standardFlag=t.standardFlag,o.center.copy(t.center),o.lowerLeftCorner.copy(t.lowerLeftCorner),o.upperRightCorner.copy(t.upperRightCorner),t.snapBasePoint&&o.snapBase.copy(t.snapBasePoint),t.snapRotationAngle&&(o.snapAngle=t.snapRotationAngle),t.snapSpacing&&o.snapIncrements.copy(t.snapSpacing),t.majorGridLines&&(o.gridMajor=t.majorGridLines),t.gridSpacing&&o.gridIncrements.copy(t.gridSpacing),t.backgroundObjectId&&(o.backgroundObjectId=t.backgroundObjectId),o.gsView.center.copy(t.center),o.gsView.viewDirectionFromTarget.copy(t.viewDirectionFromTarget),o.gsView.viewTarget.copy(t.viewTarget),t.lensLength&&(o.gsView.lensLength=t.lensLength),t.frontClippingPlane&&(o.gsView.frontClippingPlane=t.frontClippingPlane),t.backClippingPlane&&(o.gsView.backClippingPlane=t.backClippingPlane),t.viewHeight&&(o.gsView.viewHeight=t.viewHeight),t.viewTwistAngle&&(o.gsView.viewTwistAngle=t.viewTwistAngle),t.frozenLayers&&(o.gsView.frozenLayers=t.frozenLayers),t.styleSheet&&(o.gsView.styleSheet=t.styleSheet),t.renderMode&&(o.gsView.renderMode=t.renderMode),t.viewMode&&(o.gsView.viewMode=t.viewMode),t.ucsIconSetting&&(o.gsView.ucsIconSetting=t.ucsIconSetting),t.ucsOrigin&&o.gsView.ucsOrigin.copy(t.ucsOrigin),t.ucsXAxis&&o.gsView.ucsXAxis.copy(t.ucsXAxis),t.ucsYAxis&&o.gsView.ucsYAxis.copy(t.ucsYAxis),t.orthographicType&&(o.gsView.orthographicType=t.orthographicType),t.shadePlotSetting&&(o.gsView.shadePlotSetting=t.shadePlotSetting),t.shadePlotObjectId&&(o.gsView.shadePlotObjectId=t.shadePlotObjectId),t.visualStyleObjectId&&(o.gsView.visualStyleObjectId=t.visualStyleObjectId),t.isDefaultLightingOn&&(o.gsView.isDefaultLightingOn=t.isDefaultLightingOn),t.defaultLightingType&&(o.gsView.defaultLightingType=t.defaultLightingType),t.brightness&&(o.gsView.brightness=t.brightness),t.contrast&&(o.gsView.contrast=t.contrast),t.ambientColor&&(o.gsView.ambientColor=t.ambientColor),n.tables.viewportTable.add(o)})}processBlockTables(e,n){e.tables.BLOCK_RECORD.entries.forEach(t=>{let o=n.tables.blockTable.getAt(t.name);o||(o=new r.AcDbBlockTableRecord,o.objectId=t.handle.toString(),o.name=t.name,o.ownerId=t.ownerHandle.toString(),o.origin.copy(t.basePoint),o.layoutId=t.layout.toString(),n.tables.blockTable.add(o)),!o.isModelSapce&&!o.isPaperSapce&&t.entities&&t.entities.length>0&&this.processEntitiesInBlock(t.entities,o)})}processBlocks(e,n){}async processEntitiesInBlock(e,n){const s=new b,t=e.length,o=[];for(let i=0;i<t;i++){const a=e[i],c=s.convert(a);c&&o.push(c)}n.appendEntity(o)}async processEntities(e,n,s,t,o){const i=new b;let a=e.entities;const c=a.length,p=new r.AcDbBatchProcessing(c,100-t.value,s);this.config.convertByEntityType&&(a=this.groupAndFlattenByType(a));const l=n.tables.blockTable.modelSpace;await p.processChunk(async(h,f)=>{const D=[];for(let u=h;u<f;u++){const g=a[u],A=i.convert(g);A&&D.push(A)}if(l.appendEntity(D),o){let u=t.value+f/c*(100-t.value);u>100&&(u=100),await o(u,"ENTITY","IN-PROGRESS")}})}processHeader(e,n){const s=e.header;s.CECOLOR&&(s.CECOLOR.index>=0&&s.CECOLOR.index<=256?n.cecolor.colorIndex=s.CECOLOR.index:n.cecolor.setRGBValue(s.CECOLOR.rgb)),n.angBase=s.ANGBASE??0,n.angDir=s.ANGDIR??0,n.aunits=s.AUNITS??0,s.EXTMAX&&(n.extmax=s.EXTMAX),s.EXTMIN&&(n.extmin=s.EXTMIN),n.insunits=s.INSUNITS??1,n.pdmode=s.PDMODE??0,n.pdsize=s.PDSIZE??0}processCommonTableEntryAttrs(e,n){n.name=e.name,n.objectId=e.handle.toString(),n.ownerId=e.ownerHandle.toString()}processObjects(e,n){this.processLayouts(e,n),this.processImageDefs(e,n)}processLayouts(e,n){const s=n.dictionaries.layouts;e.objects.LAYOUT.forEach(o=>{const i=new r.AcDbLayout;i.layoutName=o.layoutName,i.tabOrder=o.tabOrder;const a=n.tables.blockTable.newIterator();i.objectId=o.handle.toString();for(const c of a)if(c.layoutId===i.objectId){i.blockTableRecordId=c.objectId;break}i.blockTableRecordId||o.layoutName==="Model"&&(i.blockTableRecordId=n.tables.blockTable.modelSpace.objectId),i.limits.min.copy(o.minLimit),i.limits.max.copy(o.maxLimit),i.extents.min.copy(o.minExtent),i.extents.max.copy(o.maxExtent),this.processCommonObjectAttrs(o,i),s.setAt(i.layoutName,i)})}processImageDefs(e,n){const s=n.dictionaries.imageDefs;e.objects.IMAGEDEF.forEach(o=>{const i=new r.AcDbRasterImageDef;i.sourceFileName=o.fileName,this.processCommonObjectAttrs(o,i),s.setAt(i.objectId,i)})}processCommonObjectAttrs(e,n){n.objectId=e.handle.toString(),n.ownerId=e.ownerHandle.toString()}groupAndFlattenByType(e){const n={},s=[];for(const t of e)n[t.type]||(n[t.type]=[],s.push(t.type)),n[t.type].push(t);return s.flatMap(t=>n[t])}}d.AcDbLibreDwgConverter=y,Object.defineProperty(d,Symbol.toStringTag,{value:"Module"})});
1
+ (function(d,r){typeof exports=="object"&&typeof module<"u"?r(exports,require("@mlightcad/data-model")):typeof define=="function"&&define.amd?define(["exports","@mlightcad/data-model"],r):(d=typeof globalThis<"u"?globalThis:d||self,r(d["libredwg-converter"]={},d.dataModel))})(this,function(d,r){"use strict";class b{convert(e){const n=this.createEntity(e);return n&&this.processCommonAttrs(e,n),n}createEntity(e){return e.type=="3DFACE"?this.convertFace(e):e.type=="ARC"?this.convertArc(e):e.type=="CIRCLE"?this.convertCirle(e):e.type=="DIMENSION"?this.convertDimension(e):e.type=="ELLIPSE"?this.convertEllipse(e):e.type=="HATCH"?this.convertHatch(e):e.type=="IMAGE"?this.convertImage(e):e.type=="LEADER"?this.convertLeader(e):e.type=="LINE"?this.convertLine(e):e.type=="LWPOLYLINE"?this.convertLWPolyline(e):e.type=="MTEXT"?this.convertMText(e):e.type=="POINT"?this.convertPoint(e):e.type=="POLYLINE2D"?this.convertPolyline2d(e):e.type=="POLYLINE3D"?this.convertPolyline3d(e):e.type=="RAY"?this.convertRay(e):e.type=="SPLINE"?this.convertSpline(e):e.type=="ACAD_TABLE"?this.convertTable(e):e.type=="TEXT"?this.convertText(e):e.type=="SOLID"?this.convertSolid(e):e.type=="VIEWPORT"?this.convertViewport(e):e.type=="WIPEOUT"?this.convertWipeout(e):e.type=="XLINE"?this.convertXline(e):e.type=="INSERT"?this.convertBlockReference(e):null}convertFace(e){const n=new r.AcDbFace;return e.corner1&&n.setVertexAt(0,e.corner1),e.corner2&&n.setVertexAt(1,e.corner2),e.corner3&&n.setVertexAt(2,e.corner3),e.corner4&&n.setVertexAt(3,e.corner4),n.setEdgeInvisibilities(e.flag),n}convertArc(e){return new r.AcDbArc(e.center,e.radius,e.startAngle,e.endAngle,e.extrusionDirection??r.AcGeVector3d.Z_AXIS)}convertCirle(e){return new r.AcDbCircle(e.center,e.radius,e.extrusionDirection??r.AcGeVector3d.Z_AXIS)}convertEllipse(e){const n=new r.AcGeVector3d(e.majorAxisEndPoint),s=n.length();return new r.AcDbEllipse(e.center,e.extrusionDirection??r.AcGeVector3d.Z_AXIS,n,s,s*e.axisRatio,e.startAngle,e.endAngle)}convertLine(e){const n=e.startPoint,s=e.endPoint;return new r.AcDbLine(new r.AcGePoint3d(n.x,n.y,n.z),new r.AcGePoint3d(s.x,s.y,s.z))}convertSpline(e){try{if(e.numberOfControlPoints>0&&e.numberOfKnots>0)return new r.AcDbSpline(e.controlPoints,e.knots,e.weights,e.degree,!!(e.flag&1));if(e.numberOfFitPoints>0)return new r.AcDbSpline(e.fitPoints,"Uniform",e.degree,!!(e.flag&1))}catch(n){console.log(`Failed to convert spline with error: ${n}`)}return null}convertPoint(e){const n=new r.AcDbPoint;return n.position=e.position,n}convertSolid(e){const n=new r.AcDbTrace;return n.setPointAt(0,{...e.corner1,z:0}),n.setPointAt(1,{...e.corner2,z:0}),n.setPointAt(2,{...e.corner3,z:0}),n.setPointAt(3,e.corner4?{...e.corner4,z:0}:{...e.corner3,z:0}),n.thickness=e.thickness,n}convertLWPolyline(e){const n=new r.AcDbPolyline;return n.closed=!!(e.flag&512),e.vertices.forEach((s,t)=>{n.addVertexAt(t,new r.AcGePoint2d(s.x,s.y),s.bulge,s.startWidth,s.endWidth)}),n}convertPolyline2d(e){const n=!!(e.flag&1),s=[],t=[];e.vertices.map(i=>{i.flag&16||(s.push({x:i.x,y:i.y,z:i.z}),t.push(i.bulge??0))});let o=r.AcDbPoly2dType.SimplePoly;return e.flag&2?o=r.AcDbPoly2dType.FitCurvePoly:e.flag&4&&(e.smoothType==6?o=r.AcDbPoly2dType.CubicSplinePoly:e.smoothType==5&&(o=r.AcDbPoly2dType.QuadSplinePoly)),new r.AcDb2dPolyline(o,s,0,n,e.startWidth,e.endWidth,t)}convertPolyline3d(e){const n=!!(e.flag&1),s=[];e.vertices.map(o=>{o.flag&16||s.push({x:o.x,y:o.y,z:o.z})});let t=r.AcDbPoly3dType.SimplePoly;return e.flag&4&&(e.smoothType==6?t=r.AcDbPoly3dType.CubicSplinePoly:e.smoothType==5&&(t=r.AcDbPoly3dType.QuadSplinePoly)),new r.AcDb3dPolyline(t,s,n)}convertHatch(e){var t;const n=new r.AcDbHatch;return(t=e.definitionLines)==null||t.forEach(o=>{n.definitionLines.push({angle:o.angle,base:o.base,offset:o.offset,dashLengths:o.numberOfDashLengths>0?o.dashLengths:[]})}),n.isSolidFill=e.solidFill==1,n.hatchStyle=e.hatchStyle,n.patternName=e.patternName,n.patternType=e.patternType,n.patternAngle=e.patternAngle==null?0:e.patternAngle,n.patternScale=e.patternScale==null?0:e.patternScale,e.boundaryPaths.forEach(o=>{if(o.boundaryPathTypeFlag&2){const a=o,c=new r.AcGePolyline2d;c.closed=a.isClosed,a.vertices.forEach((p,l)=>{c.addVertexAt(l,{x:p.x,y:p.y,bulge:p.bulge})}),n.add(c)}else{const a=o,c=new r.AcGeLoop2d;a.edges.forEach(p=>{if(p!=null){if(p.type==1){const l=p;c.add(new r.AcGeLine2d(l.start,l.end))}else if(p.type==2){const l=p;c.add(new r.AcGeCircArc2d(l.center,l.radius,l.startAngle,l.endAngle,!l.isCCW))}else if(p.type==3){const l=p;new r.AcGeVector2d().subVectors(l.end,l.center);const f=Math.sqrt(Math.pow(l.end.x,2)+Math.pow(l.end.y,2)),D=f*l.lengthOfMinorAxis;let u=l.startAngle,g=l.endAngle;const A=Math.atan2(l.end.y,l.end.x);l.isCCW||(u=Math.PI*2-u,g=Math.PI*2-g),c.add(new r.AcGeEllipseArc2d({...l.center,z:0},f,D,u,g,!l.isCCW,A))}else if(p.type==4){const l=p;if(l.numberOfControlPoints>0&&l.numberOfKnots>0){const h=l.controlPoints.map(u=>({x:u.x,y:u.y,z:0}));let f=!0;const D=l.controlPoints.map(u=>(u.weight==null&&(f=!1),u.weight||1));c.add(new r.AcGeSpline3d(h,l.knots,f?D:void 0))}else if(l.numberOfFitData>0){const h=l.fitDatum.map(f=>({x:f.x,y:f.y,z:0}));c.add(new r.AcGeSpline3d(h,"Uniform"))}}}}),n.add(c)}}),n}convertTable(e){const n=new r.AcDbTable(e.name,e.rowCount,e.columnCount);return n.attachmentPoint=e.attachmentPoint,n.position.copy(e.startPoint),e.columnWidthArr.forEach((s,t)=>n.setColumnWidth(t,s)),e.rowHeightArr.forEach((s,t)=>n.setRowHeight(t,s)),e.cells.forEach((s,t)=>{n.setCell(t,s)}),n}convertText(e){const n=new r.AcDbText;return n.textString=e.text,n.styleName=e.styleName,n.height=e.textHeight,n.position.copy(e.startPoint),n.rotation=e.rotation,n.oblique=e.obliqueAngle??0,n.thickness=e.thickness,n.horizontalMode=e.halign,n.verticalMode=e.valign,n.widthFactor=e.xScale??1,n}convertMText(e){const n=new r.AcDbMText;return n.contents=e.text,e.styleName!=null&&(n.styleName=e.styleName),n.height=e.textHeight,n.width=e.rectWidth,n.rotation=e.rotation||0,n.location=e.insertionPoint,n.attachmentPoint=e.attachmentPoint,e.direction&&(n.direction=new r.AcGeVector3d(e.direction)),n.drawingDirection=e.drawingDirection,n}convertLeader(e){const n=new r.AcDbLeader;return e.vertices.forEach(s=>{n.appendVertex(s)}),n.hasArrowHead=e.isArrowheadEnabled,n.hasHookLine=e.isHooklineExists,n.isSplined=e.isSpline,n.dimensionStyle=e.styleName,n.annoType=e.leaderCreationFlag,n}convertDimension(e){if(e.subclassMarker=="AcDbAlignedDimension"||e.subclassMarker=="AcDbRotatedDimension"){const n=e,s=new r.AcDbAlignedDimension(n.subDefinitionPoint1,n.subDefinitionPoint2,n.definitionPoint);return n.insertionPoint&&(s.dimBlockPosition={x:n.insertionPoint.x,y:n.insertionPoint.y,z:0}),s.rotation=n.rotationAngle,this.processDimensionCommonAttrs(e,s),s}else if(e.subclassMarker=="AcDb3PointAngularDimension"){const n=e,s=new r.AcDb3PointAngularDimension(n.centerPoint,n.subDefinitionPoint1,n.subDefinitionPoint2,n.definitionPoint);return this.processDimensionCommonAttrs(e,s),s}else if(e.subclassMarker=="AcDbOrdinateDimension"){const n=e,s=new r.AcDbOrdinateDimension(n.subDefinitionPoint1,n.subDefinitionPoint2);return this.processDimensionCommonAttrs(e,s),s}else if(e.subclassMarker=="AcDbRadialDimension"){const n=e,s=new r.AcDbRadialDimension(n.definitionPoint,n.centerPoint,n.leaderLength);return this.processDimensionCommonAttrs(e,s),s}else if(e.subclassMarker=="AcDbDiametricDimension"){const n=e,s=new r.AcDbDiametricDimension(n.definitionPoint,n.centerPoint,n.leaderLength);return this.processDimensionCommonAttrs(e,s),s}return null}processImage(e,n){n.position.copy(e.position),n.brightness=e.brightness,n.contrast=e.contrast,n.fade=e.fade,n.imageDefId=e.imageDefHandle.toString(),n.isClipped=e.clipping>0,n.isShownClipped=(e.flags|4)>0,n.isImageShown=(e.flags|3)>0,n.isImageTransparent=(e.flags|8)>0,e.clippingBoundaryPath.forEach(s=>{n.clipBoundary.push(new r.AcGePoint2d(s))}),n.clipBoundaryType=e.clippingBoundaryType,n.width=Math.sqrt(e.uPixel.x**2+e.uPixel.y**2+e.uPixel.z**2)*e.imageSize.x,n.height=Math.sqrt(e.vPixel.x**2+e.vPixel.y**2+e.vPixel.z**2)*e.imageSize.y,n.rotation=Math.atan2(e.uPixel.y,e.uPixel.x)}convertImage(e){const n=new r.AcDbRasterImage;return this.processImage(e,n),n}convertWipeout(e){const n=new r.AcDbWipeout;return this.processImage(e,n),n}convertViewport(e){const n=new r.AcDbViewport;return n.number=e.viewportId,n.centerPoint.copy(e.viewportCenter),n.height=e.height,n.width=e.width,n.viewCenter.copy(e.displayCenter),n.viewHeight=e.viewHeight,n}convertRay(e){const n=new r.AcDbRay;return n.basePoint.copy(e.firstPoint),n.unitDir.copy(e.unitDirection),n}convertXline(e){const n=new r.AcDbXline;return n.basePoint.copy(e.firstPoint),n.unitDir.copy(e.unitDirection),n}convertBlockReference(e){const n=new r.AcDbBlockReference(e.name);return e.insertionPoint&&n.position.copy(e.insertionPoint),n.scaleFactors.x=e.xScale,n.scaleFactors.y=e.yScale,n.scaleFactors.z=e.zScale,n.rotation=e.rotation,n.normal.copy(e.extrusionDirection),n}processDimensionCommonAttrs(e,n){n.dimBlockId=e.name,n.textPosition.copy(e.textPoint),n.textRotation=e.textRotation||0,e.textLineSpacingFactor&&(n.textLineSpacingFactor=e.textLineSpacingFactor),e.textLineSpacingStyle&&(n.textLineSpacingStyle=e.textLineSpacingStyle),n.dimensionStyleName=e.styleName,n.dimensionText=e.text||"",n.measurement=e.measurement}processCommonAttrs(e,n){if(n.layer=e.layer||"0",n.objectId=e.handle.toString(),n.ownerId=e.ownerBlockRecordSoftId.toString(),e.lineType!=null&&(n.lineType=e.lineType),e.lineweight!=null&&(n.lineWeight=e.lineweight),e.lineTypeScale!=null&&(n.linetypeScale=e.lineTypeScale),e.color!=null&&n.color.setRGBValue(e.color),e.colorIndex!=null&&(n.color.colorIndex=e.colorIndex),e.colorName&&(n.color.colorName=e.colorName),e.isVisible!=null&&(n.visibility=e.isVisible),e.transparency!=null){const s=new r.AcCmTransparency;s.method=e.transparencyType,(s.isByBlock||s.isByBlock)&&(s.alpha=e.transparency),n.transparency=s}}}class y extends r.AcDbDatabaseConverter{constructor(e={}){super(e),e.useWorker=!0,e.parserWorkerUrl||(e.parserWorkerUrl="/assets/libredwg-parser-worker.js")}async parse(e){if(this.config.useWorker&&this.config.parserWorkerUrl){const n=r.createWorkerApi({workerUrl:this.config.parserWorkerUrl,maxConcurrentWorkers:1}),s=await n.execute(e);return n.destroy(),s.data}else throw new Error("dwg converter can run in web worker only!")}getFonts(e){const n=new Map;e.tables.BLOCK_RECORD.entries.forEach(i=>{n.set(i.name,i)});const s=new Map,t=i=>{if(i){const a=i.lastIndexOf(".");return a>=0?i.substring(0,a).toLowerCase():i.toLowerCase()}};e.tables.STYLE.entries.forEach(i=>{const a=[];let c=t(i.font);c&&a.push(c),c=t(i.bigFont),c&&a.push(c),s.set(i.name,a)});const o=new Set;return this.getFontsInBlock(e.entities,n,s,o),Array.from(o)}getFontsInBlock(e,n,s,t){const o=/\\f(.*?)\|/g;e.forEach(i=>{if(i.type=="MTEXT"){const a=i;[...a.text.matchAll(o)].forEach(p=>{t.add(p[1].toLowerCase())});const c=s.get(a.styleName);c==null||c.forEach(p=>t.add(p))}else if(i.type=="TEXT"){const a=i,c=s.get(a.styleName);c==null||c.forEach(p=>t.add(p))}else if(i.type=="INSERT"){const a=i,c=n.get(a.name);c&&this.getFontsInBlock(c.entities,n,s,t)}})}processLineTypes(e,n){e.tables.LTYPE.entries.forEach(t=>{const o={name:t.name,description:t.description,standardFlag:t.standardFlag,totalPatternLength:t.totalPatternLength,pattern:t.pattern},i=new r.AcDbLinetypeTableRecord(o);this.processCommonTableEntryAttrs(t,i),i.name=t.name,n.tables.linetypeTable.add(i)})}processTextStyles(e,n){e.tables.STYLE.entries.forEach(t=>{const o=new r.AcDbTextStyleTableRecord(t);this.processCommonTableEntryAttrs(t,o),n.tables.textStyleTable.add(o)})}processDimStyles(e,n){e.tables.DIMSTYLE.entries.forEach(t=>{const o={name:t.name,ownerId:t.ownerHandle.toString(),dimpost:t.DIMPOST||"",dimapost:t.DIMAPOST||"",dimscale:t.DIMSCALE,dimasz:t.DIMASZ,dimexo:t.DIMEXO,dimdli:t.DIMDLI,dimexe:t.DIMEXE,dimrnd:t.DIMRND,dimdle:t.DIMDLE,dimtp:t.DIMTP,dimtm:t.DIMTM,dimtxt:t.DIMTXT,dimcen:t.DIMCEN,dimtsz:t.DIMTSZ,dimaltf:t.DIMALTF,dimlfac:t.DIMLFAC,dimtvp:t.DIMTVP,dimtfac:t.DIMTFAC,dimgap:t.DIMGAP,dimaltrnd:t.DIMALTRND,dimtol:t.DIMTOL==null||t.DIMTOL==0?0:1,dimlim:t.DIMLIM==null||t.DIMLIM==0?0:1,dimtih:t.DIMTIH==null||t.DIMTIH==0?0:1,dimtoh:t.DIMTOH==null||t.DIMTOH==0?0:1,dimse1:t.DIMSE1==null||t.DIMSE1==0?0:1,dimse2:t.DIMSE2==null||t.DIMSE2==0?0:1,dimtad:t.DIMTAD,dimzin:t.DIMZIN,dimazin:t.DIMAZIN,dimalt:t.DIMALT,dimaltd:t.DIMALTD,dimtofl:t.DIMTOFL,dimsah:t.DIMSAH,dimtix:t.DIMTIX,dimsoxd:t.DIMSOXD,dimclrd:t.DIMCLRD,dimclre:t.DIMCLRE,dimclrt:t.DIMCLRT,dimadec:t.DIMADEC||0,dimunit:t.DIMUNIT||2,dimdec:t.DIMDEC,dimtdec:t.DIMTDEC,dimaltu:t.DIMALTU,dimalttd:t.DIMALTTD,dimaunit:t.DIMAUNIT,dimfrac:t.DIMFRAC,dimlunit:t.DIMLUNIT,dimdsep:t.DIMDSEP,dimtmove:t.DIMTMOVE||0,dimjust:t.DIMJUST,dimsd1:t.DIMSD1,dimsd2:t.DIMSD2,dimtolj:t.DIMTOLJ,dimtzin:t.DIMTZIN,dimaltz:t.DIMALTZ,dimalttz:t.DIMALTTZ,dimfit:t.DIMFIT||0,dimupt:t.DIMUPT,dimatfit:t.DIMATFIT,dimtxsty:"Standard",dimldrblk:"",dimblk:t.DIMBLK||"",dimblk1:t.DIMBLK1||"",dimblk2:t.DIMBLK2||"",dimlwd:t.DIMLWD,dimlwe:t.DIMLWE},i=new r.AcDbDimStyleTableRecord(o);this.processCommonTableEntryAttrs(t,i),n.tables.dimStyleTable.add(i)})}processLayers(e,n){e.tables.LAYER.entries.forEach(t=>{const o=new r.AcCmColor;o.colorIndex=t.colorIndex;const i=new r.AcDbLayerTableRecord({name:t.name,standardFlags:t.standardFlag,linetype:t.lineType,lineWeight:t.lineweight,isOff:t.off,color:o,isPlottable:t.plotFlag!=0});this.processCommonTableEntryAttrs(t,i),n.tables.layerTable.add(i)})}processViewports(e,n){e.tables.VPORT.entries.forEach(t=>{const o=new r.AcDbViewportTableRecord;this.processCommonTableEntryAttrs(t,o),t.circleSides&&(o.circleSides=t.circleSides),o.standardFlag=t.standardFlag,o.center.copy(t.center),o.lowerLeftCorner.copy(t.lowerLeftCorner),o.upperRightCorner.copy(t.upperRightCorner),t.snapBasePoint&&o.snapBase.copy(t.snapBasePoint),t.snapRotationAngle&&(o.snapAngle=t.snapRotationAngle),t.snapSpacing&&o.snapIncrements.copy(t.snapSpacing),t.majorGridLines&&(o.gridMajor=t.majorGridLines),t.gridSpacing&&o.gridIncrements.copy(t.gridSpacing),t.backgroundObjectId&&(o.backgroundObjectId=t.backgroundObjectId),o.gsView.center.copy(t.center),o.gsView.viewDirectionFromTarget.copy(t.viewDirectionFromTarget),o.gsView.viewTarget.copy(t.viewTarget),t.lensLength&&(o.gsView.lensLength=t.lensLength),t.frontClippingPlane&&(o.gsView.frontClippingPlane=t.frontClippingPlane),t.backClippingPlane&&(o.gsView.backClippingPlane=t.backClippingPlane),t.viewHeight&&(o.gsView.viewHeight=t.viewHeight),t.viewTwistAngle&&(o.gsView.viewTwistAngle=t.viewTwistAngle),t.frozenLayers&&(o.gsView.frozenLayers=t.frozenLayers),t.styleSheet&&(o.gsView.styleSheet=t.styleSheet),t.renderMode&&(o.gsView.renderMode=t.renderMode),t.viewMode&&(o.gsView.viewMode=t.viewMode),t.ucsIconSetting&&(o.gsView.ucsIconSetting=t.ucsIconSetting),t.ucsOrigin&&o.gsView.ucsOrigin.copy(t.ucsOrigin),t.ucsXAxis&&o.gsView.ucsXAxis.copy(t.ucsXAxis),t.ucsYAxis&&o.gsView.ucsYAxis.copy(t.ucsYAxis),t.orthographicType&&(o.gsView.orthographicType=t.orthographicType),t.shadePlotSetting&&(o.gsView.shadePlotSetting=t.shadePlotSetting),t.shadePlotObjectId&&(o.gsView.shadePlotObjectId=t.shadePlotObjectId),t.visualStyleObjectId&&(o.gsView.visualStyleObjectId=t.visualStyleObjectId),t.isDefaultLightingOn&&(o.gsView.isDefaultLightingOn=t.isDefaultLightingOn),t.defaultLightingType&&(o.gsView.defaultLightingType=t.defaultLightingType),t.brightness&&(o.gsView.brightness=t.brightness),t.contrast&&(o.gsView.contrast=t.contrast),t.ambientColor&&(o.gsView.ambientColor=t.ambientColor),n.tables.viewportTable.add(o)})}processBlockTables(e,n){e.tables.BLOCK_RECORD.entries.forEach(t=>{let o=n.tables.blockTable.getAt(t.name);o||(o=new r.AcDbBlockTableRecord,o.objectId=t.handle.toString(),o.name=t.name,o.ownerId=t.ownerHandle.toString(),o.origin.copy(t.basePoint),o.layoutId=t.layout.toString(),n.tables.blockTable.add(o)),!o.isModelSapce&&!o.isPaperSapce&&t.entities&&t.entities.length>0&&this.processEntitiesInBlock(t.entities,o)})}processBlocks(e,n){}async processEntitiesInBlock(e,n){const s=new b,t=e.length,o=[];for(let i=0;i<t;i++){const a=e[i],c=s.convert(a);c&&o.push(c)}n.appendEntity(o)}async processEntities(e,n,s,t,o){const i=new b;let a=e.entities;const c=a.length,p=new r.AcDbBatchProcessing(c,100-t.value,s);this.config.convertByEntityType&&(a=this.groupAndFlattenByType(a));const l=n.tables.blockTable.modelSpace;await p.processChunk(async(h,f)=>{const D=[];for(let u=h;u<f;u++){const g=a[u],A=i.convert(g);A&&D.push(A)}if(l.appendEntity(D),o){let u=t.value+f/c*(100-t.value);u>100&&(u=100),await o(u,"ENTITY","IN-PROGRESS")}})}processHeader(e,n){const s=e.header;s.CECOLOR&&(s.CECOLOR.index>=0&&s.CECOLOR.index<=256?n.cecolor.colorIndex=s.CECOLOR.index:n.cecolor.setRGBValue(s.CECOLOR.rgb)),n.angBase=s.ANGBASE??0,n.angDir=s.ANGDIR??0,n.aunits=s.AUNITS??0,n.celtscale=s.CELTSCALE??1,n.ltscale=s.LTSCALE??1,s.EXTMAX&&(n.extmax=s.EXTMAX),s.EXTMIN&&(n.extmin=s.EXTMIN),n.insunits=s.INSUNITS??1,n.pdmode=s.PDMODE??0,n.pdsize=s.PDSIZE??0}processCommonTableEntryAttrs(e,n){n.name=e.name,n.objectId=e.handle.toString(),n.ownerId=e.ownerHandle.toString()}processObjects(e,n){this.processLayouts(e,n),this.processImageDefs(e,n)}processLayouts(e,n){const s=n.dictionaries.layouts;e.objects.LAYOUT.forEach(o=>{const i=new r.AcDbLayout;i.layoutName=o.layoutName,i.tabOrder=o.tabOrder;const a=n.tables.blockTable.newIterator();i.objectId=o.handle.toString();for(const c of a)if(c.layoutId===i.objectId){i.blockTableRecordId=c.objectId;break}i.blockTableRecordId||o.layoutName==="Model"&&(i.blockTableRecordId=n.tables.blockTable.modelSpace.objectId),i.limits.min.copy(o.minLimit),i.limits.max.copy(o.maxLimit),i.extents.min.copy(o.minExtent),i.extents.max.copy(o.maxExtent),this.processCommonObjectAttrs(o,i),s.setAt(i.layoutName,i)})}processImageDefs(e,n){const s=n.dictionaries.imageDefs;e.objects.IMAGEDEF.forEach(o=>{const i=new r.AcDbRasterImageDef;i.sourceFileName=o.fileName,this.processCommonObjectAttrs(o,i),s.setAt(i.objectId,i)})}processCommonObjectAttrs(e,n){n.objectId=e.handle.toString(),n.ownerId=e.ownerHandle.toString()}groupAndFlattenByType(e){const n={},s=[];for(const t of e)n[t.type]||(n[t.type]=[],s.push(t.type)),n[t.type].push(t);return s.flatMap(t=>n[t])}}d.AcDbLibreDwgConverter=y,Object.defineProperty(d,Symbol.toStringTag,{value:"Module"})});