Skip to content

Commit

Permalink
feat: add layout & paper space to parser (#106)
Browse files Browse the repository at this point in the history
Co-authored-by: ibon eskudero <ibon.eskudero@tecnalia.com>
  • Loading branch information
ieskudero and ibon eskudero committed Sep 14, 2022
1 parent 80e9fa1 commit d0a6d19
Show file tree
Hide file tree
Showing 6 changed files with 12,539 additions and 0 deletions.
6 changes: 6 additions & 0 deletions src/handlers/blocks.js
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,12 @@ export default (tuples) => {
case 30:
block.z = value
break
case 67:
{ if( value !== 0 ) block.paperSpace = value }
break
case 410:
block.layout = value
break
default:
break
}
Expand Down
10 changes: 10 additions & 0 deletions src/handlers/entity/common.js
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,12 @@ export default (type, value) => {
return {
colorNumber: value
}
case 67:
// Paper space or sheet.
// Absent or zero indicates entity is in model space. 1 indicates entity is in paper space (optional)
return value === 0 ? {} : {
paperSpace: value
}
case 210:
return {
extrusionX: value
Expand All @@ -41,6 +47,10 @@ export default (type, value) => {
return {
extrusionZ: value
}
case 410:
return {
layout: value
}
default:
return {}
}
Expand Down
75 changes: 75 additions & 0 deletions src/handlers/objects.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,75 @@

export default (tuples) => {
let state
let objects = {
layouts: []
}
let layout = {}

tuples.forEach((tuple, i) => {
const type = tuple[0]
const value = tuple[1]
if( type === 0 ) {
state = 'IDLE'
}
if (value === 'LAYOUT') {
state = 'layout'
layout = {}
objects.layouts.push(layout)
}
if( state === 'layout' && type !== 0 ) {
//wait until AcDbLayout shows up
switch ( type ) {
case 100: { if( value === 'AcDbLayout' ) state = 'AcDbLayout'; } break;
}
}
if( state === 'AcDbLayout' && type !== 0 ) {
//save layout attributes
switch ( type ) {
case 1: { layout.name = value; } break;
case 5: { layout.handle = value; } break;
case 10: { layout.minLimitX = parseFloat( value ); } break;
case 20: { layout.minLimitY = parseFloat( value ); } break;
case 11: { layout.maxLimitX = parseFloat( value ); } break;
case 21: { layout.maxLimitY = parseFloat( value ); } break;
case 12: { layout.x = parseFloat( value ); } break;
case 22: { layout.y = parseFloat( value ); } break;
case 32: { layout.z = parseFloat( value ); } break;
case 14: { layout.minX = parseFloat( value ); } break;
case 24: { layout.minY = parseFloat( value ); } break;
case 34: { layout.minZ = parseFloat( value ); } break;
case 15: { layout.maxX = parseFloat( value ); } break;
case 25: { layout.maxY = parseFloat( value ); } break;
case 35: { layout.maxZ = parseFloat( value ); } break;
case 70: { layout.flag = value === 1 ? 'PSLTSCALE' : 'LIMCHECK' ; } break;
case 71: { layout.tabOrder = value; } break;
case 146: { layout.elevation = parseFloat( value ); } break;
case 13: { layout.ucsX = parseFloat( value ); } break;
case 23: { layout.ucsY = parseFloat( value ); } break;
case 33: { layout.ucsZ = parseFloat( value ); } break;
case 16: { layout.ucsXaxisX = parseFloat( value ); } break;
case 26: { layout.ucsXaxisY = parseFloat( value ); } break;
case 36: { layout.ucsXaxisZ = parseFloat( value ); } break;
case 17: { layout.ucsYaxisX = parseFloat( value ); } break;
case 27: { layout.ucsYaxisY = parseFloat( value ); } break;
case 37: { layout.ucsYaxisZ = parseFloat( value ); } break;
case 76: {
switch ( value ) {
case 0: { layout.ucsType = 'NOT ORTHOGRAPHIC'; } break;
case 1: { layout.ucsType = 'TOP'; } break;
case 2: { layout.ucsType = 'BOTTOM'; } break;
case 3: { layout.ucsType = 'FRONT'; } break;
case 4: { layout.ucsType = 'BACK'; } break;
case 5: { layout.ucsType = 'LEFT'; } break;
case 6: { layout.ucsType = 'RIGHT'; } break;
}
} break;
case 330: { layout.tableRecord = value; } break;
case 331: { layout.lastActiveViewport = value; } break;
case 333: { layout.shadePlot = value; } break;
}
}
});

return objects
}
5 changes: 5 additions & 0 deletions src/parseString.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ import headerHandler from './handlers/header'
import tablesHandler from './handlers/tables'
import blocksHandler from './handlers/blocks'
import entitiesHandler from './handlers/entities'
import objectsHandler from './handlers/objects'
import logger from './util/logger'

// Parse the value into the native representation
Expand Down Expand Up @@ -67,6 +68,9 @@ const reduceSection = (acc, section) => {
case 'ENTITIES':
acc.entities = entitiesHandler(contentTuples)
break
case 'OBJECTS':
acc.objects = objectsHandler(contentTuples)
break
default:
logger.warn(`Unsupported section: ${sectionType}`)
}
Expand All @@ -82,6 +86,7 @@ export default (string) => {
header: {},
blocks: [],
entities: [],
objects: { layouts: [] },
tables: { layers: {}, styles: {} }
})
return result
Expand Down

0 comments on commit d0a6d19

Please sign in to comment.