81 lines
3.9 KiB
JavaScript
81 lines
3.9 KiB
JavaScript
const fs = require('fs');
|
|
|
|
async function runE2EDataTest() {
|
|
console.log('=== STARTING DWG DATA & LINETYPE ACCURACY E2E TEST ===');
|
|
|
|
const acadrust = await import('./src/viewer2d/acadrust-dwg/acadrust_dwg.js');
|
|
const wasmBuffer = fs.readFileSync('./src/viewer2d/acadrust-dwg/acadrust_dwg_bg.wasm');
|
|
await acadrust.default({ module_or_path: wasmBuffer });
|
|
|
|
const dwgFile = './dist/samples/C0060202-001-평면및종단면도(1)(대산방향STA.18+492.08-19+411.50).dwg';
|
|
const buf = fs.readFileSync(dwgFile);
|
|
const result = acadrust.parse_dwg(new Uint8Array(buf));
|
|
|
|
console.log('1. Checking DWG Header & Vars:');
|
|
console.log(' Global LTSCALE:', result.vars?.ltscale);
|
|
|
|
console.log('\n2. Checking DWG Text Styles Table:');
|
|
const styles = result.tables?.styles || result.tables?.textStyles || [];
|
|
console.log(` Found ${styles.length} text styles:`);
|
|
for (const st of styles) {
|
|
console.log(` - Style [${st.name || st.styleName}]: height=${st.height ?? 0}, font=${st.fontFile || st.font || 'default'}`);
|
|
}
|
|
|
|
console.log('\n3. Checking DWG Linetype Table:');
|
|
const lineTypes = result.tables?.lineTypes || [];
|
|
console.log(` Found ${lineTypes.length} linetypes in DWG table:`);
|
|
for (const lt of lineTypes) {
|
|
if (lt.name && (lt.name.includes('DICH') || lt.name.includes('L06') || lt.name.includes('L02'))) {
|
|
console.log(` - Linetype [${lt.name}]: desc="${lt.description}", patternLen=${lt.patternLength}, elements=[${lt.pattern?.join(', ')}]`);
|
|
}
|
|
}
|
|
|
|
console.log('\n4. Verifying Complex Linetype Math in Viewer2D with DWG Embedded Data:');
|
|
const { getLinPattern, mergeDwgLinetypePattern } = await import('file:///d:/MYCLAUDE_PROJECT/dwg-dxf-viewer-sample/src/viewer2d/linParser.ts');
|
|
const targetTypes = ['H-DICHL06', 'H-DICHL06R', 'H-DICHL02R', 'H-DICHL01R', 'H-DICHL05'];
|
|
|
|
const dwgLtMap = new Map();
|
|
for (const lt of lineTypes) {
|
|
if (lt.name && lt.pattern) dwgLtMap.set(lt.name.toUpperCase(), lt);
|
|
}
|
|
|
|
for (const name of targetTypes) {
|
|
const dwgLt = dwgLtMap.get(name);
|
|
const pattern = mergeDwgLinetypePattern(name, dwgLt?.pattern || [], dwgLt?.description);
|
|
if (!pattern) {
|
|
console.error(` [FAIL] Pattern ${name} not found in registry!`);
|
|
continue;
|
|
}
|
|
console.log(`\n * Pattern [${pattern.name}] (patternLength = ${pattern.patternLength}):`);
|
|
let cumulativeDist = 0;
|
|
for (let i = 0; i < pattern.elements.length; i++) {
|
|
const elem = pattern.elements[i];
|
|
const nextElem = pattern.elements[(i + 1) % pattern.elements.length];
|
|
if (elem.type === 'dash') {
|
|
const dLen = elem.val || 0;
|
|
console.log(` - [${i}] DASH: len=${dLen} (dist: ${cumulativeDist.toFixed(4)} -> ${(cumulativeDist + dLen).toFixed(4)})`);
|
|
cumulativeDist += dLen;
|
|
} else if (elem.type === 'gap') {
|
|
const gLen = Math.abs(elem.val || 0);
|
|
console.log(` - [${i}] GAP: len=${gLen} (dist: ${cumulativeDist.toFixed(4)} -> ${(cumulativeDist + gLen).toFixed(4)})`);
|
|
cumulativeDist += gLen;
|
|
} else if (elem.type === 'shape') {
|
|
console.log(` - [${i}] SHAPE: name=${elem.shapeName}, scale=${elem.scale}, rot=${elem.rotation} at dist=${cumulativeDist.toFixed(4)}`);
|
|
} else if (elem.type === 'text') {
|
|
const textGapLen = (nextElem && nextElem.type === 'gap') ? Math.abs(nextElem.val || 0) : 0;
|
|
const textMidDist = cumulativeDist + textGapLen / 2;
|
|
console.log(` - [${i}] TEXT: "${elem.text}", scale=${elem.scale}, style=${elem.style}, yOffset=${elem.yOffset}`);
|
|
console.log(` -> Text Gap Start: ${cumulativeDist.toFixed(4)}, Gap End: ${(cumulativeDist + textGapLen).toFixed(4)}`);
|
|
console.log(` -> Text EXACT MIDPOINT: ${textMidDist.toFixed(4)} (Midpoint between previous element and next element)`);
|
|
}
|
|
}
|
|
}
|
|
|
|
console.log('\n=== E2E DATA ACCURACY TEST COMPLETED SUCCESSFULLY ===');
|
|
}
|
|
|
|
runE2EDataTest().catch(err => {
|
|
console.error('E2E Test Error:', err);
|
|
process.exit(1);
|
|
});
|