# -*- coding: utf-8 -*- """Assemble the single-file viewer: three.js (inline, no CDN) + mesh data + 2D sheets.""" import io import json import os import sys try: sys.stdout.reconfigure(encoding="utf-8") except Exception: pass sys.path.insert(0, os.path.dirname(os.path.abspath(__file__))) from armcore import WEB, DOCS, WORKSPACE SRC = os.path.dirname(os.path.abspath(__file__)) def rebuild_viewer(): three = io.open(WEB + "/three_inline.js", encoding="utf-8").read() assert len(three) > 400000, len(three) data = io.open(WEB + "/mesh_arm.json", encoding="utf-8").read() sheets = io.open(WEB + "/sheets.jsdata", encoding="utf-8").read() col = io.open(DOCS + "/collision.json", encoding="utf-8").read() if os.path.exists( DOCS + "/collision.json") else "[]" trv = io.open(DOCS + "/travel.json", encoding="utf-8").read() if os.path.exists( DOCS + "/travel.json") else "[]" tpl = io.open(SRC + "/viewer_tpl.html", encoding="utf-8").read() out = (tpl.replace("/*__THREE__*/", three) .replace("/*__DATA__*/", data) .replace("/*__SHEETS__*/", sheets) .replace("/*__COL__*/", col) .replace("/*__TRAVEL__*/", trv)) assert "/*__" not in out, [l for l in out.split("\n") if "/*__" in l][:3] dst = WEB + "/机器人手臂3D查看器.html" io.open(dst, "w", encoding="utf-8").write(out) io.open(WEB + "/index.html", "w", encoding="utf-8").write(out) io.open(WORKSPACE + "/机器人手臂3D查看器.html", "w", encoding="utf-8").write(out) print("viewer %s (and in %s) %.2f MB (three %.0f KB + data %.0f KB + sheets %.0f KB)" % ( dst, WORKSPACE, os.path.getsize(dst) / 1e6, len(three) / 1024, len(data) / 1024, len(sheets) / 1024)) if __name__ == "__main__": rebuild_viewer() os._exit(0)