const fs = require('fs'); const DxfParser = require('c:/Users/user/.gemini/tunnelsection/TunnelModeler3D/dxf-parser.js'); function searchDimensionTexts(dxfPath, label) { if (!fs.existsSync(dxfPath)) return; console.log(`\n========================================`); console.log(`[${label}] 치수 텍스트 정밀 탐색: ${dxfPath}`); const dxf = new DxfParser().parseSync(fs.readFileSync(dxfPath, 'utf8')); const texts = dxf.entities.filter(e => e.type === 'TEXT' || e.type === 'MTEXT'); // 공동구 벽체 높이 관련 숫자 검색: 660, 700, 750, 800, 900, 950, 1000, 1050, 1100, 450, 360, 175, 125, 75 등 const targetNums = ['660', '700', '750', '800', '900', '950', '1000', '1050', '1100', '450', '360', '175', '125', '75', '144', '150', '160']; const found = texts.filter(t => { const text = t.text || ''; return targetNums.some(num => new RegExp(`(^|[^0-9])${num}([^0-9]|$)`).test(text)); }); console.log(`발견된 관련 텍스트 수: ${found.length}`); // X좌표 기준으로 좌측 공동구 영역, 우측 공동구 영역 텍스트만 필터링해보기 found.forEach(t => { const txt = (t.text || '').replace(/\\P/g, ' ').trim(); const px = Math.round(t.x || (t.position && t.position.x) || 0); const py = Math.round(t.y || (t.position && t.position.y) || 0); console.log(` [${t.layer}] (${px}, ${py}): "${txt}"`); }); } searchDimensionTexts('c:/Users/user/.gemini/tunnelsection/TunnelModeler3D/Test Sample/세종안성_서운1.dxf', '서운1'); searchDimensionTexts('c:/Users/user/.gemini/tunnelsection/TunnelModeler3D/Test Sample/안성구리3_고삼.dxf', '고삼'); searchDimensionTexts('c:/Users/user/.gemini/antigravity/brain/9c348cd5-3f07-4ade-adba-e28b2709935f/scratch/wansan_out/wansan.dxf', '완산'); searchDimensionTexts('c:/Users/user/.gemini/antigravity/brain/9c348cd5-3f07-4ade-adba-e28b2709935f/scratch/namhan_out/namhan.dxf', '남한산성');