UNPKG

libredwg-web-ts

Version:

A DWG/DXF JavaScript parser based on libredwg

1,006 lines (1,004 loc) 37.1 kB
import { HEADER_VARIABLES, MODEL_SPACE } from '../database'; import { Dwg_Object_Type } from '../types'; import { LibreEntityConverter } from './entityConverter'; /** * Class used to convert Dwg_Data instance to DwgDatabase instance. */ export class LibreDwgConverter { libredwg; entityConverter; constructor(instance) { this.libredwg = instance; this.entityConverter = new LibreEntityConverter(instance); } convert(data) { const db = { tables: { BLOCK_RECORD: { entries: [] }, DIMSTYLE: { entries: [] }, LAYER: { entries: [] }, LTYPE: { entries: [] }, STYLE: { entries: [] }, VPORT: { entries: [] } }, objects: { IMAGEDEF: [], LAYOUT: [] }, header: {}, entities: [] }; const libredwg = this.libredwg; this.convertHeader(data, db.header); const num_objects = libredwg.dwg_get_num_objects(data); const results = []; for (let i = 0; i < num_objects; i++) { const obj = libredwg.dwg_get_object(data, i); const tio = libredwg.dwg_object_to_object_tio(obj); if (tio) { const fixedtype = libredwg.dwg_object_get_fixedtype(obj); switch (fixedtype) { case Dwg_Object_Type.DWG_TYPE_BLOCK_HEADER: { const btr = this.convertBlockRecord(tio, obj); db.tables.BLOCK_RECORD.entries.push(btr); if (btr.name == MODEL_SPACE) { db.entities = btr.entities; } } break; case Dwg_Object_Type.DWG_TYPE_DIMSTYLE: db.tables.DIMSTYLE.entries.push(this.convertDimStyle(tio, obj)); break; case Dwg_Object_Type.DWG_TYPE_LAYER: db.tables.LAYER.entries.push(this.convertLayer(tio, obj)); break; case Dwg_Object_Type.DWG_TYPE_LTYPE: db.tables.LTYPE.entries.push(this.convertLineType(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_IMAGEDEF: db.objects.IMAGEDEF.push(this.convertImageDef(tio, obj)); break; case Dwg_Object_Type.DWG_TYPE_LAYOUT: db.objects.LAYOUT.push(this.convertLayout(tio, obj)); break; default: break; } results.push(tio); } } return db; } 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_value(data, var_name).data; // Get object name if the 'value' is one Dwg_Object_Ref instance. // TODO: handle 'CMLSTYLE' correctly if (name == 'CELTYPE' || name == 'CLAYER' || name == 'CLAYER' || name == 'DIMSTYLE' || name == 'DIMTXSTY' || name == 'TEXTSTYLE') { value = libredwg.dwg_ref_get_object_name(value); } else if (name == 'DRAGVS') { value = libredwg.dwg_ref_get_absref(value); } // @ts-expect-error header variable name header[name] = value; }); } convertBlockRecord(item, obj) { const libredwg = this.libredwg; const commonAttrs = this.getCommonTableEntryAttrs(item, obj); // The BLOCK_HEADER has only the abbrevated name, but we want "*D30" instead of "*D". // So get full name from BLOCK entity. const block = libredwg.dwg_entity_block_header_get_block(item); commonAttrs.name = block.name; const flags = libredwg.dwg_dynapi_entity_value(item, 'flag').data; const description = libredwg.dwg_dynapi_entity_value(item, 'description') .data; const basePoint = libredwg.dwg_dynapi_entity_value(item, 'base_pt') .data; const insertionUnits = libredwg.dwg_dynapi_entity_value(item, 'insert_units').data; const explodability = libredwg.dwg_dynapi_entity_value(item, 'explodable') .data; const scalability = libredwg.dwg_dynapi_entity_value(item, 'block_scaling') .data; const layout_ptr = libredwg.dwg_dynapi_entity_value(item, 'layout') .data; const layout = libredwg.dwg_ref_get_absref(layout_ptr); let bmpPreview = ''; const uint8ArrayToHexString = (bytes) => { const hexChars = new Array(bytes.length); for (let i = 0; i < bytes.length; i++) { hexChars[i] = bytes[i].toString(16).toUpperCase(); } return hexChars.join(''); }; const bmpPreviewBinaryData = libredwg.dwg_entity_block_header_get_preview(item); if (bmpPreviewBinaryData && bmpPreviewBinaryData.length > 0) { bmpPreview = uint8ArrayToHexString(bmpPreviewBinaryData); } const entities = this.convertEntities(obj, commonAttrs.handle); return { ...commonAttrs, flags: flags, description: description, basePoint: basePoint, layout: layout, insertionUnits: insertionUnits, explodability: explodability, scalability: scalability, bmpPreview: bmpPreview, entities: 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_value(item, 'DIMTOL') .data; const DIMLIM = libredwg.dwg_dynapi_entity_value(item, 'DIMLIM') .data; const DIMTIH = libredwg.dwg_dynapi_entity_value(item, 'DIMTIH') .data; const DIMTOH = libredwg.dwg_dynapi_entity_value(item, 'DIMTOH') .data; const DIMSE1 = libredwg.dwg_dynapi_entity_value(item, 'DIMSE1') .data; const DIMSE2 = libredwg.dwg_dynapi_entity_value(item, 'DIMSE2') .data; const DIMALT = libredwg.dwg_dynapi_entity_value(item, 'DIMALT') .data; const DIMTOFL = libredwg.dwg_dynapi_entity_value(item, 'DIMTOFL') .data; const DIMSAH = libredwg.dwg_dynapi_entity_value(item, 'DIMSAH') .data; const DIMTIX = libredwg.dwg_dynapi_entity_value(item, 'DIMTIX') .data; const DIMSOXD = libredwg.dwg_dynapi_entity_value(item, 'DIMSOXD') .data; const DIMALTD = libredwg.dwg_dynapi_entity_value(item, 'DIMALTD') .data; const DIMZIN = libredwg.dwg_dynapi_entity_value(item, 'DIMZIN') .data; const DIMSD1 = libredwg.dwg_dynapi_entity_value(item, 'DIMSD1') .data; const DIMSD2 = libredwg.dwg_dynapi_entity_value(item, 'DIMSD2') .data; const DIMTOLJ = libredwg.dwg_dynapi_entity_value(item, 'DIMTOLJ') .data; const DIMJUST = libredwg.dwg_dynapi_entity_value(item, 'DIMJUST') .data; const DIMFIT = libredwg.dwg_dynapi_entity_value(item, 'DIMFIT') .data; const DIMUPT = libredwg.dwg_dynapi_entity_value(item, 'DIMUPT') .data; const DIMTZIN = libredwg.dwg_dynapi_entity_value(item, 'DIMTZIN') .data; const DIMALTZ = libredwg.dwg_dynapi_entity_value(item, 'DIMALTZ') .data; const DIMALTTZ = libredwg.dwg_dynapi_entity_value(item, 'DIMALTTZ') .data; const DIMTAD = libredwg.dwg_dynapi_entity_value(item, 'DIMTAD') .data; const DIMUNIT = libredwg.dwg_dynapi_entity_value(item, 'DIMUNIT') .data; const DIMAUNIT = libredwg.dwg_dynapi_entity_value(item, 'DIMAUNIT') .data; const DIMDEC = libredwg.dwg_dynapi_entity_value(item, 'DIMDEC') .data; const DIMTDEC = libredwg.dwg_dynapi_entity_value(item, 'DIMTDEC') .data; const DIMALTU = libredwg.dwg_dynapi_entity_value(item, 'DIMALTU') .data; const DIMALTTD = libredwg.dwg_dynapi_entity_value(item, 'DIMALTTD') .data; const DIMSCALE = libredwg.dwg_dynapi_entity_value(item, 'DIMSCALE') .data; const DIMASZ = libredwg.dwg_dynapi_entity_value(item, 'DIMASZ') .data; const DIMEXO = libredwg.dwg_dynapi_entity_value(item, 'DIMEXO') .data; const DIMDLI = libredwg.dwg_dynapi_entity_value(item, 'DIMDLI') .data; const DIMEXE = libredwg.dwg_dynapi_entity_value(item, 'DIMEXE') .data; const DIMRND = libredwg.dwg_dynapi_entity_value(item, 'DIMRND') .data; const DIMDLE = libredwg.dwg_dynapi_entity_value(item, 'DIMDLE') .data; const DIMTP = libredwg.dwg_dynapi_entity_value(item, 'DIMTP').data; const DIMTM = libredwg.dwg_dynapi_entity_value(item, 'DIMTM').data; const DIMFXL = libredwg.dwg_dynapi_entity_value(item, 'DIMFXL') .data; const DIMJOGANG = libredwg.dwg_dynapi_entity_value(item, 'DIMJOGANG') .data; const DIMTFILL = libredwg.dwg_dynapi_entity_value(item, 'DIMTFILL') .data; const DIMTFILLCLR = libredwg.dwg_dynapi_entity_value(item, 'DIMTFILLCLR') .data; const DIMAZIN = libredwg.dwg_dynapi_entity_value(item, 'DIMAZIN') .data; const DIMARCSYM = libredwg.dwg_dynapi_entity_value(item, 'DIMARCSYM') .data; const DIMTXT = libredwg.dwg_dynapi_entity_value(item, 'DIMTXT') .data; const DIMCEN = libredwg.dwg_dynapi_entity_value(item, 'DIMCEN') .data; const DIMTSZ = libredwg.dwg_dynapi_entity_value(item, 'DIMTSZ') .data; const DIMALTF = libredwg.dwg_dynapi_entity_value(item, 'DIMALTF') .data; const DIMLFAC = libredwg.dwg_dynapi_entity_value(item, 'DIMLFAC') .data; const DIMTVP = libredwg.dwg_dynapi_entity_value(item, 'DIMTVP') .data; const DIMTFAC = libredwg.dwg_dynapi_entity_value(item, 'DIMTFAC') .data; const DIMGAP = libredwg.dwg_dynapi_entity_value(item, 'DIMGAP') .data; const DIMPOST = libredwg.dwg_dynapi_entity_value(item, 'DIMPOST') .data; const DIMAPOST = libredwg.dwg_dynapi_entity_value(item, 'DIMAPOST') .data; const DIMBLK_T = libredwg.dwg_dynapi_entity_value(item, 'DIMBLK_T') .data; const DIMBLK1_T = libredwg.dwg_dynapi_entity_value(item, 'DIMBLK1_T') .data; const DIMBLK2_T = libredwg.dwg_dynapi_entity_value(item, 'DIMBLK2_T') .data; const DIMALTRND = libredwg.dwg_dynapi_entity_value(item, 'DIMALTRND') .data; const DIMCLRD_N = libredwg.dwg_dynapi_entity_value(item, 'DIMCLRD_N') .data; const DIMCLRE_N = libredwg.dwg_dynapi_entity_value(item, 'DIMCLRE_N') .data; const DIMCLRT_N = libredwg.dwg_dynapi_entity_value(item, 'DIMCLRT_N') .data; const DIMCLRD = libredwg.dwg_dynapi_entity_value(item, 'DIMCLRD') .data; const DIMCLRE = libredwg.dwg_dynapi_entity_value(item, 'DIMCLRE') .data; const DIMCLRT = libredwg.dwg_dynapi_entity_value(item, 'DIMCLRT') .data; const DIMADEC = libredwg.dwg_dynapi_entity_value(item, 'DIMADEC') .data; const DIMFRAC = libredwg.dwg_dynapi_entity_value(item, 'DIMFRAC') .data; const DIMLUNIT = libredwg.dwg_dynapi_entity_value(item, 'DIMLUNIT') .data; const DIMDSEP = libredwg.dwg_dynapi_entity_value(item, 'DIMDSEP') .data; const DIMTMOVE = libredwg.dwg_dynapi_entity_value(item, 'DIMTMOVE') .data; const DIMATFIT = libredwg.dwg_dynapi_entity_value(item, 'DIMATFIT') .data; const DIMFXLON = libredwg.dwg_dynapi_entity_value(item, 'DIMFXLON') .data; const DIMTXTDIRECTION = libredwg.dwg_dynapi_entity_value(item, 'DIMTXTDIRECTION').data; const DIMALTMZF = libredwg.dwg_dynapi_entity_value(item, 'DIMALTMZF') .data; const DIMALTMZS = libredwg.dwg_dynapi_entity_value(item, 'DIMALTMZS') .data; const DIMMZF = libredwg.dwg_dynapi_entity_value(item, 'DIMMZF') .data; const DIMMZS = libredwg.dwg_dynapi_entity_value(item, 'DIMMZS') .data; const DIMLWD = libredwg.dwg_dynapi_entity_value(item, 'DIMLWD') .data; const DIMLWE = libredwg.dwg_dynapi_entity_value(item, 'DIMLWE') .data; const DIMTXSTY_Ptr = libredwg.dwg_dynapi_entity_value(item, 'DIMTXSTY') .data; const DIMTXSTY = libredwg.dwg_ref_get_absref(DIMTXSTY_Ptr); const DIMLDRBLK_Ptr = libredwg.dwg_dynapi_entity_value(item, 'DIMLDRBLK') .data; const DIMLDRBLK = libredwg.dwg_ref_get_absref(DIMLDRBLK_Ptr); return { ...commonAttrs, DIMPOST: DIMPOST, DIMAPOST: DIMAPOST, DIMBLK: DIMBLK_T, DIMBLK1: DIMBLK1_T, DIMBLK2: DIMBLK2_T, DIMSCALE: DIMSCALE, DIMASZ: DIMASZ, DIMEXO: DIMEXO, DIMDLI: DIMDLI, DIMEXE: DIMEXE, DIMRND: DIMRND, DIMDLE: DIMDLE, DIMTP: DIMTP, DIMTM: DIMTM, DIMTXT: DIMTXT, DIMCEN: DIMCEN, DIMTSZ: DIMTSZ, DIMALTF: DIMALTF, DIMLFAC: DIMLFAC, DIMTVP: DIMTVP, DIMTFAC: DIMTFAC, DIMGAP: DIMGAP, DIMALTRND: DIMALTRND, DIMTOL: DIMTOL, DIMLIM: DIMLIM, DIMTIH: DIMTIH, DIMTOH: DIMTOH, DIMSE1: DIMSE1, DIMSE2: DIMSE2, DIMTAD: DIMTAD, DIMZIN: DIMZIN, DIMAZIN: DIMAZIN, DIMALT: DIMALT, DIMALTD: DIMALTD, DIMTOFL: DIMTOFL, DIMSAH: DIMSAH, DIMTIX: DIMTIX, DIMSOXD: DIMSOXD, DIMCLRD: DIMCLRD, DIMCLRE: DIMCLRE, DIMCLRT: DIMCLRT, DIMADEC: DIMADEC, DIMUNIT: DIMUNIT, DIMDEC: DIMDEC, DIMTDEC: DIMTDEC, DIMALTU: DIMALTU, DIMALTTD: DIMALTTD, DIMAUNIT: DIMAUNIT, DIMFRAC: DIMFRAC, DIMLUNIT: DIMLUNIT, DIMDSEP: String.fromCharCode(DIMDSEP), DIMTMOVE: DIMTMOVE, DIMJUST: DIMJUST, DIMSD1: DIMSD1, DIMSD2: DIMSD2, DIMTOLJ: DIMTOLJ, DIMTZIN: DIMTZIN, DIMALTZ: DIMALTZ, DIMALTTZ: DIMALTTZ, DIMFIT: DIMFIT, DIMUPT: DIMUPT, DIMATFIT: DIMATFIT, DIMTXSTY: DIMTXSTY, DIMLDRBLK: DIMLDRBLK, DIMLWD: DIMLWD, DIMLWE: DIMLWE, DIMFXL: DIMFXL, DIMJOGANG: DIMJOGANG, DIMTFILL: DIMTFILL, DIMTFILLCLR: DIMTFILLCLR, DIMARCSYM: DIMARCSYM, DIMCLRD_N: DIMCLRD_N, DIMCLRE_N: DIMCLRE_N, DIMCLRT_N: DIMCLRT_N, DIMFXLON: DIMFXLON, DIMTXTDIRECTION: DIMTXTDIRECTION, DIMALTMZF: DIMALTMZF, DIMALTMZS: DIMALTMZS, DIMMZF: DIMMZF, DIMMZS: DIMMZS }; } convertLayer(item, obj) { const libredwg = this.libredwg; const commonAttrs = this.getCommonTableEntryAttrs(item, obj); const flag = libredwg.dwg_dynapi_entity_value(item, 'flag').data; const frozen = libredwg.dwg_dynapi_entity_value(item, 'frozen') .data; const off = libredwg.dwg_dynapi_entity_value(item, 'off').data; const frozenInNew = libredwg.dwg_dynapi_entity_value(item, 'frozen_in_new') .data; const locked = libredwg.dwg_dynapi_entity_value(item, 'plotflockedlag') .data; const plotFlag = libredwg.dwg_dynapi_entity_value(item, 'plotflag') .data; const linewt = libredwg.dwg_dynapi_entity_value(item, 'linewt') .data; const color = libredwg.dwg_dynapi_entity_value(item, 'color') .data; const unsignedValue = color.rgb >>> 0; const index = unsignedValue & 0xFF; const colors = [ 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 ] return { ...commonAttrs, standardFlag: flag, colorIndex: color.index, color: colors[index], lineType: '', frozen: frozen != 0, off: off != 0, frozenInNew: frozenInNew != 0, locked: locked != 0, plotFlag: plotFlag, lineweight: linewt, plotStyleNameObjectId: '', materialObjectId: '' }; } convertLineType(item, obj) { const libredwg = this.libredwg; const commonAttrs = this.getCommonTableEntryAttrs(item, obj); const flag = libredwg.dwg_dynapi_entity_value(item, 'flag').data; const description = libredwg.dwg_dynapi_entity_value(item, 'description') .data; const numDashes = libredwg.dwg_dynapi_entity_value(item, 'numdashes') .data; const patternLen = libredwg.dwg_dynapi_entity_value(item, 'pattern_len') .data; // const dashes = libredwg.dwg_dynapi_entity_value(item, 'dashes').data as Dwg_Array_Ptr // const dashArray = dashes ? libredwg.dwg_ptr_to_ltype_dash_array(dashes, numDashes) : [] const dashArray = []; return { ...commonAttrs, description: description, standardFlag: flag, numberOfLineTypes: numDashes, totalPatternLength: patternLen, pattern: this.convertLineTypePattern(dashArray) }; } convertLineTypePattern(dashes) { const patterns = []; dashes.forEach(dash => { // For now always convert complex line type to simple line type patterns.push({ elementLength: dash.length || 0, elementTypeFlag: 0 }); }); return patterns; } convertStyle(item, obj) { const libredwg = this.libredwg; const commonAttrs = this.getCommonTableEntryAttrs(item, obj); const standardFlag = libredwg.dwg_dynapi_entity_value(item, 'flag') .data; const widthFactor = libredwg.dwg_dynapi_entity_value(item, 'width_factor') .data; const obliqueAngle = libredwg.dwg_dynapi_entity_value(item, 'oblique_angle') .data; const textGenerationFlag = libredwg.dwg_dynapi_entity_value(item, 'generation').data; const lastHeight = libredwg.dwg_dynapi_entity_value(item, 'last_height') .data; const font = libredwg.dwg_dynapi_entity_value(item, 'font_file') .data; const bigFont = libredwg.dwg_dynapi_entity_value(item, 'bigfont_file') .data; return { ...commonAttrs, standardFlag: standardFlag, fixedTextHeight: 0, // TODO: Set the correct value widthFactor: widthFactor, obliqueAngle: obliqueAngle, textGenerationFlag: textGenerationFlag, lastHeight: lastHeight, font: font, bigFont: bigFont }; } convertViewport(item, obj) { const libredwg = this.libredwg; const commonAttrs = this.getCommonTableEntryAttrs(item, obj); const standardFlag = libredwg.dwg_dynapi_entity_value(item, 'flag') .data; const viewHeight = libredwg.dwg_dynapi_entity_value(item, 'VIEWSIZE') .data; // BITCODE_BD view_width; // in DWG r13+, needed to calc. aspect_ratio // BITCODE_BD aspect_ratio; // DXF 41 = view_width / VIEWSIZE const center = libredwg.dwg_dynapi_entity_value(item, 'VIEWCTR') .data; const viewTarget = libredwg.dwg_dynapi_entity_value(item, 'view_target') .data; const viewDirectionFromTarget = libredwg.dwg_dynapi_entity_value(item, 'VIEWDIR').data; const viewTwistAngle = libredwg.dwg_dynapi_entity_value(item, 'view_twist') .data; const lensLength = libredwg.dwg_dynapi_entity_value(item, 'lens_length') .data; const frontClippingPlane = libredwg.dwg_dynapi_entity_value(item, 'front_clip_z').data; const backClippingPlane = libredwg.dwg_dynapi_entity_value(item, 'back_clip_z').data; const viewMode = libredwg.dwg_dynapi_entity_value(item, 'VIEWMODE') .data; const renderMode = libredwg.dwg_dynapi_entity_value(item, 'render_mode') .data; const isDefaultLightingOn = libredwg.dwg_dynapi_entity_value(item, 'use_default_lights') .data != 0; const defaultLightningType = libredwg.dwg_dynapi_entity_value(item, 'default_lightning_type').data; const brightness = libredwg.dwg_dynapi_entity_value(item, 'brightness') .data; const contrast = libredwg.dwg_dynapi_entity_value(item, 'contrast') .data; const ambient_color = libredwg.dwg_dynapi_entity_value(item, 'ambient_color').data; // ViewportTableRecord const lowerLeftCorner = libredwg.dwg_dynapi_entity_value(item, 'lower_left') .data; const upperRightCorner = libredwg.dwg_dynapi_entity_value(item, 'upper_right').data; // TODO: Not sure whether 'circleSides' is equal to 'circle_zoom' const circleSides = libredwg.dwg_dynapi_entity_value(item, 'circle_zoom') .data; const ucsIconSetting = libredwg.dwg_dynapi_entity_value(item, 'UCSICON') .data; // TODO: Not sure whether 'gridSpacing' is equal to 'GRIDUNIT' const gridSpacing = libredwg.dwg_dynapi_entity_value(item, 'GRIDUNIT') .data; const snapRotationAngle = libredwg.dwg_dynapi_entity_value(item, 'SNAPANG') .data; const snapBasePoint = libredwg.dwg_dynapi_entity_value(item, 'SNAPBASE') .data; // TODO: Not sure whether 'snapSpacing' is equal to 'SNAPUNIT' const snapSpacing = libredwg.dwg_dynapi_entity_value(item, 'SNAPUNIT') .data; const ucsOrigin = libredwg.dwg_dynapi_entity_value(item, 'ucsorg') .data; const ucsXAxis = libredwg.dwg_dynapi_entity_value(item, 'ucsxdir') .data; const ucsYAxis = libredwg.dwg_dynapi_entity_value(item, 'ucsydir') .data; const elevation = libredwg.dwg_dynapi_entity_value(item, 'ucs_elevation') .data; const majorGridLines = libredwg.dwg_dynapi_entity_value(item, 'grid_major') .data; const background = libredwg.dwg_dynapi_entity_value(item, 'background') .data; const backgroundObjectId = background ? libredwg.dwg_ref_get_absref(background).toString() : undefined; const visualstyle = libredwg.dwg_dynapi_entity_value(item, 'visualstyle') .data; const visualStyleObjectId = visualstyle ? libredwg.dwg_ref_get_absref(visualstyle).toString() : undefined; // BITCODE_B UCSFOLLOW; // BITCODE_B FASTZOOM; // BITCODE_B GRIDMODE; /* DXF 76: on or off */ // BITCODE_B SNAPMODE; /* DXF 75: on or off */ // BITCODE_B SNAPSTYLE; // BITCODE_BS SNAPISOPAIR; // BITCODE_B ucs_at_origin; // BITCODE_B UCSVP; // BITCODE_BS UCSORTHOVIEW; // BITCODE_BS grid_flags; /* bit 1: bound to limits, bit 2: adaptive */ // BITCODE_H sun; // BITCODE_H named_ucs; // BITCODE_H base_ucs; return { ...commonAttrs, standardFlag: standardFlag, lowerLeftCorner: lowerLeftCorner, upperRightCorner: upperRightCorner, center: center, snapBasePoint: snapBasePoint, snapSpacing: snapSpacing, gridSpacing: gridSpacing, viewDirectionFromTarget: viewDirectionFromTarget, viewTarget: viewTarget, lensLength: lensLength, frontClippingPlane: frontClippingPlane, backClippingPlane: backClippingPlane, viewHeight: viewHeight, snapRotationAngle: snapRotationAngle, viewTwistAngle: viewTwistAngle, circleSides: circleSides, frozenLayers: [], // TODO: Set the correct value styleSheet: '', // TODO: Set the correct value renderMode: renderMode, viewMode: viewMode, ucsIconSetting: ucsIconSetting, ucsOrigin: ucsOrigin, ucsXAxis: ucsXAxis, ucsYAxis: ucsYAxis, orthographicType: 0, // TODO: Set the correct value elevation: elevation, shadePlotSetting: 0, // TODO: Set the correct value majorGridLines: majorGridLines, backgroundObjectId: backgroundObjectId, // shadePlotObjectId: undefined, visualStyleObjectId: visualStyleObjectId, isDefaultLightingOn: isDefaultLightingOn, defaultLightingType: defaultLightningType, brightness: brightness, contrast: 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: handle.value, ownerHandle: ownerhandle.absolute_ref, name: libredwg.dwg_dynapi_entity_value(tio, 'name').data }; } convertImageDef(item, obj) { const libredwg = this.libredwg; const commonAttrs = this.getCommonObjectAttrs(obj); // const classVersion = libredwg.dwg_dynapi_entity_value(item, 'class_version').data as number const size = libredwg.dwg_dynapi_entity_value(item, 'image_size') .data; const fileName = libredwg.dwg_dynapi_entity_value(item, 'file_path') .data; const isLoaded = libredwg.dwg_dynapi_entity_value(item, 'is_loaded') .data; const sizeOfOnePixel = libredwg.dwg_dynapi_entity_value(item, 'pixel_size') .data; const resolutionUnits = libredwg.dwg_dynapi_entity_value(item, 'resunits') .data; return { ...commonAttrs, fileName: fileName, size: size, sizeOfOnePixel: sizeOfOnePixel, isLoaded: isLoaded, resolutionUnits: resolutionUnits }; } convertLayout(item, obj) { const libredwg = this.libredwg; const commonAttrs = this.getCommonObjectAttrs(obj); // AcDbLayout const layoutName = libredwg.dwg_dynapi_entity_value(item, 'layout_name') .data; const tabOrder = libredwg.dwg_dynapi_entity_value(item, 'tab_order') .data; const controlFlag = libredwg.dwg_dynapi_entity_value(item, 'layout_flags') .data; const insertionPoint = libredwg.dwg_dynapi_entity_value(item, 'INSBASE') .data; const minLimit = libredwg.dwg_dynapi_entity_value(item, 'LIMMIN') .data; const maxLimit = libredwg.dwg_dynapi_entity_value(item, 'LIMMAX') .data; const ucsOrigin = libredwg.dwg_dynapi_entity_value(item, 'UCSORG') .data; const ucsXAxis = libredwg.dwg_dynapi_entity_value(item, 'UCSXDIR') .data; const ucsYAxis = libredwg.dwg_dynapi_entity_value(item, 'UCSYDIR') .data; const orthographicType = libredwg.dwg_dynapi_entity_value(item, 'UCSORTHOVIEW').data; const minExtent = libredwg.dwg_dynapi_entity_value(item, 'EXTMIN') .data; const maxExtent = libredwg.dwg_dynapi_entity_value(item, 'EXTMAX') .data; const elevation = libredwg.dwg_dynapi_entity_value(item, 'ucs_elevation') .data; // BITCODE_H block_header; // BITCODE_H active_viewport; // BITCODE_H base_ucs; // BITCODE_H named_ucs; // BITCODE_BL num_viewports; // r2004+ // BITCODE_H *viewports; // r2004+ return { ...commonAttrs, layoutName: layoutName, controlFlag: controlFlag, tabOrder: tabOrder, minLimit: minLimit, maxLimit: maxLimit, insertionPoint: insertionPoint, minExtent: minExtent, maxExtent: maxExtent, elevation: elevation, ucsOrigin: ucsOrigin, ucsXAxis: ucsXAxis, ucsYAxis: ucsYAxis, orthographicType: orthographicType, paperSpaceTableId: '', // TODO: Set the correct value viewportId: '', // TODO: Set the correct value // namedUcsId?: string; // orthographicUcsId?: string; shadePlotId: '' // TODO: Set the correct value }; } 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: handle.value, ownerHandle: ownerhandle.absolute_ref }; } } //# sourceMappingURL=converter.js.map