Files
visualizer/wired3d_viewer/__main__.py
T
Vignesh Suresh 29dfbf99a5 Visualizer 2
2026-06-06 20:43:01 +02:00

75 lines
2.5 KiB
Python

"""Command-line entry point for the wired3d viewer package.
Usage:
python -m wired3d_viewer view <file.nc> # write a standalone NC viewer
python -m wired3d_viewer serve [port] # NC drag-and-drop server
python -m wired3d_viewer view-stl <file.stl> # write a standalone STL viewer
python -m wired3d_viewer serve-stl [port] # STL drag-and-drop server (port 8766)
After ``pip install -e .`` the same commands are available as::
wired3d view <file.nc>
wired3d serve [port]
wired3d view-stl <file.stl>
wired3d serve-stl [port]
Submodules are imported lazily inside each handler so that ``view``/``serve``
only pull in plotly/numpy when actually used.
"""
import argparse
def main(argv: list[str] | None = None) -> None:
"""Parse argv and dispatch to the viewer or server.
Inputs:
argv -- optional argument list (defaults to ``sys.argv[1:]``).
Output:
None. Runs the chosen subcommand.
"""
parser = argparse.ArgumentParser(
prog="wired3d_viewer",
description="Interactive 3D viewer for Beckhoff 5-axis DED NC toolpaths.",
)
sub = parser.add_subparsers(dest="command", required=True)
p_view = sub.add_parser(
"view", help="render an NC file to a standalone HTML viewer")
p_view.add_argument("nc_file", help="path to the .nc file to visualise")
p_serve = sub.add_parser(
"serve", help="start the NC drag-and-drop web server")
p_serve.add_argument(
"port", nargs="?", type=int, default=8765,
help="TCP port to listen on (default 8765)")
p_view_stl = sub.add_parser(
"view-stl", help="render an STL mesh to a standalone HTML viewer")
p_view_stl.add_argument("stl_file", help="path to the .stl file to visualise")
p_serve_stl = sub.add_parser(
"serve-stl", help="start the STL drag-and-drop web server")
p_serve_stl.add_argument(
"port", nargs="?", type=int, default=8766,
help="TCP port to listen on (default 8766)")
args = parser.parse_args(argv)
if args.command == "view":
from .viewer import main as view_main
view_main(args.nc_file)
elif args.command == "serve":
from .server import main as serve_main
serve_main(args.port)
elif args.command == "view-stl":
from .stl_viewer import main as view_stl_main
view_stl_main(args.stl_file)
elif args.command == "serve-stl":
from .server2 import main as serve_stl_main
serve_stl_main(args.port)
if __name__ == "__main__":
main()