Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Viewport & vport parsing #108

Merged
merged 5 commits into from
Sep 14, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 3 additions & 1 deletion src/handlers/entities.js
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand All @@ -30,7 +31,8 @@ const handlers = [
text,
insert,
dimension,
threeDFace
threeDFace,
viewport
].reduce((acc, mod) => {
acc[mod.TYPE] = mod
return acc
Expand Down
15 changes: 15 additions & 0 deletions src/handlers/entity/common.js
Original file line number Diff line number Diff line change
@@ -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
Expand Down Expand Up @@ -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
Expand Down
135 changes: 135 additions & 0 deletions src/handlers/entity/viewport.js
Original file line number Diff line number Diff line change
@@ -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 }
124 changes: 123 additions & 1 deletion src/handlers/tables.js
Original file line number Diff line number Diff line change
Expand Up @@ -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 = []

Expand Down Expand Up @@ -112,18 +230,22 @@ export default (tuples) => {

let stylesTuples = []
let layersTuples = []
let vPortTuples = []
tableGroups.forEach(group => {
if (group[0][1] === 'STYLE') {
stylesTuples = group
} else if (group[0][1] === 'LTYPE') {
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)
}
}