---
name: basic-3d-viewer
description: Use when the user asks to "show GLB in basic viewer", "show me the raw 3D", "basic 3D view", "show Basic3dView", "compare 3D viewers", "test GLB rendering", "display GLB without fixups", or wants a minimal 3D viewer that renders GLB files exactly as-is without material fixups, overlays, pad highlighting, or camera tours.
---

# Basic3dView — Minimal GLB 3D Viewer

Display GLB files in a stripped-down Babylon.js 3D viewer with zero post-processing. No material fixups, no laser etch, no synthetic pads, no FR4 detection, no camera tours. Shows the model exactly as the GLB contains it — useful for testing and comparing 3D output against other viewers.

**Input**: A `.glb` file path on the container, or drag-and-drop in the browser
**Output**: Interactive 3D view in Adom Viewer with basic toolbar

## MCP Tool

Use `av_basic_3d_display` to load a GLB:

```
av_basic_3d_display({
  glb_path: "/path/to/model.glb",
  title: "My Component"
})
```

**Attribution:** Always pass `viewId`, `skill`, and `author` when pushing to AV — see av-creator skill Rule #3.

Parameters:

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `glb_path` | string | yes | Absolute path to the `.glb` file |
| `title` | string | no | Title shown in the info bar |

The tool blocks until the model is fully loaded (up to 15s timeout), so you can immediately call `av_capture` afterwards.

## Toolbar

| Button | Feature | Default |
|--------|---------|---------|
| Home | Reset camera to initial position | -- |
| Frame | Zoom to fit model | -- |
| Ground | Toggle ground plane | ON |
| Wireframe | Toggle wireframe rendering on all meshes | OFF |
| Axes | Toggle XYZ axis lines (R=X, G=Y, B=Z) | OFF |
| Measure | Measure distance between two points (mm) | OFF |
| Meshes | Open mesh list panel (draggable) | OFF |

### Mesh Panel

The mesh list panel shows all meshes in the loaded model with per-mesh controls:

- **Eye toggle** — show/hide individual meshes. Hidden meshes show a strikethrough name and dimmed eye icon.
- **Axis toggle** — show/hide RGB origin axes at the mesh's local pivot point (R=X, G=Y, B=Z) with a white dot at the origin. Useful for verifying rotation pivots (e.g. wheel axles). Axis length auto-scales to 30% of the mesh's bounding diagonal.
- **Draggable** — grab the "Meshes" header to drag the panel anywhere in the viewport.

The panel state (visibility, axes) is reflected in `av_capture` composite screenshots.

### Measure Tool

Click the ruler icon to enter measure mode (cursor becomes crosshair). Click a first point on the model (teal marker), then click a second point — a white measurement line appears with a floating mm label at the midpoint. The label tracks the camera as you orbit. Press **Escape** to exit measure mode and clear the measurement.

## Programmatic Control

Toggle toolbar features and set camera angles remotely — useful for automated screenshots or scripted demos.

```bash
# Toggle a toolbar button (ground, wireframe, axes, meshes)
curl -s -X POST http://localhost:8771/api \
  -H 'Content-Type: application/json' \
  -d '{"action":"basic3d_toggle","name":"wireframe"}'

# Set camera angle (Babylon.js ArcRotateCamera params)
curl -s -X POST http://localhost:8771/api \
  -H 'Content-Type: application/json' \
  -d '{"action":"basic3d_set_camera","alpha":-2.5,"beta":1.0}'
```

Toggle names: `ground`, `wireframe`, `axes`, `measure`, `meshes`

## When to Use This vs Other Viewers

| Viewer | Use Case |
|--------|----------|
| **Basic3dView** (this) | Raw GLB inspection — no transforms, no overlays, testing/comparison |
| **3dView** (`av_3d_display`) | Full 3D with material fixup, laser etch, pad highlighting, camera tour |
| **Fp3dView** (`fp-to-3d.js`) | Footprint pad geometry: copper shapes, dimensions, land pattern |
| **LibView** (`av_library_review`) | Complete library review: symbol + footprint + 3D side-by-side |

## Troubleshooting

| Symptom | Cause | Fix |
|---------|-------|-----|
| "Basic 3D viewer page not found" | Server started before HTML file was created | Restart the viewer server |
| Model doesn't appear after API call | Server cached old HTML | Kill and restart `node viewer/server.js` |
| MCP tool `av_basic_3d_display` not found | MCP servers haven't restarted | Use HTTP API fallback |
| Model looks different than in 3dView | Expected — 3dView applies material fixups | Basic3dView shows the raw GLB intentionally |
