Metadata-Version: 2.4
Name: ocp_viewer
Version: 1.1.0
Summary: The standalone OCP CAD viewer
Author-email: Bernhard Walter <b_walter@arcor.de>
License-Expression: Apache-2.0
Project-URL: Homepage, https://github.com/bernhard-42/ocp_viewer
Project-URL: Bug Tracker, https://github.com/bernhard-42/ocp_viewer/issues
Keywords: 3d,brep,cad,cadquery,build123d,viewer
Classifier: Operating System :: OS Independent
Classifier: Programming Language :: Python :: 3
Requires-Python: >=3.10
Description-Content-Type: text/markdown
License-File: LICENSE
Requires-Dist: ocp-viewer-core<1.1.0,>=1.0.6
Requires-Dist: click<9.0,>=8.1
Requires-Dist: orjson
Requires-Dist: pyaml
Requires-Dist: websockets>=16.0
Dynamic: license-file

# ocp_viewer

The standalone OCP CAD viewer: a browser page and the server behind it.

## Installation

```bash
pip install ocp_viewer
```

into the environment that also holds your CAD library (build123d or cadquery).

**From a checkout** — for local use with `uv add path/to/ocp-viewer`, `uv pip install path/to/ocp-viewer` or `pip install path/to/ocp-viewer` — run `make assets` in the checkout first. The page's JavaScript and stylesheet are copied in from npm and are not in git, so a package built from a checkout that never ran it ships without them; the server says so at start. `make dist` runs it for you.

## Run

```bash
python -m ocp_viewer
```

and open the printed URL in a browser — `http://127.0.0.1:3939` by default. Then show from any Python process in that environment:

```python
from build123d import *
from ocp_viewer import *

show(Box(1, 2, 3))
```

— the same `show` you would use with the VS Code extension, pointed at this viewer.

## Documentation

Everything else — settings, addressing several viewers, editors, Docker, the whole shared behavior — is in the documentation: the [OCP Viewer chapter](https://bernhard-42.github.io/ocp_viewer_docs/viewers/ocp_viewer/installation/) for this viewer's specifics, [bernhard-42.github.io/ocp_viewer_docs](https://bernhard-42.github.io/ocp_viewer_docs/) for the rest.

## What is here, and what is not

Almost nothing about *viewing* is here. The show pipeline, the config semantics, the render and camera policy, the tree state, the measurement backend, the splash logo, the port registry and the wire protocol are all [`ocp-viewer-core`](../ocp-viewer-core), shared with the VS Code extension, Jupyter CadQuery and build123d Studio. What is left is a websocket server that also hands out one page, and the settings that reach them.

That is the point of the split rather than a side effect of it. A camera that behaves differently here than in VS Code is a bug in one of them, and there is now one place to fix it.

| file | what |
| --- | --- |
| `server/__init__.py` | `serve` — the websocket server, for the command line |
| `__main__.py` | the CLI; every option is a viewer setting |
| `server/settings.py` | defaults, the config file, and the command line on top of both |
| `server/viewer.py` | what a running viewer knows: its two clients, its config, its state |
| `server/pages.py` | the page, the files it loads, and a redirect to it |
| `server/sockets.py` | the one websocket, and the six kinds of message on it |
| `comms.py` | this host's transport: the core's websocket client, pointed at a viewer |
| `server/network.py` | is something already listening on that port |

## Settings

Three sources, later winning over earlier:

1. the defaults in `server/settings.py`
2. `~/.ocpvscode_standalone`, if it exists — write one with `python -m ocp_viewer --create_configfile`
3. the command line — `python -m ocp_viewer --help`

The file keeps its old name so that an existing one still works.

## Development

```bash
make install      # editable
make assets       # copy the renderer and the core into static/
make check        # ruff check + ty check, and no formatter
make run
```

`make assets` copies JavaScript out of `node_modules`: three-cad-viewer and ocp-viewer-core are npm packages, installed from the registry. The copies under `static/` are gitignored. After bumping either dependency, run `make assets` again so they follow.

## Licence

Apache-2.0.
