@mlightcad/libredwg-converter 3.7.5 → 3.7.7
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/dist/libredwg-converter.umd.cjs +1 -1
- package/dist/libredwg-parser-worker.js +3037 -2926
- package/lib/AcDbEntitiyConverter.d.ts +8 -0
- package/lib/AcDbEntitiyConverter.d.ts.map +1 -1
- package/lib/AcDbEntitiyConverter.js +365 -104
- package/lib/AcDbEntitiyConverter.js.map +1 -1
- package/lib/AcDbLibreDwgConverter.d.ts +3 -1
- package/lib/AcDbLibreDwgConverter.d.ts.map +1 -1
- package/lib/AcDbLibreDwgConverter.js +42 -14
- package/lib/AcDbLibreDwgConverter.js.map +1 -1
- package/lib/AcDbObjectConverter.d.ts +13 -0
- package/lib/AcDbObjectConverter.d.ts.map +1 -0
- package/lib/AcDbObjectConverter.js +139 -0
- package/lib/AcDbObjectConverter.js.map +1 -0
- package/package.json +4 -4
|
@@ -1 +1 @@
|
|
|
1
|
-
(function(b,r){typeof exports=="object"&&typeof module<"u"?r(exports,require("@mlightcad/data-model")):typeof define=="function"&&define.amd?define(["exports","@mlightcad/data-model"],r):(b=typeof globalThis<"u"?globalThis:b||self,r(b["libredwg-converter"]={},b.dataModel))})(this,function(b,r){"use strict";class P{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=="ATTDEF"?this.convertAttributeDefinition(e):e.type=="ATTRIB"?this.convertAttribute(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=="MLINE"?this.convertMLine(e):e.type=="MTEXT"?this.convertMText(e):e.type=="MULTILEADER"||e.type=="MLEADER"?this.convertMLeader(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):e.type=="ACAD_PROXY_ENTITY"?this.convertProxyEntity(e):null}convertProxyEntity(e){const n=new r.AcDbProxyEntity;if(n.proxyEntityClassId=e.proxyEntityClassId,e.originalDxfName&&(n.originalDxfName=e.originalDxfName),e.objectDrawingFormat!=null&&(n.graphicsMetafileType=e.objectDrawingFormat),e.applicationEntityClassId!=null&&(n.originalClassName=String(e.applicationEntityClassId)),e.graphicsData){const o=r.hexStringsToBytes([e.graphicsData]),t=e.graphicsDataSize??o.length;n.setProxyGraphic(o.subarray(0,t))}return n}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){const n=e.extrusionDirection??r.AcGeVector3d.Z_AXIS;return new r.AcDbArc(r.transformOcsPointToWcs(e.center,n),e.radius,e.startAngle,e.endAngle,n)}convertCirle(e){const n=e.extrusionDirection??r.AcGeVector3d.Z_AXIS;return new r.AcDbCircle(r.transformOcsPointToWcs(e.center,n),e.radius,n)}convertEllipse(e){const n=new r.AcGeVector3d(e.majorAxisEndPoint),o=n.length();return new r.AcDbEllipse(e.center,e.extrusionDirection??r.AcGeVector3d.Z_AXIS,n,o,o*e.axisRatio,e.startAngle,e.endAngle)}convertLine(e){const n=e.startPoint,o=e.endPoint;return new r.AcDbLine(new r.AcGePoint3d(n.x,n.y,n.z),new r.AcGePoint3d(o.x,o.y,o.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{}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;n.closed=!!(e.flag&512);const o=e.constantWidth??-1;return e.vertices.forEach((t,i)=>{n.addVertexAt(i,new r.AcGePoint2d(t.x,t.y),t.bulge,t.startWidth??o,t.endWidth??o)}),n}convertPolyline2d(e){const n=!!(e.flag&1),o=!!(e.flag&16),t=!!(e.flag&64),i=!!(e.flag&32),s=[],a=[],c=[];if(e.vertices.map(l=>{if(!(l.flag&16))if(t&&l.flag&128)if(l.flag&64)s.push({x:l.x,y:l.y,z:l.z}),a.push(l.bulge??0);else{const p=[];l.polyfaceIndex0!=null&&l.polyfaceIndex0!=0&&p.push(Math.abs(l.polyfaceIndex0)-1),l.polyfaceIndex1!=null&&l.polyfaceIndex1!=0&&p.push(Math.abs(l.polyfaceIndex1)-1),l.polyfaceIndex2!=null&&l.polyfaceIndex2!=0&&p.push(Math.abs(l.polyfaceIndex2)-1),l.polyfaceIndex3!=null&&l.polyfaceIndex3!=0&&p.push(Math.abs(l.polyfaceIndex3)-1),p.length>=3&&c.push(p)}else s.push({x:l.x,y:l.y,z:l.z}),a.push(l.bulge??0)}),o){const l=e.meshMVertexCount??2,p=e.meshNVertexCount??2;return new r.AcDbPolygonMesh(l,p,s,n,i)}else{if(t)return new r.AcDbPolyFaceMesh(s,c);{let l=r.AcDbPoly2dType.SimplePoly;return e.flag&2?l=r.AcDbPoly2dType.FitCurvePoly:e.flag&4&&(e.smoothType==6?l=r.AcDbPoly2dType.CubicSplinePoly:e.smoothType==5&&(l=r.AcDbPoly2dType.QuadSplinePoly)),new r.AcDb2dPolyline(l,s,0,n,e.startWidth,e.endWidth,a)}}}convertPolyline3d(e){const n=!!(e.flag&1),o=[];e.vertices.map(i=>{i.flag&16||o.push({x:i.x,y:i.y,z:i.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,o,n)}convertHatch(e){var t;const n=new r.AcDbHatch;if((t=e.definitionLines)==null||t.forEach(i=>{n.definitionLines.push({angle:i.angle,base:i.base,offset:i.offset,dashLengths:i.numberOfDashLengths>0?i.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(i=>{if(i.boundaryPathTypeFlag&2){const a=i,c=new r.AcGePolyline2d;c.closed=a.isClosed,a.vertices.forEach((l,p)=>{c.addVertexAt(p,{x:l.x,y:l.y,bulge:l.bulge})}),n.add(c)}else{const a=i,c=[];a.edges.forEach(p=>{if(p!=null){if(p.type==1){const f=p;c.push(new r.AcGeLine2d(f.start,f.end))}else if(p.type==2){const f=p;c.push(new r.AcGeCircArc2d(f.center,f.radius,f.startAngle,f.endAngle,!f.isCCW))}else if(p.type==3){const f=p;new r.AcGeVector2d().subVectors(f.end,f.center);const g=Math.sqrt(Math.pow(f.end.x,2)+Math.pow(f.end.y,2)),h=g*f.lengthOfMinorAxis;let d=f.startAngle,y=f.endAngle;const D=Math.atan2(f.end.y,f.end.x);f.isCCW||(d=Math.PI*2-d,y=Math.PI*2-y),c.push(new r.AcGeEllipseArc2d({...f.center,z:0},g,h,d,y,!f.isCCW,D))}else if(p.type==4){const f=p;if(f.numberOfControlPoints>0&&f.numberOfKnots>0){const u=f.controlPoints.map(d=>({x:d.x,y:d.y,z:0}));let g=!0;const h=f.controlPoints.map(d=>(d.weight==null&&(g=!1),d.weight||1));c.push(new r.AcGeSpline3d(u,f.knots,g?h:void 0))}else if(f.numberOfFitData>0){const u=f.fitDatum.map(g=>({x:g.x,y:g.y,z:0}));c.push(new r.AcGeSpline3d(u,"Uniform"))}}}});const l=r.AcGeLoop2d.buildFromEdges(c);l.length==0&&c.length>0?n.add(new r.AcGeLoop2d(c)):l.forEach(p=>n.add(p))}}),e.gradientFlag){const i=e;if(n.hatchObjectType=r.AcDbHatchObjectType.GradientObject,n.gradientName=i.gradientName,n.gradientAngle=i.gradientRotation??0,n.gradientShift=i.gradientDefinition??0,n.gradientOneColorMode=i.gradientColorFlag==1,n.shadeTintValue=i.colorTint??0,i.gradientColors){const s=i.gradientColors.length;s>1?(n.gradientStartColor=i.gradientColors[0].rgb,n.gradientEndColor=i.gradientColors[1].rgb):s>0&&(n.gradientStartColor=i.gradientColors[0].rgb)}}return n}convertTable(e){const n=new r.AcDbTable(e.name,e.rowCount,e.columnCount);return n.tableStyleId=e.tableStyleId,n.owningBlockRecordId=e.blockRecordHandle,e.directionVector&&(n.horizontalDirection=new r.AcGeVector3d(e.directionVector)),n.attachmentPoint=e.attachmentPoint,n.position.copy(e.startPoint),n.tableValueFlag=e.tableValue,n.tableOverrideFlag=e.overrideFlag,n.borderColorOverrideFlag=e.borderColorOverrideFlag,n.borderLineweightOverrideFlag=e.borderLineWeightOverrideFlag,n.borderVisibilityOverrideFlag=e.borderVisibilityOverrideFlag,e.columnWidthArr.forEach((o,t)=>n.setColumnWidth(t,o)),e.rowHeightArr.forEach((o,t)=>n.setRowHeight(t,o)),e.cells.forEach((o,t)=>{n.setCell(t,o)}),n}convertText(e){const n=new r.AcDbText;n.textString=e.text,n.styleName=e.styleName,n.height=e.textHeight,n.position.copy(e.startPoint);const o=!e.endPoint||e.endPoint.x===0&&e.endPoint.y===0&&(e.endPoint.z??0)===0;return e.endPoint&&!o?n.alignmentPoint.copy(e.endPoint):n.alignmentPoint.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(o=>{n.appendVertex(o)}),n.hasArrowHead=e.isArrowheadEnabled,n.hasHookLine=e.isHooklineExists,n.isSplined=e.isSpline,n.dimensionStyle=e.styleName,n.annoType=e.leaderCreationFlag,n}convertMLine(e){const n=new r.AcDbMLine;return n.styleName=e.mlineStyle||"STANDARD",n.scale=e.scale,n.flags=e.flags,n.justification=e.justification,n.startPosition=e.startPoint,n.normal=e.extrusionDirection??r.AcGeVector3d.Z_AXIS,n.styleCount=e.numberOfLines??0,n.segments=(e.vertices??[]).map(o=>({position:o.vertex,direction:o.vertexDirection,miterDirection:o.miterDirection,elements:(o.lines??[]).map(t=>({parameterCount:t.numberOfSegmentParams,parameters:t.segmentParams??[],fillCount:t.numberOfAreaFillParams,fillParameters:t.areaFillParams??[]}))})),n}convertMLeader(e){var g,h,d,y;const n=new r.AcDbMLeader,o=e;n.leaderLineType=this.readNumber(o,["multileaderType","leaderLineType","leaderType"])??r.AcDbMLeaderLineType.StraightLeader;const t=this.readNumber(o,["contentType"])??(e.textContent?r.AcDbMLeaderContentType.MTextContent:e.blockContent?r.AcDbMLeaderContentType.BlockContent:r.AcDbMLeaderContentType.NoneContent);n.contentType=t,n.doglegEnabled=this.readBoolean(o,["doglegEnabled","enableDogleg"])??!1,n.doglegLength=this.readNumber(o,["doglegLength"])??0,e.landingPoint&&(n.landingPoint=e.landingPoint),e.doglegVector&&(n.doglegVector=e.doglegVector);const i=this.readString(o,["mleaderStyleId","mLeaderStyleId","mleaderStyleHandle","styleHandle","styleName"]);i&&(n.mleaderStyleId=i);const s=this.readPoint(o,["normal","extrusionDirection"]);s&&(n.normal=s);const a=e.textContent,c=this.readString(a??{},["styleName","textStyleName"])??this.readString(o,["textStyleName","textStyle","styleName"]);c&&(n.textStyleName=c),n.textHeight=this.readNumber(a??{},["textHeight","height"])??this.readNumber(o,["textHeight","mtextHeight","textContentHeight"])??n.textHeight,n.textWidth=this.readNumber(a??{},["textWidth","width"])??this.readNumber(o,["textWidth","mtextWidth","textContentWidth"])??n.textWidth;const l=this.readNumber(a??{},["textRotation","rotation"])??this.readNumber(o,["textRotation","mtextRotation","textContentRotation"]);l!=null&&(n.textRotation=l);const p=this.readPoint(o,["textDirection","mtextDirection","textDirectionVector"]);p&&(n.textDirection=p);const f=this.readNumber(o,["textAttachmentPoint","attachmentPoint"]);f!=null&&(n.textAttachmentPoint=f);const u=this.readNumber(o,["textDrawingDirection","drawingDirection"]);if(u!=null&&(n.textDrawingDirection=u),((g=e.textContent)==null?void 0:g.text)!=null&&e.textContent.anchorPoint)n.mtextContent={text:e.textContent.text,anchorPoint:e.textContent.anchorPoint};else{const D=this.readString(o,["text","contents","mtext"]),A=this.readPoint(o,["textLocation","textPosition","textAnchorPoint"]);D!=null&&A&&(n.mtextContent={text:D,anchorPoint:A})}if((h=e.blockContent)!=null&&h.blockHandle&&e.blockContent.position)n.blockContent={blockHandle:e.blockContent.blockHandle,position:e.blockContent.position};else{const D=this.readString(o,["blockHandle","blockContentHandle","blockId"]),A=this.readPoint(o,["blockPosition","blockContentPosition"]);D&&A&&(n.blockContent={blockHandle:D,position:A})}return(d=e.leaders)==null||d.forEach(D=>{var T;const A=n.addLeader({landingPoint:D.landingPoint??e.landingPoint,doglegVector:D.doglegVector??e.doglegVector,doglegLength:D.doglegLength??e.doglegLength});(T=D.leaderLines)==null||T.forEach(I=>{var L;const S=n.addLeaderLine(A,I.vertices??[]);(L=I.breaks)==null||L.forEach(w=>{n.addBreak(A,S,w.start,w.end)})})}),n.numberOfLeaders===0&&((y=this.readLeaderLineArray(o))==null||y.forEach(D=>{const A=n.addLeader({landingPoint:e.landingPoint,doglegVector:e.doglegVector,doglegLength:e.doglegLength});n.addLeaderLine(A,D)})),n}convertDimension(e){if(e.subclassMarker=="AcDbAlignedDimension"){const n=e,o=new r.AcDbAlignedDimension(n.subDefinitionPoint1,n.subDefinitionPoint2,n.definitionPoint);return n.insertionPoint&&(o.dimBlockPosition={x:n.insertionPoint.x,y:n.insertionPoint.y,z:0}),o.rotation=n.rotationAngle,this.processDimensionCommonAttrs(e,o),o}else if(e.subclassMarker=="AcDbRotatedDimension"){const n=e,o=new r.AcDbRotatedDimension(n.subDefinitionPoint1,n.subDefinitionPoint2,n.definitionPoint);return n.insertionPoint&&(o.dimBlockPosition={x:n.insertionPoint.x,y:n.insertionPoint.y,z:0}),o.rotation=n.rotationAngle,this.processDimensionCommonAttrs(e,o),o}else if(e.subclassMarker=="AcDb3PointAngularDimension"){const n=e,o=new r.AcDb3PointAngularDimension(n.centerPoint,n.subDefinitionPoint1,n.subDefinitionPoint2,n.definitionPoint);return this.processDimensionCommonAttrs(e,o),o}else if(e.subclassMarker=="AcDbOrdinateDimension"){const n=e,o=new r.AcDbOrdinateDimension(n.subDefinitionPoint1,n.subDefinitionPoint2);return this.processDimensionCommonAttrs(e,o),o}else if(e.subclassMarker=="AcDbRadialDimension"){const n=e,o=new r.AcDbRadialDimension(n.definitionPoint,n.centerPoint,n.leaderLength);return this.processDimensionCommonAttrs(e,o),o}else if(e.subclassMarker=="AcDbDiametricDimension"){const n=e,o=new r.AcDbDiametricDimension(n.definitionPoint,n.centerPoint,n.leaderLength);return this.processDimensionCommonAttrs(e,o),o}return null}processImage(e,n){n.position.copy(e.position),n.brightness=e.brightness,n.contrast=e.contrast,n.fade=e.fade,n.imageSize.copy(e.imageSize),n.imageDefId=e.imageDefHandle,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(o=>{n.clipBoundary.push(new r.AcGePoint2d(o))}),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}convertAttributeCommon(e,n){const o=e.text;n.textString=o.text,n.styleName=o.styleName,n.height=o.textHeight,n.position.copy(o.startPoint);const t=e.alignmentPoint??o.endPoint,i=!t||t.x===0&&t.y===0&&(t.z??0)===0;t&&!i?n.alignmentPoint.copy(t):n.alignmentPoint.copy(o.startPoint),n.rotation=o.rotation,n.oblique=o.obliqueAngle??0,n.thickness=o.thickness,n.horizontalMode=o.halign,n.verticalMode=o.valign,n.widthFactor=o.xScale??1,n.tag=e.tag,n.fieldLength=e.fieldLength,n.isInvisible=(e.flags&r.AcDbAttributeFlags.Invisible)!==0,n.isConst=(e.flags&r.AcDbAttributeFlags.Const)!==0,n.isVerifiable=(e.flags&r.AcDbAttributeFlags.Verifiable)!==0,n.isPreset=(e.flags&r.AcDbAttributeFlags.Preset)!==0,n.lockPositionInBlock=e.lockPositionFlag,n.isReallyLocked=e.isReallyLocked,n.isMTextAttribute=(e.mtextFlag&r.AcDbAttributeMTextFlag.MultiLine)!==0,n.isConstMTextAttribute=(e.mtextFlag&r.AcDbAttributeMTextFlag.ConstMultiLine)!==0}convertAttribute(e){const n=new r.AcDbAttribute;return this.convertAttributeCommon(e,n),n}convertAttributeDefinition(e){const n=new r.AcDbAttributeDefinition;return this.convertAttributeCommon(e,n),n.prompt=e.prompt,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),e.handle!=null&&(n.objectId=e.handle),e.attribs&&e.attribs.forEach(o=>{const t=this.convert(o);t instanceof r.AcDbAttribute&&n.appendAttributes(t)}),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,e.ownerBlockRecordSoftId!=null&&(n.ownerId=e.ownerBlockRecordSoftId),e.lineType!=null&&(n.lineType=e.lineType),e.lineweight!=null&&(n.lineWeight=e.lineweight),e.lineTypeScale!=null&&(n.linetypeScale=e.lineTypeScale),e.color!=null||e.colorIndex!=null||e.colorName){const o=new r.AcCmColor;e.color!=null&&o.setRGBValue(e.color),e.colorIndex!=null&&(e.color==null||e.colorIndex===7)&&(o.colorIndex=e.colorIndex),e.colorName&&(o.colorName=e.colorName),n.color=o}if(e.isVisible!=null&&(n.visibility=e.isVisible),e.transparency!=null){const o=new r.AcCmTransparency;o.method=e.transparencyType,(o.isByBlock||o.isByBlock)&&(o.alpha=e.transparency),n.transparency=o}}readNumber(e,n){for(const o of n){const t=e[o];if(typeof t=="number"&&Number.isFinite(t))return t}}readString(e,n){for(const o of n){const t=e[o];if(typeof t=="string")return t}}readBoolean(e,n){for(const o of n){const t=e[o];if(typeof t=="boolean")return t;if(typeof t=="number")return t!==0}}readPoint(e,n){for(const o of n){const t=e[o];if(this.isPointLike(t))return t;if(Array.isArray(t)&&typeof t[0]=="number"&&typeof t[1]=="number")return{x:t[0],y:t[1],z:t[2]??0}}}readLeaderLineArray(e){const n=e.leaderLines;if(Array.isArray(n))return n.map(t=>{if(!t||typeof t!="object")return;const i=t.vertices;return Array.isArray(i)?i.filter(s=>this.isPointLike(s)):void 0}).filter(t=>!!t&&t.length>0);const o=e.vertices;if(Array.isArray(o)){const t=o.filter(i=>this.isPointLike(i));return t.length>0?[t]:void 0}}isPointLike(e){return!!e&&typeof e=="object"&&typeof e.x=="number"&&typeof e.y=="number"}}const E="*MODEL_SPACE";class C extends r.AcDbDatabaseConverter{constructor(e={}){super(e),this.config.useWorker=!0,this.config.parserWorkerUrl||(this.config.parserWorkerUrl="/assets/libredwg-parser-worker.js")}async parse(e,n){const o=this.config,t=this.getParserWorkerTimeout(e,n);if(o.useWorker&&o.parserWorkerUrl){const i=r.createWorkerApi({workerUrl:o.parserWorkerUrl,timeout:t,maxConcurrentWorkers:1}),s=await i.execute(e);if(i.destroy(),s.success)return s.data;throw new Error(`Failed to parse drawing due to error: '${s.error}'`)}else throw new Error("dwg converter can run in web worker only!")}getFonts(e){const n=new Map;e.tables.BLOCK_RECORD.entries.forEach(s=>{n.set(s.name,s)});const o=new Map,t=s=>{if(s){const a=s.lastIndexOf(".");return a>=0?s.substring(0,a).toLowerCase():s.toLowerCase()}};e.tables.STYLE.entries.forEach(s=>{const a=[];let c=t(s.font);c&&a.push(c),c=t(s.bigFont),c&&a.push(c),o.set(s.name,a)});const i=new Set;return this.getFontsInBlock(e.entities,n,o,i),Array.from(i)}getFontsInBlock(e,n,o,t){const i=/\\f(.*?)\|/g;e.forEach(s=>{if(s.type=="MTEXT"){const a=s;[...a.text.matchAll(i)].forEach(l=>{t.add(l[1].toLowerCase())});const c=o.get(a.styleName);c==null||c.forEach(l=>t.add(l))}else if(s.type=="TEXT"){const a=s,c=o.get(a.styleName);c==null||c.forEach(l=>t.add(l))}else if(s.type=="MULTILEADER"||s.type=="MLEADER"){const a=s,c=a.textContent;[...(typeof(c==null?void 0:c.text)=="string"?c.text:"").matchAll(i)].forEach(u=>{t.add(u[1].toLowerCase())});const p=typeof(c==null?void 0:c.styleName)=="string"?c.styleName:typeof a.textStyleName=="string"?a.textStyleName:typeof a.styleName=="string"?a.styleName:void 0,f=p?o.get(p):void 0;f==null||f.forEach(u=>t.add(u))}else if(s.type=="INSERT"){const a=s,c=n.get(a.name);c&&this.getFontsInBlock(c.entities,n,o,t)}})}processLineTypes(e,n){e.tables.LTYPE.entries.forEach(t=>{const i={name:t.name,description:t.description,standardFlag:t.standardFlag,totalPatternLength:t.totalPatternLength,pattern:t.pattern},s=new r.AcDbLinetypeTableRecord(i);this.processCommonTableEntryAttrs(t,s),s.name=t.name,n.tables.linetypeTable.add(s)})}processTextStyles(e,n){e.tables.STYLE.entries.forEach(t=>{const i=new r.AcDbTextStyleTableRecord(t);this.processCommonTableEntryAttrs(t,i),n.tables.textStyleTable.add(i)}),n.ensureTextStyleDefaults()}processDimStyles(e,n){e.tables.DIMSTYLE.entries.forEach(t=>{const i={name:t.name,ownerId:t.ownerHandle,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:r.DEFAULT_TEXT_STYLE,dimldrblk:"",dimblk:t.DIMBLK||"",dimblk1:t.DIMBLK1||"",dimblk2:t.DIMBLK2||"",dimlwd:t.DIMLWD,dimlwe:t.DIMLWE},s=new r.AcDbDimStyleTableRecord(i);this.processCommonTableEntryAttrs(t,s),n.tables.dimStyleTable.add(s)})}processLayers(e,n){e.tables.LAYER.entries.forEach(t=>{const i=new r.AcCmColor;i.colorIndex=t.colorIndex;const s=new r.AcDbLayerTableRecord({name:t.name,standardFlags:t.standardFlag,linetype:t.lineType,lineWeight:t.lineweight,isOff:t.off,color:i,isPlottable:t.plotFlag!=0});this.processCommonTableEntryAttrs(t,s),n.tables.layerTable.add(s)})}processViewports(e,n){e.tables.VPORT.entries.forEach(t=>{const i=new r.AcDbViewportTableRecord;this.processCommonTableEntryAttrs(t,i),t.circleSides&&(i.circleSides=t.circleSides),i.standardFlag=t.standardFlag,i.center.copy(t.center??r.VPORT_FALLBACK_CENTER_2D),i.lowerLeftCorner.copy(t.lowerLeftCorner??r.VPORT_FALLBACK_LLC),i.upperRightCorner.copy(t.upperRightCorner??r.VPORT_FALLBACK_URC),t.snapBasePoint&&i.snapBase.copy(t.snapBasePoint),t.snapRotationAngle&&(i.snapAngle=t.snapRotationAngle),t.snapSpacing&&i.snapIncrements.copy(t.snapSpacing),t.majorGridLines&&(i.gridMajor=t.majorGridLines),t.gridSpacing&&i.gridIncrements.copy(t.gridSpacing),t.backgroundObjectId&&(i.backgroundObjectId=t.backgroundObjectId),i.gsView.center.copy(t.center??r.VPORT_FALLBACK_CENTER_2D),i.gsView.viewDirectionFromTarget.copy(t.viewDirectionFromTarget??r.VPORT_FALLBACK_VIEW_DIR),i.gsView.viewTarget.copy(t.viewTarget??r.VPORT_FALLBACK_VIEW_TARGET),t.lensLength&&(i.gsView.lensLength=t.lensLength),t.frontClippingPlane&&(i.gsView.frontClippingPlane=t.frontClippingPlane),t.backClippingPlane&&(i.gsView.backClippingPlane=t.backClippingPlane),t.viewHeight&&(i.gsView.viewHeight=t.viewHeight);const s=t.aspectRatio;s!=null&&Number.isFinite(s)&&s>0&&(i.gsView.aspectRatio=s),t.viewTwistAngle&&(i.gsView.viewTwistAngle=t.viewTwistAngle),t.frozenLayers&&(i.gsView.frozenLayers=t.frozenLayers),t.styleSheet&&(i.gsView.styleSheet=t.styleSheet),t.renderMode&&(i.gsView.renderMode=t.renderMode),t.viewMode&&(i.gsView.viewMode=t.viewMode),t.ucsIconSetting&&(i.gsView.ucsIconSetting=t.ucsIconSetting),t.ucsOrigin&&i.gsView.ucsOrigin.copy(t.ucsOrigin),t.ucsXAxis&&i.gsView.ucsXAxis.copy(t.ucsXAxis),t.ucsYAxis&&i.gsView.ucsYAxis.copy(t.ucsYAxis),t.orthographicType&&(i.gsView.orthographicType=t.orthographicType),t.shadePlotSetting&&(i.gsView.shadePlotSetting=t.shadePlotSetting),t.shadePlotObjectId&&(i.gsView.shadePlotObjectId=t.shadePlotObjectId),t.visualStyleObjectId&&(i.gsView.visualStyleObjectId=t.visualStyleObjectId),t.isDefaultLightingOn&&(i.gsView.isDefaultLightingOn=t.isDefaultLightingOn),t.defaultLightingType&&(i.gsView.defaultLightingType=t.defaultLightingType),t.brightness&&(i.gsView.brightness=t.brightness),t.contrast&&(i.gsView.contrast=t.contrast),t.ambientColor&&(i.gsView.ambientColor=t.ambientColor),n.tables.viewportTable.add(i)})}processBlockTables(e,n){e.tables.BLOCK_RECORD.entries.forEach(t=>{let i=n.tables.blockTable.getAt(t.name);i||(i=new r.AcDbBlockTableRecord,i.objectId=t.handle,i.name=t.name,i.ownerId=t.ownerHandle,i.origin.copy(t.basePoint),i.layoutId=t.layout,i.blockInsertUnits=t.insertionUnits,i.explodability=t.explodability,i.blockScaling=t.scalability,t.bmpPreview&&(i.bmpPreview=t.bmpPreview),n.tables.blockTable.add(i)),!i.isModelSapce&&t.entities&&t.entities.length>0&&this.processEntitiesInBlock(t.entities,i)})}processBlocks(e,n){}async processEntitiesInBlock(e,n){const o=new P,t=e.length,i=[];for(let s=0;s<t;s++){const a=e[s],c=o.convert(a);c&&i.push(c)}n.appendEntity(i)}async processEntities(e,n,o,t,i){const s=new P;let a=[];e.tables.BLOCK_RECORD.entries.forEach(f=>{this.isModelSpace(f.name)&&(a=f.entities)});const c=a.length,l=new r.AcDbBatchProcessing(c,100-t.value,o);this.config.convertByEntityType&&(a=this.groupAndFlattenByType(a));const p=n.tables.blockTable.modelSpace;await l.processChunk(async(f,u)=>{const g=[];for(let h=f;h<u;h++){const d=a[h],y=s.convert(d);y&&g.push(y)}if(p.appendEntity(g),i){let h=t.value+u/c*(100-t.value);h>100&&(h=100),await i(h,"ENTITY","IN-PROGRESS")}})}processHeader(e,n){const o=e.header;o.CECOLOR&&(o.CECOLOR.index>=0&&o.CECOLOR.index<=256?n.cecolor.colorIndex=o.CECOLOR.index:n.cecolor.setRGBValue(o.CECOLOR.rgb)),n.angbase=o.ANGBASE??0,n.angdir=o.ANGDIR??0,n.aunits=o.AUNITS??0,o.AUPREC!=null&&(n.auprec=o.AUPREC),o.LUNITS!=null&&(n.lunits=o.LUNITS),o.LUPREC!=null&&(n.luprec=o.LUPREC),o.UNITMODE!=null&&(n.unitmode=o.UNITMODE),o.MEASUREMENT!=null&&(n.measurement=o.MEASUREMENT),n.celtype=o.CELTYPE??r.ByLayer,n.celtscale=o.CELTSCALE??1,n.ltscale=o.LTSCALE??1,o.EXTMAX&&(n.extmax=o.EXTMAX),o.EXTMIN&&(n.extmin=o.EXTMIN),n.insunits=o.INSUNITS??1,n.pdmode=o.PDMODE??0,n.pdsize=o.PDSIZE??0,n.textstyle=o.TEXTSTYLE??r.DEFAULT_TEXT_STYLE}processCommonTableEntryAttrs(e,n){n.name=e.name,n.objectId=e.handle,e.ownerHandle!=null&&(n.ownerId=e.ownerHandle)}processObjects(e,n){this.processLayouts(e,n),this.processImageDefs(e,n)}processLayouts(e,n){const o=n.objects.layout;e.objects.LAYOUT.forEach(i=>{const s=new r.AcDbLayout;s.layoutName=i.layoutName,s.tabOrder=i.tabOrder;const a=n.tables.blockTable.newIterator();s.objectId=i.handle;for(const c of a)if(c.layoutId===s.objectId){s.blockTableRecordId=c.objectId;break}s.blockTableRecordId||i.layoutName==="Model"&&(s.blockTableRecordId=n.tables.blockTable.modelSpace.objectId),s.limits.min.copy(i.minLimit),s.limits.max.copy(i.maxLimit),s.extents.min.copy(i.minExtent),s.extents.max.copy(i.maxExtent),i.viewportId&&s.viewportArray.push(i.viewportId),this.processCommonObjectAttrs(i,s),o.setAt(s.layoutName,s)})}processImageDefs(e,n){const o=n.objects.imageDefinition;e.objects.IMAGEDEF.forEach(i=>{const s=new r.AcDbRasterImageDef;s.sourceFileName=i.fileName,this.processCommonObjectAttrs(i,s),o.setAt(s.objectId,s)})}processCommonObjectAttrs(e,n){n.objectId=e.handle,e.ownerHandle!=null&&(n.ownerId=e.ownerHandle)}groupAndFlattenByType(e){const n={},o=[];for(const t of e)n[t.type]||(n[t.type]=[],o.push(t.type)),n[t.type].push(t);return o.flatMap(t=>n[t])}isModelSpace(e){return e&&e.toUpperCase()==E}}b.AcDbLibreDwgConverter=C,Object.defineProperty(b,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 x{convert(e){const t=this.createEntity(e);return t&&this.processCommonAttrs(e,t),t}createEntity(e){return e.type=="3DFACE"?this.convertFace(e):e.type=="ARC"?this.convertArc(e):e.type=="ATTDEF"?this.convertAttributeDefinition(e):e.type=="ATTRIB"?this.convertAttribute(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=="MLINE"?this.convertMLine(e):e.type=="MTEXT"?this.convertMText(e):e.type=="MULTILEADER"||e.type=="MLEADER"?this.convertMLeader(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=="SHAPE"?this.convertShape(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):e.type=="ACAD_PROXY_ENTITY"?this.convertProxyEntity(e):null}convertProxyEntity(e){const t=new r.AcDbProxyEntity;if(t.proxyEntityClassId=e.proxyEntityClassId,e.originalDxfName&&(t.originalDxfName=e.originalDxfName),e.objectDrawingFormat!=null&&(t.graphicsMetafileType=e.objectDrawingFormat),e.applicationEntityClassId!=null&&(t.originalClassName=String(e.applicationEntityClassId)),e.graphicsData){const o=r.hexStringsToBytes([e.graphicsData]),n=e.graphicsDataSize??o.length;t.setProxyGraphic(o.subarray(0,n))}return t}convertFace(e){const t=new r.AcDbFace;return e.corner1&&t.setVertexAt(0,e.corner1),e.corner2&&t.setVertexAt(1,e.corner2),e.corner3&&t.setVertexAt(2,e.corner3),e.corner4&&t.setVertexAt(3,e.corner4),t.setEdgeInvisibilities(e.flag),t}convertArc(e){const t=e.extrusionDirection??r.AcGeVector3d.Z_AXIS;return new r.AcDbArc(r.transformOcsPointToWcs(e.center,t),e.radius,e.startAngle,e.endAngle,t)}convertCirle(e){const t=e.extrusionDirection??r.AcGeVector3d.Z_AXIS;return new r.AcDbCircle(r.transformOcsPointToWcs(e.center,t),e.radius,t)}convertEllipse(e){const t=new r.AcGeVector3d(e.majorAxisEndPoint),o=t.length();return new r.AcDbEllipse(e.center,e.extrusionDirection??r.AcGeVector3d.Z_AXIS,t,o,o*e.axisRatio,e.startAngle,e.endAngle)}convertLine(e){const t=e.startPoint,o=e.endPoint;return new r.AcDbLine(new r.AcGePoint3d(t.x,t.y,t.z),new r.AcGePoint3d(o.x,o.y,o.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{}return null}convertPoint(e){const t=new r.AcDbPoint;return t.position=e.position,t}convertShape(e){const t=e.extrusionDirection??r.AcGeVector3d.Z_AXIS,o=new r.AcDbShape;return o.position=r.transformOcsPointToWcs(e.insertionPoint,t),o.size=e.size,o.shapeNumber=e.shapeNumber,e.styleName&&(o.styleName=e.styleName),o.rotation=e.rotation??0,o.widthFactor=e.xScale??1,o.oblique=e.obliqueAngle??0,o.thickness=e.thickness??0,o.normal.copy(t),o}convertSolid(e){const t=new r.AcDbTrace;return t.setPointAt(0,{...e.corner1,z:0}),t.setPointAt(1,{...e.corner2,z:0}),t.setPointAt(2,{...e.corner3,z:0}),t.setPointAt(3,e.corner4?{...e.corner4,z:0}:{...e.corner3,z:0}),t.thickness=e.thickness,t}convertLWPolyline(e){const t=new r.AcDbPolyline;t.closed=!!(e.flag&512);const o=e.constantWidth??-1;return e.vertices.forEach((n,i)=>{t.addVertexAt(i,new r.AcGePoint2d(n.x,n.y),n.bulge,n.startWidth??o,n.endWidth??o)}),t}convertPolyline2d(e){const t=!!(e.flag&1),o=!!(e.flag&16),n=!!(e.flag&64),i=!!(e.flag&32),s=[],l=[],c=[];if(e.vertices.map(a=>{if(!(a.flag&16))if(n&&a.flag&128)if(a.flag&64)s.push({x:a.x,y:a.y,z:a.z}),l.push(a.bulge??0);else{const u=[];a.polyfaceIndex0!=null&&a.polyfaceIndex0!=0&&u.push(Math.abs(a.polyfaceIndex0)-1),a.polyfaceIndex1!=null&&a.polyfaceIndex1!=0&&u.push(Math.abs(a.polyfaceIndex1)-1),a.polyfaceIndex2!=null&&a.polyfaceIndex2!=0&&u.push(Math.abs(a.polyfaceIndex2)-1),a.polyfaceIndex3!=null&&a.polyfaceIndex3!=0&&u.push(Math.abs(a.polyfaceIndex3)-1),u.length>=3&&c.push(u)}else s.push({x:a.x,y:a.y,z:a.z}),l.push(a.bulge??0)}),o){const a=e.meshMVertexCount??2,u=e.meshNVertexCount??2;return new r.AcDbPolygonMesh(a,u,s,t,i)}else{if(n)return new r.AcDbPolyFaceMesh(s,c);{let a=r.AcDbPoly2dType.SimplePoly;return e.flag&2?a=r.AcDbPoly2dType.FitCurvePoly:e.flag&4&&(e.smoothType==6?a=r.AcDbPoly2dType.CubicSplinePoly:e.smoothType==5&&(a=r.AcDbPoly2dType.QuadSplinePoly)),new r.AcDb2dPolyline(a,s,0,t,e.startWidth,e.endWidth,l)}}}convertPolyline3d(e){const t=!!(e.flag&1),o=[];e.vertices.map(i=>{i.flag&16||o.push({x:i.x,y:i.y,z:i.z})});let n=r.AcDbPoly3dType.SimplePoly;return e.flag&4&&(e.smoothType==6?n=r.AcDbPoly3dType.CubicSplinePoly:e.smoothType==5&&(n=r.AcDbPoly3dType.QuadSplinePoly)),new r.AcDb3dPolyline(n,o,t)}convertHatch(e){var n;const t=new r.AcDbHatch;if((n=e.definitionLines)==null||n.forEach(i=>{t.definitionLines.push({angle:i.angle,base:i.base,offset:i.offset,dashLengths:i.numberOfDashLengths>0?i.dashLengths:[]})}),t.isSolidFill=e.solidFill==1,t.hatchStyle=e.hatchStyle,t.patternName=e.patternName,t.patternType=e.patternType,t.patternAngle=e.patternAngle==null?0:e.patternAngle,t.patternScale=e.patternScale==null?0:e.patternScale,e.boundaryPaths.forEach(i=>{if(i.boundaryPathTypeFlag&2){const l=i,c=new r.AcGePolyline2d;c.closed=l.isClosed,l.vertices.forEach((a,u)=>{c.addVertexAt(u,{x:a.x,y:a.y,bulge:a.bulge})}),t.add(c)}else{const l=i,c=[];l.edges.forEach(u=>{if(u!=null){if(u.type==1){const d=u;c.push(new r.AcGeLine2d(d.start,d.end))}else if(u.type==2){const d=u;c.push(new r.AcGeCircArc2d(d.center,d.radius,d.startAngle,d.endAngle,!d.isCCW))}else if(u.type==3){const d=u;new r.AcGeVector2d().subVectors(d.end,d.center);const g=Math.sqrt(Math.pow(d.end.x,2)+Math.pow(d.end.y,2)),p=g*d.lengthOfMinorAxis;let h=d.startAngle,b=d.endAngle;const L=Math.atan2(d.end.y,d.end.x);d.isCCW||(h=Math.PI*2-h,b=Math.PI*2-b),c.push(new r.AcGeEllipseArc2d({...d.center,z:0},g,p,h,b,!d.isCCW,L))}else if(u.type==4){const d=u;if(d.numberOfControlPoints>0&&d.numberOfKnots>0){const A=d.controlPoints.map(h=>({x:h.x,y:h.y,z:0}));let g=!0;const p=d.controlPoints.map(h=>(h.weight==null&&(g=!1),h.weight||1));c.push(new r.AcGeSpline3d(A,d.knots,g?p:void 0))}else if(d.numberOfFitData>0){const A=d.fitDatum.map(g=>({x:g.x,y:g.y,z:0}));c.push(new r.AcGeSpline3d(A,"Uniform"))}}}});const a=r.AcGeLoop2d.buildFromEdges(c);a.length==0&&c.length>0?t.add(new r.AcGeLoop2d(c)):a.forEach(u=>t.add(u))}}),e.gradientFlag){const i=e;if(t.hatchObjectType=r.AcDbHatchObjectType.GradientObject,t.gradientName=i.gradientName,t.gradientAngle=i.gradientRotation??0,t.gradientShift=i.gradientDefinition??0,t.gradientOneColorMode=i.gradientColorFlag==1,t.shadeTintValue=i.colorTint??0,i.gradientColors){const s=i.gradientColors.length;s>1?(t.gradientStartColor=i.gradientColors[0].rgb,t.gradientEndColor=i.gradientColors[1].rgb):s>0&&(t.gradientStartColor=i.gradientColors[0].rgb)}}return t}convertTable(e){const t=new r.AcDbTable(e.name,e.rowCount,e.columnCount);return t.tableStyleId=e.tableStyleId,t.owningBlockRecordId=e.blockRecordHandle,e.directionVector&&(t.horizontalDirection=new r.AcGeVector3d(e.directionVector)),t.attachmentPoint=e.attachmentPoint,t.position.copy(e.startPoint),t.tableValueFlag=e.tableValue,t.tableOverrideFlag=e.overrideFlag,t.borderColorOverrideFlag=e.borderColorOverrideFlag,t.borderLineweightOverrideFlag=e.borderLineWeightOverrideFlag,t.borderVisibilityOverrideFlag=e.borderVisibilityOverrideFlag,e.columnWidthArr.forEach((o,n)=>t.setColumnWidth(n,o)),e.rowHeightArr.forEach((o,n)=>t.setRowHeight(n,o)),e.cells.forEach((o,n)=>{t.setCell(n,o)}),t}convertText(e){const t=new r.AcDbText;t.textString=e.text,t.styleName=e.styleName,t.height=e.textHeight,t.position.copy(e.startPoint);const o=!e.endPoint||e.endPoint.x===0&&e.endPoint.y===0&&(e.endPoint.z??0)===0;return e.endPoint&&!o?t.alignmentPoint.copy(e.endPoint):t.alignmentPoint.copy(e.startPoint),t.rotation=e.rotation,t.oblique=e.obliqueAngle??0,t.thickness=e.thickness,t.horizontalMode=e.halign,t.verticalMode=e.valign,t.widthFactor=e.xScale??1,t}convertMText(e){const t=new r.AcDbMText;return t.contents=e.text,e.styleName!=null&&(t.styleName=e.styleName),t.height=e.textHeight,t.width=e.rectWidth,t.rotation=e.rotation||0,t.location=e.insertionPoint,t.attachmentPoint=e.attachmentPoint,e.direction&&(t.direction=new r.AcGeVector3d(e.direction)),t.drawingDirection=e.drawingDirection,t}convertLeader(e){const t=new r.AcDbLeader;return e.vertices.forEach(o=>{t.appendVertex(o)}),t.hasArrowHead=e.isArrowheadEnabled,t.hasHookLine=e.isHooklineExists,t.isSplined=e.isSpline,t.dimensionStyle=e.styleName,t.annoType=e.leaderCreationFlag,t}convertMLine(e){const t=new r.AcDbMLine;return t.styleName=e.mlineStyle||"STANDARD",t.scale=e.scale,t.flags=e.flags,t.justification=e.justification,t.startPosition=e.startPoint,t.normal=e.extrusionDirection??r.AcGeVector3d.Z_AXIS,t.styleCount=e.numberOfLines??0,t.segments=(e.vertices??[]).map(o=>({position:o.vertex,direction:o.vertexDirection,miterDirection:o.miterDirection,elements:(o.lines??[]).map(n=>({parameterCount:n.numberOfSegmentParams,parameters:n.segmentParams??[],fillCount:n.numberOfAreaFillParams,fillParameters:n.areaFillParams??[]}))})),t}convertMLeader(e){var y,P;const t=new r.AcDbMLeader,o=e;t.version=e.version,t.leaderStyleId=e.leaderStyleId,e.leaderStyleId&&(t.mleaderStyleId=e.leaderStyleId),t.propertyOverrideFlag=e.propertyOverrideFlag,t.leaderLineType=e.leaderLineType??r.AcDbMLeaderLineType.StraightLeader,e.leaderLineColor!=null&&(t.leaderLineColor=this.convertMLeaderEntityColor(e.leaderLineColor)),t.leaderLineTypeId=e.leaderLineTypeId,t.leaderLineWeight=e.leaderLineWeight,t.landingEnabled=e.landingEnabled,t.doglegEnabled=e.doglegEnabled??!1,t.doglegLength=e.doglegLength??0,t.arrowheadId=e.arrowheadId,t.arrowheadSize=e.arrowheadSize,t.textStyleId=e.textStyleId,t.textLeftAttachmentType=e.textLeftAttachmentType,t.textRightAttachmentType=e.textRightAttachmentType,t.textAngleType=e.textAngleType,t.textAlignmentType=e.textAlignmentType,e.textColor!=null&&(t.textColor=this.convertMLeaderEntityColor(e.textColor)),t.textFrameEnabled=e.textFrameEnabled,t.landingGap=e.landingGap,t.textAttachment=e.textAttachment,t.textFlowDirection=e.textFlowDirection,this.isValidHandleId(e.blockContentId)&&(t.blockContentId=e.blockContentId),e.blockContentColor!=null&&(t.blockContentColor=this.convertMLeaderEntityColor(e.blockContentColor)),t.blockContentRotation=e.blockContentRotation,t.blockContentConnectionType=e.blockContentConnectionType,t.annotativeScaleEnabled=e.annotativeScaleEnabled,t.arrowheadOverrides=e.arrowheadOverrides?e.arrowheadOverrides.map(f=>({...f})):[],t.blockAttributes=e.blockAttributes?e.blockAttributes.map(f=>({...f})):[],t.textDirectionNegative=e.textDirectionNegative,t.textAlignInIPE=e.textAlignInIPE,t.bottomTextAttachmentDirection=e.bottomTextAttachmentDirection,t.topTextAttachmentDirection=e.topTextAttachmentDirection,t.contentScale=e.contentScale,t.textLineSpacingStyle=e.textLineSpacingStyle,e.textBackgroundColor!=null&&(t.textBackgroundColor=this.convertMLeaderEntityColor(e.textBackgroundColor)),t.textBackgroundScaleFactor=e.textBackgroundScaleFactor,t.textBackgroundTransparency=e.textBackgroundTransparency,t.textBackgroundColorOn=e.textBackgroundColorOn,t.textFillOn=e.textFillOn,t.textColumnType=e.textColumnType,t.textUseAutoHeight=e.textUseAutoHeight,t.textColumnWidth=e.textColumnWidth,t.textColumnGutterWidth=e.textColumnGutterWidth,t.textColumnFlowReversed=e.textColumnFlowReversed,t.textColumnHeight=e.textColumnHeight,t.textUseWordBreak=e.textUseWordBreak,t.hasMText=e.hasMText,t.hasBlock=e.hasBlock,t.planeNormalReversed=e.planeNormalReversed,e.blockContentScale&&(t.blockContentScale=new r.AcGeVector3d(e.blockContentScale)),e.contentBasePosition&&(t.contentBasePosition=new r.AcGePoint3d().copy(e.contentBasePosition)),e.textAnchor&&(t.textAnchor=new r.AcGePoint3d().copy(e.textAnchor)),e.planeOrigin&&(t.planeOrigin=new r.AcGePoint3d().copy(e.planeOrigin)),e.planeXAxisDirection&&(t.planeXAxisDirection=new r.AcGeVector3d(e.planeXAxisDirection)),e.planeYAxisDirection&&(t.planeYAxisDirection=new r.AcGeVector3d(e.planeYAxisDirection));const n=o.textContent,i=n&&typeof n=="object"?n:void 0,s=typeof n=="string"&&n.length>0||this.readString(i??{},["text","contents"])!=null||this.readString(o,["text","contents","mtext"])!=null,l=e.contentType??(s?r.AcDbMLeaderContentType.MTextContent:e.blockContent?r.AcDbMLeaderContentType.BlockContent:r.AcDbMLeaderContentType.NoneContent);t.contentType=l;const c=this.readPoint(o,["normal","extrusionDirection"]);c&&(t.normal=c);const a=this.readString(i??{},["styleName","textStyleName","textStyle"])??this.readString(o,["textStyleName","textStyle","styleName"]);a&&(t.textStyleName=a);const u=this.readPositiveNumber(i??{},["textHeight","height"])??this.readPositiveNumber(o,["textHeight","mtextHeight","textContentHeight"])??this.readPositiveNumber(o,["arrowheadSize","contentScale"]);u!=null&&(t.textHeight=u);const d=this.readPositiveNumber(i??{},["textWidth","width"])??this.readPositiveNumber(o,["textWidth","mtextWidth","textContentWidth"]);d!=null&&(t.textWidth=d),t.textLineSpacingFactor=this.readNumber(i??{},["lineSpacingFactor","textLineSpacingFactor"])??this.readNumber(o,["textLineSpacingFactor"])??t.textLineSpacingFactor;const A=this.readNumber(i??{},["textRotation","rotation"])??this.readNumber(o,["textRotation","mtextRotation","textContentRotation"]);A!=null&&(t.textRotation=A);const g=this.readPoint(o,["textDirection","mtextDirection","textDirectionVector"]);g&&(t.textDirection=g);const p=this.readNumber(o,["textAttachmentPoint","attachmentPoint"]);p!=null&&p!==0&&(t.textAttachmentPoint=p);const h=e.textAttachmentDirection;h!=null&&(t.textAttachmentDirection=h);const b=this.readNumber(o,["textDrawingDirection","drawingDirection"]);b!=null&&(t.textDrawingDirection=b);const L=typeof n=="string"?n:this.readString(i??{},["text","contents"])??this.readString(o,["text","contents","mtext"]),T=this.readPoint(i??{},["anchorPoint","textAnchor","textLocation","textPosition","textAnchorPoint"])??this.readPoint(o,["textAnchor","textLocation","textPosition","textAnchorPoint","contentBasePosition"]);if(L!=null&&T&&(t.mtextContent={text:L,anchorPoint:T}),e.blockContent){const f=e.blockContent,I=e.blockContent.blockContentId;if(this.isValidHandleId(I)){const m=this.readMLeaderEntityColor(f,["color"]);t.blockContent={blockContentId:I,normal:this.readPoint(f,["normal"]),position:e.blockContent.position,scale:this.readPoint(f,["scale"]),rotation:this.readNumber(f,["rotation"]),color:m,transformationMatrix:Array.isArray(e.blockContent.transformationMatrix)?e.blockContent.transformationMatrix:[]}}}else this.isValidHandleId(e.blockContentId)&&(t.blockContent={blockContentId:e.blockContentId,scale:e.blockContentScale,rotation:e.blockContentRotation,color:t.blockContentColor,transformationMatrix:[]});return(y=this.readMLeaderLeaders(o))==null||y.forEach(f=>{t.addLeader({lastLeaderLinePoint:f.lastLeaderLinePoint,lastLeaderLinePointSet:f.lastLeaderLinePointSet,doglegVector:f.doglegVector,doglegVectorSet:f.doglegVectorSet,doglegLength:f.doglegLength??e.doglegLength,breaks:f.breaks,leaderBranchIndex:f.leaderBranchIndex,leaderLines:f.leaderLines})}),t.numberOfLeaders===0&&((P=this.readLeaderLineArray(o))==null||P.forEach(f=>{t.addLeader({doglegLength:e.doglegLength}),t.addLeaderLine(t.numberOfLeaders-1,f)})),t.numberOfLeaders===0&&e.contentBasePosition&&t.addLeader({lastLeaderLinePoint:e.contentBasePosition,lastLeaderLinePointSet:!0,doglegLength:e.doglegLength}),t}convertDimension(e){if(e.subclassMarker=="AcDbAlignedDimension"){const t=e,o=new r.AcDbAlignedDimension(t.subDefinitionPoint1,t.subDefinitionPoint2,t.definitionPoint);return t.insertionPoint&&(o.dimBlockPosition={x:t.insertionPoint.x,y:t.insertionPoint.y,z:0}),o.rotation=t.rotationAngle,this.processDimensionCommonAttrs(e,o),o}else if(e.subclassMarker=="AcDbRotatedDimension"){const t=e,o=new r.AcDbRotatedDimension(t.subDefinitionPoint1,t.subDefinitionPoint2,t.definitionPoint);return t.insertionPoint&&(o.dimBlockPosition={x:t.insertionPoint.x,y:t.insertionPoint.y,z:0}),o.rotation=t.rotationAngle,this.processDimensionCommonAttrs(e,o),o}else if(e.subclassMarker=="AcDb3PointAngularDimension"){const t=e,o=new r.AcDb3PointAngularDimension(t.centerPoint,t.subDefinitionPoint1,t.subDefinitionPoint2,t.definitionPoint);return this.processDimensionCommonAttrs(e,o),o}else if(e.subclassMarker=="AcDbOrdinateDimension"){const t=e,o=new r.AcDbOrdinateDimension(t.subDefinitionPoint1,t.subDefinitionPoint2);return this.processDimensionCommonAttrs(e,o),o}else if(e.subclassMarker=="AcDbRadialDimension"){const t=e,o=new r.AcDbRadialDimension(t.definitionPoint,t.centerPoint,t.leaderLength);return this.processDimensionCommonAttrs(e,o),o}else if(e.subclassMarker=="AcDbDiametricDimension"){const t=e,o=new r.AcDbDiametricDimension(t.definitionPoint,t.centerPoint,t.leaderLength);return this.processDimensionCommonAttrs(e,o),o}return null}processImage(e,t){t.position.copy(e.position),t.brightness=e.brightness,t.contrast=e.contrast,t.fade=e.fade,t.imageSize.copy(e.imageSize),t.imageDefId=e.imageDefHandle,t.isClipped=e.clipping>0,t.isShownClipped=(e.flags|4)>0,t.isImageShown=(e.flags|3)>0,t.isImageTransparent=(e.flags|8)>0,e.clippingBoundaryPath.forEach(o=>{t.clipBoundary.push(new r.AcGePoint2d(o))}),t.clipBoundaryType=e.clippingBoundaryType,t.width=Math.sqrt(e.uPixel.x**2+e.uPixel.y**2+e.uPixel.z**2)*e.imageSize.x,t.height=Math.sqrt(e.vPixel.x**2+e.vPixel.y**2+e.vPixel.z**2)*e.imageSize.y,t.rotation=Math.atan2(e.uPixel.y,e.uPixel.x)}convertImage(e){const t=new r.AcDbRasterImage;return this.processImage(e,t),t}convertWipeout(e){const t=new r.AcDbWipeout;return this.processImage(e,t),t}convertViewport(e){const t=new r.AcDbViewport;return t.number=e.viewportId,t.centerPoint.copy(e.viewportCenter),t.height=e.height,t.width=e.width,t.viewCenter.copy(e.displayCenter),t.viewHeight=e.viewHeight,t}convertRay(e){const t=new r.AcDbRay;return t.basePoint.copy(e.firstPoint),t.unitDir.copy(e.unitDirection),t}convertXline(e){const t=new r.AcDbXline;return t.basePoint.copy(e.firstPoint),t.unitDir.copy(e.unitDirection),t}convertAttributeCommon(e,t){const o=e.text;t.textString=o.text,t.styleName=o.styleName,t.height=o.textHeight,t.position.copy(o.startPoint);const n=e.alignmentPoint??o.endPoint,i=!n||n.x===0&&n.y===0&&(n.z??0)===0;n&&!i?t.alignmentPoint.copy(n):t.alignmentPoint.copy(o.startPoint),t.rotation=o.rotation,t.oblique=o.obliqueAngle??0,t.thickness=o.thickness,t.horizontalMode=o.halign,t.verticalMode=o.valign,t.widthFactor=o.xScale??1,t.tag=e.tag,t.fieldLength=e.fieldLength,t.isInvisible=(e.flags&r.AcDbAttributeFlags.Invisible)!==0,t.isConst=(e.flags&r.AcDbAttributeFlags.Const)!==0,t.isVerifiable=(e.flags&r.AcDbAttributeFlags.Verifiable)!==0,t.isPreset=(e.flags&r.AcDbAttributeFlags.Preset)!==0,t.lockPositionInBlock=e.lockPositionFlag,t.isReallyLocked=e.isReallyLocked,t.isMTextAttribute=(e.mtextFlag&r.AcDbAttributeMTextFlag.MultiLine)!==0,t.isConstMTextAttribute=(e.mtextFlag&r.AcDbAttributeMTextFlag.ConstMultiLine)!==0}convertAttribute(e){const t=new r.AcDbAttribute;return this.convertAttributeCommon(e,t),t}convertAttributeDefinition(e){const t=new r.AcDbAttributeDefinition;return this.convertAttributeCommon(e,t),t.prompt=e.prompt,t}convertBlockReference(e){const t=new r.AcDbBlockReference(e.name);return e.insertionPoint&&t.position.copy(e.insertionPoint),t.scaleFactors.x=e.xScale,t.scaleFactors.y=e.yScale,t.scaleFactors.z=e.zScale,t.rotation=e.rotation,t.normal.copy(e.extrusionDirection),e.handle!=null&&(t.objectId=e.handle),e.attribs&&e.attribs.forEach(o=>{const n=this.convert(o);n instanceof r.AcDbAttribute&&t.appendAttributes(n)}),t}processDimensionCommonAttrs(e,t){t.dimBlockId=e.name,t.textPosition.copy(e.textPoint),t.textRotation=e.textRotation||0,e.textLineSpacingFactor&&(t.textLineSpacingFactor=e.textLineSpacingFactor),e.textLineSpacingStyle&&(t.textLineSpacingStyle=e.textLineSpacingStyle),t.dimensionStyleName=e.styleName,t.dimensionText=e.text||"",t.measurement=e.measurement}processCommonAttrs(e,t){if(t.layer=e.layer||"0",t.objectId=e.handle,e.ownerBlockRecordSoftId!=null&&(t.ownerId=e.ownerBlockRecordSoftId),e.lineType!=null&&(t.lineType=e.lineType),e.lineweight!=null&&(t.lineWeight=e.lineweight),e.lineTypeScale!=null&&(t.linetypeScale=e.lineTypeScale),e.color!=null||e.colorIndex!=null||e.colorName){const o=new r.AcCmColor;e.color!=null&&o.setRGBValue(e.color),e.colorIndex!=null&&(e.color==null||e.colorIndex===7)&&(o.colorIndex=e.colorIndex),e.colorName&&(o.colorName=e.colorName),t.color=o}if(e.isVisible!=null&&(t.visibility=e.isVisible),e.transparency!=null){const o=new r.AcCmTransparency;o.method=e.transparencyType,(o.isByBlock||o.isByBlock)&&(o.alpha=e.transparency),t.transparency=o}}convertMLeaderEntityColor(e){return r.decodeMLeaderStyleRawColor(e)}readMLeaderEntityColor(e,t){for(const o of t){const n=e[o];if(typeof n=="number"&&Number.isFinite(n))return r.decodeMLeaderStyleRawColor(n)}}isValidHandleId(e){return e!=null&&e!==""&&e!=="0"}readNumber(e,t){for(const o of t){const n=e[o];if(typeof n=="number"&&Number.isFinite(n))return n}}readPositiveNumber(e,t){const o=this.readNumber(e,t);return o!=null&&o>0?o:void 0}readString(e,t){for(const o of t){const n=e[o];if(typeof n=="string")return n}}readBoolean(e,t){for(const o of t){const n=e[o];if(typeof n=="boolean")return n;if(typeof n=="number")return n!==0}}readPoint(e,t){for(const o of t){const n=e[o];if(this.isPointLike(n))return n;if(Array.isArray(n)&&typeof n[0]=="number"&&typeof n[1]=="number")return{x:n[0],y:n[1],z:n[2]??0}}}readLeaderLineArray(e){const t=e.leaderLines;if(Array.isArray(t))return t.map(n=>{if(!n||typeof n!="object")return;const i=n.vertices;return Array.isArray(i)?i.filter(s=>this.isPointLike(s)):void 0}).filter(n=>!!n&&n.length>0);const o=e.vertices;if(Array.isArray(o)){const n=o.filter(i=>this.isPointLike(i));return n.length>0?[n]:void 0}}readMLeaderLeaders(e){const t=e.leaderSections;if(!Array.isArray(t))return;const o=[];return t.forEach(n=>{if(!n||typeof n!="object")return;const i=n,s=i.leaderLines,l=Array.isArray(s)?s.reduce((p,h)=>{const b=this.readMLeaderLine(h);return b&&p.push(b),p},[]):void 0,c={},a=this.readPoint(i,["lastLeaderLinePoint"]),u=this.readPoint(i,["doglegVector"]),d=this.readNumber(i,["doglegLength"]),A=this.readMLeaderBreaks(i.breaks),g=this.readNumber(i,["leaderBranchIndex"]);a&&(c.lastLeaderLinePoint=a),i.lastLeaderLinePointSet!=null&&(c.lastLeaderLinePointSet=this.readBoolean(i,["lastLeaderLinePointSet"])),u&&(c.doglegVector=u),i.doglegVectorSet!=null&&(c.doglegVectorSet=this.readBoolean(i,["doglegVectorSet"])),d!=null&&(c.doglegLength=d),A&&(c.breaks=A),g!=null&&(c.leaderBranchIndex=g),l&&(c.leaderLines=l),o.push(c)}),o}readMLeaderLine(e){if(!e||typeof e!="object")return;const t=e,o=t.vertices,n=Array.isArray(o)?o.filter(c=>this.isPointLike(c)):[],i=this.readMLeaderBreaks(t.breaks),s=Array.isArray(t.breakPointIndexes)?t.breakPointIndexes.filter(c=>typeof c=="number"):void 0,l=this.readNumber(t,["leaderLineIndex"]);return n.length>0||i&&i.length>0?{vertices:n,breakPointIndexes:s,leaderLineIndex:l,breaks:i}:void 0}readMLeaderBreaks(e){if(!Array.isArray(e))return;const t=e.map(o=>{if(!o||typeof o!="object")return;const n=o,i=this.readPoint(n,["start"]),s=this.readPoint(n,["end"]),l=this.readNumber(n,["index"]);if(!i||!s)return;const c={start:i,end:s};return l!=null&&(c.index=l),c}).filter(o=>!!o);return t.length>0?t:void 0}isPointLike(e){return!!e&&typeof e=="object"&&typeof e.x=="number"&&typeof e.y=="number"}}class S{convertMLeaderStyle(e){const t=new r.AcDbMLeaderStyle;return t.unknown1=e.unknown1,e.contentType!=null&&(t.contentType=e.contentType),e.drawMLeaderOrderType!=null&&(t.drawMLeaderOrderType=e.drawMLeaderOrderType),e.drawLeaderOrderType!=null&&(t.drawLeaderOrderType=e.drawLeaderOrderType),e.maxLeaderSegmentPoints!=null&&(t.maxLeaderSegmentPoints=e.maxLeaderSegmentPoints),e.firstSegmentAngleConstraint!=null&&(t.firstSegmentAngleConstraint=e.firstSegmentAngleConstraint),e.secondSegmentAngleConstraint!=null&&(t.secondSegmentAngleConstraint=e.secondSegmentAngleConstraint),e.leaderLineType!=null&&(t.leaderLineType=e.leaderLineType),e.leaderLineColor!=null&&(t.leaderLineColor=r.decodeMLeaderStyleRawColor(e.leaderLineColor)),t.leaderLineTypeId=e.leaderLineTypeId,e.leaderLineWeight!=null&&(t.leaderLineWeight=e.leaderLineWeight),e.landingEnabled!=null&&(t.landingEnabled=e.landingEnabled),e.landingGap!=null&&(t.landingGap=e.landingGap),e.doglegEnabled!=null&&(t.doglegEnabled=e.doglegEnabled),e.doglegLength!=null&&(t.doglegLength=e.doglegLength),e.description!=null&&(t.description=e.description),t.arrowheadId=e.arrowheadId,e.arrowheadSize!=null&&(t.arrowheadSize=e.arrowheadSize),e.defaultMTextContents!=null&&(t.defaultMTextContents=e.defaultMTextContents),t.textStyleId=e.textStyleId,e.textLeftAttachmentType!=null&&(t.textLeftAttachmentType=e.textLeftAttachmentType),e.textAngleType!=null&&(t.textAngleType=e.textAngleType),e.textAlignmentType!=null&&(t.textAlignmentType=e.textAlignmentType),e.textRightAttachmentType!=null&&(t.textRightAttachmentType=e.textRightAttachmentType),e.textColor!=null&&(t.textColor=r.decodeMLeaderStyleRawColor(e.textColor)),e.textHeight!=null&&(t.textHeight=e.textHeight),e.textFrameEnabled!=null&&(t.textFrameEnabled=e.textFrameEnabled),e.textAlignAlwaysLeft!=null&&(t.textAlignAlwaysLeft=e.textAlignAlwaysLeft),e.alignSpace!=null&&(t.alignSpace=e.alignSpace),t.blockContentId=e.blockContentId,e.blockContentColor!=null&&(t.blockContentColor=r.decodeMLeaderStyleRawColor(e.blockContentColor)),e.blockContentScale&&(t.blockContentScale={x:e.blockContentScale.x,y:e.blockContentScale.y,z:e.blockContentScale.z??1}),e.blockContentScaleEnabled!=null&&(t.blockContentScaleEnabled=e.blockContentScaleEnabled),e.blockContentRotation!=null&&(t.blockContentRotation=e.blockContentRotation),e.blockContentRotationEnabled!=null&&(t.blockContentRotationEnabled=e.blockContentRotationEnabled),e.blockContentConnectionType!=null&&(t.blockContentConnectionType=e.blockContentConnectionType),e.scale!=null&&(t.scale=e.scale),e.overwritePropertyValue!=null&&(t.overwritePropertyValue=e.overwritePropertyValue),e.annotative!=null&&(t.annotative=e.annotative),e.breakGapSize!=null&&(t.breakGapSize=e.breakGapSize),e.textAttachmentDirection!=null&&(t.textAttachmentDirection=e.textAttachmentDirection),e.bottomTextAttachmentDirection!=null&&(t.bottomTextAttachmentDirection=e.bottomTextAttachmentDirection),e.topTextAttachmentDirection!=null&&(t.topTextAttachmentDirection=e.topTextAttachmentDirection),t.unknown2=e.unknown2,this.processCommonAttrs(e,t),t}processCommonAttrs(e,t){t.objectId=e.handle,e.ownerHandle!=null&&(t.ownerId=e.ownerHandle)}}const w="*MODEL_SPACE";class E extends r.AcDbDatabaseConverter{constructor(e={}){super(e),this.config.useWorker=!0,this.config.parserWorkerUrl||(this.config.parserWorkerUrl="/assets/libredwg-parser-worker.js")}async parse(e,t){const o=this.config,n=this.getParserWorkerTimeout(e,t);if(o.useWorker&&o.parserWorkerUrl){const i=r.createWorkerApi({workerUrl:o.parserWorkerUrl,timeout:n,maxConcurrentWorkers:1}),s=await i.execute(e);if(i.destroy(),s.success)return s.data;throw new Error(`Failed to parse drawing due to error: '${s.error}'`)}else throw new Error("dwg converter can run in web worker only!")}getFonts(e){const t=new Map;e.tables.BLOCK_RECORD.entries.forEach(s=>{t.set(s.name,s)});const o=new Map,n=s=>{if(s){const l=s.lastIndexOf(".");return l>=0?s.substring(0,l).toLowerCase():s.toLowerCase()}};e.tables.STYLE.entries.forEach(s=>{const l=[];let c=n(s.font);c&&l.push(c),c=n(s.bigFont),c&&l.push(c),o.set(s.name,l)});const i=new Set;return e.tables.STYLE.entries.forEach(s=>{if(s.standardFlag&1){const l=n(s.font);l&&i.add(l)}}),this.getFontsInBlock(e.entities,t,o,i),Array.from(i)}getFontsInBlock(e,t,o,n){const i=/\\f(.*?)\|/g;e.forEach(s=>{if(s.type=="MTEXT"){const l=s;[...l.text.matchAll(i)].forEach(a=>{n.add(a[1].toLowerCase())});const c=o.get(l.styleName);c==null||c.forEach(a=>n.add(a))}else if(s.type=="TEXT"){const l=s,c=o.get(l.styleName);c==null||c.forEach(a=>n.add(a))}else if(s.type=="SHAPE"){const l=s,c=l.styleName?o.get(l.styleName):void 0;c==null||c.forEach(a=>n.add(a))}else if(s.type=="MULTILEADER"||s.type=="MLEADER")[...(s.textContent??"").matchAll(i)].forEach(a=>{n.add(a[1].toLowerCase())});else if(s.type=="INSERT"){const l=s,c=t.get(l.name);c&&this.getFontsInBlock(c.entities,t,o,n)}})}processLineTypes(e,t){e.tables.LTYPE.entries.forEach(n=>{const i={name:n.name,description:n.description,standardFlag:n.standardFlag,totalPatternLength:n.totalPatternLength,pattern:n.pattern},s=new r.AcDbLinetypeTableRecord(i);this.processCommonTableEntryAttrs(n,s),s.name=n.name,t.tables.linetypeTable.add(s)})}processTextStyles(e,t){e.tables.STYLE.entries.forEach(n=>{const i=new r.AcDbTextStyleTableRecord(n);this.processCommonTableEntryAttrs(n,i),t.tables.textStyleTable.add(i)}),t.ensureTextStyleDefaults()}processDimStyles(e,t){e.tables.DIMSTYLE.entries.forEach(n=>{const i={name:n.name,ownerId:n.ownerHandle,dimpost:n.DIMPOST||"",dimapost:n.DIMAPOST||"",dimscale:n.DIMSCALE,dimasz:n.DIMASZ,dimexo:n.DIMEXO,dimdli:n.DIMDLI,dimexe:n.DIMEXE,dimrnd:n.DIMRND,dimdle:n.DIMDLE,dimtp:n.DIMTP,dimtm:n.DIMTM,dimtxt:n.DIMTXT,dimcen:n.DIMCEN,dimtsz:n.DIMTSZ,dimaltf:n.DIMALTF,dimlfac:n.DIMLFAC,dimtvp:n.DIMTVP,dimtfac:n.DIMTFAC,dimgap:n.DIMGAP,dimaltrnd:n.DIMALTRND,dimtol:n.DIMTOL==null||n.DIMTOL==0?0:1,dimlim:n.DIMLIM==null||n.DIMLIM==0?0:1,dimtih:n.DIMTIH==null||n.DIMTIH==0?0:1,dimtoh:n.DIMTOH==null||n.DIMTOH==0?0:1,dimse1:n.DIMSE1==null||n.DIMSE1==0?0:1,dimse2:n.DIMSE2==null||n.DIMSE2==0?0:1,dimtad:n.DIMTAD,dimzin:n.DIMZIN,dimazin:n.DIMAZIN,dimalt:n.DIMALT,dimaltd:n.DIMALTD,dimtofl:n.DIMTOFL,dimsah:n.DIMSAH,dimtix:n.DIMTIX,dimsoxd:n.DIMSOXD,dimclrd:n.DIMCLRD,dimclre:n.DIMCLRE,dimclrt:n.DIMCLRT,dimadec:n.DIMADEC||0,dimunit:n.DIMUNIT||2,dimdec:n.DIMDEC,dimtdec:n.DIMTDEC,dimaltu:n.DIMALTU,dimalttd:n.DIMALTTD,dimaunit:n.DIMAUNIT,dimfrac:n.DIMFRAC,dimlunit:n.DIMLUNIT,dimdsep:n.DIMDSEP||".",dimtmove:n.DIMTMOVE||0,dimjust:n.DIMJUST,dimsd1:n.DIMSD1,dimsd2:n.DIMSD2,dimtolj:n.DIMTOLJ,dimtzin:n.DIMTZIN,dimaltz:n.DIMALTZ,dimalttz:n.DIMALTTZ,dimfit:n.DIMFIT||0,dimupt:n.DIMUPT,dimatfit:n.DIMATFIT,dimtxsty:r.DEFAULT_TEXT_STYLE,dimldrblk:"",dimblk:n.DIMBLK||"",dimblk1:n.DIMBLK1||"",dimblk2:n.DIMBLK2||"",dimlwd:n.DIMLWD,dimlwe:n.DIMLWE},s=new r.AcDbDimStyleTableRecord(i);this.processCommonTableEntryAttrs(n,s),t.tables.dimStyleTable.add(s)})}processLayers(e,t){e.tables.LAYER.entries.forEach(n=>{const i=new r.AcCmColor;i.colorIndex=n.colorIndex;const s=new r.AcDbLayerTableRecord({name:n.name,standardFlags:n.standardFlag,linetype:n.lineType,lineWeight:n.lineweight,isOff:n.off,color:i,isPlottable:n.plotFlag!=0});this.processCommonTableEntryAttrs(n,s),t.tables.layerTable.add(s)})}processViewports(e,t){e.tables.VPORT.entries.forEach(n=>{const i=new r.AcDbViewportTableRecord;this.processCommonTableEntryAttrs(n,i),n.circleSides&&(i.circleSides=n.circleSides),i.standardFlag=n.standardFlag,i.center.copy(n.center??r.VPORT_FALLBACK_CENTER_2D),i.lowerLeftCorner.copy(n.lowerLeftCorner??r.VPORT_FALLBACK_LLC),i.upperRightCorner.copy(n.upperRightCorner??r.VPORT_FALLBACK_URC),n.snapBasePoint&&i.snapBase.copy(n.snapBasePoint),n.snapRotationAngle&&(i.snapAngle=n.snapRotationAngle),n.snapSpacing&&i.snapIncrements.copy(n.snapSpacing),n.majorGridLines&&(i.gridMajor=n.majorGridLines),n.gridSpacing&&i.gridIncrements.copy(n.gridSpacing),n.backgroundObjectId&&(i.backgroundObjectId=n.backgroundObjectId),i.gsView.center.copy(n.center??r.VPORT_FALLBACK_CENTER_2D),i.gsView.viewDirectionFromTarget.copy(n.viewDirectionFromTarget??r.VPORT_FALLBACK_VIEW_DIR),i.gsView.viewTarget.copy(n.viewTarget??r.VPORT_FALLBACK_VIEW_TARGET),n.lensLength&&(i.gsView.lensLength=n.lensLength),n.frontClippingPlane&&(i.gsView.frontClippingPlane=n.frontClippingPlane),n.backClippingPlane&&(i.gsView.backClippingPlane=n.backClippingPlane),n.viewHeight&&(i.gsView.viewHeight=n.viewHeight);const s=n.aspectRatio;s!=null&&Number.isFinite(s)&&s>0&&(i.gsView.aspectRatio=s),n.viewTwistAngle&&(i.gsView.viewTwistAngle=n.viewTwistAngle),n.frozenLayers&&(i.gsView.frozenLayers=n.frozenLayers),n.styleSheet&&(i.gsView.styleSheet=n.styleSheet),n.renderMode&&(i.gsView.renderMode=n.renderMode),n.viewMode&&(i.gsView.viewMode=n.viewMode),n.ucsIconSetting&&(i.gsView.ucsIconSetting=n.ucsIconSetting),n.ucsOrigin&&i.gsView.ucsOrigin.copy(n.ucsOrigin),n.ucsXAxis&&i.gsView.ucsXAxis.copy(n.ucsXAxis),n.ucsYAxis&&i.gsView.ucsYAxis.copy(n.ucsYAxis),n.orthographicType&&(i.gsView.orthographicType=n.orthographicType),n.shadePlotSetting&&(i.gsView.shadePlotSetting=n.shadePlotSetting),n.shadePlotObjectId&&(i.gsView.shadePlotObjectId=n.shadePlotObjectId),n.visualStyleObjectId&&(i.gsView.visualStyleObjectId=n.visualStyleObjectId),n.isDefaultLightingOn&&(i.gsView.isDefaultLightingOn=n.isDefaultLightingOn),n.defaultLightingType&&(i.gsView.defaultLightingType=n.defaultLightingType),n.brightness&&(i.gsView.brightness=n.brightness),n.contrast&&(i.gsView.contrast=n.contrast),n.ambientColor&&(i.gsView.ambientColor=n.ambientColor),t.tables.viewportTable.add(i)})}processBlockTables(e,t){e.tables.BLOCK_RECORD.entries.forEach(n=>{let i=t.tables.blockTable.getAt(n.name);i||(i=new r.AcDbBlockTableRecord,i.objectId=n.handle,i.name=n.name,i.ownerId=n.ownerHandle,i.origin.copy(n.basePoint),i.layoutId=n.layout,i.blockInsertUnits=n.insertionUnits,i.explodability=n.explodability,i.blockScaling=n.scalability,n.bmpPreview&&(i.bmpPreview=n.bmpPreview),t.tables.blockTable.add(i)),!i.isModelSapce&&n.entities&&n.entities.length>0&&this.processEntitiesInBlock(n.entities,i)})}processBlocks(e,t){}async processEntitiesInBlock(e,t){const o=new x,n=e.length,i=[];for(let s=0;s<n;s++){const l=e[s],c=o.convert(l);c&&i.push(c)}t.appendEntity(i)}async processEntities(e,t,o,n,i){const s=new x;let l=[];e.tables.BLOCK_RECORD.entries.forEach(d=>{this.isModelSpace(d.name)&&(l=d.entities)});const c=l.length,a=new r.AcDbBatchProcessing(c,100-n.value,o);this.config.convertByEntityType&&(l=this.groupAndFlattenByType(l));const u=t.tables.blockTable.modelSpace;await a.processChunk(async(d,A)=>{const g=[];for(let p=d;p<A;p++){const h=l[p],b=s.convert(h);b&&g.push(b)}if(u.appendEntity(g),i){let p=n.value+A/c*(100-n.value);p>100&&(p=100),await i(p,"ENTITY","IN-PROGRESS")}})}processHeader(e,t){const o=e.header;o.CECOLOR&&(o.CECOLOR.index>=0&&o.CECOLOR.index<=256?t.cecolor.colorIndex=o.CECOLOR.index:t.cecolor.setRGBValue(o.CECOLOR.rgb)),t.angbase=o.ANGBASE??0,t.angdir=o.ANGDIR??0,t.aunits=o.AUNITS??0,o.AUPREC!=null&&(t.auprec=o.AUPREC),o.LUNITS!=null&&(t.lunits=o.LUNITS),o.LUPREC!=null&&(t.luprec=o.LUPREC),o.UNITMODE!=null&&(t.unitmode=o.UNITMODE),o.MEASUREMENT!=null&&(t.measurement=o.MEASUREMENT),t.celtype=o.CELTYPE??r.ByLayer,t.celtscale=o.CELTSCALE??1,t.ltscale=o.LTSCALE??1,o.EXTMAX&&(t.extmax=o.EXTMAX),o.EXTMIN&&(t.extmin=o.EXTMIN),t.insunits=o.INSUNITS??1,t.pdmode=o.PDMODE??0,t.pdsize=o.PDSIZE??0,t.textstyle=o.TEXTSTYLE??r.DEFAULT_TEXT_STYLE;const n=this.normalizeHeaderStringValue(o.CMLEADERSTYLE)??r.DEFAULT_MLEADER_STYLE;t.cmleaderstyle=n}processCommonTableEntryAttrs(e,t){t.name=e.name,t.objectId=e.handle,e.ownerHandle!=null&&(t.ownerId=e.ownerHandle)}processObjects(e,t){this.processLayouts(e,t),this.processImageDefs(e,t),this.processMLeaderStyles(e,t)}processLayouts(e,t){const o=t.objects.layout;e.objects.LAYOUT.forEach(i=>{const s=new r.AcDbLayout;s.layoutName=i.layoutName,s.tabOrder=i.tabOrder;const l=t.tables.blockTable.newIterator();s.objectId=i.handle;for(const c of l)if(c.layoutId===s.objectId){s.blockTableRecordId=c.objectId;break}s.blockTableRecordId||i.layoutName==="Model"&&(s.blockTableRecordId=t.tables.blockTable.modelSpace.objectId),s.limits.min.copy(i.minLimit),s.limits.max.copy(i.maxLimit),s.extents.min.copy(i.minExtent),s.extents.max.copy(i.maxExtent),i.viewportId&&s.viewportArray.push(i.viewportId),this.processCommonObjectAttrs(i,s),o.setAt(s.layoutName,s)})}processImageDefs(e,t){const o=t.objects.imageDefinition;e.objects.IMAGEDEF.forEach(i=>{const s=new r.AcDbRasterImageDef;s.sourceFileName=i.fileName,this.processCommonObjectAttrs(i,s),o.setAt(s.objectId,s)})}processMLeaderStyles(e,t){const o=e.objects.MLEADERSTYLE;if(!(o!=null&&o.length))return;const n=t.objects.mleaderStyle,i=new S;o.forEach(s=>{const l=i.convertMLeaderStyle(s);n.setAt(l.objectId,l)})}processCommonObjectAttrs(e,t){t.objectId=e.handle,e.ownerHandle!=null&&(t.ownerId=e.ownerHandle)}groupAndFlattenByType(e){const t={},o=[];for(const n of e)t[n.type]||(t[n.type]=[],o.push(n.type)),t[n.type].push(n);return o.flatMap(n=>t[n])}isModelSpace(e){return e&&e.toUpperCase()==w}normalizeHeaderStringValue(e){if(typeof e!="string")return;const t=e.trim();return t.length>0?t:void 0}}D.AcDbLibreDwgConverter=E,Object.defineProperty(D,Symbol.toStringTag,{value:"Module"})});
|