"""Command-line entry point for the wired3d viewer package. Usage: python -m wired3d_viewer view # write a standalone NC viewer python -m wired3d_viewer serve [port] # NC drag-and-drop server python -m wired3d_viewer view-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 wired3d serve [port] wired3d view-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()