Files
Tunnel3D/tests/search_dim_texts.js

33 lines
1.9 KiB
JavaScript

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', '남한산성');