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 = `
`.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 `
`;
}
}
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
};