Skip to content

Commit

Permalink
feat: attrib & attdef parsing (#109)
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 21, 2022
1 parent 362e23a commit 7a10e4b
Show file tree
Hide file tree
Showing 8 changed files with 13,985 additions and 22 deletions.
4 changes: 4 additions & 0 deletions src/handlers/entities.js
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,8 @@ import spline from './entity/spline'
import solid from './entity/solid'
import hatch from './entity/hatch'
import mtext from './entity/mtext'
import attdef from './entity/attdef'
import attrib from './entity/attrib'
import insert from './entity/insert'
import threeDFace from './entity/threeDFace'
import dimension from './entity/dimension'
Expand All @@ -30,6 +32,8 @@ const handlers = [
solid,
hatch,
mtext,
attdef,
attrib,
text,
insert,
dimension,
Expand Down
307 changes: 307 additions & 0 deletions src/handlers/entity/attdef.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,307 @@
import common from './common'
import { assign as assignMTEXT } from './mtext'
import { assign as assignTEXT } from './text'

export const TYPE = 'ATTDEF'

export const process = (tuples) => {
return tuples.reduce((entity, tuple) => {
const type = tuple[0]
const value = tuple[1]

assign(entity, type, value)

return entity
}, {
type: TYPE,
subclassMarker: 'AcDbText',
thickness: 0,
scaleX: 1,
mtext: {},
text: {}
})
}

export const assign = (entity, type, value) => {
switch (type) {

case 100:
entity.subclassMarker = value

This comment has been minimized.

Copy link
@skymakerolof

skymakerolof Sep 21, 2022

Owner

@ieskudero Missing break?

This comment has been minimized.

Copy link
@ieskudero

ieskudero Sep 21, 2022

Author Contributor

@skymakerolof and correct again :(. Note to self: get a linter and use it before pull requests

This comment has been minimized.

Copy link
@skymakerolof

skymakerolof Sep 21, 2022

Owner

I'm working on adding it to this project. It should be the responsibility of the project to enforce, not for everyone who contributes to setup themselves I think!

case 1:
switch( entity.subclassMarker ) {
case 'AcDbText':
assignTEXT( entity.text, type, value )
break
case 'AcDbMText':
assignMTEXT( entity.mtext, type, value )
break
}
break
case 2:
switch( entity.subclassMarker ) {
case 'AcDbAttributeDefinition':
case 'AcDbAttribute':
entity.tag = value
break
case 'AcDbXrecord':
entity.attdefFlag = value
break
}
break
case 3:
switch( entity.subclassMarker ) {
case 'AcDbAttributeDefinition':
entity.prompt = value
break
case 'AcDbMText':
assignMTEXT( entity.mtext, type, value )
break
}
break
case 7:
switch( entity.subclassMarker ) {
case 'AcDbAttributeDefinition':
case 'AcDbAttribute':
assignTEXT( entity.text, type, value )
break
case 'AcDbMText':
assignMTEXT( entity.mtext, type, value )
break
}
break
case 10:
switch( entity.subclassMarker ) {
case 'AcDbText':
assignTEXT( entity.text, type, value )
break
case 'AcDbMText':
assignMTEXT( entity.mtext, type, value )
break
case 'AcDbXrecord':
entity.x = value
break
}
break
case 20:
switch( entity.subclassMarker ) {
case 'AcDbText':
assignTEXT( entity.text, type, value )
break
case 'AcDbMText':
assignMTEXT( entity.mtext, type, value )
break
case 'AcDbXrecord':
entity.y = value
break
}
break
case 30:
switch( entity.subclassMarker ) {
case 'AcDbText':
assignTEXT( entity.text, type, value )
break
case 'AcDbMText':
assignMTEXT( entity.mtext, type, value )
break
case 'AcDbXrecord':
entity.z = value
break
}
break
case 11:
switch( entity.subclassMarker ) {
case 'AcDbAttributeDefinition':
case 'AcDbAttribute':
entity.x2 = value
break
case 'AcDbMText':
assignMTEXT( entity.mtext, type, value )
break
}
break
case 21:
switch( entity.subclassMarker ) {
case 'AcDbAttributeDefinition':
case 'AcDbAttribute':
entity.y2 = value
break
case 'AcDbMText':
assignMTEXT( entity.mtext, type, value )
break
}
break
case 31:
switch( entity.subclassMarker ) {
case 'AcDbAttributeDefinition':
case 'AcDbAttribute':
entity.z2 = value
break
case 'AcDbMText':
assignMTEXT( entity.mtext, type, value )
break
}
break
case 39:
assignTEXT( entity.text, type, value )
break
case 40:
switch( entity.subclassMarker ) {
case 'AcDbText':
assignTEXT( entity.text, type, value )
break
case 'AcDbMText':
assignMTEXT( entity.mtext, type, value )
break
case 'AcDbXrecord':
entity.annotationScale = value
break
}
break
case 41:
switch( entity.subclassMarker ) {
case 'AcDbAttributeDefinition':
case 'AcDbAttribute':
assignTEXT( entity.text, type, value )
break
case 'AcDbMText':
assignMTEXT( entity.mtext, type, value )
break
}
break
case 42:
case 43:
case 44:
case 45:
assignMTEXT( entity.mtext, type, value )
break
case 46:
entity.mtext.annotationHeight = value
break
case 48:
case 49:
assignMTEXT( entity.mtext, type, value )
break
case 50:
switch( entity.subclassMarker ) {
case 'AcDbAttributeDefinition':
case 'AcDbAttribute':
assignTEXT( entity.text, type, value )
break
case 'AcDbMText': {
assignMTEXT( entity.mtext, type, value )
} break
}
break
case 51:
assignTEXT( entity.text, type, value )
break
case 63:
assignMTEXT( entity.mtext, type, value )
break
case 70: {
switch( entity.subclassMarker ) {
case 'AcDbAttributeDefinition':
case 'AcDbAttribute':
entity.attributeFlags = value
break
case 'AcDbXrecord': {
if( typeof entity.mTextFlag === 'undefined' ) entity.mTextFlag

This comment has been minimized.

Copy link
@skymakerolof

skymakerolof Sep 21, 2022

Owner

@ieskudero This line has no effect (assignment missing?), could you take a look please?

This comment has been minimized.

Copy link
@ieskudero

ieskudero Sep 21, 2022

Author Contributor

@skymakerolof yes, it is missing the assignment.

else if( typeof entity.isReallyLocked === 'undefined' ) entity.isReallyLocked = value
else entity.secondaryAttdefCount = value
}
break
}
} break
case 71:
case 72:
switch( entity.subclassMarker ) {
case 'AcDbAttributeDefinition':
case 'AcDbAttribute':
assignTEXT( entity.text, type, value )
break
case 'AcDbMText':
assignMTEXT( entity.mtext, type, value )
break
}
break
case 73:
switch( entity.subclassMarker ) {
case 'AcDbAttributeDefinition':
case 'AcDbAttribute':
entity.fieldLength = value
break
case 'AcDbMText':
assignMTEXT( entity.mtext, type, value )
break
}
break
case 74:
assignTEXT( entity.text, 73, value )
break
case 75:
case 76:
case 78:
case 79:
assignMTEXT( entity.mtext, type, value )
break
case 90:
assignMTEXT( entity.mtext, type, value )
break
case 210:
case 220:
case 230:
switch( entity.subclassMarker ) {
case 'AcDbAttributeDefinition':
case 'AcDbAttribute':
assignTEXT( entity.mtext, type, value )
break
case 'AcDbMText':
assignMTEXT( entity.mtext, type, value )
break
}
break
case 280:
{
switch( entity.subclassMarker ) {
case 'AcDbAttributeDefinition':
case 'AcDbAttribute':
entity.lock = value
break
case 'AcDbXrecord':
entity.clone = true
break
}
} break
case 340:
entity.attdefHandle = value
break
case 420:
case 421:
case 422:
case 423:
case 424:
case 425:
case 426:
case 427:
case 428:
case 429:
case 430:
case 431:
case 432:
case 433:
case 434:
case 435:
case 436:
case 437:
case 438:
case 439:
case 441:
assignMTEXT( entity.mtext, type, value )
break
default:
Object.assign(entity, common(type, value))
break
}
}

export default { TYPE, process, assign }
23 changes: 23 additions & 0 deletions src/handlers/entity/attrib.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
import { assign } from './attdef'

export const TYPE = 'ATTRIB'

export const process = (tuples) => {
return tuples.reduce((entity, tuple) => {
const type = tuple[0]
const value = tuple[1]

assign(entity, type, value)

return entity
}, {
type: TYPE,
subclassMarker: 'AcDbText',
thickness: 0,
scaleX: 1,
mtext: {},
text: {}
})
}

export default { TYPE, process }
30 changes: 18 additions & 12 deletions src/handlers/entity/mtext.js
Original file line number Diff line number Diff line change
Expand Up @@ -56,17 +56,7 @@ export const process = (tuples) => {
const type = tuple[0]
const value = tuple[1]

if (simpleCodes[type] !== undefined) {
entity[simpleCodes[type]] = value
} else if ((type === 1) || (type === 3)) {
entity.string += value
} else if (type === 50) {
// Rotation angle in radians
entity.xAxisX = Math.cos(value)
entity.xAxisY = Math.sin(value)
} else {
Object.assign(entity, common(type, value))
}
assign( entity, type, value )

return entity
}, {
Expand All @@ -75,4 +65,20 @@ export const process = (tuples) => {
})
}

export default { TYPE, process }
export const assign = (entity, type, value) => {
if (simpleCodes[type] !== undefined) {
entity[simpleCodes[type]] = value
} else if ((type === 1) || (type === 3)) {
entity.string += value
} else if (type === 50) {
// Rotation angle in radians
entity.xAxisX = Math.cos(value)
entity.xAxisY = Math.sin(value)
} else {
Object.assign(entity, common(type, value))
}

return entity
}

export default { TYPE, process, assign }

0 comments on commit 7a10e4b

Please sign in to comment.