Appearance
<fmb-label-overlay>
序号标签呈现层——把 viewer.labels 里的编号气泡与引线画到画布上。
这是一个只读组件:只画不改。标签是视图内容的一部分——作者在编辑器里给零件编了号,看视图的人就该看见它们。拖拽、改号这类编辑交互留在编辑器侧,本组件的 pointer-events 全关,不会挡住旋转与拾取。
最小用法
html
<fmb-viewer-context id="ctx">
<div class="viewport" style="position: relative">
<canvas id="canvas"></canvas>
<fmb-label-overlay></fmb-label-overlay>
</div>
</fmb-viewer-context>接线只有 viewer 一件事(经 context 自动注入)。有标签就画,没有就完全静默。
属性
| 名称 | 类型 | property / attribute | 默认值 | 说明 |
|---|---|---|---|---|
viewer | Viewer | undefined | 仅 property(attribute: false) | undefined | 通常经 <fmb-viewer-context> 注入 |
事件
无。组件不接受交互。
行为细节
- 每帧投影:标签的气泡落点存的是归一化 0..1 坐标、引线锚点存的是零件局部坐标,组件每帧把它们投影成像素,所以气泡与引线跟着相机走、跟着被挪动的零件走。
- 有标签才跑 rAF:标签集为空时组件完全静默,不占用帧预算;
labels-changed事件驱动重新同步。 - 绘制用 SVG:气泡形状(圆 / 方 / 六边形)、引线走向(直线 / 折线)、端点(圆点 / 箭头 / 无)按
LabelStyle渲染,矢量缩放不糊。 - 背面隐藏:锚点跑到相机背后时引线自动隐藏,不会画出穿到屏幕另一侧的线。
- 定位:
:host自带position: absolute; inset: 0; z-index: 12; pointer-events: none,须放在position: relative的视口容器内。 hidden生效::host([hidden]) { display: none }已内置,需要临时藏起标签层直接设hidden。
可定制点
气泡底色 / 描边 / 文字与引线颜色走 --fmb-surface、--fmb-border-strong、--fmb-fg-1 令牌。形状与引线样式不是 CSS 变量,而是 viewer.labels.setStyle() 的数据——它属于视图内容,要随视图存盘。全表见主题定制。
相关
- API:viewer.labels — 标签数据模型与编辑接口。
- 指南:编辑能力 — 标签在编辑体系里的位置。