diff --git a/src/handlers/entities.js b/src/handlers/entities.js index 17c05f7..5771580 100644 --- a/src/handlers/entities.js +++ b/src/handlers/entities.js @@ -14,6 +14,7 @@ import insert from './entity/insert' import threeDFace from './entity/threeDFace' import dimension from './entity/dimension' import text from './entity/text' +import viewport from './entity/viewport' const handlers = [ point, @@ -30,7 +31,8 @@ const handlers = [ text, insert, dimension, - threeDFace + threeDFace, + viewport ].reduce((acc, mod) => { acc[mod.TYPE] = mod return acc diff --git a/src/handlers/entity/common.js b/src/handlers/entity/common.js index 0041d57..7061522 100644 --- a/src/handlers/entity/common.js +++ b/src/handlers/entity/common.js @@ -1,5 +1,10 @@ export default (type, value) => { switch (type) { + case 5: { + return { + handle: value + } + } case 6: // Linetype name (present if not BYLAYER). // The special name BYBLOCK indicates a @@ -35,6 +40,16 @@ export default (type, value) => { return value === 0 ? {} : { paperSpace: value } + case 68: + // Identifies whether viewport is on but fully off screen, is not active, or is off + return { + viewportOn: value + } + case 69: + // Viewport identification number + return { + viewport: value + } case 210: return { extrusionX: value diff --git a/src/handlers/entity/viewport.js b/src/handlers/entity/viewport.js new file mode 100644 index 0000000..0c4dc3d --- /dev/null +++ b/src/handlers/entity/viewport.js @@ -0,0 +1,135 @@ +import common from './common' + +export const TYPE = 'VIEWPORT' + +export const process = (tuples) => { + return tuples.reduce((entity, tuple) => { + const type = tuple[0] + const value = tuple[1] + switch (type) { + case 1: + entity.layout = parseFloat( value ) + break + case 10: + entity.center.x = parseFloat( value ) + break + case 20: + entity.center.y = parseFloat( value ) + break + case 30: + entity.center.z = parseFloat( value ) + break + case 12: + entity.centerDCS.x = parseFloat( value ) + break + case 22: + entity.centerDCS.y = parseFloat( value ) + break + case 13: + entity.snap.x = parseFloat( value ) + break + case 23: + entity.snap.y = parseFloat( value ) + break + case 14: + entity.snapSpacing.x = parseFloat( value ) + break + case 24: + entity.snapSpacing.y = parseFloat( value ) + break + case 15: + entity.gridSpacing.x = parseFloat( value ) + break + case 25: + entity.gridSpacing.y = parseFloat( value ) + break + case 16: + entity.direction.x = parseFloat( value ) + break + case 26: + entity.direction.y = parseFloat( value ) + break + case 36: + entity.direction.z = parseFloat( value ) + break + case 17: + entity.target.x = parseFloat( value ) + break + case 27: + entity.target.y = parseFloat( value ) + break + case 37: + entity.target.z = parseFloat( value ) + break + case 40: + entity.width = parseFloat( value ) + break + case 41: + entity.height = parseFloat( value ) + break + case 50: + entity.snapAngle = parseFloat( value ) + break + case 51: + entity.angle = parseFloat( value ) + break + case 68: + entity.status = value + break + case 69: + entity.id = value + break + case 90: + entity.flags = value + break + case 110: + entity.x = parseFloat( value ) + break + case 120: + entity.y = parseFloat( value ) + break + case 130: + entity.z = parseFloat( value ) + break + case 111: + entity.xAxisX = parseFloat( value ) + break + case 121: + entity.xAxisY = parseFloat( value ) + break + case 131: + entity.xAxisZ = parseFloat( value ) + break + case 112: + entity.xAxisX = parseFloat( value ) + break + case 122: + entity.xAxisY = parseFloat( value ) + break + case 132: + entity.xAxisZ = parseFloat( value ) + break + case 146: + entity.elevation = parseFloat( value ) + break + case 281: + entity.render = value + break + default: + Object.assign(entity, common(type, value)) + break + } + return entity + }, { + type: TYPE, + center: {}, + centerDCS: {}, + snap: {}, + snapSpacing: {}, + gridSpacing: {}, + direction: {}, + target: {} + }) +} + +export default { TYPE, process } diff --git a/src/handlers/tables.js b/src/handlers/tables.js index f879b01..c677a3b 100644 --- a/src/handlers/tables.js +++ b/src/handlers/tables.js @@ -68,6 +68,124 @@ const styleHandler = (tuples) => { }, { type: 'STYLE' }) } +const vPortHandler = (tuples) => { + return tuples.reduce((vport, tuple) => { + const type = tuple[0] + const value = tuple[1] + switch (type) { + case 2: + vport.name = value + break + case 5: + vport.handle = value + break + case 70: + vport.flags = value + break + case 10: + vport.lowerLeft.x = parseFloat( value ) + break + case 20: + vport.lowerLeft.y = parseFloat( value ) + break + case 11: + vport.upperRight.x = parseFloat( value ) + break + case 21: + vport.upperRight.y = parseFloat( value ) + break + case 12: + vport.center.x = parseFloat( value ) + break + case 22: + vport.center.y = parseFloat( value ) + break + case 14: + vport.snapSpacing.x = parseFloat( value ) + break + case 24: + vport.snapSpacing.y = parseFloat( value ) + break + case 15: + vport.gridSpacing.x = parseFloat( value ) + break + case 25: + vport.gridSpacing.y = parseFloat( value ) + break + case 16: + vport.direction.x = parseFloat( value ) + break + case 26: + vport.direction.y = parseFloat( value ) + break + case 36: + vport.direction.z = parseFloat( value ) + break + case 17: + vport.target.x = parseFloat( value ) + break + case 27: + vport.target.y = parseFloat( value ) + break + case 37: + vport.target.z = parseFloat( value ) + break + case 45: + vport.height = parseFloat( value ) + break + case 50: + vport.snapAngle = parseFloat( value ) + break + case 51: + vport.angle = parseFloat( value ) + break + case 110: + vport.x = parseFloat( value ) + break + case 120: + vport.y = parseFloat( value ) + break + case 130: + vport.z = parseFloat( value ) + break + case 111: + vport.xAxisX = parseFloat( value ) + break + case 121: + vport.xAxisY = parseFloat( value ) + break + case 131: + vport.xAxisZ = parseFloat( value ) + break + case 112: + vport.xAxisX = parseFloat( value ) + break + case 122: + vport.xAxisY = parseFloat( value ) + break + case 132: + vport.xAxisZ = parseFloat( value ) + break + case 146: + vport.elevation = parseFloat( value ) + break + default: + } + return vport + }, { + type: 'VPORT', + center: {}, + lowerLeft: {}, + upperRight: {}, + center: {}, + snap: {}, + snapSpacing: {}, + gridSpacing: {}, + direction: {}, + target: {} + }) +} + const tableHandler = (tuples, tableType, handler) => { const tableRowsTuples = [] @@ -112,6 +230,7 @@ export default (tuples) => { let stylesTuples = [] let layersTuples = [] + let vPortTuples = [] tableGroups.forEach(group => { if (group[0][1] === 'STYLE') { stylesTuples = group @@ -119,11 +238,14 @@ export default (tuples) => { logger.warn('LTYPE in tables not supported') } else if (group[0][1] === 'LAYER') { layersTuples = group + }else if (group[0][1] === 'VPORT') { + vPortTuples = group } }) return { layers: tableHandler(layersTuples, 'LAYER', layerHandler), - styles: tableHandler(stylesTuples, 'STYLE', styleHandler) + styles: tableHandler(stylesTuples, 'STYLE', styleHandler), + vports: tableHandler(vPortTuples, 'VPORT', vPortHandler) } }