UNPKG

@linkiez/glory-star-calculator

Version:

Calculadora de tempo de corte para arquivos SVG da máquina GloryStar_GS3015

125 lines 6.36 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); const fs_1 = __importDefault(require("fs")); const cuttingCalculator_1 = require("./cuttingCalculator"); function shuffleArray(array) { for (let i = array.length - 1; i > 0; i--) { const j = Math.floor(Math.random() * (i + 1)); [array[i], array[j]] = [array[j], array[i]]; } } const dxfFile = process.argv[2] || './src/LPEL-1530.dxf'; const thickness = Number(process.argv[3]) || 3; const dxf = fs_1.default.readFileSync(dxfFile, 'utf8'); // --- Embaralhar movimentos para simular segmentos desconectados --- const { calculateCuttingTime } = require('./cuttingCalculator'); const parser = new (require('dxf-parser'))(); const parsed = parser.parseSync(dxf); const movements = []; if (parsed && parsed.entities) { console.log('\n--- POSIÇÕES DAS ENTIDADES ---'); for (const entity of parsed.entities) { if (entity.type === 'CIRCLE' && entity.center) { console.log(`CIRCLE: center=(${entity.center.x.toFixed(2)}, ${entity.center.y.toFixed(2)}), r=${entity.radius}`); } else if (entity.type === 'LINE') { if (entity.vertices && entity.vertices.length === 2) { console.log(`LINE: (${entity.vertices[0].x.toFixed(2)}, ${entity.vertices[0].y.toFixed(2)}) -> (${entity.vertices[1].x.toFixed(2)}, ${entity.vertices[1].y.toFixed(2)})`); } else { console.log(`LINE: (${entity.x1.toFixed(2)}, ${entity.y1.toFixed(2)}) -> (${entity.x2.toFixed(2)}, ${entity.y2.toFixed(2)})`); } } else if (entity.type === 'ARC' && entity.center) { console.log(`ARC: center=(${entity.center.x.toFixed(2)}, ${entity.center.y.toFixed(2)}), r=${entity.radius}, start=${entity.startAngle}, end=${entity.endAngle}`); } else if (entity.type === 'LWPOLYLINE' && entity.vertices) { const pts = entity.vertices.map((v) => `(${v.x.toFixed(2)}, ${v.y.toFixed(2)})`).join(' -> '); console.log(`LWPOLYLINE: ${pts}`); } } for (const entity of parsed.entities) { if (entity.type === 'CIRCLE') { const steps = 32; const points = []; for (let i = 0; i < steps; i++) { const angle = (2 * Math.PI * i) / steps; points.push({ x: entity.center.x + entity.radius * Math.cos(angle), y: entity.center.y + entity.radius * Math.sin(angle) }); } for (let i = 0; i < steps; i++) { movements.push({ start: points[i], end: points[(i + 1) % steps], isCutting: true }); } } // ...pode adicionar outros tipos se quiser... } } shuffleArray(movements); const resultShuffled = calculateCuttingTime(movements, { materialThickness: thickness, optimize: true }); console.log('\n--- TESTE EMBARALHADO (simula segmentos desconectados) ---'); console.log('Distância de corte:', resultShuffled.cuttingDistance.toFixed(4), 'mm'); console.log('Distância de movimento:', resultShuffled.movementDistance.toFixed(4), 'mm'); console.log('Tempo total:', resultShuffled.totalTimeSec.toFixed(2), 's'); // Exemplo artificial: 3 círculos em locais distantes function makeCircleMovements(cx, cy, r, steps = 32) { const points = []; for (let i = 0; i < steps; i++) { const angle = (2 * Math.PI * i) / steps; points.push({ x: cx + r * Math.cos(angle), y: cy + r * Math.sin(angle) }); } const moves = []; for (let i = 0; i < steps; i++) { moves.push({ start: points[i], end: points[(i + 1) % steps], isCutting: true }); } return moves; } const artificialMovements = [ ...makeCircleMovements(0, 0, 10), ...makeCircleMovements(100, 0, 10), ...makeCircleMovements(0, 100, 10) ]; shuffleArray(artificialMovements); const resultArtificial = calculateCuttingTime(artificialMovements, { materialThickness: thickness, optimize: true }); console.log('\n--- EXEMPLO ARTIFICIAL (3 círculos desconectados, embaralhados) ---'); console.log('Distância de corte:', resultArtificial.cuttingDistance.toFixed(4), 'mm'); console.log('Distância de movimento:', resultArtificial.movementDistance.toFixed(4), 'mm'); console.log('Tempo total:', resultArtificial.totalTimeSec.toFixed(2), 's'); // COMPARATIVO OTIMIZAÇÃO const resultOptimized = (0, cuttingCalculator_1.calculateCuttingTimeFromDxf)(dxf, { materialThickness: thickness, optimize: true }); const resultRaw = (0, cuttingCalculator_1.calculateCuttingTimeFromDxf)(dxf, { materialThickness: thickness, optimize: false }); console.log('Arquivo:', dxfFile); console.log('Espessura:', thickness, 'mm'); console.log('\n--- COMPARATIVO ---'); console.log('Modo NÃO otimizado:'); console.log(' Distância de corte:', resultRaw.cuttingDistance.toFixed(4), 'mm'); console.log(' Distância de movimento:', resultRaw.movementDistance.toFixed(4), 'mm'); console.log(' Soma total:', (resultRaw.cuttingDistance + resultRaw.movementDistance).toFixed(4), 'mm'); console.log(' Tempo total:', resultRaw.totalTimeSec.toFixed(2), 's'); if (typeof resultRaw.cutAreaWidth === 'number' && typeof resultRaw.cutAreaHeight === 'number') { console.log(' Área de corte:', resultRaw.cutAreaWidth.toFixed(2), 'x', resultRaw.cutAreaHeight.toFixed(2), 'mm'); } console.log('\nModo OTIMIZADO:'); console.log(' Distância de corte:', resultOptimized.cuttingDistance.toFixed(4), 'mm'); console.log(' Distância de movimento:', resultOptimized.movementDistance.toFixed(4), 'mm'); console.log(' Soma total:', (resultOptimized.cuttingDistance + resultOptimized.movementDistance).toFixed(4), 'mm'); console.log(' Tempo total:', resultOptimized.totalTimeSec.toFixed(2), 's'); if (typeof resultOptimized.cutAreaWidth === 'number' && typeof resultOptimized.cutAreaHeight === 'number') { console.log(' Área de corte:', resultOptimized.cutAreaWidth.toFixed(2), 'x', resultOptimized.cutAreaHeight.toFixed(2), 'mm'); } //# sourceMappingURL=review-dxf-soma.js.map