Files
point3D_demo/index.html

245 lines
9.6 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<!doctype html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>口腔三维扫描采集与评分对比终端</title>
<link rel="stylesheet" href="./styles.css" />
</head>
<body>
<div class="app-shell">
<header class="topbar">
<div>
<p class="eyebrow">DENTAL 3D SCAN TERMINAL</p>
<h1>口腔三维扫描采集与评分对比终端</h1>
</div>
<div class="status-strip" aria-label="系统状态">
<span class="pulse"></span>
<span>单台扫描模式</span>
<strong>7-10分钟 / 50个模型</strong>
</div>
</header>
<main class="workbench">
<section class="panel scanner-panel" aria-labelledby="scan-title">
<div class="panel-head">
<div>
<p class="eyebrow">HIGH-SPEED ACQUISITION</p>
<h2 id="scan-title">高速扫描采集</h2>
</div>
<div class="terminal-badge">采集端 01</div>
</div>
<div class="scan-hero">
<div class="scan-window" aria-label="扫描采集动画">
<div class="scanner-rail"></div>
<div class="scanner-head">
<span></span>
</div>
<div class="scan-beam"></div>
<div class="turntable">
<div class="plaster-base"></div>
<div class="mini-arch" aria-hidden="true">
<i></i><i></i><i></i><i></i><i></i><i></i><i></i>
</div>
</div>
</div>
<div class="scan-readout">
<div class="readout-main">
<span id="scanCount">00</span>
<small>/ 50</small>
</div>
<p>7-10分钟随机总时长</p>
<div class="progress-track">
<span id="scanProgress"></span>
</div>
<div class="readout-grid">
<div>
<span id="scanTimer">00:00</span>
<small>扫描用时</small>
</div>
<div>
<span id="scanRate">0.0</span>
<small>模型/分钟</small>
</div>
</div>
<label class="scan-speed-control" id="scanSpeedControl">
<span>扫描速率</span>
<select id="scanSpeedSelect" aria-label="扫描速率">
<option value="1">1倍</option>
<option value="2">2倍</option>
<option value="3">3倍</option>
<option value="4">4倍</option>
<option value="5">5倍</option>
<option value="6">6倍</option>
<option value="7">7倍</option>
<option value="8">8倍</option>
<option value="9">9倍</option>
<option value="10">10倍</option>
</select>
<em class="speed-tooltip">速率越快,精度越低</em>
</label>
</div>
</div>
<div class="control-row" role="group" aria-label="扫描控制">
<button class="primary-btn" id="scanStart" type="button">
<span class="icon"></span>
开始采集
</button>
<button class="ghost-btn icon-btn" id="scanReset" type="button" aria-label="重置采集"></button>
</div>
<div class="segmented" role="group" aria-label="扫描模型类型">
<button class="segment active" type="button" data-model="二倍石膏牙">二倍石膏牙</button>
<button class="segment" type="button" data-model="一倍石膏牙">一倍石膏牙</button>
<button class="segment" type="button" data-model="牙列模型">牙列模型</button>
</div>
<div class="file-zone progress-zone" aria-label="扫描进度">
<span>扫描进度</span>
<strong id="scanProgressText">已完成 0 / 50</strong>
<small id="scanDurationText">预计总时长 7-10分钟</small>
</div>
<div class="queue" aria-label="采集队列" id="scanQueue"></div>
</section>
<section class="panel compare-panel" aria-labelledby="compare-title">
<div class="panel-head">
<div>
<p class="eyebrow">MODEL SCORING COMPARISON</p>
<h2 id="compare-title">标准模型与学生评分模型对比</h2>
</div>
<div class="score-pill">
<span>综合评分</span>
<strong id="scoreValue">92.6</strong>
</div>
</div>
<div class="compare-toolbar">
<div class="angle-group" role="group" aria-label="视角切换">
<button class="angle-btn active" type="button" data-view="front">正面</button>
<button class="angle-btn" type="button" data-view="top">咬合面</button>
<button class="angle-btn" type="button" data-view="left">左侧</button>
<button class="angle-btn" type="button" data-view="right">右侧</button>
</div>
<label class="zoom-control">
<span>缩放</span>
<input id="zoomRange" type="range" min="70" max="145" value="100" />
</label>
<label class="switch">
<input id="heatToggle" type="checkbox" checked />
<span></span>
偏差热力
</label>
<button class="score-action" id="scoreButton" type="button">评分</button>
</div>
<div class="viewer" id="viewer">
<article class="model-card">
<div class="card-title">
<span>标准 3D 模型</span>
<small id="standardName">标准模型.stl / .ply</small>
</div>
<div class="model-space" data-surface="standard">
<div class="axis-mark">X/Y/Z</div>
<canvas class="stl-canvas" id="standardCanvas" aria-label="标准STL模型预览"></canvas>
<div class="dental-object standard-object" aria-hidden="true"></div>
</div>
<label class="mini-file">
选择标准STL / PLY模型
<input class="model-file-input" id="standardFile" type="file" accept=".stl,.ply" />
</label>
</article>
<article class="model-card">
<div class="card-title">
<span>学生评分 3D 模型</span>
<small id="studentName">学生作品.stl / .ply</small>
</div>
<div class="model-space" data-surface="student">
<div class="axis-mark">X/Y/Z</div>
<canvas class="stl-canvas" id="studentCanvas" aria-label="学生STL模型预览"></canvas>
<div class="dental-object student-object" aria-hidden="true"></div>
</div>
<label class="mini-file">
选择学生STL / PLY模型
<input class="model-file-input" id="studentFile" type="file" accept=".stl,.ply" />
</label>
</article>
</div>
<div class="metric-row" aria-label="评分指标">
<div class="metric">
<span>边缘密合</span>
<strong>94%</strong>
</div>
<div class="metric">
<span>轴面形态</span>
<strong>90%</strong>
</div>
<div class="metric">
<span>咬合偏差</span>
<strong>0.18mm</strong>
</div>
<div class="metric">
<span>邻接关系</span>
<strong>91%</strong>
</div>
</div>
</section>
</main>
</div>
<div class="modal-backdrop" id="modelAlert" hidden>
<div class="modal" role="dialog" aria-modal="true" aria-labelledby="modelAlertTitle">
<h3 id="modelAlertTitle">请选择模型</h3>
<p id="modelAlertText">评分前需要先选择标准模型和学生模型。</p>
<button class="primary-btn modal-close" id="modelAlertClose" type="button">知道了</button>
</div>
</div>
<div class="modal-backdrop score-modal-backdrop" id="scoreModal" hidden>
<div class="score-report score-report-dialog" id="scoreReport" role="dialog" aria-modal="true" aria-labelledby="scoreReportTitle">
<div class="report-head">
<div>
<p class="eyebrow">SCORING DETAIL</p>
<h3 id="scoreReportTitle">牙体雕刻评分表</h3>
</div>
<div class="report-actions">
<strong id="reportTotal">0.0</strong>
<button class="ghost-btn icon-btn" id="scoreModalClose" type="button" aria-label="关闭评分表">×</button>
</div>
</div>
<div class="score-table-wrap">
<table class="score-table">
<thead>
<tr>
<th>考核内容</th>
<th>考核要点</th>
<th>配分</th>
<th>得分</th>
<th>合计</th>
</tr>
</thead>
<tbody id="scoreTableBody"></tbody>
</table>
</div>
</div>
</div>
<script type="importmap">
{
"imports": {
"three": "./node_modules/three/build/three.module.js",
"three/addons/": "./node_modules/three/examples/jsm/"
}
}
</script>
<script type="module" src="./script.js"></script>
</body>
</html>