Files
Leantime/dev/DWGViewer/libs/libredwg/dist/libredwg-web.js

6944 lines
263 KiB
JavaScript
Raw Permalink Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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: `<g transform="matrix(-1 0 0 1 0 0)">${element}</g>`
};
} 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 = `<line x1="${entity.startPoint.x}" y1="${entity.startPoint.y}" x2="${entity.endPoint.x}" y2="${entity.endPoint.y}" />`;
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 = `<line x1="${firstPoint.x}" y1="${firstPoint.y}" x2="${secondPoint.x}" y2="${secondPoint.y}" />`;
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 = `<line x1="${firstPoint.x}" y1="${firstPoint.y}" x2="${secondPoint.x}" y2="${secondPoint.y}" />`;
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 `<text x="${x}" y="${y}" font-size="${fontsize}" text-anchor="${anchor}" transform="${transform}">${line}</text>`;
});
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(
`<line x1="${x}" y1="${y}" x2="${x + width}" y2="${y}" stroke="black" />`
);
if (cell.bottomBorderVisibility)
lines.push(
`<line x1="${x}" y1="${y + height}" x2="${x + width}" y2="${y + height}" stroke="black" />`
);
if (cell.leftBorderVisibility)
lines.push(
`<line x1="${x}" y1="${y}" x2="${x}" y2="${y + height}" stroke="black" />`
);
if (cell.rightBorderVisibility)
lines.push(
`<line x1="${x + width}" y1="${y}" x2="${x + width}" y2="${y + height}" stroke="black" />`
);
const textX = x + width / 2;
const textY = y + height / 2 + cell.textHeight / 3;
const text = `<text x="${textX}" y="${textY}" font-size="${cell.textHeight}" text-anchor="middle" dominant-baseline="middle">${cell.text}</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 = `
<svg xmlns="http://www.w3.org/2000/svg" width="${totalWidth}" height="${totalHeight}" viewBox="${originX} ${originY} ${totalWidth} ${totalHeight}">
${svgElements}
</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: `<path d="${d}" />` };
}
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 = `<circle cx="${entity.center.x}" cy="${entity.center.y}" r="${entity.radius}" />`;
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 = `<g transform="rotate(${rotationAngle / Math.PI * 180} ${cx}, ${cy})"><ellipse cx="${cx}" cy="${cy}" rx="${rx}" ry="${ry}" /></g>`;
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 = `<path d="${d}" />`;
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: `<use href="#${entity.name}" />`
};
}
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: `<use href="#${entity.name}" transform="${transform}" />`
};
}
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(`<g id="${entity.handle}">${element}</g>`);
} else {
acc.elements.push(
`<g id="${entity.handle}" stroke="${color.cssColor}" fill="${fill}">${element}</g>`
);
}
}
return acc;
},
{
bbox: new Box2D(),
elements: []
}
);
if (bbox.valid) {
return {
bbox,
element: `<g id="${block.name}">${elements.join("\n")}</g>`
};
}
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 `<?xml version="1.0"?>
<svg
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1"
preserveAspectRatio="xMinYMin meet"
viewBox="${viewBox.x} ${viewBox.y} ${viewBox.width} ${viewBox.height}"
width="100%" height="100%"
>
<defs>${blockElements}</defs>
<g stroke="#000000" stroke-width="0.1%" fill="none" transform="matrix(1,0,0,-1,0,0)">
${ms ? ms.element : ""}
</g>
</svg>`;
}
}
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
};