mightyscape-1.2/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/test/unit/entityToPolyline.test.js

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)
})
})