- 墙体与窗体 z 轴关系: 墙厚 3→2.4×型深, 外墙面退至窗框外表面之后(窗框外露 30% 型深), 消除整窗埋入墙厚 - 窗洞净空自适应外框面宽(fwMax+0.015), 替代固定 0.05 - 平开扇铰链偏移符号修复(+(cxr-hingeX)), 消除关闭态扇出框/开启态扇悬空 - 草地垫对齐新墙面, 网格降至墙脚 - 新增 verify-wall.mjs 真实浏览器三态截图验证
53 lines
2.6 KiB
JavaScript
53 lines
2.6 KiB
JavaScript
// 室外场景墙体/窗体位置修复验证截图: node verify-wall.mjs <token>
|
|
// ① 默认(室外+45°+全关) ② 正面视角全关(检查扇矩形是否出框) ③ 46% 开合(按压-移动-释放驱动 el-slider)
|
|
import puppeteer from 'puppeteer-core'
|
|
const browser = await puppeteer.launch({
|
|
executablePath: 'C:/Program Files (x86)/Microsoft/Edge/Application/msedge.exe',
|
|
headless: 'new',
|
|
args: ['--window-size=1440,900', '--enable-unsafe-swiftshader', '--use-gl=angle', '--use-angle=swiftshader'],
|
|
defaultViewport: { width: 1440, height: 900 },
|
|
})
|
|
const page = await browser.newPage()
|
|
page.on('pageerror', e => console.log(`[JS异常] ${String(e).slice(0, 200)}`))
|
|
const token = process.argv[2]
|
|
const sleep = ms => new Promise(r => setTimeout(r, ms))
|
|
await page.goto(`http://localhost:8000/threed?token=${encodeURIComponent(token)}`, { waitUntil: 'networkidle2' })
|
|
await sleep(2600)
|
|
const cv = await (await page.$('.threed-wrap canvas')).boundingBox()
|
|
await page.screenshot({ path: 'D:/Code/huamenchuang/shots/verify-wall-closed.png', clip: cv })
|
|
console.log('✓ 默认(室外+45°+全关)截图完成')
|
|
// 切正面视角(真实鼠标点击 radio)
|
|
const frontBtn = await page.evaluateHandle(() => {
|
|
const spans = [...document.querySelectorAll('.el-radio-button__inner')]
|
|
return spans.find(s => s.textContent.trim() === '正面')
|
|
})
|
|
const fb = await frontBtn.asElement().boundingBox()
|
|
await page.mouse.click(fb.x + fb.width / 2, fb.y + fb.height / 2)
|
|
await sleep(800)
|
|
await page.screenshot({ path: 'D:/Code/huamenchuang/shots/verify-wall-front.png', clip: cv })
|
|
console.log('✓ 正面视角截图完成')
|
|
// 切回 45°
|
|
const degBtn = await page.evaluateHandle(() => {
|
|
const spans = [...document.querySelectorAll('.el-radio-button__inner')]
|
|
return spans.find(s => s.textContent.trim() === '45°')
|
|
})
|
|
const db = await degBtn.asElement().boundingBox()
|
|
await page.mouse.click(db.x + db.width / 2, db.y + db.height / 2)
|
|
await sleep(600)
|
|
// 46% 开合: 真实按压-移动-释放驱动 el-slider
|
|
const handle = await page.$('.ctrl .el-slider__button')
|
|
const hr = await handle.boundingBox()
|
|
await page.mouse.move(hr.x + hr.width / 2, hr.y + hr.height / 2)
|
|
await page.mouse.down()
|
|
const runway = await page.$('.ctrl .el-slider__runway')
|
|
const rr = await runway.boundingBox()
|
|
for (let i = 1; i <= 12; i++) {
|
|
await page.mouse.move(rr.x + rr.width * 0.46, hr.y + hr.height / 2, { steps: 1 })
|
|
await sleep(40)
|
|
}
|
|
await page.mouse.up()
|
|
await sleep(1400)
|
|
await page.screenshot({ path: 'D:/Code/huamenchuang/shots/verify-wall-open46.png', clip: cv })
|
|
console.log('✓ 46% 开合截图完成')
|
|
await browser.close()
|