var __defProp = Object.defineProperty; var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value; var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value); import createModule from "../wasm/libredwg-web.js"; import { default as default2 } from "../wasm/libredwg-web.js"; var DwgCodePage = /* @__PURE__ */ ((DwgCodePage2) => { DwgCodePage2[DwgCodePage2["CP_UTF8"] = 0] = "CP_UTF8"; DwgCodePage2[DwgCodePage2["CP_US_ASCII"] = 1] = "CP_US_ASCII"; DwgCodePage2[DwgCodePage2["CP_ISO_8859_1"] = 2] = "CP_ISO_8859_1"; DwgCodePage2[DwgCodePage2["CP_ISO_8859_2"] = 3] = "CP_ISO_8859_2"; DwgCodePage2[DwgCodePage2["CP_ISO_8859_3"] = 4] = "CP_ISO_8859_3"; DwgCodePage2[DwgCodePage2["CP_ISO_8859_4"] = 5] = "CP_ISO_8859_4"; DwgCodePage2[DwgCodePage2["CP_ISO_8859_5"] = 6] = "CP_ISO_8859_5"; DwgCodePage2[DwgCodePage2["CP_ISO_8859_6"] = 7] = "CP_ISO_8859_6"; DwgCodePage2[DwgCodePage2["CP_ISO_8859_7"] = 8] = "CP_ISO_8859_7"; DwgCodePage2[DwgCodePage2["CP_ISO_8859_8"] = 9] = "CP_ISO_8859_8"; DwgCodePage2[DwgCodePage2["CP_ISO_8859_9"] = 10] = "CP_ISO_8859_9"; DwgCodePage2[DwgCodePage2["CP_CP437"] = 11] = "CP_CP437"; DwgCodePage2[DwgCodePage2["CP_CP850"] = 12] = "CP_CP850"; DwgCodePage2[DwgCodePage2["CP_CP852"] = 13] = "CP_CP852"; DwgCodePage2[DwgCodePage2["CP_CP855"] = 14] = "CP_CP855"; DwgCodePage2[DwgCodePage2["CP_CP857"] = 15] = "CP_CP857"; DwgCodePage2[DwgCodePage2["CP_CP860"] = 16] = "CP_CP860"; DwgCodePage2[DwgCodePage2["CP_CP861"] = 17] = "CP_CP861"; DwgCodePage2[DwgCodePage2["CP_CP863"] = 18] = "CP_CP863"; DwgCodePage2[DwgCodePage2["CP_CP864"] = 19] = "CP_CP864"; DwgCodePage2[DwgCodePage2["CP_CP865"] = 20] = "CP_CP865"; DwgCodePage2[DwgCodePage2["CP_CP869"] = 21] = "CP_CP869"; DwgCodePage2[DwgCodePage2["CP_CP932"] = 22] = "CP_CP932"; DwgCodePage2[DwgCodePage2["CP_MACINTOSH"] = 23] = "CP_MACINTOSH"; DwgCodePage2[DwgCodePage2["CP_BIG5"] = 24] = "CP_BIG5"; DwgCodePage2[DwgCodePage2["CP_CP949"] = 25] = "CP_CP949"; DwgCodePage2[DwgCodePage2["CP_JOHAB"] = 26] = "CP_JOHAB"; DwgCodePage2[DwgCodePage2["CP_CP866"] = 27] = "CP_CP866"; DwgCodePage2[DwgCodePage2["CP_ANSI_1250"] = 28] = "CP_ANSI_1250"; DwgCodePage2[DwgCodePage2["CP_ANSI_1251"] = 29] = "CP_ANSI_1251"; DwgCodePage2[DwgCodePage2["CP_ANSI_1252"] = 30] = "CP_ANSI_1252"; DwgCodePage2[DwgCodePage2["CP_GB2312"] = 31] = "CP_GB2312"; DwgCodePage2[DwgCodePage2["CP_ANSI_1253"] = 32] = "CP_ANSI_1253"; DwgCodePage2[DwgCodePage2["CP_ANSI_1254"] = 33] = "CP_ANSI_1254"; DwgCodePage2[DwgCodePage2["CP_ANSI_1255"] = 34] = "CP_ANSI_1255"; DwgCodePage2[DwgCodePage2["CP_ANSI_1256"] = 35] = "CP_ANSI_1256"; DwgCodePage2[DwgCodePage2["CP_ANSI_1257"] = 36] = "CP_ANSI_1257"; DwgCodePage2[DwgCodePage2["CP_ANSI_874"] = 37] = "CP_ANSI_874"; DwgCodePage2[DwgCodePage2["CP_ANSI_932"] = 38] = "CP_ANSI_932"; DwgCodePage2[DwgCodePage2["CP_ANSI_936"] = 39] = "CP_ANSI_936"; DwgCodePage2[DwgCodePage2["CP_ANSI_949"] = 40] = "CP_ANSI_949"; DwgCodePage2[DwgCodePage2["CP_ANSI_950"] = 41] = "CP_ANSI_950"; DwgCodePage2[DwgCodePage2["CP_ANSI_1361"] = 42] = "CP_ANSI_1361"; DwgCodePage2[DwgCodePage2["CP_UTF16"] = 43] = "CP_UTF16"; DwgCodePage2[DwgCodePage2["CP_ANSI_1258"] = 44] = "CP_ANSI_1258"; DwgCodePage2[DwgCodePage2["CP_UNDEFINED"] = 255] = "CP_UNDEFINED"; return DwgCodePage2; })(DwgCodePage || {}); const encodings = [ "utf-8", // 0 "utf-8", // US ASCII "iso-8859-1", "iso-8859-2", "iso-8859-3", "iso-8859-4", "iso-8859-5", "iso-8859-6", "iso-8859-7", "iso-8859-8", "iso-8859-9", // 10 "utf-8", // DOS English "utf-8", // 12 DOS Latin-1 "utf-8", // DOS Central European "utf-8", // DOS Cyrillic "utf-8", // DOS Turkish "utf-8", // DOS Portoguese "utf-8", // DOS Icelandic "utf-8", // DOS Hebrew "utf-8", // DOS Arabic (IBM) "utf-8", // DOS Nordic "utf-8", // DOS Greek "shift-jis", // DOS Japanese (shiftjis) "macintosh", // 23 "big5", "utf-8", // Korean (Wansung + Johab) "utf-8", // Johab? "ibm866", // Russian "windows-1250", // Central + Eastern European "windows-1251", // Cyrillic "windows-1252", // Western European "gbk", // EUC-CN Chinese "windows-1253", // Greek "windows-1254", // Turkish "windows-1255", // Hebrew "windows-1256", // Arabic "windows-1257", // Baltic "windows-874", // Thai "shift-jis", // 38 Japanese (extended shiftjis, windows-31j) "gbk", // 39 Simplified Chinese "euc-kr", // 40 Korean Wansung "big5", // 41 Trad Chinese "utf-8", // 42 Korean Wansung "utf-16le", "windows-1258" // Vietnamese ]; const dwgCodePageToEncoding = (codepage) => { return encodings[codepage]; }; var DwgDimensionType = /* @__PURE__ */ ((DwgDimensionType2) => { DwgDimensionType2[DwgDimensionType2["Rotated"] = 0] = "Rotated"; DwgDimensionType2[DwgDimensionType2["Aligned"] = 1] = "Aligned"; DwgDimensionType2[DwgDimensionType2["Angular"] = 2] = "Angular"; DwgDimensionType2[DwgDimensionType2["Diameter"] = 3] = "Diameter"; DwgDimensionType2[DwgDimensionType2["Radius"] = 4] = "Radius"; DwgDimensionType2[DwgDimensionType2["Angular3Point"] = 5] = "Angular3Point"; DwgDimensionType2[DwgDimensionType2["Ordinate"] = 6] = "Ordinate"; DwgDimensionType2[DwgDimensionType2["ReferenceIsExclusive"] = 32] = "ReferenceIsExclusive"; DwgDimensionType2[DwgDimensionType2["IsOrdinateXTypeFlag"] = 64] = "IsOrdinateXTypeFlag"; DwgDimensionType2[DwgDimensionType2["IsCustomTextPositionFlag"] = 128] = "IsCustomTextPositionFlag"; return DwgDimensionType2; })(DwgDimensionType || {}); var DwgAttachmentPoint = /* @__PURE__ */ ((DwgAttachmentPoint2) => { DwgAttachmentPoint2[DwgAttachmentPoint2["TopLeft"] = 1] = "TopLeft"; DwgAttachmentPoint2[DwgAttachmentPoint2["TopCenter"] = 2] = "TopCenter"; DwgAttachmentPoint2[DwgAttachmentPoint2["TopRight"] = 3] = "TopRight"; DwgAttachmentPoint2[DwgAttachmentPoint2["MiddleLeft"] = 4] = "MiddleLeft"; DwgAttachmentPoint2[DwgAttachmentPoint2["MiddleCenter"] = 5] = "MiddleCenter"; DwgAttachmentPoint2[DwgAttachmentPoint2["MiddleRight"] = 6] = "MiddleRight"; DwgAttachmentPoint2[DwgAttachmentPoint2["BottomLeft"] = 7] = "BottomLeft"; DwgAttachmentPoint2[DwgAttachmentPoint2["BottomCenter"] = 8] = "BottomCenter"; DwgAttachmentPoint2[DwgAttachmentPoint2["BottomRight"] = 9] = "BottomRight"; return DwgAttachmentPoint2; })(DwgAttachmentPoint || {}); var DwgDimensionTextLineSpacing = /* @__PURE__ */ ((DwgDimensionTextLineSpacing2) => { DwgDimensionTextLineSpacing2[DwgDimensionTextLineSpacing2["AtLeast"] = 1] = "AtLeast"; DwgDimensionTextLineSpacing2[DwgDimensionTextLineSpacing2["Exact"] = 2] = "Exact"; return DwgDimensionTextLineSpacing2; })(DwgDimensionTextLineSpacing || {}); var DwgDimensionTextVertical = /* @__PURE__ */ ((DwgDimensionTextVertical2) => { DwgDimensionTextVertical2[DwgDimensionTextVertical2["Center"] = 0] = "Center"; DwgDimensionTextVertical2[DwgDimensionTextVertical2["Above"] = 1] = "Above"; DwgDimensionTextVertical2[DwgDimensionTextVertical2["Outside"] = 2] = "Outside"; DwgDimensionTextVertical2[DwgDimensionTextVertical2["JIS"] = 3] = "JIS"; DwgDimensionTextVertical2[DwgDimensionTextVertical2["Below"] = 4] = "Below"; return DwgDimensionTextVertical2; })(DwgDimensionTextVertical || {}); var DwgDimensionZeroSuppression = /* @__PURE__ */ ((DwgDimensionZeroSuppression2) => { DwgDimensionZeroSuppression2[DwgDimensionZeroSuppression2["Feet"] = 0] = "Feet"; DwgDimensionZeroSuppression2[DwgDimensionZeroSuppression2["None"] = 1] = "None"; DwgDimensionZeroSuppression2[DwgDimensionZeroSuppression2["Inch"] = 2] = "Inch"; DwgDimensionZeroSuppression2[DwgDimensionZeroSuppression2["FeetAndInch"] = 3] = "FeetAndInch"; DwgDimensionZeroSuppression2[DwgDimensionZeroSuppression2["Leading"] = 4] = "Leading"; DwgDimensionZeroSuppression2[DwgDimensionZeroSuppression2["Trailing"] = 8] = "Trailing"; DwgDimensionZeroSuppression2[DwgDimensionZeroSuppression2["LeadingAndTrailing"] = 12] = "LeadingAndTrailing"; return DwgDimensionZeroSuppression2; })(DwgDimensionZeroSuppression || {}); var DwgDimensionZeroSuppressionAngular = /* @__PURE__ */ ((DwgDimensionZeroSuppressionAngular2) => { DwgDimensionZeroSuppressionAngular2[DwgDimensionZeroSuppressionAngular2["None"] = 0] = "None"; DwgDimensionZeroSuppressionAngular2[DwgDimensionZeroSuppressionAngular2["Leading"] = 1] = "Leading"; DwgDimensionZeroSuppressionAngular2[DwgDimensionZeroSuppressionAngular2["Trailing"] = 2] = "Trailing"; DwgDimensionZeroSuppressionAngular2[DwgDimensionZeroSuppressionAngular2["LeadingAndTrailing"] = 3] = "LeadingAndTrailing"; return DwgDimensionZeroSuppressionAngular2; })(DwgDimensionZeroSuppressionAngular || {}); var DwgDimensionTextHorizontal = /* @__PURE__ */ ((DwgDimensionTextHorizontal2) => { DwgDimensionTextHorizontal2[DwgDimensionTextHorizontal2["Center"] = 0] = "Center"; DwgDimensionTextHorizontal2[DwgDimensionTextHorizontal2["Left"] = 1] = "Left"; DwgDimensionTextHorizontal2[DwgDimensionTextHorizontal2["Right"] = 2] = "Right"; DwgDimensionTextHorizontal2[DwgDimensionTextHorizontal2["OverFirst"] = 3] = "OverFirst"; DwgDimensionTextHorizontal2[DwgDimensionTextHorizontal2["OverSecond"] = 4] = "OverSecond"; return DwgDimensionTextHorizontal2; })(DwgDimensionTextHorizontal || {}); var DwgDimensionToleranceTextVertical = /* @__PURE__ */ ((DwgDimensionToleranceTextVertical2) => { DwgDimensionToleranceTextVertical2[DwgDimensionToleranceTextVertical2["Bottom"] = 0] = "Bottom"; DwgDimensionToleranceTextVertical2[DwgDimensionToleranceTextVertical2["Center"] = 1] = "Center"; DwgDimensionToleranceTextVertical2[DwgDimensionToleranceTextVertical2["Top"] = 2] = "Top"; return DwgDimensionToleranceTextVertical2; })(DwgDimensionToleranceTextVertical || {}); var DwgHatchSolidFill = /* @__PURE__ */ ((DwgHatchSolidFill2) => { DwgHatchSolidFill2[DwgHatchSolidFill2["PatternFill"] = 0] = "PatternFill"; DwgHatchSolidFill2[DwgHatchSolidFill2["SolidFill"] = 1] = "SolidFill"; return DwgHatchSolidFill2; })(DwgHatchSolidFill || {}); var DwgHatchAssociativity = /* @__PURE__ */ ((DwgHatchAssociativity2) => { DwgHatchAssociativity2[DwgHatchAssociativity2["NonAssociative"] = 0] = "NonAssociative"; DwgHatchAssociativity2[DwgHatchAssociativity2["Associative"] = 1] = "Associative"; return DwgHatchAssociativity2; })(DwgHatchAssociativity || {}); var DwgHatchStyle = /* @__PURE__ */ ((DwgHatchStyle2) => { DwgHatchStyle2[DwgHatchStyle2["Normal"] = 0] = "Normal"; DwgHatchStyle2[DwgHatchStyle2["Outer"] = 1] = "Outer"; DwgHatchStyle2[DwgHatchStyle2["Ignore"] = 2] = "Ignore"; return DwgHatchStyle2; })(DwgHatchStyle || {}); var DwgHatchPatternType = /* @__PURE__ */ ((DwgHatchPatternType2) => { DwgHatchPatternType2[DwgHatchPatternType2["UserDefined"] = 0] = "UserDefined"; DwgHatchPatternType2[DwgHatchPatternType2["Predefined"] = 1] = "Predefined"; DwgHatchPatternType2[DwgHatchPatternType2["Custom"] = 2] = "Custom"; return DwgHatchPatternType2; })(DwgHatchPatternType || {}); var DwgHatchBoundaryAnnotation = /* @__PURE__ */ ((DwgHatchBoundaryAnnotation2) => { DwgHatchBoundaryAnnotation2[DwgHatchBoundaryAnnotation2["NotAnnotated"] = 0] = "NotAnnotated"; DwgHatchBoundaryAnnotation2[DwgHatchBoundaryAnnotation2["Annotated"] = 1] = "Annotated"; return DwgHatchBoundaryAnnotation2; })(DwgHatchBoundaryAnnotation || {}); var DwgHatchGradientFlag = /* @__PURE__ */ ((DwgHatchGradientFlag2) => { DwgHatchGradientFlag2[DwgHatchGradientFlag2["Solid"] = 0] = "Solid"; DwgHatchGradientFlag2[DwgHatchGradientFlag2["Gradient"] = 1] = "Gradient"; return DwgHatchGradientFlag2; })(DwgHatchGradientFlag || {}); var DwgHatchGradientColorFlag = /* @__PURE__ */ ((DwgHatchGradientColorFlag2) => { DwgHatchGradientColorFlag2[DwgHatchGradientColorFlag2["TwoColor"] = 0] = "TwoColor"; DwgHatchGradientColorFlag2[DwgHatchGradientColorFlag2["OneColor"] = 1] = "OneColor"; return DwgHatchGradientColorFlag2; })(DwgHatchGradientColorFlag || {}); var DwgBoundaryPathTypeFlag = /* @__PURE__ */ ((DwgBoundaryPathTypeFlag2) => { DwgBoundaryPathTypeFlag2[DwgBoundaryPathTypeFlag2["Default"] = 0] = "Default"; DwgBoundaryPathTypeFlag2[DwgBoundaryPathTypeFlag2["External"] = 1] = "External"; DwgBoundaryPathTypeFlag2[DwgBoundaryPathTypeFlag2["Polyline"] = 2] = "Polyline"; DwgBoundaryPathTypeFlag2[DwgBoundaryPathTypeFlag2["Derived"] = 4] = "Derived"; DwgBoundaryPathTypeFlag2[DwgBoundaryPathTypeFlag2["Textbox"] = 8] = "Textbox"; DwgBoundaryPathTypeFlag2[DwgBoundaryPathTypeFlag2["Outermost"] = 16] = "Outermost"; return DwgBoundaryPathTypeFlag2; })(DwgBoundaryPathTypeFlag || {}); var DwgBoundaryPathEdgeType = /* @__PURE__ */ ((DwgBoundaryPathEdgeType2) => { DwgBoundaryPathEdgeType2[DwgBoundaryPathEdgeType2["Line"] = 1] = "Line"; DwgBoundaryPathEdgeType2[DwgBoundaryPathEdgeType2["Circular"] = 2] = "Circular"; DwgBoundaryPathEdgeType2[DwgBoundaryPathEdgeType2["Elliptic"] = 3] = "Elliptic"; DwgBoundaryPathEdgeType2[DwgBoundaryPathEdgeType2["Spline"] = 4] = "Spline"; return DwgBoundaryPathEdgeType2; })(DwgBoundaryPathEdgeType || {}); var DwgPolylineFlag = /* @__PURE__ */ ((DwgPolylineFlag2) => { DwgPolylineFlag2[DwgPolylineFlag2["CLOSED_POLYLINE"] = 1] = "CLOSED_POLYLINE"; DwgPolylineFlag2[DwgPolylineFlag2["CURVE_FIT"] = 2] = "CURVE_FIT"; DwgPolylineFlag2[DwgPolylineFlag2["SPLINE_FIT"] = 4] = "SPLINE_FIT"; DwgPolylineFlag2[DwgPolylineFlag2["POLYLINE_3D"] = 8] = "POLYLINE_3D"; DwgPolylineFlag2[DwgPolylineFlag2["POLYGON_3D"] = 16] = "POLYGON_3D"; DwgPolylineFlag2[DwgPolylineFlag2["CLOSED_POLYGON"] = 32] = "CLOSED_POLYGON"; DwgPolylineFlag2[DwgPolylineFlag2["POLYFACE"] = 64] = "POLYFACE"; DwgPolylineFlag2[DwgPolylineFlag2["CONTINUOUS"] = 128] = "CONTINUOUS"; return DwgPolylineFlag2; })(DwgPolylineFlag || {}); var DwgSmoothType = /* @__PURE__ */ ((DwgSmoothType2) => { DwgSmoothType2[DwgSmoothType2["NONE"] = 0] = "NONE"; DwgSmoothType2[DwgSmoothType2["QUADRATIC"] = 5] = "QUADRATIC"; DwgSmoothType2[DwgSmoothType2["CUBIC"] = 6] = "CUBIC"; DwgSmoothType2[DwgSmoothType2["BEZIER"] = 8] = "BEZIER"; return DwgSmoothType2; })(DwgSmoothType || {}); var DwgProxyOriginalDataFormat = /* @__PURE__ */ ((DwgProxyOriginalDataFormat2) => { DwgProxyOriginalDataFormat2[DwgProxyOriginalDataFormat2["Dwg"] = 0] = "Dwg"; DwgProxyOriginalDataFormat2[DwgProxyOriginalDataFormat2["Dxf"] = 1] = "Dxf"; return DwgProxyOriginalDataFormat2; })(DwgProxyOriginalDataFormat || {}); var DwgTextGenerationFlag = /* @__PURE__ */ ((DwgTextGenerationFlag2) => { DwgTextGenerationFlag2[DwgTextGenerationFlag2["NONE"] = 0] = "NONE"; DwgTextGenerationFlag2[DwgTextGenerationFlag2["MIRRORED_X"] = 2] = "MIRRORED_X"; DwgTextGenerationFlag2[DwgTextGenerationFlag2["MIRRORED_Y"] = 4] = "MIRRORED_Y"; return DwgTextGenerationFlag2; })(DwgTextGenerationFlag || {}); var DwgTextHorizontalAlign = /* @__PURE__ */ ((DwgTextHorizontalAlign2) => { DwgTextHorizontalAlign2[DwgTextHorizontalAlign2["LEFT"] = 0] = "LEFT"; DwgTextHorizontalAlign2[DwgTextHorizontalAlign2["CENTER"] = 1] = "CENTER"; DwgTextHorizontalAlign2[DwgTextHorizontalAlign2["RIGHT"] = 2] = "RIGHT"; DwgTextHorizontalAlign2[DwgTextHorizontalAlign2["ALIGNED"] = 3] = "ALIGNED"; DwgTextHorizontalAlign2[DwgTextHorizontalAlign2["MIDDLE"] = 4] = "MIDDLE"; DwgTextHorizontalAlign2[DwgTextHorizontalAlign2["FIT"] = 5] = "FIT"; return DwgTextHorizontalAlign2; })(DwgTextHorizontalAlign || {}); var DwgTextVerticalAlign = /* @__PURE__ */ ((DwgTextVerticalAlign2) => { DwgTextVerticalAlign2[DwgTextVerticalAlign2["BASELINE"] = 0] = "BASELINE"; DwgTextVerticalAlign2[DwgTextVerticalAlign2["BOTTOM"] = 1] = "BOTTOM"; DwgTextVerticalAlign2[DwgTextVerticalAlign2["MIDDLE"] = 2] = "MIDDLE"; DwgTextVerticalAlign2[DwgTextVerticalAlign2["TOP"] = 3] = "TOP"; return DwgTextVerticalAlign2; })(DwgTextVerticalAlign || {}); const HEADER_VARIABLES = Object.freeze([ "ACADMAINTVER", "ACADVER", "ANGBASE", "ANGDIR", "ATTMODE", "AUNITS", "AUPREC", "CECOLOR", "CELTSCALE", "CELTYPE", "CELWEIGHT", "CEPSNID", "CEPSNTYPE", "CHAMFERA", "CHAMFERB", "CHAMFERC", "CHAMFERD", "CLAYER", "CMLJUST", "CMLSCALE", "CMLSTYLE", "CSHADOW", "DIMADEC", "DIMALT", "DIMALTD", "DIMALTF", "DIMALTRND", "DIMALTTD", "DIMALTTZ", "DIMALTU", "DIMALTZ", "DIMAPOST", "DIMASO", "DIMASSOC", "DIMASZ", "DIMATFIT", "DIMAUNIT", "DIMAZIN", "DIMBLK", "DIMBLK1", "DIMBLK2", "DIMCEN", "DIMCLRD", "DIMCLRE", "DIMCLRT", "DIMDEC", "DIMDLE", "DIMDLI", "DIMDSEP", "DIMEXE", "DIMEXO", "DIMFAC", "DIMGAP", "DIMJUST", "DIMLDRBLK", "DIMLFAC", "DIMLIM", "DIMLUNIT", "DIMLWD", "DIMLWE", "DIMPOST", "DIMRND", "DIMSAH", "DIMSCALE", "DIMSD1", "DIMSD2", "DIMSE1", "DIMSE2", "DIMSHO", "DIMSOXD", "DIMSTYLE", "DIMTAD", "DIMTDEC", "DIMTFAC", "DIMTIH", "DIMTIX", "DIMTM", "DIMTMOVE", "DIMTOFL", "DIMTOH", "DIMTOL", "DIMTOLJ", "DIMTP", "DIMTSZ", "DIMTVP", "DIMTXSTY", "DIMTXT", "DIMTZIN", "DIMUPT", "DIMZIN", "DISPSILH", "DRAGVS", "DWGCODEPAGE", "ELEVATION", "ENDCAPS", "EXTMAX", "EXTMIN", "EXTNAMES", "FILLETRAD", "FILLMODE", "FINGERPRINTGUID", "HALOGAP", "HANDSEED", "HIDETEXT", "HYPERLINKBASE", "INDEXCTL", "INSBASE", "INSUNITS", "INTERFERECOLOR", "INTERFEREOBJVS", "INTERFEREVPVS", "INTERSECTIONCOLOR", "INTERSECTIONDISPLAY", "JOINSTYLE", "LIMCHECK", "LIMMAX", "LIMMIN", "LTSCALE", "LUNITS", "LUPREC", "LWDISPLAY", "MAXACTVP", "MEASUREMENT", "MENU", "MIRRTEXT", "OBSCOLOR", "OBSLTYPE", "ORTHOMODE", "PDMODE", "PDSIZE", "PELEVATION", "PEXTMAX", "PEXTMIN", "PINSBASE", "PLIMCHECK", "PLIMMAX", "PLIMMIN", "PLINEGEN", "PLINEWID", "PROJECTNAME", "PROXYGRAPHICS", "PSLTSCALE", "PSTYLEMODE", "PSVPSCALE", "PUCSBASE", "PUCSNAME", "PUCSORG", "PUCSORGBACK", "PUCSORGBOTTOM", "PUCSORGFRONT", "PUCSORGLEFT", "PUCSORGRIGHT", "PUCSORGTOP", "PUCSORTHOREF", "PUCSORTHOVIEW", "PUCSXDIR", "PUCSYDIR", "QTEXTMODE", "REGENMODE", "SHADEDGE", "SHADEDIF", "SHADOWPLANELOCATION", "SKETCHINC", "SKPOLY", "SORTENTS", "SPLINESEGS", "SPLINETYPE", "SURFTAB1", "SURFTAB2", "SURFTYPE", "SURFU", "SURFV", "TDCREATE", "TDINDWG", "TDUCREATE", "TDUPDATE", "TDUSRTIMER", "TDUUPDATE", "TEXTSIZE", "TEXTSTYLE", "THICKNESS", "TILEMODE", "TRACEWID", "TREEDEPTH", "UCSBASE", "UCSNAME", "UCSORG", "UCSORGBACK", "UCSORGBOTTOM", "UCSORGFRONT", "UCSORGLEFT", "UCSORGRIGHT", "UCSORGTOP", "UCSORTHOREF", "UCSORTHOVIEW", "UCSXDIR", "UCSYDIR", "UNITMODE", "USERI1", "USERI2", "USERI3", "USERI4", "USERI5", "USERR1", "USERR2", "USERR3", "USERR4", "USERR5", "USRTIMER", "VERSIONGUID", "VISRETAIN", "WORLDVIEW", "XCLIPFRAME", "XEDIT" ]); var DwgDictionaryCloningFlags = /* @__PURE__ */ ((DwgDictionaryCloningFlags2) => { DwgDictionaryCloningFlags2[DwgDictionaryCloningFlags2["NotApplicable"] = 0] = "NotApplicable"; DwgDictionaryCloningFlags2[DwgDictionaryCloningFlags2["KeepExisting"] = 1] = "KeepExisting"; DwgDictionaryCloningFlags2[DwgDictionaryCloningFlags2["UseClone"] = 2] = "UseClone"; DwgDictionaryCloningFlags2[DwgDictionaryCloningFlags2["XrefName"] = 3] = "XrefName"; DwgDictionaryCloningFlags2[DwgDictionaryCloningFlags2["Name"] = 4] = "Name"; DwgDictionaryCloningFlags2[DwgDictionaryCloningFlags2["UnmangleName"] = 5] = "UnmangleName"; return DwgDictionaryCloningFlags2; })(DwgDictionaryCloningFlags || {}); const dwgVersions = [ { type: "invalid", hdr: "INVALI", description: "No DWG", version: 0 }, { type: "r1.1", hdr: "MC0.0", description: "MicroCAD Release 1.1", version: 0 }, { type: "r1.2", hdr: "AC1.2", description: "AutoCAD Release 1.2", version: 0 }, { type: "r1.3", hdr: "AC1.3", description: "AutoCAD Release 1.3", version: 1 }, { type: "r1.4", hdr: "AC1.40", description: "AutoCAD Release 1.4", version: 2 }, { type: "r2.0b", hdr: "AC1.50", description: "AutoCAD 2.0 beta", version: 3 }, // not seen { type: "r2.0", hdr: "AC1.50", description: "AutoCAD Release 2.0", version: 4 }, { type: "r2.10", hdr: "AC2.10", description: "AutoCAD Release 2.10", version: 5 }, { type: "r2.21", hdr: "AC2.21", description: "AutoCAD Release 2.21", version: 6 }, { type: "r2.22", hdr: "AC2.22", description: "AutoCAD Release 2.22", version: 7 }, { type: "r2.4", hdr: "AC1001", description: "AutoCAD Release 2.4", version: 8 }, { type: "r2.5", hdr: "AC1002", description: "AutoCAD Release 2.5", version: 9 }, { type: "r2.6", hdr: "AC1003", description: "AutoCAD Release 2.6", version: 10 }, { type: "r9", hdr: "AC1004", description: "AutoCAD Release 9", version: 11 }, { type: "r9c1", hdr: "AC1005", description: "AutoCAD Release 9c1", version: 12 }, { type: "r10", hdr: "AC1006", description: "AutoCAD Release 10", version: 13 }, { type: "r11b1", hdr: "AC1007", description: "AutoCAD 11 beta 1", version: 14 }, { type: "r11b2", hdr: "AC1008", description: "AutoCAD 11 beta 2", version: 15 }, { type: "r11", hdr: "AC1009", description: "AutoCAD Release 11/12 (LT R1/R2)", version: 16 }, { type: "r13b1", hdr: "AC1010", description: "AutoCAD pre-R13 a", version: 17 }, { type: "r13b2", hdr: "AC1011", description: "AutoCAD pre-R13 b", version: 18 }, { type: "r13", hdr: "AC1012", description: "AutoCAD Release 13", version: 19 }, { type: "r13c3", hdr: "AC1013", description: "AutoCAD Release 13c3", version: 20 }, { type: "r14", hdr: "AC1014", description: "AutoCAD Release 14", version: 21 }, { type: "r2000b", hdr: "AC1500", description: "AutoCAD 2000 beta", version: 22 }, { type: "r2000", hdr: "AC1015", description: "AutoCAD Release 2000", version: 23 }, { type: "r2000i", hdr: "AC1016", description: "AutoCAD Release 2000i", version: 23 }, { type: "r2002", hdr: "AC1017", description: "AutoCAD Release 2002", version: 23 }, { type: "r2004a", hdr: "AC402a", description: "AutoCAD 2004 alpha a", version: 24 }, { type: "r2004b", hdr: "AC402b", description: "AutoCAD 2004 alpha b", version: 24 }, { type: "r2004c", hdr: "AC1018", description: "AutoCAD 2004 beta", version: 24 }, // (includes versions AC1019/0x19 and AC1020/0x1a) { type: "r2004", hdr: "AC1018", description: "AutoCAD Release 2004", version: 25 }, //{ type: "r2005", hdr: "AC1019", description: "AutoCAD 2005", version: 0x19 }, // not seen //{ type: "r2006", hdr: "AC1020", description: "AutoCAD 2006", version: 0x19 }, // not seen { type: "r2007a", hdr: "AC701a", description: "AutoCAD 2007 alpha", version: 26 }, { type: "r2007b", hdr: "AC1021", description: "AutoCAD 2007 beta", version: 26 }, { type: "r2007", hdr: "AC1021", description: "AutoCAD Release 2007", version: 27 }, //{ type: "r2008", hdr: "AC1022", description: "AutoCAD 2008", version: 0x1b }, // not seen //{ type: "r2009", hdr: "AC1023", description: "AutoCAD 2009", version: 0x1b }, // not seen { type: "r2010b", hdr: "AC1024", description: "AutoCAD 2010 beta", version: 28 }, { type: "r2010", hdr: "AC1024", description: "AutoCAD Release 2010", version: 29 }, //{ type: "r2011", hdr: "AC1025", description: "AutoCAD 2011", version: 0x1d }, // not seen //{ type: "r2012", hdr: "AC1026", description: "AutoCAD 2012", version: 0x1e }, // not seen { type: "r2013b", hdr: "AC1027", description: "AutoCAD 2013 beta", version: 30 }, { type: "r2013", hdr: "AC1027", description: "AutoCAD Release 2013", version: 31 }, //{ type: "r2014", hdr: "AC1028", description: "AutoCAD 2014", version: 0x1f }, // not seen //{ type: "r2015", hdr: "AC1029", description: "AutoCAD 2015", version: 0x1f }, // not seen //{ type: "r2016", hdr: "AC1030", description: "AutoCAD 2016", version: 0x1f }, // not seen //{ type: "r2017", hdr: "AC1031", description: "AutoCAD 2017", version: 0x20 }, // not seen { type: "r2018b", hdr: "AC1032", description: "AutoCAD 2018 beta", version: 32 }, { type: "r2018", hdr: "AC1032", description: "AutoCAD Release 2018", version: 33 }, //{ type: "r2019", "AC1033", description: "AutoCAD Release 2019", version: 0x22 }, // not seen //{ type: "r2020", "AC1034", description: "AutoCAD Release 2020", version: 0x23 }, // not seen //{ type: "r2021", "AC1035", description: "AutoCAD Release 2021", version: 0x23 }, // not seen { type: "r2022b", hdr: "AC103-4", description: "AutoCAD 2022 beta", version: 36 }, { type: "r>2022", hdr: "", description: "AutoCAD Release >2022", version: 0 } ]; var Dwg_Object_Supertype = /* @__PURE__ */ ((Dwg_Object_Supertype2) => { Dwg_Object_Supertype2[Dwg_Object_Supertype2["DWG_SUPERTYPE_ENTITY"] = 0] = "DWG_SUPERTYPE_ENTITY"; Dwg_Object_Supertype2[Dwg_Object_Supertype2["DWG_SUPERTYPE_OBJECT"] = 1] = "DWG_SUPERTYPE_OBJECT"; return Dwg_Object_Supertype2; })(Dwg_Object_Supertype || {}); var Dwg_Error = /* @__PURE__ */ ((Dwg_Error2) => { Dwg_Error2[Dwg_Error2["WRONGCRC"] = 1] = "WRONGCRC"; Dwg_Error2[Dwg_Error2["NOTYETSUPPORTED"] = 2] = "NOTYETSUPPORTED"; Dwg_Error2[Dwg_Error2["UNHANDLEDCLASS"] = 4] = "UNHANDLEDCLASS"; Dwg_Error2[Dwg_Error2["INVALIDTYPE"] = 8] = "INVALIDTYPE"; Dwg_Error2[Dwg_Error2["INVALIDHANDLE"] = 16] = "INVALIDHANDLE"; Dwg_Error2[Dwg_Error2["INVALIDEED"] = 32] = "INVALIDEED"; Dwg_Error2[Dwg_Error2["VALUEOUTOFBOUNDS"] = 64] = "VALUEOUTOFBOUNDS"; Dwg_Error2[Dwg_Error2["CLASSESNOTFOUND"] = 128] = "CLASSESNOTFOUND"; Dwg_Error2[Dwg_Error2["SECTIONNOTFOUND"] = 256] = "SECTIONNOTFOUND"; Dwg_Error2[Dwg_Error2["PAGENOTFOUND"] = 512] = "PAGENOTFOUND"; Dwg_Error2[Dwg_Error2["INTERNALERROR"] = 1024] = "INTERNALERROR"; Dwg_Error2[Dwg_Error2["INVALIDDWG"] = 2048] = "INVALIDDWG"; Dwg_Error2[Dwg_Error2["IOERROR"] = 4096] = "IOERROR"; Dwg_Error2[Dwg_Error2["OUTOFMEM"] = 8192] = "OUTOFMEM"; return Dwg_Error2; })(Dwg_Error || {}); var Dwg_Object_Type = /* @__PURE__ */ ((Dwg_Object_Type2) => { Dwg_Object_Type2[Dwg_Object_Type2["DWG_TYPE_UNUSED"] = 0] = "DWG_TYPE_UNUSED"; Dwg_Object_Type2[Dwg_Object_Type2["DWG_TYPE_TEXT"] = 1] = "DWG_TYPE_TEXT"; Dwg_Object_Type2[Dwg_Object_Type2["DWG_TYPE_ATTRIB"] = 2] = "DWG_TYPE_ATTRIB"; Dwg_Object_Type2[Dwg_Object_Type2["DWG_TYPE_ATTDEF"] = 3] = "DWG_TYPE_ATTDEF"; Dwg_Object_Type2[Dwg_Object_Type2["DWG_TYPE_BLOCK"] = 4] = "DWG_TYPE_BLOCK"; Dwg_Object_Type2[Dwg_Object_Type2["DWG_TYPE_ENDBLK"] = 5] = "DWG_TYPE_ENDBLK"; Dwg_Object_Type2[Dwg_Object_Type2["DWG_TYPE_SEQEND"] = 6] = "DWG_TYPE_SEQEND"; Dwg_Object_Type2[Dwg_Object_Type2["DWG_TYPE_INSERT"] = 7] = "DWG_TYPE_INSERT"; Dwg_Object_Type2[Dwg_Object_Type2["DWG_TYPE_MINSERT"] = 8] = "DWG_TYPE_MINSERT"; Dwg_Object_Type2[Dwg_Object_Type2["DWG_TYPE_VERTEX_2D"] = 10] = "DWG_TYPE_VERTEX_2D"; Dwg_Object_Type2[Dwg_Object_Type2["DWG_TYPE_VERTEX_3D"] = 11] = "DWG_TYPE_VERTEX_3D"; Dwg_Object_Type2[Dwg_Object_Type2["DWG_TYPE_VERTEX_MESH"] = 12] = "DWG_TYPE_VERTEX_MESH"; Dwg_Object_Type2[Dwg_Object_Type2["DWG_TYPE_VERTEX_PFACE"] = 13] = "DWG_TYPE_VERTEX_PFACE"; Dwg_Object_Type2[Dwg_Object_Type2["DWG_TYPE_VERTEX_PFACE_FACE"] = 14] = "DWG_TYPE_VERTEX_PFACE_FACE"; Dwg_Object_Type2[Dwg_Object_Type2["DWG_TYPE_POLYLINE_2D"] = 15] = "DWG_TYPE_POLYLINE_2D"; Dwg_Object_Type2[Dwg_Object_Type2["DWG_TYPE_POLYLINE_3D"] = 16] = "DWG_TYPE_POLYLINE_3D"; Dwg_Object_Type2[Dwg_Object_Type2["DWG_TYPE_ARC"] = 17] = "DWG_TYPE_ARC"; Dwg_Object_Type2[Dwg_Object_Type2["DWG_TYPE_CIRCLE"] = 18] = "DWG_TYPE_CIRCLE"; Dwg_Object_Type2[Dwg_Object_Type2["DWG_TYPE_LINE"] = 19] = "DWG_TYPE_LINE"; Dwg_Object_Type2[Dwg_Object_Type2["DWG_TYPE_DIMENSION_ORDINATE"] = 20] = "DWG_TYPE_DIMENSION_ORDINATE"; Dwg_Object_Type2[Dwg_Object_Type2["DWG_TYPE_DIMENSION_LINEAR"] = 21] = "DWG_TYPE_DIMENSION_LINEAR"; Dwg_Object_Type2[Dwg_Object_Type2["DWG_TYPE_DIMENSION_ALIGNED"] = 22] = "DWG_TYPE_DIMENSION_ALIGNED"; Dwg_Object_Type2[Dwg_Object_Type2["DWG_TYPE_DIMENSION_ANG3PT"] = 23] = "DWG_TYPE_DIMENSION_ANG3PT"; Dwg_Object_Type2[Dwg_Object_Type2["DWG_TYPE_DIMENSION_ANG2LN"] = 24] = "DWG_TYPE_DIMENSION_ANG2LN"; Dwg_Object_Type2[Dwg_Object_Type2["DWG_TYPE_DIMENSION_RADIUS"] = 25] = "DWG_TYPE_DIMENSION_RADIUS"; Dwg_Object_Type2[Dwg_Object_Type2["DWG_TYPE_DIMENSION_DIAMETER"] = 26] = "DWG_TYPE_DIMENSION_DIAMETER"; Dwg_Object_Type2[Dwg_Object_Type2["DWG_TYPE_POINT"] = 27] = "DWG_TYPE_POINT"; Dwg_Object_Type2[Dwg_Object_Type2["DWG_TYPE_3DFACE"] = 28] = "DWG_TYPE_3DFACE"; Dwg_Object_Type2[Dwg_Object_Type2["DWG_TYPE_POLYLINE_PFACE"] = 29] = "DWG_TYPE_POLYLINE_PFACE"; Dwg_Object_Type2[Dwg_Object_Type2["DWG_TYPE_POLYLINE_MESH"] = 30] = "DWG_TYPE_POLYLINE_MESH"; Dwg_Object_Type2[Dwg_Object_Type2["DWG_TYPE_SOLID"] = 31] = "DWG_TYPE_SOLID"; Dwg_Object_Type2[Dwg_Object_Type2["DWG_TYPE_TRACE"] = 32] = "DWG_TYPE_TRACE"; Dwg_Object_Type2[Dwg_Object_Type2["DWG_TYPE_SHAPE"] = 33] = "DWG_TYPE_SHAPE"; Dwg_Object_Type2[Dwg_Object_Type2["DWG_TYPE_VIEWPORT"] = 34] = "DWG_TYPE_VIEWPORT"; Dwg_Object_Type2[Dwg_Object_Type2["DWG_TYPE_ELLIPSE"] = 35] = "DWG_TYPE_ELLIPSE"; Dwg_Object_Type2[Dwg_Object_Type2["DWG_TYPE_SPLINE"] = 36] = "DWG_TYPE_SPLINE"; Dwg_Object_Type2[Dwg_Object_Type2["DWG_TYPE_REGION"] = 37] = "DWG_TYPE_REGION"; Dwg_Object_Type2[Dwg_Object_Type2["DWG_TYPE_3DSOLID"] = 38] = "DWG_TYPE_3DSOLID"; Dwg_Object_Type2[Dwg_Object_Type2["DWG_TYPE_BODY"] = 39] = "DWG_TYPE_BODY"; Dwg_Object_Type2[Dwg_Object_Type2["DWG_TYPE_RAY"] = 40] = "DWG_TYPE_RAY"; Dwg_Object_Type2[Dwg_Object_Type2["DWG_TYPE_XLINE"] = 41] = "DWG_TYPE_XLINE"; Dwg_Object_Type2[Dwg_Object_Type2["DWG_TYPE_DICTIONARY"] = 42] = "DWG_TYPE_DICTIONARY"; Dwg_Object_Type2[Dwg_Object_Type2["DWG_TYPE_OLEFRAME"] = 43] = "DWG_TYPE_OLEFRAME"; Dwg_Object_Type2[Dwg_Object_Type2["DWG_TYPE_MTEXT"] = 44] = "DWG_TYPE_MTEXT"; Dwg_Object_Type2[Dwg_Object_Type2["DWG_TYPE_LEADER"] = 45] = "DWG_TYPE_LEADER"; Dwg_Object_Type2[Dwg_Object_Type2["DWG_TYPE_TOLERANCE"] = 46] = "DWG_TYPE_TOLERANCE"; Dwg_Object_Type2[Dwg_Object_Type2["DWG_TYPE_MLINE"] = 47] = "DWG_TYPE_MLINE"; Dwg_Object_Type2[Dwg_Object_Type2["DWG_TYPE_BLOCK_CONTROL"] = 48] = "DWG_TYPE_BLOCK_CONTROL"; Dwg_Object_Type2[Dwg_Object_Type2["DWG_TYPE_BLOCK_HEADER"] = 49] = "DWG_TYPE_BLOCK_HEADER"; Dwg_Object_Type2[Dwg_Object_Type2["DWG_TYPE_LAYER_CONTROL"] = 50] = "DWG_TYPE_LAYER_CONTROL"; Dwg_Object_Type2[Dwg_Object_Type2["DWG_TYPE_LAYER"] = 51] = "DWG_TYPE_LAYER"; Dwg_Object_Type2[Dwg_Object_Type2["DWG_TYPE_STYLE_CONTROL"] = 52] = "DWG_TYPE_STYLE_CONTROL"; Dwg_Object_Type2[Dwg_Object_Type2["DWG_TYPE_STYLE"] = 53] = "DWG_TYPE_STYLE"; Dwg_Object_Type2[Dwg_Object_Type2["DWG_TYPE_LTYPE_CONTROL"] = 56] = "DWG_TYPE_LTYPE_CONTROL"; Dwg_Object_Type2[Dwg_Object_Type2["DWG_TYPE_LTYPE"] = 57] = "DWG_TYPE_LTYPE"; Dwg_Object_Type2[Dwg_Object_Type2["DWG_TYPE_VIEW_CONTROL"] = 60] = "DWG_TYPE_VIEW_CONTROL"; Dwg_Object_Type2[Dwg_Object_Type2["DWG_TYPE_VIEW"] = 61] = "DWG_TYPE_VIEW"; Dwg_Object_Type2[Dwg_Object_Type2["DWG_TYPE_UCS_CONTROL"] = 62] = "DWG_TYPE_UCS_CONTROL"; Dwg_Object_Type2[Dwg_Object_Type2["DWG_TYPE_UCS"] = 63] = "DWG_TYPE_UCS"; Dwg_Object_Type2[Dwg_Object_Type2["DWG_TYPE_VPORT_CONTROL"] = 64] = "DWG_TYPE_VPORT_CONTROL"; Dwg_Object_Type2[Dwg_Object_Type2["DWG_TYPE_VPORT"] = 65] = "DWG_TYPE_VPORT"; Dwg_Object_Type2[Dwg_Object_Type2["DWG_TYPE_APPID_CONTROL"] = 66] = "DWG_TYPE_APPID_CONTROL"; Dwg_Object_Type2[Dwg_Object_Type2["DWG_TYPE_APPID"] = 67] = "DWG_TYPE_APPID"; Dwg_Object_Type2[Dwg_Object_Type2["DWG_TYPE_DIMSTYLE_CONTROL"] = 68] = "DWG_TYPE_DIMSTYLE_CONTROL"; Dwg_Object_Type2[Dwg_Object_Type2["DWG_TYPE_DIMSTYLE"] = 69] = "DWG_TYPE_DIMSTYLE"; Dwg_Object_Type2[Dwg_Object_Type2["DWG_TYPE_VX_CONTROL"] = 70] = "DWG_TYPE_VX_CONTROL"; Dwg_Object_Type2[Dwg_Object_Type2["DWG_TYPE_VX_TABLE_RECORD"] = 71] = "DWG_TYPE_VX_TABLE_RECORD"; Dwg_Object_Type2[Dwg_Object_Type2["DWG_TYPE_GROUP"] = 72] = "DWG_TYPE_GROUP"; Dwg_Object_Type2[Dwg_Object_Type2["DWG_TYPE_MLINESTYLE"] = 73] = "DWG_TYPE_MLINESTYLE"; Dwg_Object_Type2[Dwg_Object_Type2["DWG_TYPE_OLE2FRAME"] = 74] = "DWG_TYPE_OLE2FRAME"; Dwg_Object_Type2[Dwg_Object_Type2["DWG_TYPE_DUMMY"] = 75] = "DWG_TYPE_DUMMY"; Dwg_Object_Type2[Dwg_Object_Type2["DWG_TYPE_LONG_TRANSACTION"] = 76] = "DWG_TYPE_LONG_TRANSACTION"; Dwg_Object_Type2[Dwg_Object_Type2["DWG_TYPE_LWPOLYLINE"] = 77] = "DWG_TYPE_LWPOLYLINE"; Dwg_Object_Type2[Dwg_Object_Type2["DWG_TYPE_HATCH"] = 78] = "DWG_TYPE_HATCH"; Dwg_Object_Type2[Dwg_Object_Type2["DWG_TYPE_XRECORD"] = 79] = "DWG_TYPE_XRECORD"; Dwg_Object_Type2[Dwg_Object_Type2["DWG_TYPE_PLACEHOLDER"] = 80] = "DWG_TYPE_PLACEHOLDER"; Dwg_Object_Type2[Dwg_Object_Type2["DWG_TYPE_VBA_PROJECT"] = 81] = "DWG_TYPE_VBA_PROJECT"; Dwg_Object_Type2[Dwg_Object_Type2["DWG_TYPE_LAYOUT"] = 82] = "DWG_TYPE_LAYOUT"; Dwg_Object_Type2[Dwg_Object_Type2["DWG_TYPE_PROXY_ENTITY"] = 498] = "DWG_TYPE_PROXY_ENTITY"; Dwg_Object_Type2[Dwg_Object_Type2["DWG_TYPE_PROXY_OBJECT"] = 499] = "DWG_TYPE_PROXY_OBJECT"; Dwg_Object_Type2[Dwg_Object_Type2["DWG_TYPE_ACDSRECORD"] = 500] = "DWG_TYPE_ACDSRECORD"; Dwg_Object_Type2[Dwg_Object_Type2["DWG_TYPE_ACDSSCHEMA"] = 501] = "DWG_TYPE_ACDSSCHEMA"; Dwg_Object_Type2[Dwg_Object_Type2["DWG_TYPE_ACMECOMMANDHISTORY"] = 502] = "DWG_TYPE_ACMECOMMANDHISTORY"; Dwg_Object_Type2[Dwg_Object_Type2["DWG_TYPE_ACMESCOPE"] = 503] = "DWG_TYPE_ACMESCOPE"; Dwg_Object_Type2[Dwg_Object_Type2["DWG_TYPE_ACMESTATEMGR"] = 504] = "DWG_TYPE_ACMESTATEMGR"; Dwg_Object_Type2[Dwg_Object_Type2["DWG_TYPE_ACSH_BOOLEAN_CLASS"] = 505] = "DWG_TYPE_ACSH_BOOLEAN_CLASS"; Dwg_Object_Type2[Dwg_Object_Type2["DWG_TYPE_ACSH_BOX_CLASS"] = 506] = "DWG_TYPE_ACSH_BOX_CLASS"; Dwg_Object_Type2[Dwg_Object_Type2["DWG_TYPE_ACSH_BREP_CLASS"] = 507] = "DWG_TYPE_ACSH_BREP_CLASS"; Dwg_Object_Type2[Dwg_Object_Type2["DWG_TYPE_ACSH_CHAMFER_CLASS"] = 508] = "DWG_TYPE_ACSH_CHAMFER_CLASS"; Dwg_Object_Type2[Dwg_Object_Type2["DWG_TYPE_ACSH_CONE_CLASS"] = 509] = "DWG_TYPE_ACSH_CONE_CLASS"; Dwg_Object_Type2[Dwg_Object_Type2["DWG_TYPE_ACSH_CYLINDER_CLASS"] = 510] = "DWG_TYPE_ACSH_CYLINDER_CLASS"; Dwg_Object_Type2[Dwg_Object_Type2["DWG_TYPE_ACSH_EXTRUSION_CLASS"] = 511] = "DWG_TYPE_ACSH_EXTRUSION_CLASS"; Dwg_Object_Type2[Dwg_Object_Type2["DWG_TYPE_ACSH_FILLET_CLASS"] = 512] = "DWG_TYPE_ACSH_FILLET_CLASS"; Dwg_Object_Type2[Dwg_Object_Type2["DWG_TYPE_ACSH_HISTORY_CLASS"] = 513] = "DWG_TYPE_ACSH_HISTORY_CLASS"; Dwg_Object_Type2[Dwg_Object_Type2["DWG_TYPE_ACSH_LOFT_CLASS"] = 514] = "DWG_TYPE_ACSH_LOFT_CLASS"; Dwg_Object_Type2[Dwg_Object_Type2["DWG_TYPE_ACSH_PYRAMID_CLASS"] = 515] = "DWG_TYPE_ACSH_PYRAMID_CLASS"; Dwg_Object_Type2[Dwg_Object_Type2["DWG_TYPE_ACSH_REVOLVE_CLASS"] = 516] = "DWG_TYPE_ACSH_REVOLVE_CLASS"; Dwg_Object_Type2[Dwg_Object_Type2["DWG_TYPE_ACSH_SPHERE_CLASS"] = 517] = "DWG_TYPE_ACSH_SPHERE_CLASS"; Dwg_Object_Type2[Dwg_Object_Type2["DWG_TYPE_ACSH_SWEEP_CLASS"] = 518] = "DWG_TYPE_ACSH_SWEEP_CLASS"; Dwg_Object_Type2[Dwg_Object_Type2["DWG_TYPE_ACSH_TORUS_CLASS"] = 519] = "DWG_TYPE_ACSH_TORUS_CLASS"; Dwg_Object_Type2[Dwg_Object_Type2["DWG_TYPE_ACSH_WEDGE_CLASS"] = 520] = "DWG_TYPE_ACSH_WEDGE_CLASS"; Dwg_Object_Type2[Dwg_Object_Type2["DWG_TYPE_ALDIMOBJECTCONTEXTDATA"] = 521] = "DWG_TYPE_ALDIMOBJECTCONTEXTDATA"; Dwg_Object_Type2[Dwg_Object_Type2["DWG_TYPE_ALIGNMENTPARAMETERENTITY"] = 522] = "DWG_TYPE_ALIGNMENTPARAMETERENTITY"; Dwg_Object_Type2[Dwg_Object_Type2["DWG_TYPE_ANGDIMOBJECTCONTEXTDATA"] = 523] = "DWG_TYPE_ANGDIMOBJECTCONTEXTDATA"; Dwg_Object_Type2[Dwg_Object_Type2["DWG_TYPE_ANNOTSCALEOBJECTCONTEXTDATA"] = 524] = "DWG_TYPE_ANNOTSCALEOBJECTCONTEXTDATA"; Dwg_Object_Type2[Dwg_Object_Type2["DWG_TYPE_ARCALIGNEDTEXT"] = 525] = "DWG_TYPE_ARCALIGNEDTEXT"; Dwg_Object_Type2[Dwg_Object_Type2["DWG_TYPE_ARC_DIMENSION"] = 526] = "DWG_TYPE_ARC_DIMENSION"; Dwg_Object_Type2[Dwg_Object_Type2["DWG_TYPE_ASSOC2DCONSTRAINTGROUP"] = 527] = "DWG_TYPE_ASSOC2DCONSTRAINTGROUP"; Dwg_Object_Type2[Dwg_Object_Type2["DWG_TYPE_ASSOC3POINTANGULARDIMACTIONBODY"] = 528] = "DWG_TYPE_ASSOC3POINTANGULARDIMACTIONBODY"; Dwg_Object_Type2[Dwg_Object_Type2["DWG_TYPE_ASSOCACTION"] = 529] = "DWG_TYPE_ASSOCACTION"; Dwg_Object_Type2[Dwg_Object_Type2["DWG_TYPE_ASSOCACTIONPARAM"] = 530] = "DWG_TYPE_ASSOCACTIONPARAM"; Dwg_Object_Type2[Dwg_Object_Type2["DWG_TYPE_ASSOCALIGNEDDIMACTIONBODY"] = 531] = "DWG_TYPE_ASSOCALIGNEDDIMACTIONBODY"; Dwg_Object_Type2[Dwg_Object_Type2["DWG_TYPE_ASSOCARRAYACTIONBODY"] = 532] = "DWG_TYPE_ASSOCARRAYACTIONBODY"; Dwg_Object_Type2[Dwg_Object_Type2["DWG_TYPE_ASSOCARRAYMODIFYACTIONBODY"] = 533] = "DWG_TYPE_ASSOCARRAYMODIFYACTIONBODY"; Dwg_Object_Type2[Dwg_Object_Type2["DWG_TYPE_ASSOCARRAYMODIFYPARAMETERS"] = 534] = "DWG_TYPE_ASSOCARRAYMODIFYPARAMETERS"; Dwg_Object_Type2[Dwg_Object_Type2["DWG_TYPE_ASSOCARRAYPATHPARAMETERS"] = 535] = "DWG_TYPE_ASSOCARRAYPATHPARAMETERS"; Dwg_Object_Type2[Dwg_Object_Type2["DWG_TYPE_ASSOCARRAYPOLARPARAMETERS"] = 536] = "DWG_TYPE_ASSOCARRAYPOLARPARAMETERS"; Dwg_Object_Type2[Dwg_Object_Type2["DWG_TYPE_ASSOCARRAYRECTANGULARPARAMETERS"] = 537] = "DWG_TYPE_ASSOCARRAYRECTANGULARPARAMETERS"; Dwg_Object_Type2[Dwg_Object_Type2["DWG_TYPE_ASSOCASMBODYACTIONPARAM"] = 538] = "DWG_TYPE_ASSOCASMBODYACTIONPARAM"; Dwg_Object_Type2[Dwg_Object_Type2["DWG_TYPE_ASSOCBLENDSURFACEACTIONBODY"] = 539] = "DWG_TYPE_ASSOCBLENDSURFACEACTIONBODY"; Dwg_Object_Type2[Dwg_Object_Type2["DWG_TYPE_ASSOCCOMPOUNDACTIONPARAM"] = 540] = "DWG_TYPE_ASSOCCOMPOUNDACTIONPARAM"; Dwg_Object_Type2[Dwg_Object_Type2["DWG_TYPE_ASSOCDEPENDENCY"] = 541] = "DWG_TYPE_ASSOCDEPENDENCY"; Dwg_Object_Type2[Dwg_Object_Type2["DWG_TYPE_ASSOCDIMDEPENDENCYBODY"] = 542] = "DWG_TYPE_ASSOCDIMDEPENDENCYBODY"; Dwg_Object_Type2[Dwg_Object_Type2["DWG_TYPE_ASSOCEDGEACTIONPARAM"] = 543] = "DWG_TYPE_ASSOCEDGEACTIONPARAM"; Dwg_Object_Type2[Dwg_Object_Type2["DWG_TYPE_ASSOCEDGECHAMFERACTIONBODY"] = 544] = "DWG_TYPE_ASSOCEDGECHAMFERACTIONBODY"; Dwg_Object_Type2[Dwg_Object_Type2["DWG_TYPE_ASSOCEDGEFILLETACTIONBODY"] = 545] = "DWG_TYPE_ASSOCEDGEFILLETACTIONBODY"; Dwg_Object_Type2[Dwg_Object_Type2["DWG_TYPE_ASSOCEXTENDSURFACEACTIONBODY"] = 546] = "DWG_TYPE_ASSOCEXTENDSURFACEACTIONBODY"; Dwg_Object_Type2[Dwg_Object_Type2["DWG_TYPE_ASSOCEXTRUDEDSURFACEACTIONBODY"] = 547] = "DWG_TYPE_ASSOCEXTRUDEDSURFACEACTIONBODY"; Dwg_Object_Type2[Dwg_Object_Type2["DWG_TYPE_ASSOCFACEACTIONPARAM"] = 548] = "DWG_TYPE_ASSOCFACEACTIONPARAM"; Dwg_Object_Type2[Dwg_Object_Type2["DWG_TYPE_ASSOCFILLETSURFACEACTIONBODY"] = 549] = "DWG_TYPE_ASSOCFILLETSURFACEACTIONBODY"; Dwg_Object_Type2[Dwg_Object_Type2["DWG_TYPE_ASSOCGEOMDEPENDENCY"] = 550] = "DWG_TYPE_ASSOCGEOMDEPENDENCY"; Dwg_Object_Type2[Dwg_Object_Type2["DWG_TYPE_ASSOCLOFTEDSURFACEACTIONBODY"] = 551] = "DWG_TYPE_ASSOCLOFTEDSURFACEACTIONBODY"; Dwg_Object_Type2[Dwg_Object_Type2["DWG_TYPE_ASSOCMLEADERACTIONBODY"] = 552] = "DWG_TYPE_ASSOCMLEADERACTIONBODY"; Dwg_Object_Type2[Dwg_Object_Type2["DWG_TYPE_ASSOCNETWORK"] = 553] = "DWG_TYPE_ASSOCNETWORK"; Dwg_Object_Type2[Dwg_Object_Type2["DWG_TYPE_ASSOCNETWORKSURFACEACTIONBODY"] = 554] = "DWG_TYPE_ASSOCNETWORKSURFACEACTIONBODY"; Dwg_Object_Type2[Dwg_Object_Type2["DWG_TYPE_ASSOCOBJECTACTIONPARAM"] = 555] = "DWG_TYPE_ASSOCOBJECTACTIONPARAM"; Dwg_Object_Type2[Dwg_Object_Type2["DWG_TYPE_ASSOCOFFSETSURFACEACTIONBODY"] = 556] = "DWG_TYPE_ASSOCOFFSETSURFACEACTIONBODY"; Dwg_Object_Type2[Dwg_Object_Type2["DWG_TYPE_ASSOCORDINATEDIMACTIONBODY"] = 557] = "DWG_TYPE_ASSOCORDINATEDIMACTIONBODY"; Dwg_Object_Type2[Dwg_Object_Type2["DWG_TYPE_ASSOCOSNAPPOINTREFACTIONPARAM"] = 558] = "DWG_TYPE_ASSOCOSNAPPOINTREFACTIONPARAM"; Dwg_Object_Type2[Dwg_Object_Type2["DWG_TYPE_ASSOCPATCHSURFACEACTIONBODY"] = 559] = "DWG_TYPE_ASSOCPATCHSURFACEACTIONBODY"; Dwg_Object_Type2[Dwg_Object_Type2["DWG_TYPE_ASSOCPATHACTIONPARAM"] = 560] = "DWG_TYPE_ASSOCPATHACTIONPARAM"; Dwg_Object_Type2[Dwg_Object_Type2["DWG_TYPE_ASSOCPERSSUBENTMANAGER"] = 561] = "DWG_TYPE_ASSOCPERSSUBENTMANAGER"; Dwg_Object_Type2[Dwg_Object_Type2["DWG_TYPE_ASSOCPLANESURFACEACTIONBODY"] = 562] = "DWG_TYPE_ASSOCPLANESURFACEACTIONBODY"; Dwg_Object_Type2[Dwg_Object_Type2["DWG_TYPE_ASSOCPOINTREFACTIONPARAM"] = 563] = "DWG_TYPE_ASSOCPOINTREFACTIONPARAM"; Dwg_Object_Type2[Dwg_Object_Type2["DWG_TYPE_ASSOCRESTOREENTITYSTATEACTIONBODY"] = 564] = "DWG_TYPE_ASSOCRESTOREENTITYSTATEACTIONBODY"; Dwg_Object_Type2[Dwg_Object_Type2["DWG_TYPE_ASSOCREVOLVEDSURFACEACTIONBODY"] = 565] = "DWG_TYPE_ASSOCREVOLVEDSURFACEACTIONBODY"; Dwg_Object_Type2[Dwg_Object_Type2["DWG_TYPE_ASSOCROTATEDDIMACTIONBODY"] = 566] = "DWG_TYPE_ASSOCROTATEDDIMACTIONBODY"; Dwg_Object_Type2[Dwg_Object_Type2["DWG_TYPE_ASSOCSWEPTSURFACEACTIONBODY"] = 567] = "DWG_TYPE_ASSOCSWEPTSURFACEACTIONBODY"; Dwg_Object_Type2[Dwg_Object_Type2["DWG_TYPE_ASSOCTRIMSURFACEACTIONBODY"] = 568] = "DWG_TYPE_ASSOCTRIMSURFACEACTIONBODY"; Dwg_Object_Type2[Dwg_Object_Type2["DWG_TYPE_ASSOCVALUEDEPENDENCY"] = 569] = "DWG_TYPE_ASSOCVALUEDEPENDENCY"; Dwg_Object_Type2[Dwg_Object_Type2["DWG_TYPE_ASSOCVARIABLE"] = 570] = "DWG_TYPE_ASSOCVARIABLE"; Dwg_Object_Type2[Dwg_Object_Type2["DWG_TYPE_ASSOCVERTEXACTIONPARAM"] = 571] = "DWG_TYPE_ASSOCVERTEXACTIONPARAM"; Dwg_Object_Type2[Dwg_Object_Type2["DWG_TYPE_BASEPOINTPARAMETERENTITY"] = 572] = "DWG_TYPE_BASEPOINTPARAMETERENTITY"; Dwg_Object_Type2[Dwg_Object_Type2["DWG_TYPE_BLKREFOBJECTCONTEXTDATA"] = 573] = "DWG_TYPE_BLKREFOBJECTCONTEXTDATA"; Dwg_Object_Type2[Dwg_Object_Type2["DWG_TYPE_BLOCKALIGNEDCONSTRAINTPARAMETER"] = 574] = "DWG_TYPE_BLOCKALIGNEDCONSTRAINTPARAMETER"; Dwg_Object_Type2[Dwg_Object_Type2["DWG_TYPE_BLOCKALIGNMENTGRIP"] = 575] = "DWG_TYPE_BLOCKALIGNMENTGRIP"; Dwg_Object_Type2[Dwg_Object_Type2["DWG_TYPE_BLOCKALIGNMENTPARAMETER"] = 576] = "DWG_TYPE_BLOCKALIGNMENTPARAMETER"; Dwg_Object_Type2[Dwg_Object_Type2["DWG_TYPE_BLOCKANGULARCONSTRAINTPARAMETER"] = 577] = "DWG_TYPE_BLOCKANGULARCONSTRAINTPARAMETER"; Dwg_Object_Type2[Dwg_Object_Type2["DWG_TYPE_BLOCKARRAYACTION"] = 578] = "DWG_TYPE_BLOCKARRAYACTION"; Dwg_Object_Type2[Dwg_Object_Type2["DWG_TYPE_BLOCKBASEPOINTPARAMETER"] = 579] = "DWG_TYPE_BLOCKBASEPOINTPARAMETER"; Dwg_Object_Type2[Dwg_Object_Type2["DWG_TYPE_BLOCKDIAMETRICCONSTRAINTPARAMETER"] = 580] = "DWG_TYPE_BLOCKDIAMETRICCONSTRAINTPARAMETER"; Dwg_Object_Type2[Dwg_Object_Type2["DWG_TYPE_BLOCKFLIPACTION"] = 581] = "DWG_TYPE_BLOCKFLIPACTION"; Dwg_Object_Type2[Dwg_Object_Type2["DWG_TYPE_BLOCKFLIPGRIP"] = 582] = "DWG_TYPE_BLOCKFLIPGRIP"; Dwg_Object_Type2[Dwg_Object_Type2["DWG_TYPE_BLOCKFLIPPARAMETER"] = 583] = "DWG_TYPE_BLOCKFLIPPARAMETER"; Dwg_Object_Type2[Dwg_Object_Type2["DWG_TYPE_BLOCKGRIPLOCATIONCOMPONENT"] = 584] = "DWG_TYPE_BLOCKGRIPLOCATIONCOMPONENT"; Dwg_Object_Type2[Dwg_Object_Type2["DWG_TYPE_BLOCKHORIZONTALCONSTRAINTPARAMETER"] = 585] = "DWG_TYPE_BLOCKHORIZONTALCONSTRAINTPARAMETER"; Dwg_Object_Type2[Dwg_Object_Type2["DWG_TYPE_BLOCKLINEARCONSTRAINTPARAMETER"] = 586] = "DWG_TYPE_BLOCKLINEARCONSTRAINTPARAMETER"; Dwg_Object_Type2[Dwg_Object_Type2["DWG_TYPE_BLOCKLINEARGRIP"] = 587] = "DWG_TYPE_BLOCKLINEARGRIP"; Dwg_Object_Type2[Dwg_Object_Type2["DWG_TYPE_BLOCKLINEARPARAMETER"] = 588] = "DWG_TYPE_BLOCKLINEARPARAMETER"; Dwg_Object_Type2[Dwg_Object_Type2["DWG_TYPE_BLOCKLOOKUPACTION"] = 589] = "DWG_TYPE_BLOCKLOOKUPACTION"; Dwg_Object_Type2[Dwg_Object_Type2["DWG_TYPE_BLOCKLOOKUPGRIP"] = 590] = "DWG_TYPE_BLOCKLOOKUPGRIP"; Dwg_Object_Type2[Dwg_Object_Type2["DWG_TYPE_BLOCKLOOKUPPARAMETER"] = 591] = "DWG_TYPE_BLOCKLOOKUPPARAMETER"; Dwg_Object_Type2[Dwg_Object_Type2["DWG_TYPE_BLOCKMOVEACTION"] = 592] = "DWG_TYPE_BLOCKMOVEACTION"; Dwg_Object_Type2[Dwg_Object_Type2["DWG_TYPE_BLOCKPARAMDEPENDENCYBODY"] = 593] = "DWG_TYPE_BLOCKPARAMDEPENDENCYBODY"; Dwg_Object_Type2[Dwg_Object_Type2["DWG_TYPE_BLOCKPOINTPARAMETER"] = 594] = "DWG_TYPE_BLOCKPOINTPARAMETER"; Dwg_Object_Type2[Dwg_Object_Type2["DWG_TYPE_BLOCKPOLARGRIP"] = 595] = "DWG_TYPE_BLOCKPOLARGRIP"; Dwg_Object_Type2[Dwg_Object_Type2["DWG_TYPE_BLOCKPOLARPARAMETER"] = 596] = "DWG_TYPE_BLOCKPOLARPARAMETER"; Dwg_Object_Type2[Dwg_Object_Type2["DWG_TYPE_BLOCKPOLARSTRETCHACTION"] = 597] = "DWG_TYPE_BLOCKPOLARSTRETCHACTION"; Dwg_Object_Type2[Dwg_Object_Type2["DWG_TYPE_BLOCKPROPERTIESTABLE"] = 598] = "DWG_TYPE_BLOCKPROPERTIESTABLE"; Dwg_Object_Type2[Dwg_Object_Type2["DWG_TYPE_BLOCKPROPERTIESTABLEGRIP"] = 599] = "DWG_TYPE_BLOCKPROPERTIESTABLEGRIP"; Dwg_Object_Type2[Dwg_Object_Type2["DWG_TYPE_BLOCKRADIALCONSTRAINTPARAMETER"] = 600] = "DWG_TYPE_BLOCKRADIALCONSTRAINTPARAMETER"; Dwg_Object_Type2[Dwg_Object_Type2["DWG_TYPE_BLOCKREPRESENTATION"] = 601] = "DWG_TYPE_BLOCKREPRESENTATION"; Dwg_Object_Type2[Dwg_Object_Type2["DWG_TYPE_BLOCKROTATEACTION"] = 602] = "DWG_TYPE_BLOCKROTATEACTION"; Dwg_Object_Type2[Dwg_Object_Type2["DWG_TYPE_BLOCKROTATIONGRIP"] = 603] = "DWG_TYPE_BLOCKROTATIONGRIP"; Dwg_Object_Type2[Dwg_Object_Type2["DWG_TYPE_BLOCKROTATIONPARAMETER"] = 604] = "DWG_TYPE_BLOCKROTATIONPARAMETER"; Dwg_Object_Type2[Dwg_Object_Type2["DWG_TYPE_BLOCKSCALEACTION"] = 605] = "DWG_TYPE_BLOCKSCALEACTION"; Dwg_Object_Type2[Dwg_Object_Type2["DWG_TYPE_BLOCKSTRETCHACTION"] = 606] = "DWG_TYPE_BLOCKSTRETCHACTION"; Dwg_Object_Type2[Dwg_Object_Type2["DWG_TYPE_BLOCKUSERPARAMETER"] = 607] = "DWG_TYPE_BLOCKUSERPARAMETER"; Dwg_Object_Type2[Dwg_Object_Type2["DWG_TYPE_BLOCKVERTICALCONSTRAINTPARAMETER"] = 608] = "DWG_TYPE_BLOCKVERTICALCONSTRAINTPARAMETER"; Dwg_Object_Type2[Dwg_Object_Type2["DWG_TYPE_BLOCKVISIBILITYGRIP"] = 609] = "DWG_TYPE_BLOCKVISIBILITYGRIP"; Dwg_Object_Type2[Dwg_Object_Type2["DWG_TYPE_BLOCKVISIBILITYPARAMETER"] = 610] = "DWG_TYPE_BLOCKVISIBILITYPARAMETER"; Dwg_Object_Type2[Dwg_Object_Type2["DWG_TYPE_BLOCKXYGRIP"] = 611] = "DWG_TYPE_BLOCKXYGRIP"; Dwg_Object_Type2[Dwg_Object_Type2["DWG_TYPE_BLOCKXYPARAMETER"] = 612] = "DWG_TYPE_BLOCKXYPARAMETER"; Dwg_Object_Type2[Dwg_Object_Type2["DWG_TYPE_CAMERA"] = 613] = "DWG_TYPE_CAMERA"; Dwg_Object_Type2[Dwg_Object_Type2["DWG_TYPE_CELLSTYLEMAP"] = 614] = "DWG_TYPE_CELLSTYLEMAP"; Dwg_Object_Type2[Dwg_Object_Type2["DWG_TYPE_CONTEXTDATAMANAGER"] = 615] = "DWG_TYPE_CONTEXTDATAMANAGER"; Dwg_Object_Type2[Dwg_Object_Type2["DWG_TYPE_CSACDOCUMENTOPTIONS"] = 616] = "DWG_TYPE_CSACDOCUMENTOPTIONS"; Dwg_Object_Type2[Dwg_Object_Type2["DWG_TYPE_CURVEPATH"] = 617] = "DWG_TYPE_CURVEPATH"; Dwg_Object_Type2[Dwg_Object_Type2["DWG_TYPE_DATALINK"] = 618] = "DWG_TYPE_DATALINK"; Dwg_Object_Type2[Dwg_Object_Type2["DWG_TYPE_DATATABLE"] = 619] = "DWG_TYPE_DATATABLE"; Dwg_Object_Type2[Dwg_Object_Type2["DWG_TYPE_DBCOLOR"] = 620] = "DWG_TYPE_DBCOLOR"; Dwg_Object_Type2[Dwg_Object_Type2["DWG_TYPE_DETAILVIEWSTYLE"] = 621] = "DWG_TYPE_DETAILVIEWSTYLE"; Dwg_Object_Type2[Dwg_Object_Type2["DWG_TYPE_DGNDEFINITION"] = 622] = "DWG_TYPE_DGNDEFINITION"; Dwg_Object_Type2[Dwg_Object_Type2["DWG_TYPE_DGNUNDERLAY"] = 623] = "DWG_TYPE_DGNUNDERLAY"; Dwg_Object_Type2[Dwg_Object_Type2["DWG_TYPE_DICTIONARYVAR"] = 624] = "DWG_TYPE_DICTIONARYVAR"; Dwg_Object_Type2[Dwg_Object_Type2["DWG_TYPE_DICTIONARYWDFLT"] = 625] = "DWG_TYPE_DICTIONARYWDFLT"; Dwg_Object_Type2[Dwg_Object_Type2["DWG_TYPE_DIMASSOC"] = 626] = "DWG_TYPE_DIMASSOC"; Dwg_Object_Type2[Dwg_Object_Type2["DWG_TYPE_DMDIMOBJECTCONTEXTDATA"] = 627] = "DWG_TYPE_DMDIMOBJECTCONTEXTDATA"; Dwg_Object_Type2[Dwg_Object_Type2["DWG_TYPE_DWFDEFINITION"] = 628] = "DWG_TYPE_DWFDEFINITION"; Dwg_Object_Type2[Dwg_Object_Type2["DWG_TYPE_DWFUNDERLAY"] = 629] = "DWG_TYPE_DWFUNDERLAY"; Dwg_Object_Type2[Dwg_Object_Type2["DWG_TYPE_DYNAMICBLOCKPROXYNODE"] = 630] = "DWG_TYPE_DYNAMICBLOCKPROXYNODE"; Dwg_Object_Type2[Dwg_Object_Type2["DWG_TYPE_DYNAMICBLOCKPURGEPREVENTER"] = 631] = "DWG_TYPE_DYNAMICBLOCKPURGEPREVENTER"; Dwg_Object_Type2[Dwg_Object_Type2["DWG_TYPE_EVALUATION_GRAPH"] = 632] = "DWG_TYPE_EVALUATION_GRAPH"; Dwg_Object_Type2[Dwg_Object_Type2["DWG_TYPE_EXTRUDEDSURFACE"] = 633] = "DWG_TYPE_EXTRUDEDSURFACE"; Dwg_Object_Type2[Dwg_Object_Type2["DWG_TYPE_FCFOBJECTCONTEXTDATA"] = 634] = "DWG_TYPE_FCFOBJECTCONTEXTDATA"; Dwg_Object_Type2[Dwg_Object_Type2["DWG_TYPE_FIELD"] = 635] = "DWG_TYPE_FIELD"; Dwg_Object_Type2[Dwg_Object_Type2["DWG_TYPE_FIELDLIST"] = 636] = "DWG_TYPE_FIELDLIST"; Dwg_Object_Type2[Dwg_Object_Type2["DWG_TYPE_FLIPPARAMETERENTITY"] = 637] = "DWG_TYPE_FLIPPARAMETERENTITY"; Dwg_Object_Type2[Dwg_Object_Type2["DWG_TYPE_FLIPACTIONENTITY"] = 638] = "DWG_TYPE_FLIPACTIONENTITY"; Dwg_Object_Type2[Dwg_Object_Type2["DWG_TYPE_GEODATA"] = 639] = "DWG_TYPE_GEODATA"; Dwg_Object_Type2[Dwg_Object_Type2["DWG_TYPE_GEOMAPIMAGE"] = 640] = "DWG_TYPE_GEOMAPIMAGE"; Dwg_Object_Type2[Dwg_Object_Type2["DWG_TYPE_GEOPOSITIONMARKER"] = 641] = "DWG_TYPE_GEOPOSITIONMARKER"; Dwg_Object_Type2[Dwg_Object_Type2["DWG_TYPE_GRADIENT_BACKGROUND"] = 642] = "DWG_TYPE_GRADIENT_BACKGROUND"; Dwg_Object_Type2[Dwg_Object_Type2["DWG_TYPE_GROUND_PLANE_BACKGROUND"] = 643] = "DWG_TYPE_GROUND_PLANE_BACKGROUND"; Dwg_Object_Type2[Dwg_Object_Type2["DWG_TYPE_HELIX"] = 644] = "DWG_TYPE_HELIX"; Dwg_Object_Type2[Dwg_Object_Type2["DWG_TYPE_IBL_BACKGROUND"] = 645] = "DWG_TYPE_IBL_BACKGROUND"; Dwg_Object_Type2[Dwg_Object_Type2["DWG_TYPE_IDBUFFER"] = 646] = "DWG_TYPE_IDBUFFER"; Dwg_Object_Type2[Dwg_Object_Type2["DWG_TYPE_IMAGE"] = 647] = "DWG_TYPE_IMAGE"; Dwg_Object_Type2[Dwg_Object_Type2["DWG_TYPE_IMAGEDEF"] = 648] = "DWG_TYPE_IMAGEDEF"; Dwg_Object_Type2[Dwg_Object_Type2["DWG_TYPE_IMAGEDEF_REACTOR"] = 649] = "DWG_TYPE_IMAGEDEF_REACTOR"; Dwg_Object_Type2[Dwg_Object_Type2["DWG_TYPE_IMAGE_BACKGROUND"] = 650] = "DWG_TYPE_IMAGE_BACKGROUND"; Dwg_Object_Type2[Dwg_Object_Type2["DWG_TYPE_INDEX"] = 651] = "DWG_TYPE_INDEX"; Dwg_Object_Type2[Dwg_Object_Type2["DWG_TYPE_LARGE_RADIAL_DIMENSION"] = 652] = "DWG_TYPE_LARGE_RADIAL_DIMENSION"; Dwg_Object_Type2[Dwg_Object_Type2["DWG_TYPE_LAYERFILTER"] = 653] = "DWG_TYPE_LAYERFILTER"; Dwg_Object_Type2[Dwg_Object_Type2["DWG_TYPE_LAYER_INDEX"] = 654] = "DWG_TYPE_LAYER_INDEX"; Dwg_Object_Type2[Dwg_Object_Type2["DWG_TYPE_LAYOUTPRINTCONFIG"] = 655] = "DWG_TYPE_LAYOUTPRINTCONFIG"; Dwg_Object_Type2[Dwg_Object_Type2["DWG_TYPE_LEADEROBJECTCONTEXTDATA"] = 656] = "DWG_TYPE_LEADEROBJECTCONTEXTDATA"; Dwg_Object_Type2[Dwg_Object_Type2["DWG_TYPE_LIGHT"] = 657] = "DWG_TYPE_LIGHT"; Dwg_Object_Type2[Dwg_Object_Type2["DWG_TYPE_LIGHTLIST"] = 658] = "DWG_TYPE_LIGHTLIST"; Dwg_Object_Type2[Dwg_Object_Type2["DWG_TYPE_LINEARPARAMETERENTITY"] = 659] = "DWG_TYPE_LINEARPARAMETERENTITY"; Dwg_Object_Type2[Dwg_Object_Type2["DWG_TYPE_LOFTEDSURFACE"] = 660] = "DWG_TYPE_LOFTEDSURFACE"; Dwg_Object_Type2[Dwg_Object_Type2["DWG_TYPE_MATERIAL"] = 661] = "DWG_TYPE_MATERIAL"; Dwg_Object_Type2[Dwg_Object_Type2["DWG_TYPE_MENTALRAYRENDERSETTINGS"] = 662] = "DWG_TYPE_MENTALRAYRENDERSETTINGS"; Dwg_Object_Type2[Dwg_Object_Type2["DWG_TYPE_MESH"] = 663] = "DWG_TYPE_MESH"; Dwg_Object_Type2[Dwg_Object_Type2["DWG_TYPE_MLEADEROBJECTCONTEXTDATA"] = 664] = "DWG_TYPE_MLEADEROBJECTCONTEXTDATA"; Dwg_Object_Type2[Dwg_Object_Type2["DWG_TYPE_MLEADERSTYLE"] = 665] = "DWG_TYPE_MLEADERSTYLE"; Dwg_Object_Type2[Dwg_Object_Type2["DWG_TYPE_MOVEACTIONENTITY"] = 666] = "DWG_TYPE_MOVEACTIONENTITY"; Dwg_Object_Type2[Dwg_Object_Type2["DWG_TYPE_MOTIONPATH"] = 667] = "DWG_TYPE_MOTIONPATH"; Dwg_Object_Type2[Dwg_Object_Type2["DWG_TYPE_MPOLYGON"] = 668] = "DWG_TYPE_MPOLYGON"; Dwg_Object_Type2[Dwg_Object_Type2["DWG_TYPE_MTEXTATTRIBUTEOBJECTCONTEXTDATA"] = 669] = "DWG_TYPE_MTEXTATTRIBUTEOBJECTCONTEXTDATA"; Dwg_Object_Type2[Dwg_Object_Type2["DWG_TYPE_MTEXTOBJECTCONTEXTDATA"] = 670] = "DWG_TYPE_MTEXTOBJECTCONTEXTDATA"; Dwg_Object_Type2[Dwg_Object_Type2["DWG_TYPE_MULTILEADER"] = 671] = "DWG_TYPE_MULTILEADER"; Dwg_Object_Type2[Dwg_Object_Type2["DWG_TYPE_NAVISWORKSMODEL"] = 672] = "DWG_TYPE_NAVISWORKSMODEL"; Dwg_Object_Type2[Dwg_Object_Type2["DWG_TYPE_NAVISWORKSMODELDEF"] = 673] = "DWG_TYPE_NAVISWORKSMODELDEF"; Dwg_Object_Type2[Dwg_Object_Type2["DWG_TYPE_NPOCOLLECTION"] = 674] = "DWG_TYPE_NPOCOLLECTION"; Dwg_Object_Type2[Dwg_Object_Type2["DWG_TYPE_NURBSURFACE"] = 675] = "DWG_TYPE_NURBSURFACE"; Dwg_Object_Type2[Dwg_Object_Type2["DWG_TYPE_OBJECT_PTR"] = 676] = "DWG_TYPE_OBJECT_PTR"; Dwg_Object_Type2[Dwg_Object_Type2["DWG_TYPE_ORDDIMOBJECTCONTEXTDATA"] = 677] = "DWG_TYPE_ORDDIMOBJECTCONTEXTDATA"; Dwg_Object_Type2[Dwg_Object_Type2["DWG_TYPE_PARTIAL_VIEWING_INDEX"] = 678] = "DWG_TYPE_PARTIAL_VIEWING_INDEX"; Dwg_Object_Type2[Dwg_Object_Type2["DWG_TYPE_PDFDEFINITION"] = 679] = "DWG_TYPE_PDFDEFINITION"; Dwg_Object_Type2[Dwg_Object_Type2["DWG_TYPE_PDFUNDERLAY"] = 680] = "DWG_TYPE_PDFUNDERLAY"; Dwg_Object_Type2[Dwg_Object_Type2["DWG_TYPE_PERSUBENTMGR"] = 681] = "DWG_TYPE_PERSUBENTMGR"; Dwg_Object_Type2[Dwg_Object_Type2["DWG_TYPE_PLANESURFACE"] = 682] = "DWG_TYPE_PLANESURFACE"; Dwg_Object_Type2[Dwg_Object_Type2["DWG_TYPE_PLOTSETTINGS"] = 683] = "DWG_TYPE_PLOTSETTINGS"; Dwg_Object_Type2[Dwg_Object_Type2["DWG_TYPE_POINTCLOUD"] = 684] = "DWG_TYPE_POINTCLOUD"; Dwg_Object_Type2[Dwg_Object_Type2["DWG_TYPE_POINTCLOUDCOLORMAP"] = 685] = "DWG_TYPE_POINTCLOUDCOLORMAP"; Dwg_Object_Type2[Dwg_Object_Type2["DWG_TYPE_POINTCLOUDDEF"] = 686] = "DWG_TYPE_POINTCLOUDDEF"; Dwg_Object_Type2[Dwg_Object_Type2["DWG_TYPE_POINTCLOUDDEFEX"] = 687] = "DWG_TYPE_POINTCLOUDDEFEX"; Dwg_Object_Type2[Dwg_Object_Type2["DWG_TYPE_POINTCLOUDDEF_REACTOR"] = 688] = "DWG_TYPE_POINTCLOUDDEF_REACTOR"; Dwg_Object_Type2[Dwg_Object_Type2["DWG_TYPE_POINTCLOUDDEF_REACTOR_EX"] = 689] = "DWG_TYPE_POINTCLOUDDEF_REACTOR_EX"; Dwg_Object_Type2[Dwg_Object_Type2["DWG_TYPE_POINTCLOUDEX"] = 690] = "DWG_TYPE_POINTCLOUDEX"; Dwg_Object_Type2[Dwg_Object_Type2["DWG_TYPE_POINTPARAMETERENTITY"] = 691] = "DWG_TYPE_POINTPARAMETERENTITY"; Dwg_Object_Type2[Dwg_Object_Type2["DWG_TYPE_POINTPATH"] = 692] = "DWG_TYPE_POINTPATH"; Dwg_Object_Type2[Dwg_Object_Type2["DWG_TYPE_POLARGRIPENTITY"] = 693] = "DWG_TYPE_POLARGRIPENTITY"; Dwg_Object_Type2[Dwg_Object_Type2["DWG_TYPE_RADIMLGOBJECTCONTEXTDATA"] = 694] = "DWG_TYPE_RADIMLGOBJECTCONTEXTDATA"; Dwg_Object_Type2[Dwg_Object_Type2["DWG_TYPE_RADIMOBJECTCONTEXTDATA"] = 695] = "DWG_TYPE_RADIMOBJECTCONTEXTDATA"; Dwg_Object_Type2[Dwg_Object_Type2["DWG_TYPE_RAPIDRTRENDERSETTINGS"] = 696] = "DWG_TYPE_RAPIDRTRENDERSETTINGS"; Dwg_Object_Type2[Dwg_Object_Type2["DWG_TYPE_RASTERVARIABLES"] = 697] = "DWG_TYPE_RASTERVARIABLES"; Dwg_Object_Type2[Dwg_Object_Type2["DWG_TYPE_RENDERENTRY"] = 698] = "DWG_TYPE_RENDERENTRY"; Dwg_Object_Type2[Dwg_Object_Type2["DWG_TYPE_RENDERENVIRONMENT"] = 699] = "DWG_TYPE_RENDERENVIRONMENT"; Dwg_Object_Type2[Dwg_Object_Type2["DWG_TYPE_RENDERGLOBAL"] = 700] = "DWG_TYPE_RENDERGLOBAL"; Dwg_Object_Type2[Dwg_Object_Type2["DWG_TYPE_RENDERSETTINGS"] = 701] = "DWG_TYPE_RENDERSETTINGS"; Dwg_Object_Type2[Dwg_Object_Type2["DWG_TYPE_REVOLVEDSURFACE"] = 702] = "DWG_TYPE_REVOLVEDSURFACE"; Dwg_Object_Type2[Dwg_Object_Type2["DWG_TYPE_ROTATIONPARAMETERENTITY"] = 703] = "DWG_TYPE_ROTATIONPARAMETERENTITY"; Dwg_Object_Type2[Dwg_Object_Type2["DWG_TYPE_ROTATEACTIONENTITY"] = 704] = "DWG_TYPE_ROTATEACTIONENTITY"; Dwg_Object_Type2[Dwg_Object_Type2["DWG_TYPE_RTEXT"] = 705] = "DWG_TYPE_RTEXT"; Dwg_Object_Type2[Dwg_Object_Type2["DWG_TYPE_SCALE"] = 706] = "DWG_TYPE_SCALE"; Dwg_Object_Type2[Dwg_Object_Type2["DWG_TYPE_SCALEACTIONENTITY"] = 707] = "DWG_TYPE_SCALEACTIONENTITY"; Dwg_Object_Type2[Dwg_Object_Type2["DWG_TYPE_SECTIONOBJECT"] = 708] = "DWG_TYPE_SECTIONOBJECT"; Dwg_Object_Type2[Dwg_Object_Type2["DWG_TYPE_SECTIONVIEWSTYLE"] = 709] = "DWG_TYPE_SECTIONVIEWSTYLE"; Dwg_Object_Type2[Dwg_Object_Type2["DWG_TYPE_SECTION_MANAGER"] = 710] = "DWG_TYPE_SECTION_MANAGER"; Dwg_Object_Type2[Dwg_Object_Type2["DWG_TYPE_SECTION_SETTINGS"] = 711] = "DWG_TYPE_SECTION_SETTINGS"; Dwg_Object_Type2[Dwg_Object_Type2["DWG_TYPE_SKYLIGHT_BACKGROUND"] = 712] = "DWG_TYPE_SKYLIGHT_BACKGROUND"; Dwg_Object_Type2[Dwg_Object_Type2["DWG_TYPE_SOLID_BACKGROUND"] = 713] = "DWG_TYPE_SOLID_BACKGROUND"; Dwg_Object_Type2[Dwg_Object_Type2["DWG_TYPE_SORTENTSTABLE"] = 714] = "DWG_TYPE_SORTENTSTABLE"; Dwg_Object_Type2[Dwg_Object_Type2["DWG_TYPE_SPATIAL_FILTER"] = 715] = "DWG_TYPE_SPATIAL_FILTER"; Dwg_Object_Type2[Dwg_Object_Type2["DWG_TYPE_SPATIAL_INDEX"] = 716] = "DWG_TYPE_SPATIAL_INDEX"; Dwg_Object_Type2[Dwg_Object_Type2["DWG_TYPE_STRETCHACTIONENTITY"] = 717] = "DWG_TYPE_STRETCHACTIONENTITY"; Dwg_Object_Type2[Dwg_Object_Type2["DWG_TYPE_SUN"] = 718] = "DWG_TYPE_SUN"; Dwg_Object_Type2[Dwg_Object_Type2["DWG_TYPE_SUNSTUDY"] = 719] = "DWG_TYPE_SUNSTUDY"; Dwg_Object_Type2[Dwg_Object_Type2["DWG_TYPE_SWEPTSURFACE"] = 720] = "DWG_TYPE_SWEPTSURFACE"; Dwg_Object_Type2[Dwg_Object_Type2["DWG_TYPE_TABLE"] = 721] = "DWG_TYPE_TABLE"; Dwg_Object_Type2[Dwg_Object_Type2["DWG_TYPE_TABLECONTENT"] = 722] = "DWG_TYPE_TABLECONTENT"; Dwg_Object_Type2[Dwg_Object_Type2["DWG_TYPE_TABLEGEOMETRY"] = 723] = "DWG_TYPE_TABLEGEOMETRY"; Dwg_Object_Type2[Dwg_Object_Type2["DWG_TYPE_TABLESTYLE"] = 724] = "DWG_TYPE_TABLESTYLE"; Dwg_Object_Type2[Dwg_Object_Type2["DWG_TYPE_TEXTOBJECTCONTEXTDATA"] = 725] = "DWG_TYPE_TEXTOBJECTCONTEXTDATA"; Dwg_Object_Type2[Dwg_Object_Type2["DWG_TYPE_TVDEVICEPROPERTIES"] = 726] = "DWG_TYPE_TVDEVICEPROPERTIES"; Dwg_Object_Type2[Dwg_Object_Type2["DWG_TYPE_VISIBILITYGRIPENTITY"] = 727] = "DWG_TYPE_VISIBILITYGRIPENTITY"; Dwg_Object_Type2[Dwg_Object_Type2["DWG_TYPE_VISIBILITYPARAMETERENTITY"] = 728] = "DWG_TYPE_VISIBILITYPARAMETERENTITY"; Dwg_Object_Type2[Dwg_Object_Type2["DWG_TYPE_VISUALSTYLE"] = 729] = "DWG_TYPE_VISUALSTYLE"; Dwg_Object_Type2[Dwg_Object_Type2["DWG_TYPE_WIPEOUT"] = 730] = "DWG_TYPE_WIPEOUT"; Dwg_Object_Type2[Dwg_Object_Type2["DWG_TYPE_WIPEOUTVARIABLES"] = 731] = "DWG_TYPE_WIPEOUTVARIABLES"; Dwg_Object_Type2[Dwg_Object_Type2["DWG_TYPE_XREFPANELOBJECT"] = 732] = "DWG_TYPE_XREFPANELOBJECT"; Dwg_Object_Type2[Dwg_Object_Type2["DWG_TYPE_XYPARAMETERENTITY"] = 733] = "DWG_TYPE_XYPARAMETERENTITY"; Dwg_Object_Type2[Dwg_Object_Type2["DWG_TYPE_BREAKDATA"] = 734] = "DWG_TYPE_BREAKDATA"; Dwg_Object_Type2[Dwg_Object_Type2["DWG_TYPE_BREAKPOINTREF"] = 735] = "DWG_TYPE_BREAKPOINTREF"; Dwg_Object_Type2[Dwg_Object_Type2["DWG_TYPE_FLIPGRIPENTITY"] = 736] = "DWG_TYPE_FLIPGRIPENTITY"; Dwg_Object_Type2[Dwg_Object_Type2["DWG_TYPE_LINEARGRIPENTITY"] = 737] = "DWG_TYPE_LINEARGRIPENTITY"; Dwg_Object_Type2[Dwg_Object_Type2["DWG_TYPE_ROTATIONGRIPENTITY"] = 738] = "DWG_TYPE_ROTATIONGRIPENTITY"; Dwg_Object_Type2[Dwg_Object_Type2["DWG_TYPE_XYGRIPENTITY"] = 739] = "DWG_TYPE_XYGRIPENTITY"; Dwg_Object_Type2[Dwg_Object_Type2["DWG_TYPE__3DLINE"] = 740] = "DWG_TYPE__3DLINE"; Dwg_Object_Type2[Dwg_Object_Type2["DWG_TYPE_REPEAT"] = 741] = "DWG_TYPE_REPEAT"; Dwg_Object_Type2[Dwg_Object_Type2["DWG_TYPE_ENDREP"] = 742] = "DWG_TYPE_ENDREP"; Dwg_Object_Type2[Dwg_Object_Type2["DWG_TYPE_JUMP"] = 743] = "DWG_TYPE_JUMP"; Dwg_Object_Type2[Dwg_Object_Type2["DWG_TYPE_LOAD"] = 744] = "DWG_TYPE_LOAD"; Dwg_Object_Type2[Dwg_Object_Type2["DWG_TYPE_FREED"] = 65533] = "DWG_TYPE_FREED"; Dwg_Object_Type2[Dwg_Object_Type2["DWG_TYPE_UNKNOWN_ENT"] = 65534] = "DWG_TYPE_UNKNOWN_ENT"; Dwg_Object_Type2[Dwg_Object_Type2["DWG_TYPE_UNKNOWN_OBJ"] = 65535] = "DWG_TYPE_UNKNOWN_OBJ"; return Dwg_Object_Type2; })(Dwg_Object_Type || {}); const Dwg_Object_Type_Inverted = Object.fromEntries( Object.entries(Dwg_Object_Type).map(([key, value]) => [value, key]) ); var Dwg_File_Type = /* @__PURE__ */ ((Dwg_File_Type2) => { Dwg_File_Type2[Dwg_File_Type2["DWG"] = 0] = "DWG"; Dwg_File_Type2[Dwg_File_Type2["DXF"] = 1] = "DXF"; return Dwg_File_Type2; })(Dwg_File_Type || {}); var Dwg_Hatch_Edge_Type = /* @__PURE__ */ ((Dwg_Hatch_Edge_Type2) => { Dwg_Hatch_Edge_Type2[Dwg_Hatch_Edge_Type2["Line"] = 1] = "Line"; Dwg_Hatch_Edge_Type2[Dwg_Hatch_Edge_Type2["CircularArc"] = 2] = "CircularArc"; Dwg_Hatch_Edge_Type2[Dwg_Hatch_Edge_Type2["EllipticArc"] = 3] = "EllipticArc"; Dwg_Hatch_Edge_Type2[Dwg_Hatch_Edge_Type2["Spline"] = 4] = "Spline"; return Dwg_Hatch_Edge_Type2; })(Dwg_Hatch_Edge_Type || {}); var Dwg_Color_Method = /* @__PURE__ */ ((Dwg_Color_Method2) => { Dwg_Color_Method2[Dwg_Color_Method2["ByLayer"] = 192] = "ByLayer"; Dwg_Color_Method2[Dwg_Color_Method2["ByBlock"] = 193] = "ByBlock"; Dwg_Color_Method2[Dwg_Color_Method2["Entities"] = 194] = "Entities"; Dwg_Color_Method2[Dwg_Color_Method2["TrueColor"] = 195] = "TrueColor"; Dwg_Color_Method2[Dwg_Color_Method2["ForegroundColor"] = 197] = "ForegroundColor"; Dwg_Color_Method2[Dwg_Color_Method2["None"] = 200] = "None"; return Dwg_Color_Method2; })(Dwg_Color_Method || {}); const RAW_COLOR_TYPE_BY_LAYER = 192; const RAW_COLOR_TYPE_BY_BLOCK = 193; const RAW_COLOR_TYPE_RGB = 194; const RAW_COLOR_TYPE_ACI = 195; const RAW_COLOR_TYPE_WINDOW_BG = 200; function dwgColorToMLeaderRawColor(color) { if (color == null) return void 0; const methodNum = color.method; const method = color.method != null && methodNum !== 0 ? methodNum : color.rgb >>> 24 & 255; const index = color.index; if (color.rgb != null && method >= RAW_COLOR_TYPE_BY_LAYER && method <= RAW_COLOR_TYPE_WINDOW_BG && (color.rgb >>> 24 & 255) === method) { return color.rgb >> 0; } if (method === Dwg_Color_Method.ByLayer || index === 256) { return RAW_COLOR_TYPE_BY_LAYER << 24 >> 0; } if (method === Dwg_Color_Method.ByBlock || index === 0) { return RAW_COLOR_TYPE_BY_BLOCK << 24 >> 0; } if (method === Dwg_Color_Method.None) { return RAW_COLOR_TYPE_WINDOW_BG << 24 >> 0; } if (method === Dwg_Color_Method.TrueColor) { const rgb = color.rgb != null ? color.rgb & 16777215 : void 0; if (rgb != null) { return (RAW_COLOR_TYPE_RGB << 24 | rgb) >> 0; } } if (method === Dwg_Color_Method.ForegroundColor) { return (RAW_COLOR_TYPE_ACI << 24 | 7) >> 0; } if (method === Dwg_Color_Method.Entities && index > 0 && index < 256) { return (RAW_COLOR_TYPE_ACI << 24 | index & 255) >> 0; } if (index > 0 && index < 256) { return (RAW_COLOR_TYPE_ACI << 24 | index & 255) >> 0; } return RAW_COLOR_TYPE_BY_BLOCK << 24 >> 0; } const MODEL_SPACE = "*MODEL_SPACE"; const MODEL_SPACE_PREFIX = "*PAPER_SPACE"; const isModelSpace = (name) => { return name && name.toUpperCase() == MODEL_SPACE; }; const isPaperSpace = (name) => { return name && name.toUpperCase().startsWith(MODEL_SPACE_PREFIX); }; const idToString = (id) => { return id.toString(16).toUpperCase(); }; const uint8ArrayToHexString = (bytes) => { const hexChars = new Array(bytes.length); for (let i = 0; i < bytes.length; i++) { hexChars[i] = bytes[i].toString(16).toUpperCase().padStart(2, "0"); } return hexChars.join(""); }; const decodeOle2FrameCornersFromData = (data) => { if (!data || data.length < 98) { return null; } const view = new DataView(data.buffer, data.byteOffset, data.byteLength); const readPoint = (offset) => ({ x: view.getFloat64(offset, true), y: view.getFloat64(offset + 8, true), z: view.getFloat64(offset + 16, true) }); const upperLeft = readPoint(2); const lowerRight = readPoint(2 + 48); if (![upperLeft.x, upperLeft.y, upperLeft.z, lowerRight.x, lowerRight.y, lowerRight.z].every(Number.isFinite)) { return null; } return { upperLeft, lowerRight }; }; class LibreEntityConverter { constructor(instance) { __publicField(this, "libredwg"); __publicField(this, "layers", /* @__PURE__ */ new Map()); __publicField(this, "ltypes", /* @__PURE__ */ new Map()); __publicField(this, "classes", []); __publicField(this, "unknownEntityCount"); this.libredwg = instance; this.unknownEntityCount = 0; } prepare(db, force = false) { if (force || this.layers.size == 0) { this.layers.clear(); db.tables.LAYER.entries.forEach((layer) => { this.layers.set(layer.handle, layer.name); }); } if (force || this.ltypes.size == 0) { this.ltypes.clear(); db.tables.LTYPE.entries.forEach((ltype) => { this.ltypes.set(ltype.handle, ltype.name); }); } this.classes = db.classes; this.unknownEntityCount = 0; } setClasses(classes) { this.classes = classes; } clear() { this.layers.clear(); this.ltypes.clear(); this.classes = []; this.unknownEntityCount = 0; } convert(object_ptr) { const libredwg = this.libredwg; const entity = libredwg.dwg_object_to_entity(object_ptr); const entity_tio = libredwg.dwg_object_to_entity_tio(object_ptr); if (entity && entity_tio) { const commonAttrs = this.getCommonAttrs(entity); const fixedtype = libredwg.dwg_object_get_fixedtype(object_ptr); if (fixedtype == Dwg_Object_Type.DWG_TYPE_3DFACE) { return this.convert3dFace(entity_tio, commonAttrs); } else if (fixedtype == Dwg_Object_Type.DWG_TYPE_3DSOLID) { return this.convert3dSolid(entity_tio, commonAttrs); } else if (fixedtype == Dwg_Object_Type.DWG_TYPE_ARC) { return this.convertArc(entity_tio, commonAttrs); } else if (fixedtype == Dwg_Object_Type.DWG_TYPE_ATTDEF) { return this.convertAttdef(entity_tio, commonAttrs); } else if (fixedtype == Dwg_Object_Type.DWG_TYPE_CIRCLE) { return this.convertCircle(entity_tio, commonAttrs); } else if (fixedtype == Dwg_Object_Type.DWG_TYPE_DIMENSION_ALIGNED || fixedtype == Dwg_Object_Type.DWG_TYPE_DIMENSION_LINEAR) { return this.convertAlignedDimension(entity_tio, commonAttrs); } else if (fixedtype == Dwg_Object_Type.DWG_TYPE_DIMENSION_ANG3PT) { return this.convert3PointAngularDimension(entity_tio, commonAttrs); } else if (fixedtype == Dwg_Object_Type.DWG_TYPE_DIMENSION_ANG2LN) { return this.convert2LineAngularDimension(entity_tio, commonAttrs); } else if (fixedtype == Dwg_Object_Type.DWG_TYPE_DIMENSION_DIAMETER) { return this.convertDiameterDimension(entity_tio, commonAttrs); } else if (fixedtype == Dwg_Object_Type.DWG_TYPE_DIMENSION_ORDINATE) { return this.convertOrdinateDimension(entity_tio, commonAttrs); } else if (fixedtype == Dwg_Object_Type.DWG_TYPE_DIMENSION_RADIUS) { return this.convertRadiusDimension(entity_tio, commonAttrs); } else if (fixedtype == Dwg_Object_Type.DWG_TYPE_ELLIPSE) { return this.convertEllise(entity_tio, commonAttrs); } else if (fixedtype == Dwg_Object_Type.DWG_TYPE_HATCH) { return this.convertHatch(entity_tio, commonAttrs); } else if (fixedtype == Dwg_Object_Type.DWG_TYPE_IMAGE) { return this.convertImage(entity_tio, commonAttrs); } else if (fixedtype == Dwg_Object_Type.DWG_TYPE_INSERT) { return this.convertInsert(entity_tio, commonAttrs); } else if (fixedtype == Dwg_Object_Type.DWG_TYPE_LEADER) { return this.convertLeader(entity_tio, commonAttrs); } else if (fixedtype == Dwg_Object_Type.DWG_TYPE_LINE) { return this.convertLine(entity_tio, commonAttrs); } else if (fixedtype == Dwg_Object_Type.DWG_TYPE_LWPOLYLINE) { return this.convertLWPolyline(entity_tio, commonAttrs); } else if (fixedtype == Dwg_Object_Type.DWG_TYPE_MLINE) { return this.convertMLine(entity_tio, commonAttrs); } else if (fixedtype == Dwg_Object_Type.DWG_TYPE_MULTILEADER) { return this.convertMultiLeader(entity_tio, commonAttrs); } else if (fixedtype == Dwg_Object_Type.DWG_TYPE_MTEXT) { return this.convertMText(entity_tio, commonAttrs); } else if (fixedtype == Dwg_Object_Type.DWG_TYPE_OLE2FRAME) { return this.convertOle2Frame(entity_tio, commonAttrs); } else if (fixedtype == Dwg_Object_Type.DWG_TYPE_OLEFRAME) { return this.convertOleFrame(entity_tio, commonAttrs); } else if (fixedtype == Dwg_Object_Type.DWG_TYPE_POINT) { return this.convertPoint(entity_tio, commonAttrs); } else if (fixedtype == Dwg_Object_Type.DWG_TYPE_POLYLINE_2D) { return this.convertPolyline2d(entity_tio, commonAttrs, object_ptr); } else if (fixedtype == Dwg_Object_Type.DWG_TYPE_POLYLINE_3D) { return this.convertPolyline3d(entity_tio, commonAttrs, object_ptr); } else if (fixedtype == Dwg_Object_Type.DWG_TYPE_PROXY_ENTITY) { return this.convertProxyEntity(entity_tio, commonAttrs, object_ptr); } else if (fixedtype == Dwg_Object_Type.DWG_TYPE_RAY) { return this.convertRay(entity_tio, commonAttrs); } else if (fixedtype == Dwg_Object_Type.DWG_TYPE_SECTIONOBJECT) { return this.convertSection(entity_tio, commonAttrs); } else if (fixedtype == Dwg_Object_Type.DWG_TYPE_SHAPE) { return this.convertShape(entity_tio, commonAttrs); } else if (fixedtype == Dwg_Object_Type.DWG_TYPE_SOLID) { return this.convertSolid(entity_tio, commonAttrs); } else if (fixedtype == Dwg_Object_Type.DWG_TYPE_SPLINE) { return this.convertSpline(entity_tio, commonAttrs); } else if (fixedtype == Dwg_Object_Type.DWG_TYPE_TABLE) { return this.convertTable(entity_tio, commonAttrs); } else if (fixedtype == Dwg_Object_Type.DWG_TYPE_TEXT) { return this.convertText(entity_tio, commonAttrs); } else if (fixedtype == Dwg_Object_Type.DWG_TYPE_TOLERANCE) { return this.convertTolerance(entity_tio, commonAttrs); } else if (fixedtype == Dwg_Object_Type.DWG_TYPE_VIEWPORT) { return this.convertViewport(entity_tio, commonAttrs); } else if (fixedtype == Dwg_Object_Type.DWG_TYPE_WIPEOUT) { return this.convertWipeout(entity_tio, commonAttrs); } else if (fixedtype == Dwg_Object_Type.DWG_TYPE_XLINE) { return this.convertXline(entity_tio, commonAttrs); } else if (fixedtype === Dwg_Object_Type.DWG_TYPE_UNKNOWN_ENT) { this.unknownEntityCount++; } } return void 0; } convert3dFace(entity, commonAttrs) { const libredwg = this.libredwg; const corner1 = libredwg.dwg_dynapi_entity_data(entity, "corner1"); const corner2 = libredwg.dwg_dynapi_entity_data(entity, "corner2"); const corner3 = libredwg.dwg_dynapi_entity_data(entity, "corner3"); const corner4 = libredwg.dwg_dynapi_entity_data(entity, "corner4"); const flag = libredwg.dwg_dynapi_entity_data(entity, "invis_flags"); return { type: "3DFACE", ...commonAttrs, corner1, corner2, corner3, corner4, flag }; } convert3dSolid(entity, commonAttrs) { const libredwg = this.libredwg; const version = libredwg.dwg_dynapi_entity_data(entity, "version"); const satCache = libredwg.dwg_dynapi_entity_data(entity, "acis_empty"); const data = libredwg.dwg_dynapi_entity_data(entity, "acis_data"); const hasRevisionGuid = libredwg.dwg_dynapi_entity_data( entity, "has_revision_guid" ); const historyRef = libredwg.dwg_dynapi_entity_data(entity, "history_id"); const historyObjectSoftId = libredwg.dwg_ref_get_id(historyRef); const result = { type: "3DSOLID", subclassMarker: "AcDb3dSolid", ...commonAttrs }; if (version) { result.version = version; } result.satCache = satCache; if (data) { result.data = data; } if (hasRevisionGuid) { const guidOffset = libredwg.dwg_dynapi_entity_field_offset(entity, "revision_guid"); if (guidOffset >= 0) { const guid = libredwg.UTF8ToString(entity + guidOffset, 38); if (guid) { result.guid = guid; } } } if (historyObjectSoftId) { result.historyObjectSoftId = historyObjectSoftId; } return result; } convertArc(entity, commonAttrs) { const libredwg = this.libredwg; const center = libredwg.dwg_dynapi_entity_data(entity, "center"); const radius = libredwg.dwg_dynapi_entity_data(entity, "radius"); const thickness = libredwg.dwg_dynapi_entity_data(entity, "thickness"); const extrusionDirection = libredwg.dwg_dynapi_entity_data(entity, "extrusion"); const startAngle = libredwg.dwg_dynapi_entity_data(entity, "start_angle"); const endAngle = libredwg.dwg_dynapi_entity_data(entity, "end_angle"); return { type: "ARC", ...commonAttrs, thickness, center, radius, startAngle, endAngle, extrusionDirection }; } convertEmbeddedMText(entity, subclassName) { const libredwg = this.libredwg; const attachmentPoint = libredwg.dwg_dynapi_subclass_data(entity, subclassName, "attachment"); const insertionPoint = libredwg.dwg_dynapi_subclass_data(entity, subclassName, "ins_pt"); const direction = libredwg.dwg_dynapi_subclass_data(entity, subclassName, "x_axis_dir"); const rectHeight = libredwg.dwg_dynapi_subclass_data(entity, subclassName, "rect_height"); const rectWidth = libredwg.dwg_dynapi_subclass_data(entity, subclassName, "rect_width"); const extentsHeight = libredwg.dwg_dynapi_subclass_data(entity, subclassName, "extents_height"); const extentsWidth = libredwg.dwg_dynapi_subclass_data(entity, subclassName, "extents_width"); return { insertionPoint, rectHeight, rectWidth, extentsHeight, extentsWidth, attachmentPoint, direction // columnType: columnType, // columnFlowReversed: columnFlowReversed, // columnAutoHeight: columnAutoHeight, // columnWidth: columnWidth, // columnGutter: columnGutter, // columnHeightCount: columnHeightCount, // columnHeights: columnHeights }; } convertAttdef(entity, commonAttrs) { const libredwg = this.libredwg; const textValue = libredwg.dwg_dynapi_entity_data(entity, "default_value"); const text = this.convertTextBase(entity); text.text = textValue; const prompt = libredwg.dwg_dynapi_entity_data(entity, "prompt"); const tag = libredwg.dwg_dynapi_entity_data(entity, "tag"); const flags = libredwg.dwg_dynapi_entity_data(entity, "flags"); const fieldLength = libredwg.dwg_dynapi_entity_data(entity, "field_length"); const lockPositionFlag = libredwg.dwg_dynapi_entity_data(entity, "lock_position_flag"); const duplicateRecordCloningFlag = libredwg.dwg_dynapi_entity_data(entity, "keep_duplicate_records"); const isReallyLocked = libredwg.dwg_dynapi_entity_data(entity, "is_really_locked"); const mtextFlag = libredwg.dwg_dynapi_entity_data(entity, "mtext_type"); const alignmentPoint = libredwg.dwg_dynapi_entity_data(entity, "alignment_pt"); return { type: "ATTDEF", ...commonAttrs, text: this.convertTextBase(entity), prompt, tag, flags, fieldLength, lockPositionFlag: lockPositionFlag > 0, duplicateRecordCloningFlag: duplicateRecordCloningFlag > 0, mtextFlag, isReallyLocked: isReallyLocked > 0, alignmentPoint, annotationScale: 1, // TODO: Set the correct value attrTag: "", // TODO: Set the correct value mtext: this.convertEmbeddedMText(entity, "ATTDEF_mtext") }; } convertAttrib(entity, commonAttrs) { const libredwg = this.libredwg; const text = this.convertTextBase(entity); const tag = libredwg.dwg_dynapi_entity_data(entity, "tag"); const flags = libredwg.dwg_dynapi_entity_data(entity, "flags"); const fieldLength = libredwg.dwg_dynapi_entity_data(entity, "field_length"); const lockPositionFlag = libredwg.dwg_dynapi_entity_data(entity, "lock_position_flag"); const duplicateRecordCloningFlag = libredwg.dwg_dynapi_entity_data(entity, "keep_duplicate_records"); const mtextFlag = libredwg.dwg_dynapi_entity_data(entity, "mtext_type"); const isReallyLocked = libredwg.dwg_dynapi_entity_data(entity, "is_really_locked"); const alignmentPoint = libredwg.dwg_dynapi_entity_data(entity, "alignment_pt"); return { type: "ATTRIB", ...commonAttrs, text, tag, flags, fieldLength, lockPositionFlag: !!lockPositionFlag, duplicateRecordCloningFlag: !!duplicateRecordCloningFlag, mtextFlag, isReallyLocked: !!isReallyLocked, numberOfSecondaryAttrs: 0, // TODO: libredwg doesn't support it yet. secondaryAttrsHardId: "0", // TODO: libredwg doesn't support it yet. alignmentPoint: { ...alignmentPoint, z: 0 }, annotationScale: 1, // TODO: Set the correct value attrTag: "", // TODO: Set the correct value mtext: this.convertEmbeddedMText(entity, "ATTDEF_mtext") }; } convertCircle(entity, commonAttrs) { const libredwg = this.libredwg; const center = libredwg.dwg_dynapi_entity_data(entity, "center"); const radius = libredwg.dwg_dynapi_entity_data(entity, "radius"); const thickness = libredwg.dwg_dynapi_entity_data(entity, "thickness"); const extrusionDirection = libredwg.dwg_dynapi_entity_data(entity, "extrusion"); return { type: "CIRCLE", ...commonAttrs, thickness, center, radius, extrusionDirection }; } convertAlignedDimension(entity, commonAttrs) { const libredwg = this.libredwg; const dimensionCommonAttrs = this.getDimensionCommonAttrs(entity); const insertionPoint = libredwg.dwg_dynapi_entity_data(entity, "clone_ins_pt"); const subDefinitionPoint1 = libredwg.dwg_dynapi_entity_data(entity, "xline1_pt"); const subDefinitionPoint2 = libredwg.dwg_dynapi_entity_data(entity, "xline2_pt"); const rotationAngle = libredwg.dwg_dynapi_entity_data(entity, "ins_rotation"); const obliqueAngle = libredwg.dwg_dynapi_entity_data(entity, "oblique_angle"); return { subclassMarker: "AcDbAlignedDimension", ...commonAttrs, ...dimensionCommonAttrs, insertionPoint, subDefinitionPoint1, subDefinitionPoint2, rotationAngle: rotationAngle == null ? 0 : rotationAngle, obliqueAngle }; } convert3PointAngularDimension(entity, commonAttrs) { const libredwg = this.libredwg; const dimensionCommonAttrs = this.getDimensionCommonAttrs(entity); const subDefinitionPoint1 = libredwg.dwg_dynapi_entity_data(entity, "xline1_pt"); const subDefinitionPoint2 = libredwg.dwg_dynapi_entity_data(entity, "xline2_pt"); const centerPoint = libredwg.dwg_dynapi_entity_data(entity, "center_pt"); const arcPoint = libredwg.dwg_dynapi_entity_data(entity, "xline2end_pt"); return { subclassMarker: "AcDb3PointAngularDimension", ...commonAttrs, ...dimensionCommonAttrs, subDefinitionPoint1, subDefinitionPoint2, centerPoint, arcPoint }; } convert2LineAngularDimension(entity, commonAttrs) { const libredwg = this.libredwg; const dimensionCommonAttrs = this.getDimensionCommonAttrs(entity); const xline1Start = libredwg.dwg_dynapi_entity_data(entity, "xline1start_pt"); const xline1End = libredwg.dwg_dynapi_entity_data(entity, "xline1end_pt"); const xline2Start = libredwg.dwg_dynapi_entity_data(entity, "xline2start_pt"); const xline2End = libredwg.dwg_dynapi_entity_data(entity, "xline2end_pt"); const vertexPoint = libredwg.dwg_dynapi_entity_data(entity, "def_pt"); if (xline2End) { dimensionCommonAttrs.definitionPoint = xline2End; } return { subclassMarker: "AcDb2LineAngularDimension", ...commonAttrs, ...dimensionCommonAttrs, subDefinitionPoint1: xline1Start ?? xline1End ?? vertexPoint ?? xline2End, subDefinitionPoint2: xline2Start ?? xline2End ?? vertexPoint ?? xline1End, centerPoint: vertexPoint ?? xline2Start ?? xline1End ?? xline2End, arcPoint: xline2End ?? dimensionCommonAttrs.definitionPoint }; } convertDiameterDimension(entity, commonAttrs) { const libredwg = this.libredwg; const dimensionCommonAttrs = this.getDimensionCommonAttrs(entity); const centerPoint = libredwg.dwg_dynapi_entity_data(entity, "first_arc_pt"); const leaderLength = libredwg.dwg_dynapi_entity_data(entity, "leader_len"); return { subclassMarker: "AcDbDiametricDimension", ...commonAttrs, ...dimensionCommonAttrs, centerPoint, leaderLength }; } convertOrdinateDimension(entity, commonAttrs) { const libredwg = this.libredwg; const dimensionCommonAttrs = this.getDimensionCommonAttrs(entity); const subDefinitionPoint1 = libredwg.dwg_dynapi_entity_data(entity, "feature_location_pt"); const subDefinitionPoint2 = libredwg.dwg_dynapi_entity_data(entity, "leader_endpt"); return { subclassMarker: "AcDbOrdinateDimension", ...commonAttrs, ...dimensionCommonAttrs, subDefinitionPoint1, subDefinitionPoint2 }; } convertRadiusDimension(entity, commonAttrs) { const libredwg = this.libredwg; const dimensionCommonAttrs = this.getDimensionCommonAttrs(entity); const centerPoint = libredwg.dwg_dynapi_entity_data(entity, "first_arc_pt"); const leaderLength = libredwg.dwg_dynapi_entity_data(entity, "leader_len"); return { subclassMarker: "AcDbRadialDimension", ...commonAttrs, ...dimensionCommonAttrs, centerPoint, leaderLength }; } convertEllise(entity, commonAttrs) { const libredwg = this.libredwg; const center = libredwg.dwg_dynapi_entity_data(entity, "center"); const majorAxisEndPoint = libredwg.dwg_dynapi_entity_data(entity, "sm_axis"); const extrusionDirection = libredwg.dwg_dynapi_entity_data(entity, "extrusion"); const axisRatio = libredwg.dwg_dynapi_entity_data(entity, "axis_ratio"); const startAngle = libredwg.dwg_dynapi_entity_data(entity, "start_angle"); const endAngle = libredwg.dwg_dynapi_entity_data(entity, "end_angle"); return { type: "ELLIPSE", ...commonAttrs, center, majorAxisEndPoint, extrusionDirection, axisRatio, startAngle, endAngle }; } convertHatch(entity, commonAttrs) { const libredwg = this.libredwg; const extrusionDirection = libredwg.dwg_dynapi_entity_data(entity, "extrusion"); const patternName = libredwg.dwg_dynapi_entity_data(entity, "name"); const isSolidFill = libredwg.dwg_dynapi_entity_data(entity, "is_solid_fill"); const isAssociative = libredwg.dwg_dynapi_entity_data(entity, "is_associative"); const numberOfBoundaryPaths = libredwg.dwg_dynapi_entity_data(entity, "num_paths"); const paths_ptr = libredwg.dwg_dynapi_entity_data(entity, "paths"); const boundaryPaths = libredwg.dwg_ptr_to_hatch_path_array( paths_ptr, numberOfBoundaryPaths ); const patternStyle = libredwg.dwg_dynapi_entity_data(entity, "style"); const patternType = libredwg.dwg_dynapi_entity_data(entity, "pattern_type"); const patternAngle = libredwg.dwg_dynapi_entity_data(entity, "angle"); const patternScale = libredwg.dwg_dynapi_entity_data(entity, "scale_spacing"); const numberOfDefinitionLines = libredwg.dwg_dynapi_entity_data(entity, "num_deflines"); const definitionLines_ptr = libredwg.dwg_dynapi_entity_data(entity, "deflines"); const definitionLines = libredwg.dwg_ptr_to_hatch_defline_array( definitionLines_ptr, numberOfDefinitionLines ); const pixelSize = libredwg.dwg_dynapi_entity_data(entity, "pixel_size"); const numberOfSeedPoints = libredwg.dwg_dynapi_entity_data(entity, "num_seeds"); const seedPoints_ptr = libredwg.dwg_dynapi_entity_data(entity, "seeds"); const seedPoints = libredwg.dwg_ptr_to_point2d_array( seedPoints_ptr, numberOfSeedPoints ); const result = { ...commonAttrs, // elevationPoint: DwgPoint3D extrusionDirection, patternName, solidFill: isSolidFill ? DwgHatchSolidFill.SolidFill : DwgHatchSolidFill.PatternFill, // patternFillColor: number associativity: isAssociative ? DwgHatchAssociativity.Associative : DwgHatchAssociativity.NonAssociative, numberOfBoundaryPaths, boundaryPaths: this.convertHatchBoundaryPaths(boundaryPaths), hatchStyle: patternStyle, patternType, patternAngle, patternScale, numberOfDefinitionLines, definitionLines: definitionLines.map((value) => { return { angle: value.angle, base: value.pt0, offset: value.offset, numberOfDashLengths: value.dashes.length, dashLengths: value.dashes }; }), pixelSize, numberOfSeedPoints, // offsetVector?: DwgPoint3D seedPoints // gradientFlag?: DwgHatchGradientFlag }; const gradientFlag = libredwg.dwg_dynapi_entity_data(entity, "is_gradient_fill"); if (gradientFlag > 0) { const gradientName = libredwg.dwg_dynapi_entity_data(entity, "gradient_name"); const gradientRotation = libredwg.dwg_dynapi_entity_data(entity, "gradient_angle"); const gradientDefinition = libredwg.dwg_dynapi_entity_data(entity, "gradient_shift"); const colorTint = libredwg.dwg_dynapi_entity_data(entity, "gradient_tint"); const gradientColorFlag = libredwg.dwg_dynapi_entity_data(entity, "single_color_gradient"); const gradientColors_ptr = libredwg.dwg_dynapi_entity_data(entity, "colors"); const gradientColors = libredwg.dwg_ptr_to_hatch_gradient_color_array(gradientColors_ptr, gradientColorFlag == 1 ? 1 : 2); return { type: "HATCH", ...result, gradientFlag: DwgHatchGradientFlag.Gradient, gradientColorFlag: gradientColorFlag == 1 ? DwgHatchGradientColorFlag.OneColor : DwgHatchGradientColorFlag.TwoColor, gradientName, gradientRotation, gradientDefinition, colorTint, gradientColors }; } else { return { type: "HATCH", ...result }; } } convertHatchBoundaryPaths(paths) { const converted = paths.filter((path) => path.num_segs_or_paths > 0).map((path) => { const commonAttrs = { boundaryPathTypeFlag: path.flag }; if (path.flag & 2) { return { ...commonAttrs, hasBulge: path.bulges_present, isClosed: path.closed, numberOfVertices: path.num_segs_or_paths, vertices: path.polyline_paths.map((vertex) => { return { x: vertex.point.x, y: vertex.point.y, bulge: vertex.bulge }; }) }; } else { const edges = path.segs.map((seg) => { if (seg.curve_type == Dwg_Hatch_Edge_Type.Line) { return { type: DwgBoundaryPathEdgeType.Line, start: seg.first_endpoint, end: seg.second_endpoint }; } else if (seg.curve_type == Dwg_Hatch_Edge_Type.CircularArc) { return { type: DwgBoundaryPathEdgeType.Circular, center: seg.center, radius: seg.radius, startAngle: seg.start_angle, endAngle: seg.end_angle, isCCW: seg.is_ccw }; } else if (seg.curve_type == Dwg_Hatch_Edge_Type.EllipticArc) { return { type: DwgBoundaryPathEdgeType.Elliptic, center: seg.center, end: seg.endpoint, lengthOfMinorAxis: seg.minor_major_ratio, startAngle: seg.start_angle, endAngle: seg.end_angle, isCCW: seg.is_ccw }; } else if (seg.curve_type == Dwg_Hatch_Edge_Type.Spline) { return { type: DwgBoundaryPathEdgeType.Spline, degree: seg.degree, isRational: seg.is_rational, isPeriodic: seg.is_periodic, numberOfKnots: seg.num_knots, numberOfControlPoints: seg.num_control_points, knots: seg.knots, controlPoints: seg.control_points, numberOfFitData: seg.num_fitpts, fitDatum: seg.fitpts, startTangent: seg.start_tangent, endTangent: seg.end_tangent }; } }); return { ...commonAttrs, numberOfEdges: path.num_segs_or_paths, edges }; } }); return converted; } convertImage(entity, commonAttrs) { const libredwg = this.libredwg; const version = libredwg.dwg_dynapi_entity_data(entity, "class_version"); const position = libredwg.dwg_dynapi_entity_data(entity, "pt0"); const uPixel = libredwg.dwg_dynapi_entity_data(entity, "uvec"); const vPixel = libredwg.dwg_dynapi_entity_data(entity, "vvec"); const imageSize = libredwg.dwg_dynapi_entity_data(entity, "image_size"); const flags = libredwg.dwg_dynapi_entity_data(entity, "display_props"); const clipping = libredwg.dwg_dynapi_entity_data(entity, "clipping"); const brightness = libredwg.dwg_dynapi_entity_data(entity, "brightness"); const contrast = libredwg.dwg_dynapi_entity_data(entity, "contrast"); const fade = libredwg.dwg_dynapi_entity_data(entity, "fade"); const clipMode = libredwg.dwg_dynapi_entity_data(entity, "clip_mode"); const clippingBoundaryType = libredwg.dwg_dynapi_entity_data(entity, "clip_boundary_type"); const countBoundaryPoints = libredwg.dwg_dynapi_entity_data(entity, "num_clip_verts"); const clip_verts = libredwg.dwg_dynapi_entity_data(entity, "clip_verts"); const clippingBoundaryPath = libredwg.dwg_ptr_to_point3d_array( clip_verts, countBoundaryPoints ); const imagedef_ref = libredwg.dwg_dynapi_entity_data(entity, "imagedef"); const imageDefHandle = libredwg.dwg_ref_get_id(imagedef_ref) ?? ""; const imagedefreactor_ref = libredwg.dwg_dynapi_entity_data(entity, "imagedefreactor"); const imageDefReactorHandle = libredwg.dwg_ref_get_id(imagedefreactor_ref) ?? ""; return { type: "IMAGE", ...commonAttrs, version, position, uPixel, vPixel, imageSize, imageDefHandle, flags, clipping, brightness, contrast, fade, imageDefReactorHandle, clippingBoundaryType, countBoundaryPoints, clippingBoundaryPath, clipMode }; } convertInsert(entity, commonAttrs) { const libredwg = this.libredwg; let name = ""; const block_header_ref = libredwg.dwg_dynapi_entity_data(entity, "block_header"); if (block_header_ref) { const block_header_obj = libredwg.dwg_ref_get_object(block_header_ref); if (block_header_obj) { const block_header_tio = libredwg.dwg_object_to_object_tio(block_header_obj); if (block_header_tio) { name = libredwg.dwg_entity_block_header_get_block(block_header_tio).name; } } } if (!name) { name = libredwg.dwg_dynapi_entity_data(entity, "block_name"); } const insertionPoint = libredwg.dwg_dynapi_entity_data(entity, "ins_pt"); const scale = libredwg.dwg_dynapi_entity_data(entity, "scale"); const rotation = libredwg.dwg_dynapi_entity_data(entity, "rotation"); const columnCount = libredwg.dwg_dynapi_entity_data(entity, "num_cols"); const rowCount = libredwg.dwg_dynapi_entity_data(entity, "num_rows"); const columnSpacing = libredwg.dwg_dynapi_entity_data(entity, "col_spacing"); const rowSpacing = libredwg.dwg_dynapi_entity_data(entity, "row_spacing"); const extrusionDirection = libredwg.dwg_dynapi_entity_data(entity, "extrusion"); const attrib_ptr_array = libredwg.dwg_entity_insert_get_attribs(entity); const attribs = []; attrib_ptr_array.forEach((object_ptr) => { const entity2 = libredwg.dwg_object_to_entity(object_ptr); const entity_tio = libredwg.dwg_object_to_entity_tio(object_ptr); if (entity2 && entity_tio) { const commonAttrs2 = this.getCommonAttrs(entity2); const fixedtype = libredwg.dwg_object_get_fixedtype(object_ptr); if (fixedtype == Dwg_Object_Type.DWG_TYPE_ATTRIB) { attribs.push(this.convertAttrib(entity_tio, commonAttrs2)); } } }); return { type: "INSERT", ...commonAttrs, name, insertionPoint, xScale: scale ? scale.x : 1, yScale: scale ? scale.y : 1, zScale: scale ? scale.z : 1, rotation, columnCount, rowCount, columnSpacing, rowSpacing, extrusionDirection, attribs }; } convertLeader(entity, commonAttrs) { const libredwg = this.libredwg; const styleName = libredwg.dwg_entity_mtext_get_style_name(entity); const isArrowheadEnabled = libredwg.dwg_dynapi_entity_data(entity, "arrowhead_type"); const isSpline = libredwg.dwg_dynapi_entity_data(entity, "path_type"); const leaderCreationFlag = libredwg.dwg_dynapi_entity_data(entity, "annot_type"); const isHooklineSameDirection = libredwg.dwg_dynapi_entity_data(entity, "hookline_dir"); const isHooklineExists = libredwg.dwg_dynapi_entity_data(entity, "hookline_on"); const textHeight = libredwg.dwg_dynapi_entity_data(entity, "box_height"); const textWidth = libredwg.dwg_dynapi_entity_data(entity, "box_width"); const numberOfVertices = libredwg.dwg_dynapi_entity_data(entity, "num_points"); const vertices_ptr = libredwg.dwg_dynapi_entity_data(entity, "points"); const vertices = numberOfVertices > 0 ? libredwg.dwg_ptr_to_point3d_array(vertices_ptr, numberOfVertices) : []; const byBlockColor = libredwg.dwg_dynapi_entity_data(entity, "byblock_color"); const normal = libredwg.dwg_dynapi_entity_data(entity, "extrusion"); const horizontalDirection = libredwg.dwg_dynapi_entity_data(entity, "x_direction"); const offsetFromBlock = libredwg.dwg_dynapi_entity_data(entity, "inspt_offset"); const offsetFromAnnotation = libredwg.dwg_dynapi_entity_data(entity, "endptproj"); return { type: "LEADER", ...commonAttrs, styleName, isArrowheadEnabled: isArrowheadEnabled > 0, isSpline: isSpline > 0, leaderCreationFlag, isHooklineSameDirection: isHooklineSameDirection > 0, isHooklineExists: isHooklineExists > 0, textHeight, textWidth, numberOfVertices, vertices, byBlockColor, normal, horizontalDirection, offsetFromBlock, offsetFromAnnotation }; } convertLine(entity, commonAttrs) { const libredwg = this.libredwg; const startPoint = libredwg.dwg_dynapi_entity_data(entity, "start"); const endPoint = libredwg.dwg_dynapi_entity_data(entity, "end"); const thickness = libredwg.dwg_dynapi_entity_data(entity, "thickness"); const extrusionDirection = libredwg.dwg_dynapi_entity_data(entity, "extrusion"); return { type: "LINE", ...commonAttrs, thickness, startPoint, endPoint, extrusionDirection }; } convertLWPolyline(entity, commonAttrs) { const libredwg = this.libredwg; const numberOfVertices = libredwg.dwg_dynapi_entity_data(entity, "num_points"); const flag = libredwg.dwg_dynapi_entity_data(entity, "flag"); const constantWidth = libredwg.dwg_dynapi_entity_data(entity, "const_width"); const elevation = libredwg.dwg_dynapi_entity_data(entity, "elevation"); const thickness = libredwg.dwg_dynapi_entity_data(entity, "thickness"); const extrusionDirection = libredwg.dwg_dynapi_entity_data(entity, "extrusion"); const vertices = []; const num_points = libredwg.dwg_dynapi_entity_data(entity, "num_points"); const points_ptr = libredwg.dwg_dynapi_entity_data(entity, "points"); const points = libredwg.dwg_ptr_to_point2d_array(points_ptr, num_points); const num_bulges = libredwg.dwg_dynapi_entity_data(entity, "num_bulges"); const bulges_ptr = libredwg.dwg_dynapi_entity_data(entity, "bulges"); const bulges = libredwg.dwg_ptr_to_double_array(bulges_ptr, num_bulges); points.forEach((point, index) => { vertices.push({ id: index, x: point.x, y: point.y, bulge: bulges.length > index ? bulges[index] : 0 }); }); return { type: "LWPOLYLINE", ...commonAttrs, numberOfVertices, flag, constantWidth, elevation, thickness, extrusionDirection, vertices }; } convertMLine(entity, commonAttrs) { const libredwg = this.libredwg; const scale = libredwg.dwg_dynapi_entity_data(entity, "scale"); const flags = libredwg.dwg_dynapi_entity_data(entity, "flags"); const justification = libredwg.dwg_dynapi_entity_data(entity, "justification"); const startPoint = libredwg.dwg_dynapi_entity_data(entity, "base_point"); const extrusionDirection = libredwg.dwg_dynapi_entity_data(entity, "extrusion"); const numberOfLines = libredwg.dwg_dynapi_entity_data(entity, "num_lines"); const numberOfVertices = libredwg.dwg_dynapi_entity_data(entity, "num_verts"); const verts_ptr = libredwg.dwg_dynapi_entity_data(entity, "verts"); const verts = libredwg.dwg_ptr_to_mline_vertex_array( verts_ptr, numberOfVertices ); const vertices = []; verts.forEach((vert) => { vertices.push({ vertex: vert.vertex, vertexDirection: vert.vertex_direction, miterDirection: vert.miter_direction, numberOfLines: vert.num_lines, lines: vert.lines.map((line) => { return { numberOfSegmentParams: line.num_segparms, segmentParams: line.segparms, numberOfAreaFillParams: line.num_areafillparms, areaFillParams: line.areafillparms }; }) }); }); return { type: "MLINE", ...commonAttrs, scale, flags, justification, startPoint, extrusionDirection, numberOfLines, numberOfVertices, vertices, mlineStyle: "" // TODO: Set the correct value }; } convertMultiLeader(entity, commonAttrs) { const libredwg = this.libredwg; const entityVal = (field) => libredwg.dwg_dynapi_entity_data(entity, field); const subclassVal = (ptr, subclass, field) => libredwg.dwg_dynapi_subclass_data(ptr, subclass, field); const refToId = (ref) => libredwg.dwg_ref_get_id(ref); const asBool = (value) => value > 0; const mleaderColor = (color) => color != null ? dwgColorToMLeaderRawColor(color) : void 0; const version = entityVal("class_version"); const leaderStyleId = refToId(entityVal("mleaderstyle")); const propertyOverrideFlag = entityVal("flags"); const leaderLineType = entityVal("type"); const leaderLineColor = mleaderColor(entityVal("line_color")); const leaderLineTypeId = refToId(entityVal("line_ltype")); const leaderLineWeight = entityVal("line_linewt"); const landingEnabled = asBool(entityVal("has_landing")); const doglegEnabled = asBool(entityVal("has_dogleg")); const doglegLength = entityVal("landing_dist"); const arrowheadId = refToId(entityVal("arrow_handle")); const arrowheadSize = entityVal("arrow_size"); const contentType = entityVal("style_content"); const textStyleId = refToId(entityVal("text_style")); const textLeftAttachmentType = entityVal("text_left"); const textRightAttachmentType = entityVal("text_right"); const textAngleType = entityVal("text_angletype"); const textAlignmentType = entityVal("text_alignment"); const textColor = mleaderColor(entityVal("text_color")); const textFrameEnabled = asBool(entityVal("has_text_frame")); const blockContentId = refToId(entityVal("block_style")); const blockContentColor = mleaderColor(entityVal("block_color")); const blockContentScale = entityVal("block_scale"); const blockContentRotation = entityVal("block_rotation"); const blockContentConnectionType = entityVal("style_attachment"); const annotativeScaleEnabled = asBool(entityVal("is_annotative")); const textDirectionNegative = asBool(entityVal("is_neg_textdir")); const textAlignInIPE = entityVal("ipe_alignment"); let textAttachmentPoint = entityVal("justification"); const textAttachmentDirection = entityVal("attach_dir"); const bottomTextAttachmentDirection = entityVal("attach_bottom"); const topTextAttachmentDirection = entityVal("attach_top"); const contentScale = entityVal("scale_factor"); const numArrowheads = entityVal("num_arrowheads"); const arrowheadsPtr = entityVal("arrowheads"); const arrowHeadSize = libredwg.dwg_dynapi_subclass_size("LEADER_ArrowHead"); const arrowheadOverrides = []; for (let i = 0; i < numArrowheads; i++) { const arrowheadPtr = arrowheadsPtr + i * arrowHeadSize; arrowheadOverrides.push({ index: subclassVal(arrowheadPtr, "LEADER_ArrowHead", "is_default"), handle: refToId( subclassVal(arrowheadPtr, "LEADER_ArrowHead", "arrowhead") ) ?? "" }); } const numBlocklabels = entityVal("num_blocklabels"); const blocklabelsPtr = entityVal("blocklabels"); const blockLabelSize = libredwg.dwg_dynapi_subclass_size("LEADER_BlockLabel"); const blockAttributes = []; for (let i = 0; i < numBlocklabels; i++) { const blocklabelPtr = blocklabelsPtr + i * blockLabelSize; blockAttributes.push({ id: refToId( subclassVal(blocklabelPtr, "LEADER_BlockLabel", "attdef") ), index: subclassVal( blocklabelPtr, "LEADER_BlockLabel", "ui_index" ), width: subclassVal(blocklabelPtr, "LEADER_BlockLabel", "width"), text: subclassVal( blocklabelPtr, "LEADER_BlockLabel", "label_text" ) }); } const ctxPtr = entity + libredwg.dwg_dynapi_entity_field_offset(entity, "ctx"); const contentPtr = ctxPtr + libredwg.dwg_dynapi_subclass_field_offset( "MLEADER_AnnotContext", "content" ); const contentScaleFactor = subclassVal( ctxPtr, "MLEADER_AnnotContext", "scale_factor" ); const contentBasePosition = subclassVal( ctxPtr, "MLEADER_AnnotContext", "content_base" ); const landingGap = subclassVal( ctxPtr, "MLEADER_AnnotContext", "landing_gap" ); const textAttachment = subclassVal( ctxPtr, "MLEADER_AnnotContext", "attach_dir" ); const contextTextHeight = subclassVal( ctxPtr, "MLEADER_AnnotContext", "text_height" ); const contextArrowSize = subclassVal( ctxPtr, "MLEADER_AnnotContext", "arrow_size" ); const contextTextLeft = subclassVal( ctxPtr, "MLEADER_AnnotContext", "text_left" ); const contextTextRight = subclassVal( ctxPtr, "MLEADER_AnnotContext", "text_right" ); const contextTextAngleType = subclassVal( ctxPtr, "MLEADER_AnnotContext", "text_angletype" ); const contextTextAlignment = subclassVal( ctxPtr, "MLEADER_AnnotContext", "text_alignment" ); const hasMText = asBool( subclassVal(ctxPtr, "MLEADER_AnnotContext", "has_content_txt") ); const hasBlock = asBool( subclassVal(ctxPtr, "MLEADER_AnnotContext", "has_content_blk") ); const planeOrigin = subclassVal( ctxPtr, "MLEADER_AnnotContext", "base" ); const planeXAxisDirection = subclassVal( ctxPtr, "MLEADER_AnnotContext", "base_dir" ); const planeYAxisDirection = subclassVal( ctxPtr, "MLEADER_AnnotContext", "base_vert" ); const planeNormalReversed = asBool( subclassVal(ctxPtr, "MLEADER_AnnotContext", "is_normal_reversed") ); let textFlowDirection; let normal; let textRotation; let textWidth; let textLineSpacingFactor; let textLineSpacingStyle; let textAnchor; let textDirection; let textBackgroundColor; let textBackgroundScaleFactor; let textBackgroundTransparency; let textBackgroundColorOn; let textFillOn; let textColumnType; let textUseAutoHeight; let textColumnWidth; let textColumnGutterWidth; let textColumnFlowReversed; let textColumnHeight; let textUseWordBreak; let textContent; if (hasMText) { const textAlignment = subclassVal( contentPtr, "MLEADER_Content_MText", "alignment" ); if (textAlignment != null && textAlignment !== 0) { textAttachmentPoint = textAlignment; } normal = subclassVal( contentPtr, "MLEADER_Content_MText", "normal" ); textAnchor = subclassVal( contentPtr, "MLEADER_Content_MText", "location" ); textRotation = subclassVal( contentPtr, "MLEADER_Content_MText", "rotation" ); textDirection = subclassVal( contentPtr, "MLEADER_Content_MText", "direction" ); textWidth = subclassVal(contentPtr, "MLEADER_Content_MText", "width"); textLineSpacingFactor = subclassVal( contentPtr, "MLEADER_Content_MText", "line_spacing_factor" ); textLineSpacingStyle = subclassVal( contentPtr, "MLEADER_Content_MText", "line_spacing_style" ); textFlowDirection = subclassVal( contentPtr, "MLEADER_Content_MText", "flow" ); textBackgroundColor = mleaderColor( subclassVal( contentPtr, "MLEADER_Content_MText", "bg_color" ) ); textBackgroundScaleFactor = subclassVal( contentPtr, "MLEADER_Content_MText", "bg_scale" ); textBackgroundTransparency = subclassVal( contentPtr, "MLEADER_Content_MText", "bg_transparency" ); textFillOn = asBool( subclassVal(contentPtr, "MLEADER_Content_MText", "is_bg_fill") ); textBackgroundColorOn = asBool( subclassVal( contentPtr, "MLEADER_Content_MText", "is_bg_mask_fill" ) ); textColumnType = subclassVal( contentPtr, "MLEADER_Content_MText", "col_type" ); textUseAutoHeight = asBool( subclassVal( contentPtr, "MLEADER_Content_MText", "is_height_auto" ) ); textColumnWidth = subclassVal( contentPtr, "MLEADER_Content_MText", "col_width" ); textColumnGutterWidth = subclassVal( contentPtr, "MLEADER_Content_MText", "col_gutter" ); textColumnFlowReversed = asBool( subclassVal( contentPtr, "MLEADER_Content_MText", "is_col_flow_reversed" ) ); const numColSizes = subclassVal( contentPtr, "MLEADER_Content_MText", "num_col_sizes" ); const colSizesPtr = subclassVal( contentPtr, "MLEADER_Content_MText", "col_sizes" ); if (numColSizes > 0) { textColumnHeight = libredwg.dwg_ptr_to_double_array( colSizesPtr, numColSizes )[0]; } textUseWordBreak = asBool( subclassVal(contentPtr, "MLEADER_Content_MText", "word_break") ); textContent = subclassVal( contentPtr, "MLEADER_Content_MText", "default_text" ); } let blockContent; if (hasBlock) { const transformPtr = subclassVal( contentPtr, "MLEADER_Content_Block", "transform" ); blockContent = { blockContentId: refToId( subclassVal(contentPtr, "MLEADER_Content_Block", "block_table") ), normal: subclassVal( contentPtr, "MLEADER_Content_Block", "normal" ), position: subclassVal( contentPtr, "MLEADER_Content_Block", "location" ), scale: subclassVal( contentPtr, "MLEADER_Content_Block", "scale" ), rotation: subclassVal( contentPtr, "MLEADER_Content_Block", "rotation" ), color: mleaderColor( subclassVal( contentPtr, "MLEADER_Content_Block", "color" ) ), transformationMatrix: transformPtr ? libredwg.dwg_ptr_to_double_array(transformPtr, 16) : void 0 }; } const numLeaders = subclassVal( ctxPtr, "MLEADER_AnnotContext", "num_leaders" ); const leadersPtr = subclassVal( ctxPtr, "MLEADER_AnnotContext", "leaders" ); const leaderNodeSize = libredwg.dwg_dynapi_subclass_size("LEADER_Node"); const leaderLineSize = libredwg.dwg_dynapi_subclass_size("LEADER_Line"); const leaderBreakSize = libredwg.dwg_dynapi_subclass_size("LEADER_Break"); const leaderSections = []; for (let i = 0; i < numLeaders; i++) { const nodePtr = leadersPtr + i * leaderNodeSize; const lastLeaderLinePointSet = asBool( subclassVal(nodePtr, "LEADER_Node", "has_lastleaderlinepoint") ); const doglegVectorSet = asBool( subclassVal(nodePtr, "LEADER_Node", "has_dogleg") ); const numBreaks = subclassVal(nodePtr, "LEADER_Node", "num_breaks"); const breaksPtr = subclassVal(nodePtr, "LEADER_Node", "breaks"); const nodeBreaks = []; for (let j = 0; j < numBreaks; j++) { const breakPtr = breaksPtr + j * leaderBreakSize; nodeBreaks.push({ start: subclassVal(breakPtr, "LEADER_Break", "start"), end: subclassVal(breakPtr, "LEADER_Break", "end") }); } const numLines = subclassVal(nodePtr, "LEADER_Node", "num_lines"); const linesPtr = subclassVal(nodePtr, "LEADER_Node", "lines"); const leaderLines = []; for (let j = 0; j < numLines; j++) { const linePtr = linesPtr + j * leaderLineSize; const numPoints = subclassVal( linePtr, "LEADER_Line", "num_points" ); const pointsPtr = subclassVal(linePtr, "LEADER_Line", "points"); const vertices = numPoints > 0 ? libredwg.dwg_ptr_to_point3d_array(pointsPtr, numPoints) : []; const lineNumBreaks = subclassVal( linePtr, "LEADER_Line", "num_breaks" ); const lineBreaksPtr = subclassVal( linePtr, "LEADER_Line", "breaks" ); const lineBreaks = []; for (let k = 0; k < lineNumBreaks; k++) { const breakPtr = lineBreaksPtr + k * leaderBreakSize; lineBreaks.push({ start: subclassVal(breakPtr, "LEADER_Break", "start"), end: subclassVal(breakPtr, "LEADER_Break", "end") }); } leaderLines.push({ vertices, leaderLineIndex: subclassVal( linePtr, "LEADER_Line", "line_index" ), breaks: lineBreaks.length > 0 ? lineBreaks : void 0 }); } leaderSections.push({ lastLeaderLinePoint: lastLeaderLinePointSet ? subclassVal( nodePtr, "LEADER_Node", "lastleaderlinepoint" ) : void 0, lastLeaderLinePointSet, doglegVector: doglegVectorSet ? subclassVal(nodePtr, "LEADER_Node", "dogleg_vector") : void 0, doglegVectorSet, doglegLength: subclassVal(nodePtr, "LEADER_Node", "dogleg_length"), breaks: nodeBreaks.length > 0 ? nodeBreaks : void 0, leaderBranchIndex: subclassVal( nodePtr, "LEADER_Node", "branch_index" ), leaderLines }); } return { type: "MULTILEADER", ...commonAttrs, subclassMarker: "AcDbMLeader", version, leaderStyleId, propertyOverrideFlag, leaderLineType, leaderLineColor, leaderLineTypeId, leaderLineWeight, landingEnabled, doglegEnabled, doglegLength, arrowheadId, arrowheadSize: arrowheadSize || contextArrowSize, contentType, textStyleId, textLeftAttachmentType: textLeftAttachmentType || contextTextLeft, textRightAttachmentType: textRightAttachmentType || contextTextRight, textAngleType: textAngleType || contextTextAngleType, textAlignmentType: textAlignmentType || contextTextAlignment, textColor, textFrameEnabled, landingGap, textAttachment, textFlowDirection, blockContentId, blockContentColor, blockContentScale, blockContentRotation, blockContentConnectionType, annotativeScaleEnabled, arrowheadOverrides: arrowheadOverrides.length > 0 ? arrowheadOverrides : void 0, blockAttributes: blockAttributes.length > 0 ? blockAttributes : void 0, textDirectionNegative, textAlignInIPE, textAttachmentPoint, textAttachmentDirection, bottomTextAttachmentDirection, topTextAttachmentDirection, contentScale: contentScale || contentScaleFactor, contentBasePosition, normal, textHeight: contextTextHeight, textRotation, textWidth, textLineSpacingFactor, textLineSpacingStyle, textAnchor, textDirection, textBackgroundColor, textBackgroundScaleFactor, textBackgroundTransparency, textBackgroundColorOn, textFillOn, textColumnType, textUseAutoHeight, textColumnWidth, textColumnGutterWidth, textColumnFlowReversed, textColumnHeight, textUseWordBreak, textContent, hasMText, hasBlock, blockContent, planeOrigin, planeXAxisDirection, planeYAxisDirection, planeNormalReversed, leaderSections: leaderSections.length > 0 ? leaderSections : void 0 }; } convertOle2Frame(entity, commonAttrs) { const libredwg = this.libredwg; const oleVersion = libredwg.dwg_dynapi_entity_data(entity, "oleversion"); const oleClient = libredwg.dwg_dynapi_entity_data(entity, "oleclient"); const dataSize = libredwg.dwg_dynapi_entity_data(entity, "data_size"); let leftUpPoint = libredwg.dwg_dynapi_entity_data(entity, "pt1"); let rightDownPoint = libredwg.dwg_dynapi_entity_data(entity, "pt2"); const lockAspect = libredwg.dwg_dynapi_entity_data(entity, "lock_aspect"); const oleObjectType = libredwg.dwg_dynapi_entity_data(entity, "type"); const tileModeDescriptor = libredwg.dwg_dynapi_entity_data(entity, "mode"); const dataBytes = libredwg.dwg_entity_ole2frame_get_data(entity); const binaryData = dataBytes ? uint8ArrayToHexString(dataBytes) : ""; if (dataBytes) { const corners = decodeOle2FrameCornersFromData(dataBytes); if (corners) { leftUpPoint = corners.upperLeft; rightDownPoint = corners.lowerRight; } } return { type: "OLE2FRAME", ...commonAttrs, oleVersion, oleClient, dataSize, leftUpPoint, rightDownPoint, lockAspect, oleObjectType, tileModeDescriptor, binaryData }; } convertOleFrame(entity, commonAttrs) { const libredwg = this.libredwg; const flag = libredwg.dwg_dynapi_entity_data(entity, "flag"); const mode = libredwg.dwg_dynapi_entity_data(entity, "mode"); const dataSize = libredwg.dwg_dynapi_entity_data(entity, "data_size"); const dataBytes = libredwg.dwg_entity_oleframe_get_data(entity); const binaryData = dataBytes ? uint8ArrayToHexString(dataBytes) : ""; return { type: "OLEFRAME", ...commonAttrs, flag, mode, dataSize, binaryData }; } convertMText(entity, commonAttrs) { const libredwg = this.libredwg; const insertionPoint = libredwg.dwg_dynapi_entity_data(entity, "ins_pt"); const textHeight = libredwg.dwg_dynapi_entity_data(entity, "text_height"); const rectHeight = libredwg.dwg_dynapi_entity_data(entity, "rect_height"); const rectWidth = libredwg.dwg_dynapi_entity_data(entity, "rect_width"); const extentsWidth = libredwg.dwg_dynapi_entity_data(entity, "extents_width"); const extentsHeight = libredwg.dwg_dynapi_entity_data(entity, "extents_height"); const attachmentPoint = libredwg.dwg_dynapi_entity_data(entity, "attachment"); const drawingDirection = libredwg.dwg_dynapi_entity_data(entity, "flow_dir"); const text = libredwg.dwg_dynapi_entity_data(entity, "text"); const styleName = libredwg.dwg_entity_mtext_get_style_name(entity); const extrusionDirection = libredwg.dwg_dynapi_entity_data(entity, "extrusion"); const direction = libredwg.dwg_dynapi_entity_data(entity, "x_axis_dir"); const lineSpacingStyle = libredwg.dwg_dynapi_entity_data(entity, "linespace_style"); const lineSpacing = libredwg.dwg_dynapi_entity_data(entity, "linespace_factor"); const backgroundFill = libredwg.dwg_dynapi_entity_data(entity, "bg_fill_flag"); const fillBoxScale = libredwg.dwg_dynapi_entity_data(entity, "bg_fill_scale"); const backgroundFillColor = libredwg.dwg_dynapi_entity_data(entity, "bg_fill_color"); const backgroundFillTransparency = libredwg.dwg_dynapi_entity_data(entity, "bg_fill_trans"); const columnType = libredwg.dwg_dynapi_entity_data(entity, "column_type"); const columnFlowReversed = libredwg.dwg_dynapi_entity_data(entity, "flow_reversed"); const columnAutoHeight = libredwg.dwg_dynapi_entity_data(entity, "auto_height"); const columnWidth = libredwg.dwg_dynapi_entity_data(entity, "column_width"); const columnGutter = libredwg.dwg_dynapi_entity_data(entity, "gutter"); const columnHeightCount = libredwg.dwg_dynapi_entity_data(entity, "num_column_heights"); const columnHeights_ptr = libredwg.dwg_dynapi_entity_data(entity, "column_heights"); const columnHeights = libredwg.dwg_ptr_to_double_array( columnHeights_ptr, columnHeightCount ); return { type: "MTEXT", ...commonAttrs, insertionPoint, textHeight, rectHeight, rectWidth, extentsHeight, extentsWidth, attachmentPoint, drawingDirection, text, styleName, extrusionDirection, direction, rotation: 0, // TODO: Didn't find the corresponding field in libredwg lineSpacingStyle, lineSpacing, backgroundFill, // backgroundColor: backgroundColor.rgb, // TODO: Double check whether it should be color index fillBoxScale, backgroundFillColor: backgroundFillColor.rgb, // TODO: Double check whether it should be color index backgroundFillTransparency, columnType, // columnCount: columnCount, columnFlowReversed, columnAutoHeight, columnWidth, columnGutter, columnHeightCount, columnHeights }; } convertPoint(entity, commonAttrs) { const libredwg = this.libredwg; const x = libredwg.dwg_dynapi_entity_data(entity, "x"); const y = libredwg.dwg_dynapi_entity_data(entity, "y"); const z = libredwg.dwg_dynapi_entity_data(entity, "z"); const thickness = libredwg.dwg_dynapi_entity_data(entity, "thickness"); const extrusionDirection = libredwg.dwg_dynapi_entity_data(entity, "extrusion"); const angle = libredwg.dwg_dynapi_entity_data(entity, "x_ang"); return { type: "POINT", ...commonAttrs, position: { x, y, z }, thickness, extrusionDirection, angle }; } convertPolyline2d(entity, commonAttrs, object) { const libredwg = this.libredwg; const flag = libredwg.dwg_dynapi_entity_data(entity, "flag"); const smoothType = libredwg.dwg_dynapi_entity_data(entity, "curve_type"); const startWidth = libredwg.dwg_dynapi_entity_data(entity, "start_width"); const endWidth = libredwg.dwg_dynapi_entity_data(entity, "end_width"); const elevation = libredwg.dwg_dynapi_entity_data(entity, "elevation"); const thickness = libredwg.dwg_dynapi_entity_data(entity, "thickness"); const extrusionDirection = libredwg.dwg_dynapi_entity_data(entity, "extrusion"); const vertices = libredwg.dwg_entity_polyline_2d_get_vertices(object); return { type: "POLYLINE2D", ...commonAttrs, flag, smoothType, startWidth, endWidth, elevation, thickness, extrusionDirection, vertices: vertices.map((vertex) => { return { x: vertex.point.x, y: vertex.point.y, z: vertex.point.z, startWidth: vertex.start_width, endWidth: vertex.end_width, bulge: vertex.bulge, flag: vertex.flag, tangentDirection: vertex.tangent_dir }; }), meshMVertexCount: 0, meshNVertexCount: 0, surfaceMDensity: 0, surfaceNDensity: 0 }; } convertPolyline3d(entity, commonAttrs, object) { const libredwg = this.libredwg; const flag = libredwg.dwg_dynapi_entity_data(entity, "flag"); const smoothType = libredwg.dwg_dynapi_entity_data(entity, "curve_type"); const startWidth = libredwg.dwg_dynapi_entity_data(entity, "start_width"); const endWidth = libredwg.dwg_dynapi_entity_data(entity, "end_width"); const extrusionDirection = libredwg.dwg_dynapi_entity_data(entity, "extrusion"); const vertices = libredwg.dwg_entity_polyline_3d_get_vertices(object); return { type: "POLYLINE3D", ...commonAttrs, flag, smoothType, startWidth, endWidth, extrusionDirection, vertices: vertices.map((vertex) => { return { x: vertex.point.x, y: vertex.point.y, z: vertex.point.z, flag: vertex.flag }; }) }; } convertProxyEntity(entity, commonAttrs, objectPtr) { const libredwg = this.libredwg; const proxyEntityClassId = libredwg.dwg_dynapi_entity_data(entity, "proxy_id"); const applicationEntityClassId = libredwg.dwg_dynapi_entity_data(entity, "class_id"); const entityDataSize = libredwg.dwg_dynapi_entity_data(entity, "data_numbits"); const objectDrawingFormat = libredwg.dwg_dynapi_entity_data(entity, "version"); const fromDxf = libredwg.dwg_dynapi_entity_data(entity, "from_dxf"); const numObjIds = libredwg.dwg_dynapi_entity_data(entity, "num_objids"); const graphicsBytes = libredwg.dwg_entity_get_preview(objectPtr); const graphicsDataSize = (graphicsBytes == null ? void 0 : graphicsBytes.length) ?? 0; const entityBytes = libredwg.dwg_entity_proxy_entity_get_entity_data(entity); const graphicsData = graphicsBytes ? uint8ArrayToHexString(graphicsBytes) : void 0; const entityData = entityBytes ? uint8ArrayToHexString(entityBytes) : void 0; let linkedObjectIds; if (numObjIds > 0) { const objidsPtr = libredwg.dwg_dynapi_entity_data(entity, "objids"); if (objidsPtr) { const objids = libredwg.dwg_ptr_to_object_ref_array( objidsPtr, numObjIds ); linkedObjectIds = objids.map((ref) => idToString(ref.absolute_ref)); } } const originalDxfName = this.getOriginalDxfName(applicationEntityClassId); const result = { type: "ACAD_PROXY_ENTITY", subclassMarker: "AcDbProxyEntity", ...commonAttrs, proxyEntityClassId: proxyEntityClassId || 498, applicationEntityClassId }; if (originalDxfName) { result.originalDxfName = originalDxfName; } if (graphicsDataSize > 0) { result.graphicsDataSize = graphicsDataSize; } if (graphicsData) { result.graphicsData = graphicsData; } if (entityDataSize > 0) { result.entityDataSize = entityDataSize; } if (entityData) { result.entityData = entityData; } if (linkedObjectIds && linkedObjectIds.length > 0) { result.linkedObjectIds = linkedObjectIds; } if (objectDrawingFormat) { result.objectDrawingFormat = objectDrawingFormat; } if (fromDxf === 0 || fromDxf === 1) { result.originalDataFormat = fromDxf; } return result; } getOriginalDxfName(classId) { if (this.classes.length === 0 || classId < 0) { return void 0; } const index = classId >= 500 ? classId - 500 : classId; if (index >= 0 && index < this.classes.length) { return this.classes[index].dxfName; } return void 0; } convertRay(entity, commonAttrs) { const libredwg = this.libredwg; const firstPoint = libredwg.dwg_dynapi_entity_data(entity, "point"); const unitDirection = libredwg.dwg_dynapi_entity_data(entity, "vector"); return { type: "RAY", ...commonAttrs, firstPoint, unitDirection }; } convertSection(entity, commonAttrs) { const libredwg = this.libredwg; const state = libredwg.dwg_dynapi_entity_data(entity, "state"); const flags = libredwg.dwg_dynapi_entity_data(entity, "flag"); const name = libredwg.dwg_dynapi_entity_data(entity, "name"); const verticalDirection = libredwg.dwg_dynapi_entity_data(entity, "vert_dir"); const topHeight = libredwg.dwg_dynapi_entity_data(entity, "top_height"); const bottomHeight = libredwg.dwg_dynapi_entity_data(entity, "bottom_height"); const indicatorTransparency = libredwg.dwg_dynapi_entity_data(entity, "indicator_alpha"); const indicatorColor = libredwg.dwg_dynapi_entity_data(entity, "indicator_color"); const numberOfVertices = libredwg.dwg_dynapi_entity_data(entity, "num_verts"); const vertices_ptr = libredwg.dwg_dynapi_entity_data(entity, "verts"); const vertices = numberOfVertices > 0 ? libredwg.dwg_ptr_to_point3d_array(vertices_ptr, numberOfVertices) : []; const numberOfBackLineVertices = libredwg.dwg_dynapi_entity_data(entity, "num_blverts"); const backLineVertices_ptr = libredwg.dwg_dynapi_entity_data(entity, "blverts"); const backLineVertices = numberOfBackLineVertices > 0 ? libredwg.dwg_ptr_to_point3d_array( backLineVertices_ptr, numberOfBackLineVertices ) : []; const geometrySettingHandle = libredwg.dwg_dynapi_entity_data(entity, "geometrySettingHardId"); const geometrySettingHardId = libredwg.dwg_ref_get_handle_absolute_ref(geometrySettingHandle) ?? 0n; return { type: "SECTION", ...commonAttrs, state, flags, name, verticalDirection, topHeight, bottomHeight, indicatorTransparency, indicatorColor: indicatorColor.rgb, numberOfVertices, vertices, numberOfBackLineVertices, backLineVertices, geometrySettingHardId }; } convertShape(entity, commonAttrs) { const libredwg = this.libredwg; const insertionPoint = libredwg.dwg_dynapi_entity_data(entity, "ins_pt"); const size = libredwg.dwg_dynapi_entity_data(entity, "scale"); const rotation = libredwg.dwg_dynapi_entity_data(entity, "rotation"); const xScale = libredwg.dwg_dynapi_entity_data(entity, "width_factor"); const obliqueAngle = libredwg.dwg_dynapi_entity_data(entity, "oblique_angle"); const thickness = libredwg.dwg_dynapi_entity_data(entity, "thickness"); const extrusionDirection = libredwg.dwg_dynapi_entity_data(entity, "extrusion"); const shapeNumber = libredwg.dwg_dynapi_entity_data(entity, "style_id"); const styleName = libredwg.dwg_entity_text_get_style_name(entity); return { type: "SHAPE", subclassMarker: "AcDbShape", ...commonAttrs, thickness, insertionPoint, size, shapeNumber, styleName, rotation, xScale, obliqueAngle, extrusionDirection }; } convertSolid(entity, commonAttrs) { const libredwg = this.libredwg; const corner1 = libredwg.dwg_dynapi_entity_data(entity, "corner1"); const corner2 = libredwg.dwg_dynapi_entity_data(entity, "corner2"); const corner3 = libredwg.dwg_dynapi_entity_data(entity, "corner3"); const corner4 = libredwg.dwg_dynapi_entity_data(entity, "corner4"); const thickness = libredwg.dwg_dynapi_entity_data(entity, "thickness"); const extrusionDirection = libredwg.dwg_dynapi_entity_data(entity, "extrusion"); return { type: "SOLID", ...commonAttrs, corner1, corner2, corner3, corner4, thickness, extrusionDirection }; } convertSpline(entity, commonAttrs) { const libredwg = this.libredwg; const flag = libredwg.dwg_dynapi_entity_data(entity, "splineflags"); const degree = libredwg.dwg_dynapi_entity_data(entity, "degree"); const knotTolerance = libredwg.dwg_dynapi_entity_data(entity, "knot_tol"); const numberOfKnots = libredwg.dwg_dynapi_entity_data(entity, "num_knots"); const knots_ptr = libredwg.dwg_dynapi_entity_data(entity, "knots"); const knots = libredwg.dwg_ptr_to_double_array(knots_ptr, numberOfKnots); const fitTolerance = libredwg.dwg_dynapi_entity_data(entity, "fit_tol"); const numberOfFitPoints = libredwg.dwg_dynapi_entity_data(entity, "num_fit_pts"); const fit_pts_ptr = libredwg.dwg_dynapi_entity_data(entity, "fit_pts"); const fitPoints = libredwg.dwg_ptr_to_point3d_array( fit_pts_ptr, numberOfFitPoints ); const weighted = libredwg.dwg_dynapi_entity_data(entity, "weighted"); const controlTolerance = libredwg.dwg_dynapi_entity_data(entity, "ctrl_tol"); const numberOfControlPoints = libredwg.dwg_dynapi_entity_data(entity, "num_ctrl_pts"); const ctrl_pts_ptr = libredwg.dwg_dynapi_entity_data(entity, "ctrl_pts"); const controlPoints = libredwg.dwg_ptr_to_point4d_array( ctrl_pts_ptr, numberOfControlPoints ); const startTangent = libredwg.dwg_dynapi_entity_data(entity, "beg_tan_vec"); const endTangent = libredwg.dwg_dynapi_entity_data(entity, "end_tan_vec"); return { type: "SPLINE", ...commonAttrs, // normal?: DwgPoint3D flag, degree, numberOfKnots, numberOfControlPoints, numberOfFitPoints, knotTolerance, controlTolerance, fitTolerance, startTangent, endTangent, knots, weights: weighted ? controlPoints.map((value) => value.w) : void 0, controlPoints: controlPoints.map((value) => { return { x: value.x, y: value.y, z: value.z }; }), fitPoints }; } convertTable(entity, commonAttrs) { const libredwg = this.libredwg; const name = libredwg.dwg_dynapi_subclass_data(entity, "ldata", "name"); const startPoint = libredwg.dwg_dynapi_entity_data(entity, "ins_pt"); const directionVector = libredwg.dwg_dynapi_entity_data(entity, "horiz_direction"); const tableValue = libredwg.dwg_dynapi_entity_data(entity, "flag_for_table_value"); const rowCount = libredwg.dwg_dynapi_entity_data(entity, "num_rows"); const columnCount = libredwg.dwg_dynapi_entity_data(entity, "num_cols"); const row_heights_ptr = libredwg.dwg_dynapi_entity_data(entity, "row_heights"); const rowHeightArr = libredwg.dwg_ptr_to_double_array( row_heights_ptr, rowCount ); const col_widths_ptr = libredwg.dwg_dynapi_entity_data(entity, "col_widths"); const columnWidthArr = libredwg.dwg_ptr_to_double_array( col_widths_ptr, columnCount ); const table_style_ref = libredwg.dwg_dynapi_entity_data(entity, "tablestyle"); const tableStyleId = libredwg.dwg_ref_get_id(table_style_ref) ?? ""; const block_header_ref = libredwg.dwg_dynapi_entity_data(entity, "block_header"); const blockRecordHandle = libredwg.dwg_ref_get_id(block_header_ref) ?? ""; const overrideFlag = libredwg.dwg_dynapi_entity_data(entity, "table_flag_override"); const borderColorOverrideFlag = libredwg.dwg_dynapi_entity_data(entity, "border_color_overrides_flag"); const borderLineWeightOverrideFlag = libredwg.dwg_dynapi_entity_data(entity, "border_lineweight_overrides_flag"); const borderVisibilityOverrideFlag = libredwg.dwg_dynapi_entity_data(entity, "border_visibility_overrides_flag"); const num_cells = libredwg.dwg_dynapi_entity_data(entity, "num_cells"); const cells_ptr = libredwg.dwg_dynapi_entity_data(entity, "cells"); const cells = libredwg.dwg_ptr_to_table_cell_array(cells_ptr, num_cells); return { type: "ACAD_TABLE", ...commonAttrs, name, startPoint, directionVector, // attachmentPoint: DwgAttachmentPoint tableValue, rowCount, columnCount, overrideFlag, borderColorOverrideFlag, borderLineWeightOverrideFlag, borderVisibilityOverrideFlag, rowHeightArr, columnWidthArr, tableStyleId, blockRecordHandle, cells: this.convertTableCells(cells), bmpPreview: "" }; } convertTableCells(cells) { return cells.map((cell) => { var _a, _b; return { text: cell.text_value, attachmentPoint: cell.cell_alignment, textStyle: cell.text_style ? String(cell.text_style) : void 0, rotation: cell.rotation, cellType: cell.type, flagValue: cell.flags, mergedValue: cell.is_merged_value, autoFit: cell.is_autofit_flag, topBorderVisibility: !!cell.top_visibility, bottomBorderVisibility: !!cell.bottom_visibility, leftBorderVisibility: !!cell.left_visibility, rightBorderVisibility: !!cell.right_visibility, overrideFlag: cell.cell_flag_override, virtualEdgeFlag: cell.virtual_edge_flag, blockTableRecordId: cell.block_handle ? String(cell.block_handle.absolute_ref ?? "") : void 0, blockScale: cell.block_scale, blockAttrNum: ((_a = cell.attr_defs) == null ? void 0 : _a.length) ?? 0, attrDefineId: (_b = cell.attr_defs) == null ? void 0 : _b.map( (value) => { var _a2; return String(((_a2 = value.attdef) == null ? void 0 : _a2.absolute_ref) ?? ""); } ), textHeight: cell.text_height ?? 0, extendedCellFlags: cell.additional_data_flag }; }); } convertTextBase(entity) { const libredwg = this.libredwg; const text = libredwg.dwg_dynapi_entity_data(entity, "text_value"); const thickness = libredwg.dwg_dynapi_entity_data(entity, "thickness"); const startPoint = libredwg.dwg_dynapi_entity_data(entity, "ins_pt"); const endPoint = libredwg.dwg_dynapi_entity_data(entity, "alignment_pt"); const rotation = libredwg.dwg_dynapi_entity_data(entity, "rotation"); const textHeight = libredwg.dwg_dynapi_entity_data(entity, "height"); const xScale = libredwg.dwg_dynapi_entity_data(entity, "width_factor"); const obliqueAngle = libredwg.dwg_dynapi_entity_data(entity, "oblique_angle"); const styleName = libredwg.dwg_entity_text_get_style_name(entity); const generationFlag = libredwg.dwg_dynapi_entity_data(entity, "generation"); const halign = libredwg.dwg_dynapi_entity_data(entity, "horiz_alignment"); const valign = libredwg.dwg_dynapi_entity_data(entity, "vert_alignment"); const extrusionDirection = libredwg.dwg_dynapi_entity_data(entity, "extrusion"); return { text, thickness, startPoint, endPoint, textHeight, rotation, xScale, obliqueAngle, styleName, generationFlag, halign, valign, extrusionDirection }; } convertText(entity, commonAttrs) { return { type: "TEXT", ...commonAttrs, ...this.convertTextBase(entity) }; } convertTolerance(entity, commonAttrs) { const libredwg = this.libredwg; const insertionPoint = libredwg.dwg_dynapi_entity_data(entity, "ins_pt"); const text = libredwg.dwg_dynapi_entity_data(entity, "text_value"); const xAxisDirection = libredwg.dwg_dynapi_entity_data(entity, "x_direction"); const extrusionDirection = libredwg.dwg_dynapi_entity_data(entity, "extrusion"); const dimStyleName = libredwg.dwg_entity_get_dimstyle_name(entity); return { type: "TOLERANCE", ...commonAttrs, styleName: dimStyleName, insertionPoint, text, extrusionDirection, xAxisDirection }; } convertViewport(entity, commonAttrs) { const libredwg = this.libredwg; const viewportCenter = libredwg.dwg_dynapi_entity_data(entity, "center"); const width = libredwg.dwg_dynapi_entity_data(entity, "width"); const height = libredwg.dwg_dynapi_entity_data(entity, "height"); const status = libredwg.dwg_dynapi_entity_data(entity, "on_off"); const displayCenter = libredwg.dwg_dynapi_entity_data(entity, "VIEWCTR"); const snapBase = libredwg.dwg_dynapi_entity_data(entity, "SNAPBASE"); const snapSpacing = libredwg.dwg_dynapi_entity_data(entity, "SNAPUNIT"); const gridSpacing = libredwg.dwg_dynapi_entity_data(entity, "GRIDUNIT"); const viewDirection = libredwg.dwg_dynapi_entity_data(entity, "VIEWDIR"); const targetPoint = libredwg.dwg_dynapi_entity_data(entity, "view_target"); const perspectiveLensLength = libredwg.dwg_dynapi_entity_data(entity, "lens_length"); const frontClipZ = libredwg.dwg_dynapi_entity_data(entity, "front_clip_z"); const backClipZ = libredwg.dwg_dynapi_entity_data(entity, "back_clip_z"); const viewHeight = libredwg.dwg_dynapi_entity_data(entity, "VIEWSIZE"); const snapAngle = libredwg.dwg_dynapi_entity_data(entity, "SNAPANG"); const viewTwistAngle = libredwg.dwg_dynapi_entity_data(entity, "twist_angle"); const circleZoomPercent = libredwg.dwg_dynapi_entity_data(entity, "circle_zoom"); const statusBitFlags = libredwg.dwg_dynapi_entity_data(entity, "status_flag"); const sheetName = libredwg.dwg_dynapi_entity_data(entity, "style_sheet"); const renderMode = libredwg.dwg_dynapi_entity_data(entity, "render_mode"); const ucsPerViewport = libredwg.dwg_dynapi_entity_data(entity, "UCSVP"); const ucsOrigin = libredwg.dwg_dynapi_entity_data(entity, "ucsorg"); const ucsXAxis = libredwg.dwg_dynapi_entity_data(entity, "ucsxdir"); const ucsYAxis = libredwg.dwg_dynapi_entity_data(entity, "ucsydir"); const named_ucs_ref = libredwg.dwg_dynapi_entity_data(entity, "named_ucs"); const ucsId = libredwg.dwg_ref_get_id(named_ucs_ref); const base_ucs_ref = libredwg.dwg_dynapi_entity_data(entity, "base_ucs"); const ucsBaseId = libredwg.dwg_ref_get_id(base_ucs_ref); const orthographicType = libredwg.dwg_dynapi_entity_data(entity, "UCSORTHOVIEW"); const elevation = libredwg.dwg_dynapi_entity_data(entity, "ucs_elevation"); const shadePlotMode = libredwg.dwg_dynapi_entity_data(entity, "shadeplot_mode"); const isDefaultLighting = libredwg.dwg_dynapi_entity_data(entity, "use_default_lights"); const defaultLightingType = libredwg.dwg_dynapi_entity_data(entity, "default_lighting_type"); const brightness = libredwg.dwg_dynapi_entity_data(entity, "brightness"); const contrast = libredwg.dwg_dynapi_entity_data(entity, "contrast"); const majorGridFrequency = libredwg.dwg_dynapi_entity_data(entity, "grid_major"); const background_ref = libredwg.dwg_dynapi_entity_data(entity, "background"); const backgroundId = libredwg.dwg_ref_get_id(background_ref); const shadeplot_ref = libredwg.dwg_dynapi_entity_data(entity, "shadeplot"); const shadePlotId = libredwg.dwg_ref_get_id(shadeplot_ref); const visualstyle_ref = libredwg.dwg_dynapi_entity_data(entity, "visualstyle"); const visualStyleId = libredwg.dwg_ref_get_id(visualstyle_ref); const sun_ref = libredwg.dwg_dynapi_entity_data(entity, "sun"); const sunId = libredwg.dwg_ref_get_id(sun_ref); return { type: "VIEWPORT", ...commonAttrs, viewportCenter, width, height, status, viewportId: 0, // Will be set later in LibreDwgConverter.convert displayCenter, snapBase, snapSpacing, gridSpacing, viewDirection, targetPoint, perspectiveLensLength, frontClipZ, backClipZ, viewHeight, snapAngle, viewTwistAngle, circleZoomPercent, statusBitFlags, sheetName, renderMode, ucsPerViewport, ucsOrigin, ucsXAxis, ucsYAxis, ucsId: ucsId ?? "", ucsBaseId: ucsBaseId ?? "", orthographicType, elevation, shadePlotMode, majorGridFrequency, backgroundId: backgroundId ?? "", shadePlotId: shadePlotId ?? "", visualStyleId: visualStyleId ?? "", isDefaultLighting: !!isDefaultLighting, defaultLightingType, brightness, contrast, sunId: sunId ?? "" }; } convertWipeout(entity, commonAttrs) { const libredwg = this.libredwg; const version = libredwg.dwg_dynapi_entity_data(entity, "class_version"); const position = libredwg.dwg_dynapi_entity_data(entity, "pt0"); const uPixel = libredwg.dwg_dynapi_entity_data(entity, "uvec"); const vPixel = libredwg.dwg_dynapi_entity_data(entity, "vvec"); const imageSize = libredwg.dwg_dynapi_entity_data(entity, "image_size"); const flags = libredwg.dwg_dynapi_entity_data(entity, "display_props"); const clipping = libredwg.dwg_dynapi_entity_data(entity, "clipping"); const brightness = libredwg.dwg_dynapi_entity_data(entity, "brightness"); const contrast = libredwg.dwg_dynapi_entity_data(entity, "contrast"); const fade = libredwg.dwg_dynapi_entity_data(entity, "fade"); const clipMode = libredwg.dwg_dynapi_entity_data(entity, "clip_mode"); const clippingBoundaryType = libredwg.dwg_dynapi_entity_data(entity, "clip_boundary_type"); const countBoundaryPoints = libredwg.dwg_dynapi_entity_data(entity, "num_clip_verts"); const clip_verts = libredwg.dwg_dynapi_entity_data(entity, "clip_verts"); const clippingBoundaryPath = libredwg.dwg_ptr_to_point2d_array( clip_verts, countBoundaryPoints ); const imagedef_ref = libredwg.dwg_dynapi_entity_data(entity, "imagedef"); const imageDefHandle = libredwg.dwg_ref_get_absref(imagedef_ref) ?? 0; const imagedefreactor_ref = libredwg.dwg_dynapi_entity_data(entity, "imagedefreactor"); const imageDefReactorHandle = libredwg.dwg_ref_get_absref(imagedefreactor_ref) ?? 0; return { type: "WIPEOUT", ...commonAttrs, version, position, uPixel, vPixel, imageSize, imageDefHandle, flags, clipping, brightness, contrast, fade, imageDefReactorHandle, clippingBoundaryType, countBoundaryPoints, clippingBoundaryPath, clipMode }; } convertXline(entity, commonAttrs) { const libredwg = this.libredwg; const firstPoint = libredwg.dwg_dynapi_entity_data(entity, "point"); const unitDirection = libredwg.dwg_dynapi_entity_data(entity, "vector"); return { type: "XLINE", ...commonAttrs, firstPoint, unitDirection }; } getDimensionCommonAttrs(entity) { const libredwg = this.libredwg; const version = libredwg.dwg_dynapi_entity_data(entity, "class_version"); const name = libredwg.dwg_entity_get_block_name(entity, "block"); const definitionPoint = libredwg.dwg_dynapi_entity_data(entity, "def_pt"); const textPoint = libredwg.dwg_dynapi_entity_data(entity, "text_midpt"); const attachmentPoint = libredwg.dwg_dynapi_entity_data(entity, "attachmentPoint"); const dimensionType = libredwg.dwg_dynapi_entity_data(entity, "flag"); const textLineSpacingStyle = libredwg.dwg_dynapi_entity_data(entity, "lspace_factor"); const textLineSpacingFactor = libredwg.dwg_dynapi_entity_data(entity, "lspace_factor"); const measurement = libredwg.dwg_dynapi_entity_data(entity, "act_measurement"); const text = libredwg.dwg_dynapi_entity_data(entity, "user_text"); const textRotation = libredwg.dwg_dynapi_entity_data(entity, "text_rotation"); const ocsRotation = libredwg.dwg_dynapi_entity_data(entity, "ins_rotation"); const extrusionDirection = libredwg.dwg_dynapi_entity_data(entity, "extrusion"); const styleName = libredwg.dwg_entity_get_dimstyle_name(entity); return { type: "DIMENSION", version, name, definitionPoint, textPoint, dimensionType, attachmentPoint, textLineSpacingStyle, textLineSpacingFactor: textLineSpacingFactor || 1, measurement, text, textRotation, ocsRotation, extrusionDirection, styleName }; } getCommonAttrs(entity) { const libredwg = this.libredwg; const color = libredwg.dwg_object_entity_get_color_object(entity); const method = color.method; const colorIndex = color.index; let rgbColor = void 0; if (method == 194 || (color.rgb >>> 24 & 255) === 194) { rgbColor = color.rgb & 16777215; } const layer = this.getLayerName(entity); const handle = libredwg.dwg_object_entity_get_handle_object(entity); const ownerhandle = libredwg.dwg_object_entity_get_ownerhandle_object(entity); const ownerDictionaryHardId = libredwg.dwg_object_entity_get_xdicobjhandle_object(entity); const lineType = this.getLtypeName(entity); const lineweight = libredwg.dwg_object_entity_get_line_weight(entity); const lineTypeScale = libredwg.dwg_object_entity_get_ltype_scale(entity); const isVisible = !libredwg.dwg_object_entity_get_invisible(entity); const xdata = libredwg.dwg_object_entity_get_xdata(entity); return { handle: idToString(handle.value), ownerDictionaryHardId: idToString(ownerDictionaryHardId.absolute_ref), ownerBlockRecordSoftId: idToString(ownerhandle.absolute_ref), layer, color: rgbColor, colorIndex, colorName: color.name, lineType, lineweight, lineTypeScale, isVisible, transparency: color.alpha, transparencyType: color.alpha_type, xdata }; } getLayerName(entity) { const libredwg = this.libredwg; const layer = libredwg.dwg_object_entity_get_layer_object_ref(entity); const name = this.layers.get(idToString(layer.handleref.value)); return name ?? "0"; } getLtypeName(entity) { const libredwg = this.libredwg; const ltype = libredwg.dwg_object_entity_get_ltype_object_ref(entity); const name = this.ltypes.get(idToString(ltype.handleref.value)); return name ?? ""; } } class LibreDwgConverter { constructor(instance) { __publicField(this, "libredwg"); __publicField(this, "entityConverter"); this.libredwg = instance; this.entityConverter = new LibreEntityConverter(instance); } convert(data) { var _a; this.entityConverter.clear(); const db = { tables: { APPID: { entries: [] }, BLOCK_RECORD: { entries: [] }, DIMSTYLE: { entries: [] }, LAYER: { entries: [] }, LTYPE: { entries: [] }, STYLE: { entries: [] }, VPORT: { entries: [] } }, objects: { DICTIONARY: [], IMAGEDEF: [], LAYER_FILTER: [], LAYER_INDEX: [], LAYOUT: [], MLEADERSTYLE: [], SPATIAL_FILTER: [], XRECORD: [] }, header: {}, entities: [], classes: [] }; const libredwg = this.libredwg; this.convertHeader(data, db.header); this.convertClasses(data, db.classes); this.entityConverter.setClasses(db.classes); const num_objects = libredwg.dwg_get_num_objects(data); for (let i = 0; i < num_objects; i++) { const obj = libredwg.dwg_get_object(data, i); if (obj) { const tio = this.safeObjectTio(obj); if (tio) { const fixedtype = libredwg.dwg_object_get_fixedtype(obj); switch (fixedtype) { case Dwg_Object_Type.DWG_TYPE_LAYER: { const layer = this.convertLayer(tio, obj); db.tables.LAYER.entries.push(layer); this.entityConverter.layers.set(layer.handle, layer.name); } break; case Dwg_Object_Type.DWG_TYPE_LTYPE: { const ltype = this.convertLineType(tio, obj); db.tables.LTYPE.entries.push(ltype); this.entityConverter.ltypes.set(ltype.handle, ltype.name); } break; } } } } for (let i = 0; i < num_objects; i++) { const obj = libredwg.dwg_get_object(data, i); if (obj) { const tio = this.safeObjectTio(obj); if (tio) { const fixedtype = libredwg.dwg_object_get_fixedtype(obj); switch (fixedtype) { case Dwg_Object_Type.DWG_TYPE_APPID: db.tables.APPID.entries.push(this.convertAppId(tio)); break; case Dwg_Object_Type.DWG_TYPE_BLOCK_HEADER: { const btr = this.convertBlockRecord(tio, obj); db.tables.BLOCK_RECORD.entries.push(btr); if (isModelSpace(btr.name) || isPaperSpace(btr.name)) { btr.entities.forEach((entity) => { db.entities.push(entity); if (entity.type === "INSERT") { entity.attribs.forEach((attrib) => { db.entities.push(attrib); }); } }); } } break; case Dwg_Object_Type.DWG_TYPE_DIMSTYLE: db.tables.DIMSTYLE.entries.push(this.convertDimStyle(tio, obj)); break; case Dwg_Object_Type.DWG_TYPE_STYLE: db.tables.STYLE.entries.push(this.convertStyle(tio, obj)); break; case Dwg_Object_Type.DWG_TYPE_VPORT: db.tables.VPORT.entries.push(this.convertViewport(tio, obj)); break; case Dwg_Object_Type.DWG_TYPE_DICTIONARY: db.objects.DICTIONARY.push(this.convertDictionary(tio, obj)); break; case Dwg_Object_Type.DWG_TYPE_IMAGEDEF: db.objects.IMAGEDEF.push(this.convertImageDef(tio, obj)); break; case Dwg_Object_Type.DWG_TYPE_LAYERFILTER: db.objects.LAYER_FILTER.push(this.convertLayerFilter(tio, obj)); break; case Dwg_Object_Type.DWG_TYPE_LAYER_INDEX: db.objects.LAYER_INDEX.push(this.convertLayerIndex(tio, obj)); break; case Dwg_Object_Type.DWG_TYPE_LAYOUT: db.objects.LAYOUT.push(this.convertLayout(tio, obj)); break; case Dwg_Object_Type.DWG_TYPE_MLEADERSTYLE: db.objects.MLEADERSTYLE.push(this.convertMLeaderStyle(tio, obj)); break; case Dwg_Object_Type.DWG_TYPE_SPATIAL_FILTER: db.objects.SPATIAL_FILTER.push( this.convertSpatialFilter(tio, obj) ); break; case Dwg_Object_Type.DWG_TYPE_XRECORD: db.objects.XRECORD.push(this.convertXRecord(tio, obj)); break; } } } } const viewportEntities = db.entities.filter( (entity) => entity.type === "VIEWPORT" ); viewportEntities.sort((a, b) => { const handleA = parseInt(a.handle, 16); const handleB = parseInt(b.handle, 16); return handleA - handleB; }); viewportEntities.forEach((viewport, index) => { viewport.viewportId = index + 1; }); const thumbnail = libredwg.dwg_bmp(data); if ((_a = thumbnail == null ? void 0 : thumbnail.data) == null ? void 0 : _a.length) { db.thumbnailImage = thumbnail.data; } return db; } getConversionStats() { return { unknownEntityCount: this.entityConverter.unknownEntityCount }; } safeObjectTio(obj) { const libredwg = this.libredwg; try { if (libredwg.dwg_object_get_supertype(obj) != Dwg_Object_Supertype.DWG_SUPERTYPE_OBJECT) { return null; } const tio = libredwg.dwg_object_to_object_tio(obj); return tio ? tio : null; } catch { return null; } } convertHeader(data, header) { const libredwg = this.libredwg; HEADER_VARIABLES.forEach((name) => { let var_name = name; if (name == "DIMBLK" || name == "DIMBLK1" || name == "DIMBLK2") { var_name = var_name + "_T"; } let value = libredwg.dwg_dynapi_header_data(data, var_name); if (name == "CELTYPE" || name == "CLAYER" || name == "CLAYER" || name == "DIMSTYLE" || name == "DIMTXSTY" || name == "TEXTSTYLE") { value = value ? libredwg.dwg_ref_get_object_name(value) : ""; } else if (name == "DRAGVS") { value = value ? libredwg.dwg_ref_get_absref(value) ?? 2 : 2; } header[name] = value; }); } convertClasses(data, classes) { const libredwg = this.libredwg; const count = libredwg.dwg_get_num_classes(data); for (let index = 0; index < count; index++) { const cls = libredwg.dwg_get_class(data, index); classes.push({ dxfName: cls.dxfname, cppName: cls.cppname, appName: cls.appname, capabilitiesFlag: cls.proxyflag, instanceCount: cls.num_instances, wasAProxyFlag: cls.s_zombie, // DWG_TYPE_PROXY_ENTITY = 0x1F2 /* 498 */, // DWG_TYPE_PROXY_OBJECT = 0x1F3 /* 499 */, isAnEntityFlag: cls.item_class_id === 498 }); } } convertAppId(item) { const libredwg = this.libredwg; const name = libredwg.dwg_dynapi_entity_data(item, "name"); const flag = libredwg.dwg_dynapi_entity_data(item, "flag"); return { name, standardFlag: flag }; } convertBlockRecord(item, obj) { const libredwg = this.libredwg; const commonAttrs = this.getCommonTableEntryAttrs(item, obj); const block = libredwg.dwg_entity_block_header_get_block(item); if (block.name) { commonAttrs.name = block.name; } const num_owned = libredwg.dwg_dynapi_entity_data(item, "num_owned"); const flags = libredwg.dwg_dynapi_entity_data(item, "flag"); const description = libredwg.dwg_dynapi_entity_data(item, "description"); const basePoint = libredwg.dwg_dynapi_entity_data(item, "base_pt"); const insertionUnits = libredwg.dwg_dynapi_entity_data(item, "insert_units"); const explodability = libredwg.dwg_dynapi_entity_data(item, "explodable"); const scalability = libredwg.dwg_dynapi_entity_data(item, "block_scaling"); const layout_ptr = libredwg.dwg_dynapi_entity_data(item, "layout"); const layout = libredwg.dwg_ref_get_id(layout_ptr) ?? ""; let bmpPreview; const bmpPreviewBinaryData = libredwg.dwg_entity_block_header_get_preview(item); if (bmpPreviewBinaryData && bmpPreviewBinaryData.length > 0) { bmpPreview = uint8ArrayToHexString(bmpPreviewBinaryData); } let entities = this.convertEntities(obj, commonAttrs.handle); if (!entities || entities.length == 0) { entities = []; const entities_ptr = libredwg.dwg_dynapi_entity_data(item, "entities"); if (entities_ptr) { const object_ref_ptr_array = libredwg.dwg_ptr_to_object_ref_ptr_array( entities_ptr, num_owned ); const converter = this.entityConverter; for (let index = 0; index < num_owned; index++) { const object = libredwg.dwg_ref_get_object( object_ref_ptr_array[index] ); const entity = converter.convert(object); if (entity) { entity.ownerBlockRecordSoftId = commonAttrs.handle; entities.push(entity); } } } } return { ...commonAttrs, flags, description, basePoint, layout, insertionUnits, explodability, scalability, bmpPreview, entities }; } convertEntities(obj, ownerHandle) { const libredwg = this.libredwg; const converter = this.entityConverter; const entities = []; let next = libredwg.get_first_owned_entity(obj); while (next) { const entity = converter.convert(next); if (entity) { entity.ownerBlockRecordSoftId = ownerHandle; entities.push(entity); } next = libredwg.get_next_owned_entity(obj, next); } return entities; } convertDimStyle(item, obj) { const libredwg = this.libredwg; const commonAttrs = this.getCommonTableEntryAttrs(item, obj); const DIMTOL = libredwg.dwg_dynapi_entity_data(item, "DIMTOL"); const DIMLIM = libredwg.dwg_dynapi_entity_data(item, "DIMLIM"); const DIMTIH = libredwg.dwg_dynapi_entity_data(item, "DIMTIH"); const DIMTOH = libredwg.dwg_dynapi_entity_data(item, "DIMTOH"); const DIMSE1 = libredwg.dwg_dynapi_entity_data(item, "DIMSE1"); const DIMSE2 = libredwg.dwg_dynapi_entity_data(item, "DIMSE2"); const DIMALT = libredwg.dwg_dynapi_entity_data(item, "DIMALT"); const DIMTOFL = libredwg.dwg_dynapi_entity_data(item, "DIMTOFL"); const DIMSAH = libredwg.dwg_dynapi_entity_data(item, "DIMSAH"); const DIMTIX = libredwg.dwg_dynapi_entity_data(item, "DIMTIX"); const DIMSOXD = libredwg.dwg_dynapi_entity_data(item, "DIMSOXD"); const DIMALTD = libredwg.dwg_dynapi_entity_data(item, "DIMALTD"); const DIMZIN = libredwg.dwg_dynapi_entity_data(item, "DIMZIN"); const DIMSD1 = libredwg.dwg_dynapi_entity_data(item, "DIMSD1"); const DIMSD2 = libredwg.dwg_dynapi_entity_data(item, "DIMSD2"); const DIMTOLJ = libredwg.dwg_dynapi_entity_data(item, "DIMTOLJ"); const DIMJUST = libredwg.dwg_dynapi_entity_data(item, "DIMJUST"); const DIMFIT = libredwg.dwg_dynapi_entity_data(item, "DIMFIT"); const DIMUPT = libredwg.dwg_dynapi_entity_data(item, "DIMUPT"); const DIMTZIN = libredwg.dwg_dynapi_entity_data(item, "DIMTZIN"); const DIMALTZ = libredwg.dwg_dynapi_entity_data(item, "DIMALTZ"); const DIMALTTZ = libredwg.dwg_dynapi_entity_data(item, "DIMALTTZ"); const DIMTAD = libredwg.dwg_dynapi_entity_data(item, "DIMTAD"); const DIMUNIT = libredwg.dwg_dynapi_entity_data(item, "DIMUNIT"); const DIMAUNIT = libredwg.dwg_dynapi_entity_data(item, "DIMAUNIT"); const DIMDEC = libredwg.dwg_dynapi_entity_data(item, "DIMDEC"); const DIMTDEC = libredwg.dwg_dynapi_entity_data(item, "DIMTDEC"); const DIMALTU = libredwg.dwg_dynapi_entity_data(item, "DIMALTU"); const DIMALTTD = libredwg.dwg_dynapi_entity_data(item, "DIMALTTD"); const DIMSCALE = libredwg.dwg_dynapi_entity_data(item, "DIMSCALE"); const DIMASZ = libredwg.dwg_dynapi_entity_data(item, "DIMASZ"); const DIMEXO = libredwg.dwg_dynapi_entity_data(item, "DIMEXO"); const DIMDLI = libredwg.dwg_dynapi_entity_data(item, "DIMDLI"); const DIMEXE = libredwg.dwg_dynapi_entity_data(item, "DIMEXE"); const DIMRND = libredwg.dwg_dynapi_entity_data(item, "DIMRND"); const DIMDLE = libredwg.dwg_dynapi_entity_data(item, "DIMDLE"); const DIMTP = libredwg.dwg_dynapi_entity_data(item, "DIMTP"); const DIMTM = libredwg.dwg_dynapi_entity_data(item, "DIMTM"); const DIMFXL = libredwg.dwg_dynapi_entity_data(item, "DIMFXL"); const DIMJOGANG = libredwg.dwg_dynapi_entity_data(item, "DIMJOGANG"); const DIMTFILL = libredwg.dwg_dynapi_entity_data(item, "DIMTFILL"); const DIMTFILLCLR = libredwg.dwg_dynapi_entity_data(item, "DIMTFILLCLR"); const DIMAZIN = libredwg.dwg_dynapi_entity_data(item, "DIMAZIN"); const DIMARCSYM = libredwg.dwg_dynapi_entity_data(item, "DIMARCSYM"); const DIMTXT = libredwg.dwg_dynapi_entity_data(item, "DIMTXT"); const DIMCEN = libredwg.dwg_dynapi_entity_data(item, "DIMCEN"); const DIMTSZ = libredwg.dwg_dynapi_entity_data(item, "DIMTSZ"); const DIMALTF = libredwg.dwg_dynapi_entity_data(item, "DIMALTF"); const DIMLFAC = libredwg.dwg_dynapi_entity_data(item, "DIMLFAC"); const DIMTVP = libredwg.dwg_dynapi_entity_data(item, "DIMTVP"); const DIMTFAC = libredwg.dwg_dynapi_entity_data(item, "DIMTFAC"); const DIMGAP = libredwg.dwg_dynapi_entity_data(item, "DIMGAP"); const DIMPOST = libredwg.dwg_dynapi_entity_data(item, "DIMPOST"); const DIMAPOST = libredwg.dwg_dynapi_entity_data(item, "DIMAPOST"); const DIMBLK_T = libredwg.dwg_dynapi_entity_data(item, "DIMBLK_T"); const DIMBLK1_T = libredwg.dwg_dynapi_entity_data(item, "DIMBLK1_T"); const DIMBLK2_T = libredwg.dwg_dynapi_entity_data(item, "DIMBLK2_T"); const DIMALTRND = libredwg.dwg_dynapi_entity_data(item, "DIMALTRND"); const DIMCLRD_N = libredwg.dwg_dynapi_entity_data(item, "DIMCLRD_N"); const DIMCLRE_N = libredwg.dwg_dynapi_entity_data(item, "DIMCLRE_N"); const DIMCLRT_N = libredwg.dwg_dynapi_entity_data(item, "DIMCLRT_N"); const DIMCLRD = libredwg.dwg_dynapi_entity_data(item, "DIMCLRD"); const DIMCLRE = libredwg.dwg_dynapi_entity_data(item, "DIMCLRE"); const DIMCLRT = libredwg.dwg_dynapi_entity_data(item, "DIMCLRT"); const DIMADEC = libredwg.dwg_dynapi_entity_data(item, "DIMADEC"); const DIMFRAC = libredwg.dwg_dynapi_entity_data(item, "DIMFRAC"); const DIMLUNIT = libredwg.dwg_dynapi_entity_data(item, "DIMLUNIT"); const DIMDSEP = libredwg.dwg_dynapi_entity_data(item, "DIMDSEP"); const DIMTMOVE = libredwg.dwg_dynapi_entity_data(item, "DIMTMOVE"); const DIMATFIT = libredwg.dwg_dynapi_entity_data(item, "DIMATFIT"); const DIMFXLON = libredwg.dwg_dynapi_entity_data(item, "DIMFXLON"); const DIMTXTDIRECTION = libredwg.dwg_dynapi_entity_data(item, "DIMTXTDIRECTION"); const DIMALTMZF = libredwg.dwg_dynapi_entity_data(item, "DIMALTMZF"); const DIMALTMZS = libredwg.dwg_dynapi_entity_data(item, "DIMALTMZS"); const DIMMZF = libredwg.dwg_dynapi_entity_data(item, "DIMMZF"); const DIMMZS = libredwg.dwg_dynapi_entity_data(item, "DIMMZS"); const DIMLWD = libredwg.dwg_dynapi_entity_data(item, "DIMLWD"); const DIMLWE = libredwg.dwg_dynapi_entity_data(item, "DIMLWE"); const DIMTXSTY_Ptr = libredwg.dwg_dynapi_entity_data(item, "DIMTXSTY"); const DIMTXSTY = libredwg.dwg_ref_get_absref(DIMTXSTY_Ptr) ?? void 0; const DIMLDRBLK_Ptr = libredwg.dwg_dynapi_entity_data(item, "DIMLDRBLK"); const DIMLDRBLK = libredwg.dwg_ref_get_absref(DIMLDRBLK_Ptr) ?? void 0; return { ...commonAttrs, DIMPOST, DIMAPOST, DIMBLK: DIMBLK_T, DIMBLK1: DIMBLK1_T, DIMBLK2: DIMBLK2_T, DIMSCALE, DIMASZ, DIMEXO, DIMDLI, DIMEXE, DIMRND, DIMDLE, DIMTP, DIMTM, DIMTXT, DIMCEN, DIMTSZ, DIMALTF, DIMLFAC, DIMTVP, DIMTFAC, DIMGAP, DIMALTRND, DIMTOL, DIMLIM, DIMTIH, DIMTOH, DIMSE1, DIMSE2, DIMTAD, DIMZIN, DIMAZIN, DIMALT, DIMALTD, DIMTOFL, DIMSAH, DIMTIX, DIMSOXD, DIMCLRD, DIMCLRE, DIMCLRT, DIMADEC, DIMUNIT, DIMDEC, DIMTDEC, DIMALTU, DIMALTTD, DIMAUNIT, DIMFRAC, DIMLUNIT, DIMDSEP: String.fromCharCode(DIMDSEP), DIMTMOVE, DIMJUST, DIMSD1, DIMSD2, DIMTOLJ, DIMTZIN, DIMALTZ, DIMALTTZ, DIMFIT, DIMUPT, DIMATFIT, DIMTXSTY, DIMLDRBLK, DIMLWD, DIMLWE, DIMFXL, DIMJOGANG, DIMTFILL, DIMTFILLCLR, DIMARCSYM, DIMCLRD_N, DIMCLRE_N, DIMCLRT_N, DIMFXLON, DIMTXTDIRECTION, DIMALTMZF, DIMALTMZS, DIMMZF, DIMMZS }; } convertLayer(item, obj) { const libredwg = this.libredwg; const commonAttrs = this.getCommonTableEntryAttrs(item, obj); const flag = libredwg.dwg_dynapi_entity_data(item, "flag"); const frozen = libredwg.dwg_dynapi_entity_data(item, "frozen"); const off = libredwg.dwg_dynapi_entity_data(item, "off"); const frozenInNew = libredwg.dwg_dynapi_entity_data(item, "frozen_in_new"); const locked = libredwg.dwg_dynapi_entity_data(item, "plotflockedlag"); const plotFlag = libredwg.dwg_dynapi_entity_data(item, "plotflag"); const linewt = libredwg.dwg_dynapi_entity_data(item, "linewt"); const color = libredwg.dwg_dynapi_entity_data(item, "color"); const ltypeRef = libredwg.dwg_dynapi_entity_data(item, "ltype"); let ltypeName = "Continuous"; if (ltypeRef) { try { ltypeName = libredwg.dwg_ref_get_object_name(ltypeRef); } catch { } } const method = color.method; let colorIndex = 256; let rgbColor = 16777215; if (method === 195 || (color.rgb >>> 24 & 255) === 195) { colorIndex = color.rgb & 255; } else if (method == 194 || (color.rgb >>> 24 & 255) === 194) { rgbColor = color.rgb & 16777215; } else if (color.index >= 1 && color.index <= 255) { colorIndex = color.index; } return { ...commonAttrs, standardFlag: flag, colorIndex, color: rgbColor, colorName: color.name, transparency: color.alpha, lineType: ltypeName, frozen: frozen != 0, off: off != 0, frozenInNew: frozenInNew != 0, locked: locked != 0, plotFlag, lineweight: linewt, plotStyleNameObjectId: "", materialObjectId: "" }; } convertLineType(item, obj) { const libredwg = this.libredwg; const commonAttrs = this.getCommonTableEntryAttrs(item, obj); const flag = libredwg.dwg_dynapi_entity_data(item, "flag"); const description = libredwg.dwg_dynapi_entity_data(item, "description"); const numDashes = libredwg.dwg_dynapi_entity_data(item, "numdashes"); const patternLen = libredwg.dwg_dynapi_entity_data(item, "pattern_len"); const dashes = libredwg.dwg_dynapi_entity_data(item, "dashes"); const dashArray = dashes ? libredwg.dwg_ptr_to_ltype_dash_array(dashes, numDashes) : []; return { ...commonAttrs, description, standardFlag: flag, numberOfLineTypes: numDashes, totalPatternLength: patternLen, pattern: this.convertLineTypePattern(dashArray) }; } convertLineTypePattern(dashes) { const patterns = []; dashes.forEach((dash) => { patterns.push({ elementLength: dash.length || 0, elementTypeFlag: dash.complex_shapecode, shapeNumber: dash.shape_flag, // TODO: convert style handle to style object id // styleObjectId: dash.style, scale: dash.scale, rotation: dash.rotation, offsetX: dash.x_offset, offsetY: dash.y_offset, text: dash.text }); }); return patterns; } convertStyle(item, obj) { const libredwg = this.libredwg; const commonAttrs = this.getCommonTableEntryAttrs(item, obj); const standardFlag = libredwg.dwg_dynapi_entity_data(item, "flag"); const widthFactor = libredwg.dwg_dynapi_entity_data(item, "width_factor"); const obliqueAngle = libredwg.dwg_dynapi_entity_data(item, "oblique_angle"); const textGenerationFlag = libredwg.dwg_dynapi_entity_data(item, "generation"); const lastHeight = libredwg.dwg_dynapi_entity_data(item, "last_height"); const font = libredwg.dwg_dynapi_entity_data(item, "font_file"); const bigFont = libredwg.dwg_dynapi_entity_data(item, "bigfont_file"); return { ...commonAttrs, standardFlag, fixedTextHeight: 0, // TODO: Set the correct value widthFactor, obliqueAngle, textGenerationFlag, lastHeight, font, bigFont }; } convertViewport(item, obj) { const libredwg = this.libredwg; const commonAttrs = this.getCommonTableEntryAttrs(item, obj); const standardFlag = libredwg.dwg_dynapi_entity_data(item, "flag"); const viewHeight = libredwg.dwg_dynapi_entity_data(item, "VIEWSIZE"); const aspectRatio = libredwg.dwg_dynapi_entity_data(item, "aspect_ratio"); const center = libredwg.dwg_dynapi_entity_data(item, "VIEWCTR"); const viewTarget = libredwg.dwg_dynapi_entity_data(item, "view_target"); const viewDirectionFromTarget = libredwg.dwg_dynapi_entity_data(item, "VIEWDIR"); const viewTwistAngle = libredwg.dwg_dynapi_entity_data(item, "view_twist"); const lensLength = libredwg.dwg_dynapi_entity_data(item, "lens_length"); const frontClippingPlane = libredwg.dwg_dynapi_entity_data(item, "front_clip_z"); const backClippingPlane = libredwg.dwg_dynapi_entity_data(item, "back_clip_z"); const viewMode = libredwg.dwg_dynapi_entity_data(item, "VIEWMODE"); const renderMode = libredwg.dwg_dynapi_entity_data(item, "render_mode"); const isDefaultLightingOn = libredwg.dwg_dynapi_entity_data(item, "use_default_lights") != 0; const defaultLightningType = libredwg.dwg_dynapi_entity_data(item, "default_lightning_type"); const brightness = libredwg.dwg_dynapi_entity_data(item, "brightness"); const contrast = libredwg.dwg_dynapi_entity_data(item, "contrast"); const ambient_color = libredwg.dwg_dynapi_entity_data(item, "ambient_color"); const lowerLeftCorner = libredwg.dwg_dynapi_entity_data(item, "lower_left"); const upperRightCorner = libredwg.dwg_dynapi_entity_data(item, "upper_right"); const circleSides = libredwg.dwg_dynapi_entity_data(item, "circle_zoom"); const ucsIconSetting = libredwg.dwg_dynapi_entity_data(item, "UCSICON"); const gridSpacing = libredwg.dwg_dynapi_entity_data(item, "GRIDUNIT"); const snapRotationAngle = libredwg.dwg_dynapi_entity_data(item, "SNAPANG"); const snapBasePoint = libredwg.dwg_dynapi_entity_data(item, "SNAPBASE"); const snapSpacing = libredwg.dwg_dynapi_entity_data(item, "SNAPUNIT"); const ucsOrigin = libredwg.dwg_dynapi_entity_data(item, "ucsorg"); const ucsXAxis = libredwg.dwg_dynapi_entity_data(item, "ucsxdir"); const ucsYAxis = libredwg.dwg_dynapi_entity_data(item, "ucsydir"); const elevation = libredwg.dwg_dynapi_entity_data(item, "ucs_elevation"); const majorGridLines = libredwg.dwg_dynapi_entity_data(item, "grid_major"); const background = libredwg.dwg_dynapi_entity_data(item, "background"); const backgroundObjectId = background ? libredwg.dwg_ref_get_id(background) ?? "" : void 0; const visualstyle = libredwg.dwg_dynapi_entity_data(item, "visualstyle"); const visualStyleObjectId = visualstyle ? libredwg.dwg_ref_get_id(visualstyle) ?? "" : void 0; return { ...commonAttrs, standardFlag, lowerLeftCorner, upperRightCorner, center, snapBasePoint, snapSpacing, gridSpacing, viewDirectionFromTarget, viewTarget, lensLength, frontClippingPlane, backClippingPlane, viewHeight, aspectRatio, snapRotationAngle, viewTwistAngle, circleSides, frozenLayers: [], // TODO: Set the correct value styleSheet: "", // TODO: Set the correct value renderMode, viewMode, ucsIconSetting, ucsOrigin, ucsXAxis, ucsYAxis, orthographicType: 0, // TODO: Set the correct value elevation, shadePlotSetting: 0, // TODO: Set the correct value majorGridLines, backgroundObjectId, // shadePlotObjectId: undefined, visualStyleObjectId, isDefaultLightingOn, defaultLightingType: defaultLightningType, brightness, contrast, // TODO: Not sure whether 'index' or 'rgb' should be used ambientColor: ambient_color.index }; } getCommonTableEntryAttrs(tio, obj) { const libredwg = this.libredwg; const object_tio = libredwg.dwg_object_get_tio(obj); const ownerhandle = libredwg.dwg_object_object_get_ownerhandle_object(object_tio); const handle = libredwg.dwg_object_get_handle_object(obj); return { handle: idToString(handle.value), ownerHandle: idToString(ownerhandle.absolute_ref), name: libredwg.dwg_dynapi_entity_data(tio, "name") }; } convertDictionary(item, obj) { const libredwg = this.libredwg; const commonAttrs = this.getCommonObjectAttrs(obj); const isHardOwner = libredwg.dwg_dynapi_entity_data(item, "is_hardowner"); const cloningFlag = libredwg.dwg_dynapi_entity_data(item, "cloning"); const numitems = libredwg.dwg_dynapi_entity_data(item, "numitems"); const itemhandles_ptr = libredwg.dwg_dynapi_entity_data(item, "itemhandles"); const itemhandles = libredwg.dwg_ptr_to_object_ref_array( itemhandles_ptr, numitems ); const texts = libredwg.dwg_object_dictionary_get_texts(obj); const entries = {}; itemhandles.forEach( (handle, index) => entries[texts[index]] = idToString(handle.absolute_ref) ); return { ...commonAttrs, isHardOwner: !!isHardOwner, cloningFlag, entries }; } convertImageDef(item, obj) { const libredwg = this.libredwg; const commonAttrs = this.getCommonObjectAttrs(obj); const size = libredwg.dwg_dynapi_entity_data(item, "image_size"); const fileName = libredwg.dwg_dynapi_entity_data(item, "file_path"); const isLoaded = libredwg.dwg_dynapi_entity_data(item, "is_loaded"); const sizeOfOnePixel = libredwg.dwg_dynapi_entity_data(item, "pixel_size"); const resolutionUnits = libredwg.dwg_dynapi_entity_data(item, "resunits"); return { ...commonAttrs, fileName, size, sizeOfOnePixel, isLoaded, resolutionUnits }; } convertLayerFilter(item, obj) { const libredwg = this.libredwg; const commonAttrs = this.getCommonObjectAttrs(obj); const numNames = libredwg.dwg_dynapi_entity_data(item, "num_names") ?? 0; const namesPtr = libredwg.dwg_dynapi_entity_data(item, "names"); const layerNames = namesPtr && numNames > 0 ? libredwg.dwg_ptr_to_wchar_string_array(namesPtr, numNames).filter((name) => name != null && name !== "") : []; return { ...commonAttrs, ...layerNames.length ? { layerNames } : {} }; } convertLayerIndex(item, obj) { const libredwg = this.libredwg; const commonAttrs = this.getCommonObjectAttrs(obj); const timeStamp = libredwg.dwg_dynapi_entity_data(item, "last_updated"); const numEntries = libredwg.dwg_dynapi_entity_data(item, "num_entries") ?? 0; const entriesPtr = libredwg.dwg_dynapi_entity_data(item, "entries"); const entrySize = libredwg.dwg_dynapi_subclass_size("LAYER_entry"); const layerNames = []; const idBufferIds = []; const idBufferEntryCounts = []; if (entriesPtr && entrySize > 0) { for (let i = 0; i < numEntries; i++) { const entryPtr = entriesPtr + i * entrySize; const name = libredwg.dwg_dynapi_subclass_data( entryPtr, "LAYER_entry", "name" ); layerNames.push(name ?? ""); const handleRef = libredwg.dwg_dynapi_subclass_data( entryPtr, "LAYER_entry", "handle" ); idBufferIds.push(handleRef ? libredwg.dwg_ref_get_id(handleRef) ?? "" : ""); idBufferEntryCounts.push( libredwg.dwg_dynapi_subclass_data( entryPtr, "LAYER_entry", "numlayers" ) ?? 0 ); } } return { ...commonAttrs, ...timeStamp != null ? { timeStamp } : {}, ...layerNames.length ? { layerNames } : {}, ...idBufferIds.length ? { idBufferIds } : {}, ...idBufferEntryCounts.length ? { idBufferEntryCounts } : {} }; } convertLayout(item, obj) { const libredwg = this.libredwg; const commonAttrs = this.getCommonObjectAttrs(obj); const layoutName = libredwg.dwg_dynapi_entity_data(item, "layout_name"); const tabOrder = libredwg.dwg_dynapi_entity_data(item, "tab_order"); const controlFlag = libredwg.dwg_dynapi_entity_data(item, "layout_flags"); const insertionPoint = libredwg.dwg_dynapi_entity_data(item, "INSBASE"); const minLimit = libredwg.dwg_dynapi_entity_data(item, "LIMMIN"); const maxLimit = libredwg.dwg_dynapi_entity_data(item, "LIMMAX"); const ucsOrigin = libredwg.dwg_dynapi_entity_data(item, "UCSORG"); const ucsXAxis = libredwg.dwg_dynapi_entity_data(item, "UCSXDIR"); const ucsYAxis = libredwg.dwg_dynapi_entity_data(item, "UCSYDIR"); const orthographicType = libredwg.dwg_dynapi_entity_data(item, "UCSORTHOVIEW"); const minExtent = libredwg.dwg_dynapi_entity_data(item, "EXTMIN"); const maxExtent = libredwg.dwg_dynapi_entity_data(item, "EXTMAX"); const elevation = libredwg.dwg_dynapi_entity_data(item, "ucs_elevation"); const block_header_ref = libredwg.dwg_dynapi_entity_data(item, "block_header"); const paperSpaceTableId = libredwg.dwg_ref_get_id(block_header_ref) ?? ""; const active_viewport_ref = libredwg.dwg_dynapi_entity_data(item, "active_viewport"); const viewportId = libredwg.dwg_ref_get_id(active_viewport_ref) ?? ""; const named_ucs_ref = libredwg.dwg_dynapi_entity_data(item, "named_ucs"); const namedUcsId = named_ucs_ref ? libredwg.dwg_ref_get_id(named_ucs_ref) ?? "" : void 0; return { ...commonAttrs, layoutName, controlFlag, tabOrder, minLimit, maxLimit, insertionPoint, minExtent, maxExtent, elevation, ucsOrigin, ucsXAxis, ucsYAxis, orthographicType, paperSpaceTableId, viewportId, namedUcsId, // orthographicUcsId?: string; shadePlotId: "" // TODO: Set the correct value }; } convertMLeaderStyle(item, obj) { const libredwg = this.libredwg; const commonAttrs = this.getCommonObjectAttrs(obj); const objectVal = (field) => libredwg.dwg_dynapi_entity_data(item, field); const refToId = (ref) => libredwg.dwg_ref_get_id(ref); const asBool = (value) => value > 0; const mleaderColor = (color) => color != null ? dwgColorToMLeaderRawColor(color) : void 0; return { ...commonAttrs, subclassMarker: "AcDbMLeaderStyle", unknown1: objectVal("class_version"), contentType: objectVal("content_type"), drawMLeaderOrderType: objectVal("mleader_order"), drawLeaderOrderType: objectVal("leader_order"), maxLeaderSegmentPoints: objectVal("max_points"), firstSegmentAngleConstraint: objectVal("first_seg_angle"), secondSegmentAngleConstraint: objectVal("second_seg_angle"), leaderLineType: objectVal("type"), leaderLineColor: mleaderColor(objectVal("line_color")), leaderLineTypeId: refToId(objectVal("line_type")), leaderLineWeight: objectVal("linewt"), landingEnabled: asBool(objectVal("has_landing")), landingGap: objectVal("landing_gap"), doglegEnabled: asBool(objectVal("has_dogleg")), doglegLength: objectVal("landing_dist"), description: objectVal("description"), arrowheadId: refToId(objectVal("arrow_head")), arrowheadSize: objectVal("arrow_head_size"), defaultMTextContents: objectVal("text_default"), textStyleId: refToId(objectVal("text_style")), textLeftAttachmentType: objectVal("attach_left"), textAngleType: objectVal("text_angle_type"), textAlignmentType: objectVal("text_align_type"), textRightAttachmentType: objectVal("attach_right"), textColor: mleaderColor(objectVal("text_color")), textHeight: objectVal("text_height"), textFrameEnabled: asBool(objectVal("has_text_frame")), textAlignAlwaysLeft: asBool(objectVal("text_always_left")), alignSpace: objectVal("align_space"), blockContentId: refToId(objectVal("block")), blockContentColor: mleaderColor(objectVal("block_color")), blockContentScale: objectVal("block_scale"), blockContentScaleEnabled: asBool(objectVal("use_block_scale")), blockContentRotation: objectVal("block_rotation"), blockContentRotationEnabled: asBool(objectVal("use_block_rotation")), blockContentConnectionType: objectVal("block_connection"), scale: objectVal("scale"), overwritePropertyValue: asBool(objectVal("is_changed")), annotative: asBool(objectVal("is_annotative")), breakGapSize: objectVal("break_size"), textAttachmentDirection: objectVal("attach_dir"), bottomTextAttachmentDirection: objectVal("attach_bottom"), topTextAttachmentDirection: objectVal("attach_top"), unknown2: asBool(objectVal("text_extended")) }; } convertSpatialFilter(item, obj) { const libredwg = this.libredwg; const commonAttrs = this.getCommonObjectAttrs(obj); const origin = libredwg.dwg_dynapi_entity_data(item, "origin"); const numberOfPointsOnClipBoundary = libredwg.dwg_dynapi_entity_data(item, "num_clip_verts"); const clip_verts_ptr = libredwg.dwg_dynapi_entity_data(item, "clip_verts"); const vertices = libredwg.dwg_ptr_to_point2d_array( clip_verts_ptr, numberOfPointsOnClipBoundary ); const extrusionDirection = libredwg.dwg_dynapi_entity_data(item, "extrusion"); const clipBoundaryVisible = libredwg.dwg_dynapi_entity_data(item, "display_boundary_on"); const frontClippingPlaneFlag = libredwg.dwg_dynapi_entity_data(item, "front_clip_on"); const frontClippingPlaneDistance = libredwg.dwg_dynapi_entity_data(item, "front_clip_z"); const backClippingPlaneFlag = libredwg.dwg_dynapi_entity_data(item, "back_clip_on"); const backClippingPlaneDistance = libredwg.dwg_dynapi_entity_data(item, "back_clip_z"); const transform_ptr = libredwg.dwg_dynapi_entity_data(item, "transform"); const matrix = libredwg.dwg_ptr_to_double_array(transform_ptr, 12); const inverse_transform_ptr = libredwg.dwg_dynapi_entity_data(item, "inverse_transform"); const invertBlockMatrix = libredwg.dwg_ptr_to_double_array( inverse_transform_ptr, 12 ); return { ...commonAttrs, origin, numberOfPointsOnClipBoundary, vertices, extrusionDirection, clipBoundaryVisible: !!clipBoundaryVisible, frontClippingPlaneFlag: !!frontClippingPlaneFlag, frontClippingPlaneDistance, backClippingPlaneFlag: !!backClippingPlaneFlag, backClippingPlaneDistance, matrix, invertBlockMatrix }; } convertXRecord(item, obj) { const libredwg = this.libredwg; const commonAttrs = this.getCommonObjectAttrs(obj); const cloning = libredwg.dwg_dynapi_entity_data(item, "cloning"); const data = libredwg.dwg_object_xrecord_get_xdata(item) ?? []; const objectObj = libredwg.dwg_object_get_tio(obj); const xdic = objectObj ? libredwg.dwg_object_object_get_xdicobjhandle_object(objectObj) : null; const extensionDictionary = xdic && xdic.absolute_ref ? idToString(xdic.absolute_ref) : void 0; return { ...commonAttrs, ...cloning != null ? { cloning } : {}, ...extensionDictionary ? { extensionDictionary } : {}, data }; } getCommonObjectAttrs(obj) { const libredwg = this.libredwg; const object_tio = libredwg.dwg_object_get_tio(obj); const ownerhandle = libredwg.dwg_object_object_get_ownerhandle_object(object_tio); const handle = libredwg.dwg_object_get_handle_object(obj); return { handle: idToString(handle.value), ownerHandle: idToString(ownerhandle.absolute_ref) }; } } class Box2D { constructor() { __publicField(this, "min"); __publicField(this, "max"); __publicField(this, "valid"); this.min = { x: Infinity, y: Infinity }; this.max = { x: -Infinity, y: -Infinity }; this.valid = false; } /** * Expands the bounding box to include a given point. * * @param point - The point to include in the bounding box. * @returns This bounding box after expansion. */ expandByPoint(point) { this.min.x = Math.min(this.min.x, point.x); this.min.y = Math.min(this.min.y, point.y); this.max.x = Math.max(this.max.x, point.x); this.max.y = Math.max(this.max.y, point.y); this.valid = true; return this; } /** * Applies a scaling and translation transformation to this bounding box. * * @param scale - The scaling factors in x and y directions. * @param translation - The translation offsets in x and y directions. * @returns This bounding box after transformation. */ transform(scale, translation) { const corners = this.getCorners().map((p) => ({ x: p.x * scale.x + translation.x, y: p.y * scale.y + translation.y })); this.reset(); for (const pt of corners) { this.expandByPoint(pt); } return this; } /** * Applies a rotation around a specific point to this bounding box. * * @param angleInRad - The angle of rotation in radians. * @param point - The center of rotation. * @returns This bounding box after rotation. */ rotate(angleInRad, point) { const cos = Math.cos(angleInRad); const sin = Math.sin(angleInRad); const corners = this.getCorners().map((p) => { const dx = p.x - point.x; const dy = p.y - point.y; return { x: point.x + dx * cos - dy * sin, y: point.y + dx * sin + dy * cos }; }); this.reset(); for (const pt of corners) { this.expandByPoint(pt); } return this; } /** * Creates a deep copy of this bounding box. * * @returns A new instance of Box2D with the same properties. */ clone() { const box = new Box2D(); box.min = { x: this.min.x, y: this.min.y }; box.max = { x: this.max.x, y: this.max.y }; box.valid = this.valid; return box; } /** * Resets this bounding box to its initial unbounded state. */ reset() { this.min = { x: Infinity, y: Infinity }; this.max = { x: -Infinity, y: -Infinity }; this.valid = false; } /** * Retrieves the four corner points of the bounding box. * * @returns An array of corner points in the order: * bottom-left, top-left, bottom-right, top-right. */ getCorners() { return [ { x: this.min.x, y: this.min.y }, { x: this.min.x, y: this.max.y }, { x: this.max.x, y: this.min.y }, { x: this.max.x, y: this.max.y } ]; } } function evaluateBSpline(t, degree, points, knots, weights) { const n = points.length; if (n === 0) throw new Error("points must not be empty"); const d = points[0].length; if (t < 0 || t > 1) { throw new Error(`t out of bounds [0,1]: ${t}`); } if (degree < 1) { throw new Error("degree must be at least 1 (linear)"); } if (degree > n - 1) { throw new Error("degree must be less than or equal to point count - 1"); } const weightsSafe = weights ?? new Array(n).fill(1); const knotsSafe = knots ?? (() => { const result2 = []; for (let i = 0; i < n + degree + 1; i++) { result2.push(i); } return result2; })(); if (knotsSafe.length !== n + degree + 1) { throw new Error("bad knot vector length"); } const domain = [degree, knotsSafe.length - 1 - degree]; const low = knotsSafe[domain[0]]; const high = knotsSafe[domain[1]]; t = t * (high - low) + low; t = Math.max(t, low); t = Math.min(t, high); let s = domain[0]; for (; s < domain[1]; s++) { if (t >= knotsSafe[s] && t <= knotsSafe[s + 1]) { break; } } const v = new Array(n); for (let i = 0; i < n; i++) { v[i] = new Array(d + 1); for (let j = 0; j < d; j++) { v[i][j] = points[i][j] * weightsSafe[i]; } v[i][d] = weightsSafe[i]; } for (let l = 1; l <= degree + 1; l++) { for (let i = s; i > s - degree - 1 + l; i--) { const denom = knotsSafe[i + degree + 1 - l] - knotsSafe[i]; const alpha = denom === 0 ? 0 : (t - knotsSafe[i]) / denom; for (let j = 0; j < d + 1; j++) { v[i][j] = (1 - alpha) * v[i - 1][j] + alpha * v[i][j]; } } } const result = new Array(d); for (let i = 0; i < d; i++) { result[i] = round10(v[s][i] / v[s][d], -9); } return result; } function round10(value, exp) { if (isNaN(value) || !Number.isInteger(exp)) { return NaN; } const [base, exponent = "0"] = value.toString().split("e"); const shifted = Math.round(Number(`${base}e${+exponent - exp}`)); const [shiftedBase, shiftedExp = "0"] = shifted.toString().split("e"); return Number(`${shiftedBase}e${+shiftedExp + exp}`); } const _colorKeywords = { aliceblue: 15792383, antiquewhite: 16444375, aqua: 65535, aquamarine: 8388564, azure: 15794175, beige: 16119260, bisque: 16770244, black: 0, blanchedalmond: 16772045, blue: 255, blueviolet: 9055202, brown: 10824234, burlywood: 14596231, cadetblue: 6266528, chartreuse: 8388352, chocolate: 13789470, coral: 16744272, cornflowerblue: 6591981, cornsilk: 16775388, crimson: 14423100, cyan: 65535, darkblue: 139, darkcyan: 35723, darkgoldenrod: 12092939, darkgray: 11119017, darkgreen: 25600, darkkhaki: 12433259, darkmagenta: 9109643, darkolivegreen: 5597999, darkorange: 16747520, darkorchid: 10040012, darkred: 9109504, darksalmon: 15308410, darkseagreen: 9419919, darkslateblue: 4734347, darkslategray: 3100495, darkturquoise: 52945, darkviolet: 9699539, deeppink: 16716947, deepskyblue: 49151, dimgrey: 6908265, dodgerblue: 2003199, firebrick: 11674146, floralwhite: 16775920, forestgreen: 2263842, fuchsia: 16711935, gainsboro: 14474460, ghostwhite: 16316671, gold: 16766720, goldenrod: 14329120, gray: 8421504, green: 32768, greenyellow: 11403055, grey: 8421504, honeydew: 15794160, hotpink: 16738740, indianred: 13458524, indigo: 4915330, ivory: 16777200, khaki: 15787660, lavender: 15132410, lavenderblush: 16773365, lawngreen: 8190976, lemonchiffon: 16775885, lightblue: 11393254, lightcoral: 15761536, lightcyan: 14745599, lightgoldenrodyellow: 16448210, lightgray: 13882323, lightgreen: 9498256, lightgrey: 13882323, lightpink: 16758465, lightsalmon: 16752762, lightseagreen: 2142890, lightskyblue: 8900346, lightslategray: 7833753, lightslategrey: 7833753, lightsteelblue: 11584734, lightyellow: 16777184, lime: 65280, limegreen: 3329330, linen: 16445670, magenta: 16711935, maroon: 8388608, mediumaquamarine: 6737322, mediumblue: 205, mediumorchid: 12211667, mediumpurple: 9662683, mediumseagreen: 3978097, mediumslateblue: 8087790, mediumspringgreen: 64154, mediumturquoise: 4772300, mediumvioletred: 13047173, midnightblue: 1644912, mintcream: 16121850, mistyrose: 16770273, moccasin: 16770229, navajowhite: 16768685, navy: 128, oldlace: 16643558, olive: 8421376, olivedrab: 7048739, orange: 16753920, orangered: 16729344, orchid: 14315734, palegoldenrod: 15657130, palegreen: 10025880, paleturquoise: 11529966, palevioletred: 14381203, papayawhip: 16773077, peachpuff: 16767673, peru: 13468991, pink: 16761035, plum: 14524637, powderblue: 11591910, purple: 8388736, rebeccapurple: 6697881, red: 16711680, rosybrown: 12357519, royalblue: 4286945, saddlebrown: 9127187, salmon: 16416882, sandybrown: 16032864, seagreen: 3050327, seashell: 16774638, sienna: 10506797, silver: 12632256, skyblue: 8900331, slateblue: 6970061, slategrey: 7372944, snow: 16775930, springgreen: 65407, steelblue: 4620980, tan: 13808780, teal: 32896, thistle: 14204888, tomato: 16737095, turquoise: 4251856, violet: 15631086, wheat: 16113331, white: 16777215, whitesmoke: 16119285, yellow: 16776960, yellowgreen: 10145074 }; const AUTO_CAD_COLOR_INDEX = [ 0, 16711680, 16776960, 65280, 65535, 255, 16711935, 16777215, 8421504, 12632256, 16711680, 16744319, 13369344, 13395558, 10027008, 10046540, 8323072, 8339263, 4980736, 4990502, 16727808, 16752511, 13382400, 13401958, 10036736, 10051404, 8331008, 8343359, 4985600, 4992806, 16744192, 16760703, 13395456, 13408614, 10046464, 10056268, 8339200, 8347455, 4990464, 4995366, 16760576, 16768895, 13408512, 13415014, 10056192, 10061132, 8347392, 8351551, 4995328, 4997670, 16776960, 16777087, 13421568, 13421670, 10000384, 10000460, 8355584, 8355647, 5000192, 5000230, 12582656, 14679935, 10079232, 11717734, 7510016, 8755276, 6258432, 7307071, 3755008, 4344870, 8388352, 12582783, 6736896, 10079334, 5019648, 7510092, 4161280, 6258495, 2509824, 3755046, 4194048, 10485631, 3394560, 8375398, 2529280, 6264908, 2064128, 5209919, 1264640, 3099686, 65280, 8388479, 52224, 6736998, 38912, 5019724, 32512, 4161343, 19456, 2509862, 65343, 8388511, 52275, 6737023, 38950, 5019743, 32543, 4161359, 19475, 2509871, 65407, 8388543, 52326, 6737049, 38988, 5019762, 32575, 4161375, 19494, 2509881, 65471, 8388575, 52377, 6737074, 39026, 5019781, 32607, 4161391, 19513, 2509890, 65535, 8388607, 52428, 6737100, 39064, 5019800, 32639, 4161407, 19532, 2509900, 49151, 8380415, 39372, 6730444, 29336, 5014936, 24447, 4157311, 14668, 2507340, 32767, 8372223, 26316, 6724044, 19608, 5010072, 16255, 4153215, 9804, 2505036, 16383, 8364031, 13260, 6717388, 9880, 5005208, 8063, 4149119, 4940, 2502476, 255, 8355839, 204, 6710988, 152, 5000344, 127, 4145023, 76, 2500172, 4129023, 10452991, 3342540, 8349388, 2490520, 6245528, 2031743, 5193599, 1245260, 3089996, 8323327, 12550143, 6684876, 10053324, 4980888, 7490712, 4128895, 6242175, 2490444, 3745356, 12517631, 14647295, 10027212, 11691724, 7471256, 8735896, 6226047, 7290751, 3735628, 4335180, 16711935, 16744447, 13369548, 13395660, 9961624, 9981080, 8323199, 8339327, 4980812, 4990540, 16711871, 16744415, 13369497, 13395634, 9961586, 9981061, 8323167, 8339311, 4980793, 4990530, 16711807, 16744383, 13369446, 13395609, 9961548, 9981042, 8323135, 8339295, 4980774, 4990521, 16711743, 16744351, 13369395, 13395583, 9961510, 9981023, 8323103, 8339279, 4980755, 4990511, 3355443, 5987163, 8684676, 11382189, 14079702, 16777215, 0 ]; function clamp(value, min, max) { return Math.max(min, Math.min(max, value)); } const _Color = class _Color { constructor() { __publicField(this, "_colorIndex"); __publicField(this, "_color"); __publicField(this, "_colorName"); this._colorIndex = 256; this._color = null; this._colorName = null; } get color() { return this._color; } set color(value) { if (value == null) { this._color = null; } else { this._color = Math.round(clamp(value, 0, 256 * 256 * 256 - 1)); this._colorIndex = this.getColorIndexByValue(this._color); this._colorName = this.getColorNameByValue(this._color); } } get hexColor() { if (this._color && this._color > 0 && this._color <= 16777215) { let hexString = this._color.toString(16).toUpperCase(); while (hexString.length < 6) { hexString = "0" + hexString; } return `0x${hexString}`; } return ""; } get cssColor() { return `rgb(${this.red},${this.green},${this.blue})`; } get red() { return this.color != null ? this.color >> 16 & 255 : null; } get green() { return this.color != null ? this.color >> 8 & 255 : null; } get blue() { return this.color != null ? this.color & 255 : null; } /** * AutoCAD color index value. The index value will be in the range 0 to 256. 0 and 256 are special values. * If value less than 0 is set, 0 will be used. If value greater than 256 is set, 256 will be used. * - 0 indicates that the entity uses the color of the BlockReference that's displaying it. If the entity * is not displayed through a block reference (for example, it is directly owned by the model space * block table record) and its color is 0, then it will display as though its color were 7. * - 256 indicates that the entity uses the color specified in the layer table record it references. */ get colorIndex() { return this._colorIndex; } set colorIndex(value) { if (value == null) { this._colorIndex = null; } else { this._colorIndex = clamp(value, 0, 256); this._color = AUTO_CAD_COLOR_INDEX[value]; this._colorName = this.getColorNameByValue(this._color); } } get colorName() { return this._colorName; } set colorName(value) { if (value) { const color = _colorKeywords[value.toLowerCase()]; if (color !== void 0) { this._colorName = value; this._color = color; this._colorIndex = this.getColorIndexByValue(this._color); } else { console.warn("Unknown color: " + value); } } else { this._colorName = null; } } get hasColorName() { return this._colorName == null; } get hasColorIndex() { return this._colorIndex == null; } get isByLayer() { return this.colorIndex == 256; } setByLayer() { this.colorIndex = 256; return this; } get isByBlock() { return this.colorIndex == 0; } setByBlock() { this.colorIndex = 0; return this; } setScalar(scalar) { this.setRGB(scalar, scalar, scalar); return this; } setRGB(r, g, b) { const red = Math.round(clamp(r, 0, 255)); const green = Math.round(clamp(g, 0, 255)); const blue = Math.round(clamp(b, 0, 255)); this.color = (red << 16) + (green << 8) + blue; return this; } setColorName(style) { const color = _colorKeywords[style.toLowerCase()]; if (color !== void 0) { this.color = color; } else { console.warn("Unknown color " + style); } return this; } clone() { const clonedColor = new _Color(); clonedColor.colorIndex = this.colorIndex; clonedColor.color = this.color; clonedColor._colorName = this._colorName; return this; } copy(color) { this.colorIndex = color.colorIndex; this.color = color.color; this._colorName = color._colorName; return this; } equals(c) { return c.color == this.color && c.colorIndex == this.colorIndex && c._colorName == this._colorName; } toString() { if (this.isByLayer) { return "ByLayer"; } else if (this.isByBlock) { return "ByBlock"; } else if (this.colorName) { return this.colorName; } else { return this.hexColor; } } getColorNameByValue(target) { for (const [key, value] of Object.entries(_colorKeywords)) { if (value === target) { return key; } } return null; } getColorIndexByValue(target) { const length = AUTO_CAD_COLOR_INDEX.length - 1; for (let index = 1; index < length; ++index) { if (AUTO_CAD_COLOR_INDEX[index] === target) { return index; } } return null; } }; __publicField(_Color, "NAMES", _colorKeywords); let Color = _Color; class Vector2D { constructor(x, y) { __publicField(this, "x"); __publicField(this, "y"); this.x = x; this.y = y; } add(v) { return new Vector2D(this.x + v.x, this.y + v.y); } sub(v) { return new Vector2D(this.x - v.x, this.y - v.y); } multiply(scalar) { return new Vector2D(this.x * scalar, this.y * scalar); } length() { return Math.sqrt(this.x ** 2 + this.y ** 2); } norm() { const len = this.length(); if (len === 0) return new Vector2D(0, 0); return new Vector2D(this.x / len, this.y / len); } } function createPolylineArcPoints(from, to, bulge, resolution = 5) { let theta; let a; let b; if (bulge < 0) { theta = Math.atan(-bulge) * 4; a = new Vector2D(from.x, from.y); b = new Vector2D(to.x, to.y); } else { theta = Math.atan(bulge) * 4; a = new Vector2D(to.x, to.y); b = new Vector2D(from.x, from.y); } const ab = b.sub(a); const lengthAB = ab.length(); const c = a.add(ab.multiply(0.5)); const lengthCD = Math.abs(lengthAB / 2 / Math.tan(theta / 2)); const normAB = ab.norm(); const rotated = new Vector2D( normAB.x * Math.cos(Math.PI / 2) - normAB.y * Math.sin(Math.PI / 2), normAB.y * Math.cos(Math.PI / 2) + normAB.x * Math.sin(Math.PI / 2) ); const d = theta < Math.PI ? c.add(rotated.multiply(-lengthCD)) : c.add(rotated.multiply(lengthCD)); const startAngle = Math.atan2(b.y - d.y, b.x - d.x) / Math.PI * 180; let endAngle = Math.atan2(a.y - d.y, a.x - d.x) / Math.PI * 180; if (endAngle < startAngle) { endAngle += 360; } const r = b.sub(d).length(); const startInter = Math.floor(startAngle / resolution) * resolution + resolution; const endInter = Math.ceil(endAngle / resolution) * resolution - resolution; const points = []; for (let i = startInter; i <= endInter; i += resolution) { const angleRad = i / 180 * Math.PI; const point = d.add( new Vector2D(Math.cos(angleRad) * r, Math.sin(angleRad) * r) ); points.push(point); } if (bulge < 0) { points.reverse(); } return points; } function interpolatePolyline(entity, closed = false) { let points = []; const vertices = entity.vertices.map((v) => { return { x: v.x, y: v.y, bulge: v.bulge }; }); if (closed) { vertices.push(vertices[0]); } for (let i = 0, len = vertices.length; i < len - 1; ++i) { const from = vertices[i]; const to = vertices[i + 1]; points.push(from); if (vertices[i].bulge) { points = points.concat( createPolylineArcPoints(from, to, entity.vertices[i].bulge) ); } if (i === len - 2) { points.push(to); } } return points; } class SvgConverter { constructor() { __publicField(this, "blockMap", /* @__PURE__ */ new Map()); } rotate(point, angle) { const cos = Math.cos(angle); const sin = Math.sin(angle); return { x: point.x * cos - point.y * sin, y: point.x * sin + point.y * cos }; } /** * Interpolates a B-spline curve and returns the resulting polyline. * * @param controlPoints The control points of the B-spline. * @param degree The degree of the B-spline. * @param knots The knot vector. * @param interpolationsPerSplineSegment Number of interpolated points per spline segment. * @param weights Optional weight vector for rational B-splines. * @returns An array of interpolated 2D points representing the polyline. */ interpolateBSpline(controlPoints, degree, knots, interpolationsPerSplineSegment = 25, weights) { const polyline = []; const controlPointsForLib = controlPoints.map( (p) => [p.x, p.y] ); const segmentTs = [knots[degree]]; const domain = [ knots[degree], knots[knots.length - 1 - degree] ]; for (let k = degree + 1; k < knots.length - degree; ++k) { if (segmentTs[segmentTs.length - 1] !== knots[k]) { segmentTs.push(knots[k]); } } for (let i = 1; i < segmentTs.length; ++i) { const uMin = segmentTs[i - 1]; const uMax = segmentTs[i]; for (let k = 0; k <= interpolationsPerSplineSegment; ++k) { const u = k / interpolationsPerSplineSegment * (uMax - uMin) + uMin; let t = (u - domain[0]) / (domain[1] - domain[0]); t = Math.max(0, Math.min(1, t)); const p = evaluateBSpline( t, degree, controlPointsForLib, knots, weights ); polyline.push({ x: p[0], y: p[1] }); } } return polyline; } addFlipXIfApplicable(entity, { bbox, element }) { if ("extrusionDirection" in entity && entity.extrusionDirection.z === -1) { return { bbox: new Box2D().expandByPoint({ x: -bbox.min.x, y: bbox.min.y }).expandByPoint({ x: -bbox.max.x, y: bbox.max.y }), element: `${element}` }; } else { return { bbox, element }; } } line(entity) { const bbox = new Box2D().expandByPoint({ x: entity.startPoint.x, y: entity.startPoint.y }).expandByPoint({ x: entity.endPoint.x, y: entity.endPoint.y }); const element = ``; return { bbox, element }; } ray(entity) { const scale = 1e4; const firstPoint = entity.firstPoint; const secondPoint = { x: firstPoint.x + entity.unitDirection.x * scale, y: firstPoint.y + entity.unitDirection.y * scale }; const bbox = new Box2D().expandByPoint(firstPoint).expandByPoint(secondPoint); const element = ``; return { bbox, element }; } xline(entity) { const scale = 1e4; const firstPoint = { x: entity.firstPoint.x - entity.unitDirection.x * scale, y: entity.firstPoint.y - entity.unitDirection.y * scale }; const secondPoint = { x: entity.firstPoint.x + entity.unitDirection.x * scale, y: entity.firstPoint.y + entity.unitDirection.y * scale }; const bbox = new Box2D().expandByPoint(firstPoint).expandByPoint(secondPoint); const element = ``; return { bbox, element }; } extractMTextLines(mtext) { return mtext.replace( /\\U\+([0-9A-Fa-f]{4})/g, (_, hex) => String.fromCharCode(parseInt(hex, 16)) ).replace(/\\P/g, "\n").replace(/\\[LOlo]/g, "").replace(/\\[Ff][^;\\]*?(?:\|[^;\\]*)*;/g, "").replace(/\\[KkCcHhWwTtAa][^;\\]*;?/g, "").replace(/\\[a-zA-Z]+;?/g, "").replace(/%%(d|p|c|%)/gi, "").replace(/\\\\/g, "\\").replace(/\\~/g, " ").replace(/[{}]/g, "").split("\n").map((line) => line.trim()).filter((line) => line.length > 0); } lines(lines, fontsize, insertionPoint, extentsWidth, anchor = "start") { const bbox = new Box2D().expandByPoint({ x: insertionPoint.x, y: insertionPoint.y }).expandByPoint({ x: insertionPoint.x + extentsWidth, y: insertionPoint.y - lines.length * fontsize * 1.5 }); const texts = lines.map((line, index) => { const x = insertionPoint.x; const y = insertionPoint.y - index * fontsize * 1.5; const transform = `translate(${x},${y}) scale(1,-1) translate(${-x},${-y})`; return `${line}`; }); return { bbox, element: texts.join("\n") }; } mtext(entity) { const fontsize = entity.textHeight; const insertionPoint = entity.insertionPoint; const lines = this.extractMTextLines(entity.text); const attachmentPoint = entity.attachmentPoint; let anchor = "start"; if (attachmentPoint == DwgAttachmentPoint.BottomCenter || attachmentPoint == DwgAttachmentPoint.MiddleCenter || attachmentPoint == DwgAttachmentPoint.TopCenter) { anchor = "middle"; } else if (attachmentPoint == DwgAttachmentPoint.BottomRight || attachmentPoint == DwgAttachmentPoint.MiddleRight || attachmentPoint == DwgAttachmentPoint.TopRight) { anchor = "end"; } return this.lines( lines, fontsize, insertionPoint, entity.extentsWidth, anchor ); } table(entity) { const { rowCount, columnCount, rowHeightArr, columnWidthArr, startPoint, cells } = entity; const originX = startPoint.x; const originY = startPoint.y; const cellRects = []; for (let row = 0, y = originY; row < rowCount; row++) { const height = rowHeightArr[row]; let x = originX; for (let col = 0; col < columnCount; col++) { const cellIndex = row * columnCount + col; const cell = cells[cellIndex]; const width = columnWidthArr[col]; cellRects.push({ x, y, width, height, cell, row, col }); x += width; } y += height; } const svgElements = cellRects.map(({ x, y, width, height, cell }) => { const lines = []; if (cell.topBorderVisibility) lines.push( `` ); if (cell.bottomBorderVisibility) lines.push( `` ); if (cell.leftBorderVisibility) lines.push( `` ); if (cell.rightBorderVisibility) lines.push( `` ); const textX = x + width / 2; const textY = y + height / 2 + cell.textHeight / 3; const text = `${cell.text}`; return [...lines, text].join("\n"); }).join("\n"); const totalWidth = columnWidthArr.reduce((sum, w) => sum + w, 0); const totalHeight = rowHeightArr.reduce((sum, h) => sum + h, 0); const bbox = new Box2D().expandByPoint({ x: originX, y: originY }).expandByPoint({ x: originX + totalWidth, y: originY + totalHeight }); const svg = ` ${svgElements} `.trim(); return { bbox, element: svg }; } text(entity) { const fontsize = entity.textHeight; const insertionPoint = entity.startPoint; const lines = [entity.text]; let extentsWidth = entity.endPoint.x - entity.endPoint.x; if (entity.halign == 0) { extentsWidth = entity.text.length * fontsize + entity.startPoint.x; } let anchor = "start"; if (entity.halign == DwgTextHorizontalAlign.CENTER) { anchor = "middle"; } else if (entity.halign == DwgTextHorizontalAlign.RIGHT) { anchor = "end"; } return this.lines(lines, fontsize, insertionPoint, extentsWidth, anchor); } vertices(vertices, closed = false) { const bbox = vertices.reduce( (acc, point) => acc.expandByPoint(point), new Box2D() ); let d = vertices.reduce((acc, point, i) => { acc += i === 0 ? "M" : "L"; acc += point.x + "," + point.y; return acc; }, ""); if (closed) { d += "Z"; } return { bbox, element: `` }; } circle(entity) { const bbox0 = new Box2D().expandByPoint({ x: entity.center.x + entity.radius, y: entity.center.y + entity.radius }).expandByPoint({ x: entity.center.x - entity.radius, y: entity.center.y - entity.radius }); const element0 = ``; return { bbox: bbox0, element: element0 }; } ellipseOrArc(cx, cy, majorX, majorY, axisRatio, startAngle, endAngle) { const rx = Math.sqrt(majorX * majorX + majorY * majorY); const ry = axisRatio * rx; const rotationAngle = -Math.atan2(-majorY, majorX); const bbox = this.bboxEllipseOrArc( cx, cy, majorX, majorY, axisRatio, startAngle, endAngle ); if (Math.abs(startAngle - endAngle) < 1e-9 || Math.abs(startAngle - endAngle + Math.PI * 2) < 1e-9) { const element = ``; return { bbox, element }; } else { const startOffset = this.rotate( { x: Math.cos(startAngle) * rx, y: Math.sin(startAngle) * ry }, rotationAngle ); const startPoint = { x: cx + startOffset.x, y: cy + startOffset.y }; const endOffset = this.rotate( { x: Math.cos(endAngle) * rx, y: Math.sin(endAngle) * ry }, rotationAngle ); const endPoint = { x: cx + endOffset.x, y: cy + endOffset.y }; const adjustedEndAngle = endAngle < startAngle ? endAngle + Math.PI * 2 : endAngle; const largeArcFlag = adjustedEndAngle - startAngle < Math.PI ? 0 : 1; const d = `M ${startPoint.x} ${startPoint.y} A ${rx} ${ry} ${rotationAngle / Math.PI * 180} ${largeArcFlag} 1 ${endPoint.x} ${endPoint.y}`; const element = ``; return { bbox, element }; } } bboxEllipseOrArc(cx, cy, majorX, majorY, axisRatio, startAngle, endAngle) { while (startAngle < 0) startAngle += Math.PI * 2; while (endAngle <= startAngle) endAngle += Math.PI * 2; const angles = []; if (Math.abs(majorX) < 1e-12 || Math.abs(majorY) < 1e-12) { for (let i = 0; i < 4; i++) { angles.push(i / 2 * Math.PI); } } else { angles[0] = Math.atan(-majorY * axisRatio / majorX) - Math.PI; angles[1] = Math.atan(majorX * axisRatio / majorY) - Math.PI; angles[2] = angles[0] - Math.PI; angles[3] = angles[1] - Math.PI; } for (let i = 4; i >= 0; i--) { while (angles[i] < startAngle) angles[i] += Math.PI * 2; if (angles[i] > endAngle) { angles.splice(i, 1); } } angles.push(startAngle); angles.push(endAngle); const pts = angles.map((a) => ({ x: Math.cos(a), y: Math.sin(a) })); const M = [ [majorX, -majorY * axisRatio], [majorY, majorX * axisRatio] ]; const rotatedPts = pts.map((p) => ({ x: p.x * M[0][0] + p.y * M[0][1] + cx, y: p.x * M[1][0] + p.y * M[1][1] + cy })); const bbox = rotatedPts.reduce( (acc, p) => { acc.expandByPoint(p); return acc; }, new Box2D() ); return bbox; } ellipse(entity) { const { bbox: bbox0, element: element0 } = this.ellipseOrArc( entity.center.x, entity.center.y, entity.majorAxisEndPoint.x, entity.majorAxisEndPoint.y, entity.axisRatio, entity.startAngle, entity.endAngle ); return { bbox: bbox0, element: element0 }; } arc(entity) { const { bbox: bbox0, element: element0 } = this.ellipseOrArc( entity.center.x, entity.center.y, entity.radius, 0, 1, entity.startAngle, entity.endAngle ); return { bbox: bbox0, element: element0 }; } dimension(entity) { const block = this.blockMap.get(entity.name); if (block) { return { bbox: block.bbox, element: `` }; } return null; } insert(entity) { const block = this.blockMap.get(entity.name); if (block) { const insertionPoint = entity.insertionPoint; const rotation = entity.rotation * (180 / Math.PI); const transform = `translate(${insertionPoint.x},${insertionPoint.y}) rotate(${rotation}) scale(${entity.xScale},${entity.yScale})`; const newBBox = block.bbox.clone().transform( { x: entity.xScale, y: entity.yScale }, { x: insertionPoint.x, y: insertionPoint.y } ).rotate(entity.rotation, insertionPoint); return { bbox: newBBox, element: `` }; } return null; } block(block, dwg) { const entities = block.entities; const { bbox, elements } = entities.reduce( (acc, entity) => { const boundsAndElement = this.entityToBoundsAndElement(entity); if (boundsAndElement) { const { bbox: bbox2, element } = boundsAndElement; if (bbox2.valid) { acc.bbox.expandByPoint(bbox2.min); acc.bbox.expandByPoint(bbox2.max); } const color = this.getEntityColor(dwg.tables.LAYER.entries, entity); const fill = entity.type == "TEXT" || entity.type == "MTEXT" ? color.cssColor : "none"; if (color.isByBlock) { acc.elements.push(`${element}`); } else { acc.elements.push( `${element}` ); } } return acc; }, { bbox: new Box2D(), elements: [] } ); if (bbox.valid) { return { bbox, element: `${elements.join("\n")}` }; } return null; } entityToBoundsAndElement(entity) { let result = null; switch (entity.type) { case "ARC": result = this.arc(entity); break; case "CIRCLE": result = this.circle(entity); break; case "DIMENSION": result = this.dimension(entity); break; case "ELLIPSE": result = this.ellipse(entity); break; case "INSERT": result = this.insert(entity); break; case "LINE": result = this.line(entity); break; case "LWPOLYLINE": { const lwpolyline = entity; const closed = !!(lwpolyline.flag & 512); const vertices = interpolatePolyline(lwpolyline, closed); result = this.vertices(vertices, closed); break; } case "MTEXT": result = this.mtext(entity); break; case "SPLINE": { const spline = entity; result = this.vertices( this.interpolateBSpline( spline.controlPoints, spline.degree, spline.knots, 25, spline.weights ) ); break; } case "POLYLINE": { break; } case "RAY": result = this.ray(entity); break; case "TABLE": case "ACAD_TABLE": result = this.table(entity); break; case "TEXT": result = this.text(entity); break; case "XLINE": result = this.xline(entity); break; default: result = null; break; } if (result) { return this.addFlipXIfApplicable(entity, result); } return null; } getEntityColor(layers, entity) { const color = new Color(); if (entity.colorIndex != null) { color.colorIndex = entity.colorIndex; } else if (entity.colorName) { color.colorName = entity.colorName; } else if (entity.color != null) { color.color = entity.color; } if (color.colorIndex == 7) { color.colorIndex = 256; } if (color.isByLayer) { const layer = layers.find( (layer2) => layer2.name === entity.layer ); if (layer != null) { color.colorIndex = layer.colorIndex; } } if (color.color == null) { color.color = 16777215; } return color; } convert(dwg) { let modelSpace = null; this.blockMap.clear(); let blockElements = ""; dwg.tables.BLOCK_RECORD.entries.forEach((block) => { if (isModelSpace(block.name)) { modelSpace = block; } else { const item = this.block(block, dwg); if (item) { blockElements += item.element; this.blockMap.set(block.name, item); } } }); const ms = this.block(modelSpace, dwg); const viewBox = ms && ms.bbox.valid ? { x: ms.bbox.min.x, y: -ms.bbox.max.y, width: ms.bbox.max.x - ms.bbox.min.x, height: ms.bbox.max.y - ms.bbox.min.y } : { x: 0, y: 0, width: 0, height: 0 }; return ` ${blockElements} ${ms ? ms.element : ""} `; } } var DwgThumbnailImageType = /* @__PURE__ */ ((DwgThumbnailImageType2) => { DwgThumbnailImageType2[DwgThumbnailImageType2["BMP"] = 2] = "BMP"; DwgThumbnailImageType2[DwgThumbnailImageType2["WMF"] = 3] = "WMF"; DwgThumbnailImageType2[DwgThumbnailImageType2["PNG"] = 6] = "PNG"; return DwgThumbnailImageType2; })(DwgThumbnailImageType || {}); const _LibreDwg = class _LibreDwg { constructor(wasmInstance) { __publicField(this, "wasmInstance"); __publicField(this, "decoder"); this.wasmInstance = wasmInstance; return new Proxy(this, { get: (target, prop, receiver) => { if (prop in target) { return Reflect.get(target, prop, receiver); } return Reflect.get(target.wasmInstance, prop, receiver); } }); } dwg_read_data(fileContent, fileType) { if (fileType == Dwg_File_Type.DWG) { const fileName = "tmp.dwg"; try { this.wasmInstance.FS.writeFile( fileName, new Uint8Array(fileContent) ); const result = this.wasmInstance.dwg_read_file(fileName); if (result.error & Dwg_Error.OUTOFMEM) { this.wasmInstance.dwg_abandon(result.data); throw new Error( "Failed to decode DWG: out of WASM memory. Rebuild with pnpm build:wasm (INITIAL_MEMORY=1GB) or use a smaller file." ); } if (result.error != 0) { console.warn("Open dwg file with error code:", result.error); } return result.data; } finally { if (this.wasmInstance.FS.analyzePath(fileName, false).exists) { this.wasmInstance.FS.unlink(fileName); } } } } /** * Converts DWG file content to DXF file content. * @param fileContent DWG file content. * @returns Returns DXF file content if conversion succeeds. Otherwise returns null. */ dwg_write_dxf(fileContent) { const inputFileName = "tmp.dwg"; const outputFileName = "tmp.dxf"; try { this.wasmInstance.FS.writeFile( inputFileName, new Uint8Array(fileContent) ); const error = this.wasmInstance.dwg_write_dxf( inputFileName, outputFileName ); if (error != 0) { console.log("Convert dwg to dxf with error code: ", error); return null; } return this.wasmInstance.FS.readFile(outputFileName); } finally { if (this.wasmInstance.FS.analyzePath(inputFileName, false).exists) { this.wasmInstance.FS.unlink(inputFileName); } if (this.wasmInstance.FS.analyzePath(outputFileName, false).exists) { this.wasmInstance.FS.unlink(outputFileName); } } } /** * Gets the version of the dwg. * @param data Pointer to Dwg_Data instance. * @returns Return the version of the dwg */ dwg_get_version_type(data) { const version = this.wasmInstance.dwg_get_version_type(data); return dwgVersions[version]; } /** * Gets code page of the dwg. * @param data Pointer to Dwg_Data instance. * @returns Return code page of the dwg */ dwg_get_codepage(data) { const codepage = this.wasmInstance.dwg_get_codepage(data); return codepage; } /** * Extracts thumbnail image from dwg. * @param data Pointer to Dwg_Data instance. * @returns Return thumbnail image data */ dwg_bmp(data) { return this.wasmInstance.dwg_bmp(data); } /** * Returns the number of classes in dwg file. * @param data Pointer to Dwg_Data instance. * @returns Returns the number of classes in dwg file. */ dwg_get_num_classes(data) { return this.wasmInstance.dwg_get_num_classes(data); } /** * Returns the nth class in dwg file. * @param data Pointer to Dwg_Data instance. * @param index Index of the class * @returns Returns the nth class in dwg file. */ dwg_get_class(data, index) { return this.wasmInstance.dwg_get_class(data, index); } /** * Converts Dwg_Data instance to DwgDatabase instance. DwgDatabase instance doesn't depend on * Dwg_Data instance any more after conversion. So you can call function dwg_free to free memory * occupied by Dwg_Data. * @param data Pointer to Dwg_Data instance. * @returns Returns the converted DwgDatabase. */ convert(data) { const codepage = this.dwg_get_codepage(data); const encoding = dwgCodePageToEncoding(codepage); this.decoder = new TextDecoder(encoding); const converter = new LibreDwgConverter(this); return converter.convert(data); } /** * Converts Dwg_Data instance to DwgDatabase instance and returns conversion statistics. * DwgDatabase instance doesn't depend on Dwg_Data instance any more after conversion. * So you can call function dwg_free to free memory occupied by Dwg_Data. * @param data Pointer to Dwg_Data instance. * @returns Returns the converted DwgDatabase and conversion statistics. */ convertEx(data) { const codepage = this.dwg_get_codepage(data); const encoding = dwgCodePageToEncoding(codepage); this.decoder = new TextDecoder(encoding); const converter = new LibreDwgConverter(this); return { database: converter.convert(data), stats: converter.getConversionStats() }; } /** * Converts DwgDatabase instance to svg string. * @param data DwgDatabase instance. * @returns Returns the converted svg string. */ dwg_to_svg(data) { const converter = new SvgConverter(); return converter.convert(data); } /** * Frees the whole DWG. all tables, sections, objects, ... * @param data Pointer to Dwg_Data instance. */ dwg_free(data) { if (!data) { return; } try { this.wasmInstance.dwg_free(data); } catch { try { this.wasmInstance.dwg_abandon(data); } catch { } } } /** * Frees the object (all three structs and its fields) * @group Dwg_Object Methods * @param ptr Pointer to one Dwg_Object instance. */ dwg_free_object(obj_ptr) { this.wasmInstance.dwg_free_object(obj_ptr); } /** * Gets an object by its handle. * @group Handle Conversion Methods * @param data Pointer to Dwg_Data instance. * @param ref_ptr Pointer to Dwg_Object_Ref instance. * @returns Returns the object whose handle is equal to the given handle. */ dwg_ref_object(data, ref_ptr) { return this.wasmInstance.dwg_ref_object(data, ref_ptr); } /** * Gets an object by its handle without warning message. * @group Handle Conversion Methods * @param data Pointer to Dwg_Data instance. * @param ref_ptr Pointer to Dwg_Object_Ref instance. * @returns Returns the object whose handle is equal to the given handle. */ dwg_ref_object_silent(data, ref_ptr) { return this.wasmInstance.dwg_ref_object_silent(data, ref_ptr); } /** * Gets an object given its handle and relative base object. * @group Handle Conversion Methods * @param data Pointer to Dwg_Data instance. * @param ref_ptr Pointer to Dwg_Object_Ref instance. * @param obj_ptr Pointer to the relative base object (Dwg_Object instance). * @returns Returns the object given its handle and relative base object. */ dwg_ref_object_relative(data, ref_ptr, obj_ptr) { return this.wasmInstance.dwg_ref_object_relative(data, ref_ptr, obj_ptr); } /** * Resolves handle absref value to Dwg_Object instance. * @group Handle Conversion Methods * @param data Pointer to Dwg_Data instance. * @param absref Handle absref value. * @returns Returns the object with the given handle absref value. */ dwg_resolve_handle(data, absref) { return this.wasmInstance.dwg_resolve_handle(data, absref); } /** * Resolves handle absref value to Dwg_Object instance without warning message. * @group Handle Conversion Methods * @param data Pointer to Dwg_Data instance. * @param absref Handle absref value. * @returns Returns the object with the given handle absref value. */ dwg_resolve_handle_silent(data, absref) { return this.wasmInstance.dwg_resolve_handle_silent(data, absref); } /** * Sets ref->absolute_ref from the specified obj for a subsequent dwg_resolve_handle * @group Handle Conversion Methods * @param ref_ptr Pointer to Dwg_Object_Ref instance. * @param obj_ptr Pointer to Dwg_Object instance. * @returns Returns 1 if set absref value correctly. Otherwise, return 0. */ dwg_resolve_handleref(ref_ptr, obj_ptr) { return this.wasmInstance.dwg_resolve_handleref(ref_ptr, obj_ptr); } /** * Returns the absolute handle reference of one Dwg_Object_Ref instance. * @group Handle Conversion Methods * @returns Returns null when the reference or absolute_ref is absent. */ dwg_ref_get_absref(ref_ptr) { if (!ref_ptr) return null; const absref = this.wasmInstance.dwg_ref_get_absref(ref_ptr); return absref === 0 ? null : absref; } /** * Returns the handle value of one Dwg_Object_Ref instance. * @group Handle Conversion Methods * @returns Returns null when the reference or handle value is absent. */ dwg_ref_get_handle_value(ref_ptr) { if (!ref_ptr) return null; const value = this.wasmInstance.dwg_ref_get_handle_value(ref_ptr); return value === 0n ? null : value; } /** * Returns the absolute_ref of one Dwg_Object_Ref instance as bigint. * @group Handle Conversion Methods * @returns Returns null when the reference or absolute_ref is absent. */ dwg_ref_get_handle_absolute_ref(ref_ptr) { if (!ref_ptr) return null; const value = this.wasmInstance.dwg_ref_get_handle_absolute_ref(ref_ptr); return value === 0n ? null : value; } /** * Returns the handle value of one Dwg_Object instance. * @group Handle Conversion Methods * @returns Returns null when the object or handle value is absent. */ dwg_obj_get_handle_value(obj_ptr) { if (!obj_ptr) return null; const value = this.wasmInstance.dwg_obj_get_handle_value(obj_ptr); return value === 0n ? null : value; } /** * Returns the absolute_ref of one Dwg_Object_Ref as uppercase hex handle id. * @group Handle Conversion Methods */ dwg_ref_get_id(ref_ptr) { const absref = this.dwg_ref_get_absref(ref_ptr); return absref == null ? void 0 : absref.toString(16).toUpperCase(); } /** * Returns object (such as line type, layer name, dimension style, and etc.) name by its handle. * @group Handle Conversion Methods * @param ref_ptr Pointer to Dwg_Object_Ref instance. * @returns Returns object name by its handle. */ dwg_ref_get_object_name(ref_ptr) { const wasmInstance = this.wasmInstance; const obj = wasmInstance.dwg_ref_get_object(ref_ptr); const obj_tio = wasmInstance.dwg_object_to_object_tio(obj); const obj_name = this.dwg_dynapi_entity_data(obj_tio, "name"); return obj_name; } /** * Converts Dwg_Object_Object instance to Dwg_Object instance. * @group Object Conversion Methods * @param obj_ptr Pointer to Dwg_Object_Object instance. * @returns Returns one pointer to Dwg_Object instance. */ dwg_obj_obj_to_object(obj_obj_ptr) { return this.wasmInstance.dwg_obj_obj_to_object(obj_obj_ptr); } /** * Converts Dwg_Object_* instance to Dwg_Object instance. * @group Object Conversion Methods * @param obj_generic_ptr Pointer to Dwg_Object_* instance. * @returns Returns one pointer to Dwg_Object instance. */ dwg_obj_generic_to_object(obj_generic_ptr) { return this.wasmInstance.dwg_obj_generic_to_object(obj_generic_ptr); } /** * Converts Dwg_Object instance to Dwg_Object_Object instance. * @group Object Conversion Methods * @param obj_ptr Pointer to Dwg_Object instance. * @returns Returns one pointer to Dwg_Object_Object instance. */ dwg_object_to_object(obj_ptr) { return this.wasmInstance.dwg_object_to_object(obj_ptr); } /** * Gets Dwg_Object_* instance (such as Dwg_Entity_LAYER, Dwg_Entity_STYLE, and etc.) * from Dwg_Object instance. * @group Object Conversion Methods * @param obj_ptr Pointer to Dwg_Object instance. * @returns Returns one pointer to Dwg_Object_Object_TIO_Ptr instance. */ dwg_object_to_object_tio(obj_ptr) { return this.wasmInstance.dwg_object_to_object_tio(obj_ptr); } /** * Converts Dwg_Object instance to Dwg_Object_Entity instance. * @group Object Conversion Methods * @param obj_ptr Pointer to Dwg_Object instance. * @returns Returns one pointer to Dwg_Object_Entity instance. */ dwg_object_to_entity(obj_ptr) { return this.wasmInstance.dwg_object_to_entity(obj_ptr); } /** * Gets Dwg_Entity_* instance (such as Dwg_Entity_LINE, Dwg_Entity_SPLINE, and etc.) * from Dwg_Object instance. * @group Object Conversion Methods * @param obj_ptr Pointer to Dwg_Object instance. * @returns Returns one pointer to Dwg_Object_Object_TIO_Ptr instance. */ dwg_object_to_entity_tio(obj_ptr) { return this.wasmInstance.dwg_object_to_entity_tio(obj_ptr); } /** * Returns all of entities in the model space. Each item in returned array * is one Dwg_Object pointer (Dwg_Object*). * @group GetAll Methods * @param data Pointer to Dwg_Data instance. * @returns Returns all of entities in the model space. */ dwg_getall_entities_in_model_space(data) { const wasmInstance = this.wasmInstance; const model_space = wasmInstance.dwg_model_space_object(data); const entities = []; let next = wasmInstance.get_first_owned_entity(model_space); while (next) { entities.push(next); next = wasmInstance.get_next_owned_entity(model_space, next); } return entities; } /** * Returns all of objects in Dwg_Data instance with the specified type. * @group GetAll Methods * @param data Pointer to Dwg_Data instance. * @param type Object type. * @returns Returns all of objects with the specified type. */ dwg_getall_object_by_type(data, type) { const wasmInstance = this.wasmInstance; const num_objects = wasmInstance.dwg_get_num_objects(data); const results = []; for (let i = 0; i < num_objects; i++) { const obj = wasmInstance.dwg_get_object(data, i); const tio = wasmInstance.dwg_object_to_object_tio(obj); if (tio && wasmInstance.dwg_object_get_fixedtype(obj) == type) { results.push(tio); } } return results; } /** * Returns all of objects in Dwg_Data instance with the specified type. * @group GetAll Methods * @param data Pointer to Dwg_Data instance. * @param type Object type. * @returns Returns all of objects with the specified type. */ dwg_getall_entity_by_type(data, type) { const wasmInstance = this.wasmInstance; const num_objects = wasmInstance.dwg_get_num_objects(data); const results = []; for (let i = 0; i < num_objects; i++) { const obj = wasmInstance.dwg_get_object(data, i); const tio = wasmInstance.dwg_object_to_entity_tio(obj); if (tio && wasmInstance.dwg_object_get_fixedtype(obj) == type) { results.push(tio); } } return results; } /** * Returns all of layer objects in Dwg_Data instance. * @group GetAll Methods * @param data Pointer to Dwg_Data instance. * @returns Returns all of layer objects in Dwg_Data instance. */ dwg_getall_LAYER(data) { return this.dwg_getall_object_by_type(data, Dwg_Object_Type.DWG_TYPE_LAYER); } /** * Returns all of line type objects in Dwg_Data instance. * @group GetAll Methods * @param data Pointer to Dwg_Data instance. * @returns Returns all of line type objects in Dwg_Data instance. */ dwg_getall_LTYPE(data) { return this.dwg_getall_object_by_type(data, Dwg_Object_Type.DWG_TYPE_LTYPE); } /** * Returns all of text style objects in Dwg_Data instance. * @group GetAll Methods * @param data Pointer to Dwg_Data instance. * @returns Returns all of text style objects in Dwg_Data instance. */ dwg_getall_STYLE(data) { return this.dwg_getall_object_by_type(data, Dwg_Object_Type.DWG_TYPE_STYLE); } /** * Returns all of dimension style objects in Dwg_Data instance. * @group GetAll Methods * @param data Pointer to Dwg_Data instance. * @returns Returns all of dimension style objects in Dwg_Data instance. */ dwg_getall_DIMSTYLE(data) { return this.dwg_getall_object_by_type( data, Dwg_Object_Type.DWG_TYPE_DIMSTYLE ); } /** * Returns all of viewport objects in Dwg_Data instance. * @group GetAll Methods * @param data Pointer to Dwg_Data instance. * @returns Returns all of viewport objects in Dwg_Data instance. */ dwg_getall_VPORT(data) { return this.dwg_getall_object_by_type(data, Dwg_Object_Type.DWG_TYPE_VPORT); } /** * Returns all of layout objects in Dwg_Data instance. * @group GetAll Methods * @param data Pointer to Dwg_Data instance. * @returns Returns all of layout objects in Dwg_Data instance. */ dwg_getall_LAYOUT(data) { return this.dwg_getall_object_by_type(data, Dwg_Object_Type.DWG_TYPE_LAYOUT); } /** * Returns all of block objects in Dwg_Data instance. * @group GetAll Methods * @param data Pointer to Dwg_Data instance. * @returns Returns all of block objects in Dwg_Data instance. */ dwg_getall_BLOCK(data) { return this.dwg_getall_object_by_type(data, Dwg_Object_Type.DWG_TYPE_BLOCK); } /** * Returns all of block header objects in Dwg_Data instance. * @group GetAll Methods * @param data Pointer to Dwg_Data instance. * @returns Returns all of block header objects in Dwg_Data instance. */ dwg_getall_BLOCK_HEADER(data) { return this.dwg_getall_object_by_type( data, Dwg_Object_Type.DWG_TYPE_BLOCK_HEADER ); } /** * Returns all of image definition objects in Dwg_Data instance. * @group GetAll Methods * @param data Pointer to Dwg_Data instance. * @returns Returns all of image definition objects in Dwg_Data instance. */ dwg_getall_IMAGEDEF(data) { return this.dwg_getall_object_by_type( data, Dwg_Object_Type.DWG_TYPE_IMAGEDEF ); } /** * Returns all of 2d vertex objects in Dwg_Data instance. * @group GetAll Methods * @param data Pointer to Dwg_Data instance. * @returns Returns all of 2d vertex objects in Dwg_Data instance. */ dwg_getall_VERTEX_2D(data) { return this.dwg_getall_entity_by_type( data, Dwg_Object_Type.DWG_TYPE_VERTEX_2D ); } /** * Returns all of 3d vertex objects in Dwg_Data instance. * @group GetAll Methods * @param data Pointer to Dwg_Data instance. * @returns Returns all of 3d vertex objects in Dwg_Data instance. */ dwg_getall_VERTEX_3D(data) { return this.dwg_getall_entity_by_type( data, Dwg_Object_Type.DWG_TYPE_VERTEX_3D ); } /** * Returns all of 2d polyline entities in Dwg_Data instance. * @group GetAll Methods * @param data Pointer to Dwg_Data instance. * @returns Returns all of 2d polyline entities in Dwg_Data instance. */ dwg_getall_POLYLINE_2D(data) { return this.dwg_getall_entity_by_type( data, Dwg_Object_Type.DWG_TYPE_POLYLINE_2D ); } /** * Returns all of 3d polyline entities in Dwg_Data instance. * @group GetAll Methods * @param data Pointer to Dwg_Data instance. * @returns Returns all of 3d polyline entities in Dwg_Data instance. */ dwg_getall_POLYLINE_3D(data) { return this.dwg_getall_entity_by_type( data, Dwg_Object_Type.DWG_TYPE_POLYLINE_3D ); } /** * Returns all of image entities in Dwg_Data instance. * @group GetAll Methods * @param data Pointer to Dwg_Data instance. * @returns Returns all of image entities in Dwg_Data instance. */ dwg_getall_IMAGE(data) { return this.dwg_getall_entity_by_type(data, Dwg_Object_Type.DWG_TYPE_IMAGE); } /** * Returns all of lwpolyline entities in Dwg_Data instance. * @group GetAll Methods * @param data Pointer to Dwg_Data instance. * @returns Returns all of lwpolyline entities in Dwg_Data instance. */ dwg_getall_LWPOLYLINE(data) { return this.dwg_getall_entity_by_type( data, Dwg_Object_Type.DWG_TYPE_LWPOLYLINE ); } /** * Converts one C++ handle array to one JavaScript Dwg_Object_Ref array. * @group Array Methods * @param ptr Pointer to C++ handle array. * @param size The size of C++ handle array. * @returns Returns one JavaScript Dwg_Object_Ref array from the specified C++ handle array. */ dwg_ptr_to_object_ref_array(ptr, size) { return this.wasmInstance.dwg_ptr_to_object_ref_array(ptr, size); } /** * Converts one C++ handle array to one JavaScript Dwg_Object_Ref_Ptr array. * @group Array Methods * @param ptr Pointer to C++ handle array. * @param size The size of C++ handle array. * @returns Returns one JavaScript Dwg_Object_Ref_Ptr array from the specified C++ handle array. */ dwg_ptr_to_object_ref_ptr_array(ptr, size) { return this.wasmInstance.dwg_ptr_to_object_ref_ptr_array(ptr, size); } /** * Converts one C++ wchar_t* array to one JavaScript string array. * @group Array Methods * @param ptr Pointer to C++ wchar_t* array. * @param size The size of C++ wchar_t* array. * @returns Returns one JavaScript string array from the specified C++ wchar_t* array. */ dwg_ptr_to_wchar_string_array(ptr, size) { return this.wasmInstance.dwg_ptr_to_wchar_string_array(ptr, size); } /** * Converts one C++ unsigned char array to one JavaScript number array. * @group Array Methods * @param ptr Pointer to C++ unsigned char array. * @param size The size of C++ unsigned char array. * @returns Returns one JavaScript number array from the specified C++ unsigned char array. */ dwg_ptr_to_unsigned_char_array(ptr, size) { return this.wasmInstance.dwg_ptr_to_unsigned_char_array(ptr, size); } /** * Converts one C++ signed char array to one JavaScript number array. * @group Array Methods * @param ptr Pointer to C++ signed char array. * @param size The size of C++ signed char array. * @returns Returns one JavaScript number array from the specified C++ signed char array. */ dwg_ptr_to_signed_char_array(ptr, size) { return this.wasmInstance.dwg_ptr_to_signed_char_array(ptr, size); } /** * Converts one C++ unsigned int16 array to one JavaScript number array. * @group Array Methods * @param ptr Pointer to C++ unsigned int16 array. * @param size The size of C++ unsigned int16 array. * @returns Returns one JavaScript number array from the specified C++ unsigned int16 array. */ dwg_ptr_to_uint16_t_array(ptr, size) { return this.wasmInstance.dwg_ptr_to_uint16_t_array(ptr, size); } /** * Converts one C++ int16 array to one JavaScript number array. * @group Array Methods * @param ptr Pointer to C++ int16 array. * @param size The size of C++ int16 array. * @returns Returns one JavaScript number array from the specified C++ int16 array. */ dwg_ptr_to_int16_t_array(ptr, size) { return this.wasmInstance.dwg_ptr_to_int16_t_array(ptr, size); } /** * Converts one C++ unsigned int32 array to one JavaScript number array. * @group Array Methods * @param ptr Pointer to C++ unsigned int32 array. * @param size The size of C++ unsigned int32 array. * @returns Returns one JavaScript number array from the specified C++ unsigned int32 array. */ dwg_ptr_to_uint32_t_array(ptr, size) { return this.wasmInstance.dwg_ptr_to_uint32_t_array(ptr, size); } /** * Converts one C++ int32 array to one JavaScript number array. * @group Array Methods * @param ptr Pointer to C++ int32 array. * @param size The size of C++ int32 array. * @returns Returns one JavaScript number array from the specified C++ int32 array. */ dwg_ptr_to_int32_t_array(ptr, size) { return this.wasmInstance.dwg_ptr_to_int32_t_array(ptr, size); } /** * Converts one C++ unsigned int64 array to one JavaScript number array. * @group Array Methods * @param ptr Pointer to C++ unsigned int64 array. * @param size The size of C++ unsigned int64 array. * @returns Returns one JavaScript number array from the specified C++ unsigned int64 array. */ dwg_ptr_to_uint64_t_array(ptr, size) { return this.wasmInstance.dwg_ptr_to_uint64_t_array(ptr, size); } /** * Converts one C++ int64 array to one JavaScript number array. * @group Array Methods * @param ptr Pointer to C++ int64 array. * @param size The size of C++ int64 array. * @returns Returns one JavaScript number array from the specified C++ int64 array. */ dwg_ptr_to_int64_t_array(ptr, size) { return this.wasmInstance.dwg_ptr_to_int64_t_array(ptr, size); } /** * Converts one C++ double array to one JavaScript number array. * @group Array Methods * @param ptr Pointer to C++ double array. * @param size The size of C++ double array. * @returns Returns one JavaScript number array from the specified C++ double array. */ dwg_ptr_to_double_array(ptr, size) { return this.wasmInstance.dwg_ptr_to_double_array(ptr, size); } /** * Converts one C++ 2d point array to one JavaScript 2d point array. * @group Array Methods * @param ptr Pointer to C++ 2d point array. * @param size The size of C++ 2 point array. * @returns Returns one JavaScript 2d point array from the specified C++ 2d point array. */ dwg_ptr_to_point2d_array(ptr, size) { return this.wasmInstance.dwg_ptr_to_point2d_array(ptr, size); } /** * Converts one C++ 3d point array to one JavaScript 3d point array. * @group Array Methods * @param ptr Pointer to C++ 3d point array. * @param size The size of C++ 3d point array. * @returns Returns one JavaScript 3d point array from the specified C++ 3d point array. */ dwg_ptr_to_point3d_array(ptr, size) { return this.wasmInstance.dwg_ptr_to_point3d_array(ptr, size); } /** * Converts one C++ 4d point array to one JavaScript 4d point array. * @group Array Methods * @param ptr Pointer to C++ 4d point array. * @param size The size of C++ 4d point array. * @returns Returns one JavaScript 4d point array from the specified C++ 4d point array. */ dwg_ptr_to_point4d_array(ptr, size) { return this.wasmInstance.dwg_ptr_to_point4d_array(ptr, size); } /** * Converts one C++ line type array to one JavaScript line type array. * @group Array Methods * @param ptr Pointer to C++ line type array. * @param size The size of C++ line type array. * @returns Returns one JavaScript line type array from the specified C++ line type array. */ dwg_ptr_to_ltype_dash_array(ptr, size) { return this.wasmInstance.dwg_ptr_to_ltype_dash_array(ptr, size); } /** * Converts one C++ table cell array to one JavaScript table cell array. * @group Array Methods * @group Dwg_Entity_TABLE Methods * @param ptr Pointer to C++ table cell array. * @param size The size of C++ table cell array. * @returns Returns one JavaScript table cell array from the specified C++ table cell array. */ dwg_ptr_to_table_cell_array(ptr, size) { return this.wasmInstance.dwg_ptr_to_table_cell_array(ptr, size); } /** * Converts one C++ hatch definition line array to one JavaScript hatch definition line array. * @group Array Methods * @group Dwg_Entity_HATCH Methods * @param ptr Pointer to C++ hatch definition line array. * @param size The size of C++ hatch definition line array. * @returns Returns one JavaScript hatch definition line array from the specified C++ hatch definition line array. */ dwg_ptr_to_hatch_defline_array(ptr, size) { return this.wasmInstance.dwg_ptr_to_hatch_defline_array(ptr, size); } /** * Converts one C++ hatch path array to one JavaScript hatch path array. * @group Array Methods * @group Dwg_Entity_HATCH Methods * @param ptr Pointer to C++ hatch path array. * @param size The size of C++ hatch path array. * @returns Returns one JavaScript hatch path array from the specified C++ hatch path array. */ dwg_ptr_to_hatch_path_array(ptr, size) { return this.wasmInstance.dwg_ptr_to_hatch_path_array(ptr, size); } /** * Converts one C++ hatch gradient color array to one JavaScript hatch gradient color array. * @group Array Methods * @group Dwg_Entity_HATCH Methods * @param ptr Pointer to C++ hatch gradient color array. * @param size The size of C++ hatch gradient color array. * @returns Returns one JavaScript hatch gradient color array from the specified C++ hatch gradient color array. */ dwg_ptr_to_hatch_gradient_color_array(ptr, size) { return this.wasmInstance.dwg_ptr_to_hatch_gradient_color_array(ptr, size); } /** * Converts one C++ mline vertex array to one JavaScript mline vertex array. * @group Array Methods * @group Dwg_Entity_MLINE Methods * @param ptr Pointer to C++ mline vertex array. * @param size The size of C++ mline vertex array. * @returns Returns one JavaScript mline vertex array from the specified C++ mline vertex array. */ dwg_ptr_to_mline_vertex_array(ptr, size) { return this.wasmInstance.dwg_ptr_to_mline_vertex_array(ptr, size); } /** * Generic field value getter. Used to get the field value of one object or entity. * @group Dynamic API Methods * @param obj Pointer to one object or entity * @param field Field name of one object or entity * @returns Returns the field value of one object or entity. */ dwg_dynapi_entity_value(obj, field) { const value = this.wasmInstance.dwg_dynapi_entity_value( obj, field ); if (value.bin && this.decoder) { value.data = this.decoder.decode(value.bin); } return value; } /** * Returns the decoded field data of one object or entity. * @group Dynamic API Methods */ dwg_dynapi_entity_data(obj, field) { return this.dwg_dynapi_entity_value(obj, field).data; } /** * Header field value getter. Used to get the field value of dwg/dxf header. * @group Dynamic API Methods * @param data Pointer to Dwg_Data instance. * @param field Field name of header. * @returns Returns the field value of dwg/dxf header. */ dwg_dynapi_header_value(data, field) { return this.wasmInstance.dwg_dynapi_header_value(data, field); } /** * Returns the field data of dwg/dxf header. * @group Dynamic API Methods */ dwg_dynapi_header_data(data, field) { return this.dwg_dynapi_header_value(data, field).data; } /** * The common field value getter. Used to get the value of object or entity common fields. * @group Dynamic API Methods * @param obj Pointer to one object or entity * @param field The name of object or entity common fields. * @returns Returns the value of object or entity common fields. */ dwg_dynapi_common_value(obj, field) { return this.wasmInstance.dwg_dynapi_common_value(obj, field); } /** * Returns the field data of object or entity common fields. * @group Dynamic API Methods */ dwg_dynapi_common_data(obj, field) { return this.dwg_dynapi_common_value(obj, field).data; } /** * The field of one object or entity may not be primitive type. It means one field may consist of * multiple sub-fields. This method is used to get the sub-field value of those complex field. * @group Dynamic API Methods * @param obj Pointer to one object or entity. * @param subclass The class name of the field with complex type. * @param field The field name of one object or entit. * @returns Returns the sub-field value of one complex field. */ dwg_dynapi_subclass_value(obj, subclass, field) { return this.wasmInstance.dwg_dynapi_subclass_value(obj, subclass, field); } /** * Returns the sub-field data of one complex field. * @group Dynamic API Methods */ dwg_dynapi_subclass_data(obj, subclass, field) { return this.dwg_dynapi_subclass_value(obj, subclass, field).data; } /** * Returns the struct size of a dynapi subclass. */ dwg_dynapi_subclass_size(subclass) { return this.wasmInstance.dwg_dynapi_subclass_size(subclass); } /** * Returns the byte offset of a field within an entity struct. */ dwg_dynapi_entity_field_offset(entity, field) { return this.wasmInstance.dwg_dynapi_entity_field_offset(entity, field); } /** * Returns the byte offset of a field within a dynapi subclass struct. */ dwg_dynapi_subclass_field_offset(subclass, field) { return this.wasmInstance.dwg_dynapi_subclass_field_offset(subclass, field); } /** * Returns the handle of one Dwg_Object instance. * @group Dwg_Object Methods * @param ptr Pointer to one Dwg_Object instance. * @returns Returns the handle of one Dwg_Object instance. */ dwg_object_get_handle_object(ptr) { return this.wasmInstance.dwg_object_get_handle_object(ptr); } /** * Returns the handle of one Dwg_Object_Object instance. * @group Dwg_Object_Object Methods * @param ptr Pointer to one Dwg_Object_Object instance. * @returns Returns the handle of one Dwg_Object_Object instance. */ dwg_object_object_get_handle_object(ptr) { return this.wasmInstance.dwg_object_object_get_handle_object(ptr); } /** * Returns the owner handle of one Dwg_Object_Object instance. * @group Dwg_Object_Object Methods * @param ptr Pointer to one Dwg_Object_Object instance. * @returns Returns the owner handle of one Dwg_Object_Object instance. */ dwg_object_object_get_ownerhandle_object(ptr) { return this.wasmInstance.dwg_object_object_get_ownerhandle_object(ptr); } /** * Returns the handle of one Dwg_Object_Entity instance. * @group Dwg_Object_Entity Methods * @param ptr Pointer to one Dwg_Object_Entity instance. * @returns Returns the handle of one Dwg_Object_Entity instance. */ dwg_object_entity_get_handle_object(ptr) { return this.wasmInstance.dwg_object_entity_get_handle_object(ptr); } /** * Returns the owner handle of one Dwg_Object_Entity instance. * @group Dwg_Object_Entity Methods * @param ptr Pointer to one Dwg_Object_Entity instance. * @returns Returns the owner handle of one Dwg_Object_Entity instance. */ dwg_object_entity_get_ownerhandle_object(ptr) { return this.wasmInstance.dwg_object_entity_get_ownerhandle_object(ptr); } /** * Returns hard-owner ID/handle to owner dictionary of one Dwg_Object_Entity instance. * @group Dwg_Object_Entity Methods * @param ptr Pointer to one Dwg_Object_Entity instance. * @returns Returns hard-owner ID/handle to owner dictionary of one Dwg_Object_Entity instance. */ dwg_object_entity_get_xdicobjhandle_object(ptr) { return this.wasmInstance.dwg_object_entity_get_xdicobjhandle_object(ptr); } /** * Returns the layer handle of one Dwg_Object_Entity instance. * @group Dwg_Object_Entity Methods * @param ptr Pointer to one Dwg_Object_Entity instance. * @returns Returns the layer handle of one Dwg_Object_Entity instance. */ dwg_object_entity_get_layer_object_ref(ptr) { return this.wasmInstance.dwg_object_entity_get_layer_object_ref(ptr); } /** * Returns the line type handle of one Dwg_Object_Entity instance. * @group Dwg_Object_Entity Methods * @param ptr Pointer to one Dwg_Object_Entity instance. * @returns Returns the line type handle of one Dwg_Object_Entity instance. */ dwg_object_entity_get_ltype_object_ref(ptr) { return this.wasmInstance.dwg_object_entity_get_ltype_object_ref(ptr); } /** * Returns color value of one Dwg_Object_Entity instance. * @group Dwg_Object_Entity Methods * @param ptr Pointer to one Dwg_Object_Entity instance. * @returns Returns color value of one Dwg_Object_Entity instance. */ dwg_object_entity_get_color_object(ptr) { return this.wasmInstance.dwg_object_entity_get_color_object(ptr); } /** * Returns xdata of one Dwg_Object_Entity instance. * @group Dwg_Object_Entity Methods * @param ptr Pointer to one Dwg_Object_Entity instance. * @returns Returns xdata of one Dwg_Object_Entity instance. */ dwg_object_entity_get_xdata(ptr) { return this.wasmInstance.dwg_object_entity_get_xdata(ptr); } /** * Returns the extension dictionary handle of a Dwg_Object_Object instance. * @group Dwg_Object_Object Methods * @param ptr Pointer to one Dwg_Object_Object instance. * @returns Object ref for the extension dictionary, or null when absent. */ dwg_object_object_get_xdicobjhandle_object(ptr) { return this.wasmInstance.dwg_object_object_get_xdicobjhandle_object(ptr); } /** * Returns XRECORD payload as DXF group-code / value pairs. * @group Dwg_Object_XRECORD Methods * @param ptr Pointer to one Dwg_Object_XRECORD instance (object tio). * @returns Array of `{ code, value }` groups. */ dwg_object_xrecord_get_xdata(ptr) { return this.wasmInstance.dwg_object_xrecord_get_xdata(ptr) ?? []; } /** * Returns pointer to BLOCK_HEADER owner for generic entity from ent->ownerhandle. * @group Dwg_Object_Entity Methods * @param ptr Pointer to one Dwg_Object_Entity instance. * @returns Returns pointer to BLOCK_HEADER owner. */ dwg_entity_owner(ptr) { const wasmInstance = this.wasmInstance; return wasmInstance.dwg_entity_owner(ptr); } /** * Returns block name of one Dwg_Entity_* instance with one block field. For example, * dimension entities have one 'block' field which represents the block that contains * the entities that make up the dimension picture. * @group Dwg_Entity_* Methods * @param ptr Pointer to one Dwg_Entity_* instance with one block field. * @param field Field name of the block. * @returns Returns block name of one Dwg_Entity_* instance. */ dwg_entity_get_block_name(ptr, field) { const wasmInstance = this.wasmInstance; const block_header_ref = this.dwg_dynapi_entity_data(ptr, field); const block_header_obj = wasmInstance.dwg_ref_get_object(block_header_ref); const block_header_tio = wasmInstance.dwg_object_to_object_tio(block_header_obj); const block = this.dwg_entity_block_header_get_block(block_header_tio); return block.name; } /** * Returns dimension style name of one Dwg_Entity_* instance with one dimension style * field. * @group Dwg_Entity_* Methods * @param ptr Pointer to one Dwg_Entity_* instance. * @param field Field name of the dimension style. * @returns Returns dimension style name of one Dwg_Entity_* instance. */ dwg_entity_get_dimstyle_name(ptr, field = "dimstyle") { const wasmInstance = this.wasmInstance; const dimstyle_ref = this.dwg_dynapi_entity_data(ptr, field); const dimstyle_obj = wasmInstance.dwg_ref_get_object(dimstyle_ref); const dimstyle_tio = wasmInstance.dwg_object_to_object_tio(dimstyle_obj); const dimstyle_name = this.dwg_dynapi_entity_data(dimstyle_tio, "name"); return dimstyle_name; } /** * Returns block entity pointed by the specified block header. * @group Dwg_Entity_BLOCK_HEADER Methods * @param ptr Pointer to one Dwg_Entity_BLOCK_HEADER instance. * @returns Returns block entity pointed by the specified block header. */ dwg_entity_block_header_get_block(ptr) { const wasmInstance = this.wasmInstance; const block_ref = this.dwg_dynapi_entity_data(ptr, "block_entity"); const block_obj = wasmInstance.dwg_ref_get_object(block_ref); const block_tio = wasmInstance.dwg_object_to_entity_tio(block_obj); const name = this.dwg_dynapi_entity_data(block_tio, "name"); const base_pt = this.dwg_dynapi_entity_data(block_tio, "base_pt"); return { name, base_pt // preR13 only }; } /** * Returns preview image of the block pointed by the specified block header. * @group Dwg_Entity_BLOCK_HEADER Methods * @param ptr Pointer to one Dwg_Entity_BLOCK_HEADER instance. * @returns Returns preview image of the block pointed by the specified block header. */ dwg_entity_block_header_get_preview(ptr) { const wasm = this.wasmInstance; if (typeof wasm.dwg_entity_block_header_get_preview !== "function") { return null; } const result = wasm.dwg_entity_block_header_get_preview(ptr); return (result == null ? void 0 : result.data) ?? null; } /** * Returns preview binary data of one entity (common entity preview field). * For PROXY_ENTITY this contains the proxy graphics data. */ dwg_entity_get_preview(ptr) { const wasm = this.wasmInstance; if (typeof wasm.dwg_entity_get_preview !== "function") { return null; } const result = wasm.dwg_entity_get_preview(ptr); return (result == null ? void 0 : result.data) ?? null; } /** * Returns entity binary data of one Dwg_Entity_PROXY_ENTITY instance. * @group Dwg_Entity_PROXY_ENTITY Methods * @param ptr Pointer to one Dwg_Entity_PROXY_ENTITY instance. * @returns Entity data bytes, or null when absent. */ dwg_entity_proxy_entity_get_entity_data(ptr) { const wasm = this.wasmInstance; if (typeof wasm.dwg_entity_proxy_entity_get_entity_data !== "function") { return null; } const result = wasm.dwg_entity_proxy_entity_get_entity_data(ptr); return (result == null ? void 0 : result.data) ?? null; } /** * Returns binary OLE payload of one Dwg_Entity_OLE2FRAME instance. * Uses data_size so embedded NUL bytes are preserved (unlike dynapi TF). * @group Dwg_Entity_OLE2FRAME Methods */ dwg_entity_ole2frame_get_data(ptr) { const wasm = this.wasmInstance; if (typeof wasm.dwg_entity_ole2frame_get_data !== "function") { return null; } const result = wasm.dwg_entity_ole2frame_get_data(ptr); return (result == null ? void 0 : result.data) ?? null; } /** * Returns binary OLE payload of one Dwg_Entity_OLEFRAME instance. * Uses data_size so embedded NUL bytes are preserved (unlike dynapi TF). * @group Dwg_Entity_OLEFRAME Methods */ dwg_entity_oleframe_get_data(ptr) { const wasm = this.wasmInstance; if (typeof wasm.dwg_entity_oleframe_get_data !== "function") { return null; } const result = wasm.dwg_entity_oleframe_get_data(ptr); return (result == null ? void 0 : result.data) ?? null; } /** * Returns the first entity owned by the block header or null * @group Dwg_Entity_BLOCK_HEADER Methods * @param ptr Pointer to the block header. * @returns Returns the first entity owned by the block header or null */ get_first_owned_entity(ptr) { return this.wasmInstance.get_first_owned_entity(ptr); } /** * Returns the next entity owned by the block header or null. * @group Dwg_Entity_BLOCK_HEADER Methods * @param ptr Pointer to the block header. * @param current Pointer to the current entity in the block header. * @returns Returns the next entity owned by the block header or null. */ get_next_owned_entity(ptr, current) { return this.wasmInstance.get_next_owned_entity(ptr, current); } /** * Returns text style name of one Dwg_Entity_MTEXT instance. * @group Dwg_Entity_MTEXT Methods * @param ptr Pointer to one Dwg_Entity_MTEXT instance. * @returns Returns text style name of one Dwg_Entity_MTEXT instance. */ dwg_entity_mtext_get_style_name(ptr) { const wasmInstance = this.wasmInstance; const style_ref = this.dwg_dynapi_entity_data(ptr, "style"); const style_obj = wasmInstance.dwg_ref_get_object(style_ref); const style_tio = wasmInstance.dwg_object_to_object_tio(style_obj); const name = this.dwg_dynapi_entity_data(style_tio, "name"); return name; } /** * Returns text style name of one Dwg_Entity_TEXT instance. * @group Dwg_Entity_TEXT Methods * @param ptr Pointer to one Dwg_Entity_TEXT instance. * @returns Returns text style name of one Dwg_Entity_TEXT instance. */ dwg_entity_text_get_style_name(ptr) { return this.dwg_entity_mtext_get_style_name(ptr); } /** * Returns the number of points in Dwg_Entity_POLYLINE_2D. * @group Dwg_Entity_POLYLINE_2D Methods * @param ptr Pointer to one Dwg_Object (not Dwg_Entity_POLYLINE_2D) instance. * @returns Returns the number of points in one Dwg_Entity_POLYLINE_2D. */ dwg_entity_polyline_2d_get_numpoints(ptr) { const wasmInstance = this.wasmInstance; return wasmInstance.dwg_entity_polyline_2d_get_numpoints(ptr).data; } /** * Returns points in Dwg_Entity_POLYLINE_2D. * @group Dwg_Entity_POLYLINE_2D Methods * @param ptr Pointer to one Dwg_Object (not Dwg_Entity_POLYLINE_2D) instance. * @returns Returns points in one Dwg_Entity_POLYLINE_2D. */ dwg_entity_polyline_2d_get_points(ptr) { const wasmInstance = this.wasmInstance; return wasmInstance.dwg_entity_polyline_2d_get_points(ptr).data; } /** * Returns vertices in Dwg_Entity_POLYLINE_2D. * @group Dwg_Entity_POLYLINE_2D Methods * @param ptr Pointer to one Dwg_Object (not Dwg_Entity_POLYLINE_2D) instance. * @returns Returns vertices in one Dwg_Entity_POLYLINE_2D. */ dwg_entity_polyline_2d_get_vertices(ptr) { const wasmInstance = this.wasmInstance; return wasmInstance.dwg_entity_polyline_2d_get_vertices(ptr).data; } /** * Returns the number of points in Dwg_Entity_POLYLINE_3D. * @group Dwg_Entity_POLYLINE_3D Methods * @param ptr Pointer to one Dwg_Object (not Dwg_Entity_POLYLINE_3D) instance. * @returns Returns the number of points in one Dwg_Entity_POLYLINE_3D. */ dwg_entity_polyline_3d_get_numpoints(ptr) { const wasmInstance = this.wasmInstance; return wasmInstance.dwg_entity_polyline_3d_get_numpoints(ptr).data; } /** * Returns points in Dwg_Entity_POLYLINE_3D. * @group Dwg_Entity_POLYLINE_3D Methods * @param ptr Pointer to one Dwg_Object (not Dwg_Entity_POLYLINE_3D) instance. * @returns Returns points in one Dwg_Entity_POLYLINE_3D. */ dwg_entity_polyline_3d_get_points(ptr) { const wasmInstance = this.wasmInstance; return wasmInstance.dwg_entity_polyline_3d_get_points(ptr).data; } /** * Returns vertices in Dwg_Entity_POLYLINE_3D. * @group Dwg_Entity_POLYLINE_3D Methods * @param ptr Pointer to one Dwg_Object (not Dwg_Entity_POLYLINE_3D) instance. * @returns Returns vertices in one Dwg_Entity_POLYLINE_3D. */ dwg_entity_polyline_3d_get_vertices(ptr) { const wasmInstance = this.wasmInstance; return wasmInstance.dwg_entity_polyline_3d_get_vertices(ptr).data; } /** * Returns attributes associated with INSERT entity. * @group Dwg_Entity_INSERT Methods * @param ptr Pointer to one Dwg_Object (not Dwg_Entity_INSERT) instance. * @returns Returns attributes associated with INSERT entity. */ dwg_entity_insert_get_attribs(ptr) { const wasmInstance = this.wasmInstance; return wasmInstance.dwg_entity_insert_get_attribs(ptr).data; } /** * Returns texts in Dwg_Object_DICTIONARY. * @group Dwg_Object_DICTIONARY Methods * @param ptr Pointer to one Dwg_Object (not Dwg_Object_DICTIONARY) instance. * @returns Returns texts in one Dwg_Object_DICTIONARY. */ dwg_object_dictionary_get_texts(ptr) { const wasmInstance = this.wasmInstance; return wasmInstance.dwg_object_dictionary_get_texts(ptr).data; } static createByWasmInstance(wasmInstance) { return this.instance == null ? new _LibreDwg(wasmInstance) : this.instance; } static async create(filepath) { const wasmInstance = filepath == null ? await createModule() : await createModule({ locateFile: (filename) => { return `${filepath}/${filename}`; } }); return this.createByWasmInstance(wasmInstance); } }; __publicField(_LibreDwg, "instance"); let LibreDwg = _LibreDwg; export { DwgAttachmentPoint, DwgBoundaryPathEdgeType, DwgBoundaryPathTypeFlag, DwgCodePage, DwgDictionaryCloningFlags, DwgDimensionTextHorizontal, DwgDimensionTextLineSpacing, DwgDimensionTextVertical, DwgDimensionToleranceTextVertical, DwgDimensionType, DwgDimensionZeroSuppression, DwgDimensionZeroSuppressionAngular, DwgHatchAssociativity, DwgHatchBoundaryAnnotation, DwgHatchGradientColorFlag, DwgHatchGradientFlag, DwgHatchPatternType, DwgHatchSolidFill, DwgHatchStyle, DwgPolylineFlag, DwgProxyOriginalDataFormat, DwgSmoothType, DwgTextGenerationFlag, DwgTextHorizontalAlign, DwgTextVerticalAlign, DwgThumbnailImageType, Dwg_Color_Method, Dwg_Error, Dwg_File_Type, Dwg_Hatch_Edge_Type, Dwg_Object_Supertype, Dwg_Object_Type, Dwg_Object_Type_Inverted, HEADER_VARIABLES, LibreDwg, default2 as createModule, dwgCodePageToEncoding, dwgVersions };