44 lines
4.0 KiB
JavaScript
44 lines
4.0 KiB
JavaScript
import * as fs from 'fs';
|
|
import { DxfParser } from 'dxf-parser';
|
|
import { sync as write } from '@polymech/fs/write';
|
|
function distanceBetweenPoints(p1, p2) {
|
|
return Math.sqrt(Math.pow(p2.x - p1.x, 2) + Math.pow(p2.y - p1.y, 2));
|
|
}
|
|
function arcLength(radius, startAngle, endAngle) {
|
|
return Math.abs(endAngle - startAngle) * radius;
|
|
}
|
|
function calculateEntityLength(entity) {
|
|
switch (entity.type) {
|
|
//case 'LINE':
|
|
// return distanceBetweenPoints(entity.start!, entity.end!);
|
|
case 'LWPOLYLINE':
|
|
case 'LINE':
|
|
let length = 0;
|
|
for (let i = 0; i < entity.vertices.length - 1; i++) {
|
|
try {
|
|
length += distanceBetweenPoints(entity.vertices[i], entity.vertices[i + 1]);
|
|
}
|
|
catch (e) {
|
|
console.log('error', entity, e);
|
|
}
|
|
}
|
|
return length;
|
|
case 'CIRCLE':
|
|
return 2 * Math.PI * entity.radius;
|
|
case 'ARC':
|
|
return arcLength(entity.radius, entity.startAngle, entity.endAngle);
|
|
default:
|
|
return 0;
|
|
}
|
|
}
|
|
function calculateTotalDxfEntitiesLength(filePath) {
|
|
const parser = new DxfParser();
|
|
const dxfData = parser.parseSync(fs.readFileSync(filePath, 'utf-8'));
|
|
const ret = dxfData.entities.reduce((totalLength, entity) => {
|
|
const length = calculateEntityLength(entity);
|
|
return totalLength + length;
|
|
}, 0);
|
|
write(filePath + '.json', JSON.stringify(dxfData, null, 2));
|
|
return ret;
|
|
}
|
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHhmLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi9nZW9tZXRyeS9keGYudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLEVBQUUsTUFBTSxJQUFJLENBQUM7QUFDekIsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLFlBQVksQ0FBQTtBQUV0QyxPQUFPLEVBQUUsSUFBSSxJQUFJLEtBQUssRUFBRSxNQUFNLG9CQUFvQixDQUFBO0FBYWxELFNBQVMscUJBQXFCLENBQUMsRUFBNEIsRUFBRSxFQUE0QjtJQUNyRixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMxRSxDQUFDO0FBRUQsU0FBUyxTQUFTLENBQUMsTUFBYyxFQUFFLFVBQWtCLEVBQUUsUUFBZ0I7SUFDbkUsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLFFBQVEsR0FBRyxVQUFVLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDcEQsQ0FBQztBQUVELFNBQVMscUJBQXFCLENBQUMsTUFBaUI7SUFDNUMsUUFBUSxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDbEIsY0FBYztRQUNkLCtEQUErRDtRQUMvRCxLQUFLLFlBQVksQ0FBQztRQUNsQixLQUFLLE1BQU07WUFDUCxJQUFJLE1BQU0sR0FBRyxDQUFDLENBQUM7WUFDZixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsTUFBTSxDQUFDLFFBQVMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7Z0JBQ25ELElBQUksQ0FBQztvQkFDRCxNQUFNLElBQUkscUJBQXFCLENBQUMsTUFBTSxDQUFDLFFBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsUUFBUyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUNsRixDQUFDO2dCQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7b0JBQ1QsT0FBTyxDQUFDLEdBQUcsQ0FBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFBO2dCQUVuQyxDQUFDO1lBQ0wsQ0FBQztZQUNELE9BQU8sTUFBTSxDQUFDO1FBQ2xCLEtBQUssUUFBUTtZQUNULE9BQU8sQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsTUFBTSxDQUFDLE1BQU8sQ0FBQztRQUN4QyxLQUFLLEtBQUs7WUFDTixPQUFPLFNBQVMsQ0FBQyxNQUFNLENBQUMsTUFBTyxFQUFFLE1BQU0sQ0FBQyxVQUFXLEVBQUUsTUFBTSxDQUFDLFFBQVMsQ0FBQyxDQUFDO1FBQzNFO1lBQ0ksT0FBTyxDQUFDLENBQUM7SUFDakIsQ0FBQztBQUNMLENBQUM7QUFFRCxTQUFTLCtCQUErQixDQUFDLFFBQWdCO0lBQ3JELE1BQU0sTUFBTSxHQUFHLElBQUksU0FBUyxFQUFFLENBQUM7SUFDL0IsTUFBTSxPQUFPLEdBQUcsTUFBTSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsWUFBWSxDQUFDLFFBQVEsRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDO0lBRXJFLE1BQU0sR0FBRyxHQUFHLE9BQU8sQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUMsV0FBbUIsRUFBRSxNQUFpQixFQUFFLEVBQUU7UUFDM0UsTUFBTSxNQUFNLEdBQUcscUJBQXFCLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDN0MsT0FBTyxXQUFXLEdBQUcsTUFBTSxDQUFDO0lBQ2hDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUNOLEtBQUssQ0FBRSxRQUFRLEdBQUcsT0FBTyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFBO0lBQzVELE9BQU8sR0FBRyxDQUFDO0FBQ2YsQ0FBQyJ9
|