130 lines
3.5 KiB
JavaScript
130 lines
3.5 KiB
JavaScript
import fs from 'fs'
|
|
import { join } from 'path'
|
|
import expect from 'expect'
|
|
|
|
import { parseString, denormalise } from '../../src'
|
|
import entityToPolyline from '../../src/entityToPolyline'
|
|
import applyTransforms from '../../src/applyTransforms'
|
|
|
|
describe('Entity To Polyline', () => {
|
|
it('supports LINE', () => {
|
|
const parsed = parseString(
|
|
fs.readFileSync(join(__dirname, '../resources/lines.dxf'), 'utf-8'),
|
|
)
|
|
const entities = denormalise(parsed)
|
|
expect(entities.length).toEqual(11)
|
|
|
|
const polyline = entityToPolyline(entities[0])
|
|
expect(polyline).toEqual([
|
|
[0, 0],
|
|
[100, 0],
|
|
])
|
|
})
|
|
|
|
it('supports LWPOLYLINE', () => {
|
|
const parsed = parseString(
|
|
fs.readFileSync(join(__dirname, '../resources/lwpolylines.dxf'), 'utf-8'),
|
|
)
|
|
const entities = denormalise(parsed)
|
|
expect(entities.length).toEqual(2)
|
|
|
|
const p0 = entityToPolyline(entities[0])
|
|
expect(p0).toEqual([
|
|
[10, 40],
|
|
[70, 0],
|
|
[80, 20],
|
|
[50, 60],
|
|
[10, 40],
|
|
])
|
|
const p1 = entityToPolyline(entities[1])
|
|
expect(p1).toEqual([
|
|
[10, 60],
|
|
[0, 90],
|
|
[30, 80],
|
|
[20, 110],
|
|
[50, 80],
|
|
[40, 120],
|
|
[60, 100],
|
|
])
|
|
})
|
|
|
|
it('address the observed closed LWPOLYLINE transform bug', () => {
|
|
// There was a bug with LW polyline where the duplicated point
|
|
// used for closing it was no copied by mutated multiple times
|
|
const parsed = parseString(
|
|
fs.readFileSync(
|
|
join(__dirname, '../resources/closedlwpolylinebug.dxf'),
|
|
'utf-8',
|
|
),
|
|
)
|
|
const entities = denormalise(parsed)
|
|
expect(entities.length).toEqual(1)
|
|
const polyline = applyTransforms(
|
|
entityToPolyline(entities[0]),
|
|
entities[0].transforms,
|
|
)
|
|
expect(polyline).toEqual([
|
|
[30, 40],
|
|
[50, 40],
|
|
[50, 70],
|
|
[30, 40],
|
|
])
|
|
})
|
|
|
|
// https://github.com/bjnortier/dxf/issues/20
|
|
it('warns on a LWPOLYLINE with a single vertex', () => {
|
|
const polyline = entityToPolyline({
|
|
type: 'LWPOLYLINE',
|
|
vertices: [{ x: 294.598692, y: 168.66373 }],
|
|
layer: '0',
|
|
colorNumber: 7,
|
|
closed: true,
|
|
transforms: [],
|
|
})
|
|
expect(polyline).toEqual([
|
|
[294.598692, 168.66373],
|
|
[294.598692, 168.66373],
|
|
])
|
|
})
|
|
|
|
it('supports CIRCLE, ELLIPSE, ARC', () => {
|
|
const parsed = parseString(
|
|
fs.readFileSync(
|
|
join(__dirname, '../resources/circlesellipsesarcs.dxf'),
|
|
'utf-8',
|
|
),
|
|
)
|
|
const entities = denormalise(parsed)
|
|
expect(entities.length).toEqual(5)
|
|
|
|
expect(entityToPolyline(entities[0]).length).toEqual(73)
|
|
expect(entityToPolyline(entities[1]).length).toEqual(39)
|
|
expect(entityToPolyline(entities[2]).length).toEqual(40)
|
|
expect(entityToPolyline(entities[3]).length).toEqual(18)
|
|
expect(entityToPolyline(entities[4]).length).toEqual(73)
|
|
})
|
|
|
|
it('supports SPLINE', () => {
|
|
const parsed = parseString(
|
|
fs.readFileSync(join(__dirname, '../resources/splines.dxf'), 'utf-8'),
|
|
)
|
|
const entities = denormalise(parsed)
|
|
expect(entities.length).toEqual(2)
|
|
|
|
expect(entityToPolyline(entities[0]).length).toEqual(26)
|
|
expect(entityToPolyline(entities[1]).length).toEqual(130)
|
|
expect(
|
|
entityToPolyline(entities[0], { interpolationsPerSplineSegment: 10 })
|
|
.length,
|
|
).toEqual(11)
|
|
})
|
|
|
|
it('supports BLOCK with INSERT', () => {
|
|
const parsed = parseString(
|
|
fs.readFileSync(join(__dirname, '../resources/blocks1.dxf'), 'utf-8'),
|
|
)
|
|
const entities = denormalise(parsed)
|
|
expect(entities.length).toEqual(10)
|
|
})
|
|
})
|