host.camera_visualizer.routes.cad
CAD model file routes.
1"""CAD model file routes.""" 2 3import os 4 5 6def list_cad_models(cad_dir: str) -> list: 7 """Scan host/cad_tools/models/ directory for loadable model files.""" 8 models = [] 9 if os.path.isdir(cad_dir): 10 for fname in sorted(os.listdir(cad_dir)): 11 if fname.lower().endswith(('.glb', '.gltf')): 12 size = os.path.getsize(os.path.join(cad_dir, fname)) 13 models.append({ 14 'name': fname, 15 'url': f'/cad/{fname}', 16 'size': size, 17 }) 18 return models 19 20 21def serve_cad_file(cad_dir: str, filename: str): 22 """Read a CAD file. Returns (data, mime_type) or (None, None).""" 23 fname = os.path.basename(filename) 24 if not fname.lower().endswith(('.glb', '.gltf', '.bin')): 25 return None, None 26 fpath = os.path.join(cad_dir, fname) 27 if not os.path.isfile(fpath): 28 return None, None 29 with open(fpath, 'rb') as f: 30 data = f.read() 31 mime = { 32 '.glb': 'model/gltf-binary', 33 '.gltf': 'model/gltf+json', 34 '.bin': 'application/octet-stream', 35 }.get(os.path.splitext(fname)[1].lower(), 'application/octet-stream') 36 return data, mime
def
list_cad_models(cad_dir: str) -> list:
7def list_cad_models(cad_dir: str) -> list: 8 """Scan host/cad_tools/models/ directory for loadable model files.""" 9 models = [] 10 if os.path.isdir(cad_dir): 11 for fname in sorted(os.listdir(cad_dir)): 12 if fname.lower().endswith(('.glb', '.gltf')): 13 size = os.path.getsize(os.path.join(cad_dir, fname)) 14 models.append({ 15 'name': fname, 16 'url': f'/cad/{fname}', 17 'size': size, 18 }) 19 return models
Scan host/cad_tools/models/ directory for loadable model files.
def
serve_cad_file(cad_dir: str, filename: str):
22def serve_cad_file(cad_dir: str, filename: str): 23 """Read a CAD file. Returns (data, mime_type) or (None, None).""" 24 fname = os.path.basename(filename) 25 if not fname.lower().endswith(('.glb', '.gltf', '.bin')): 26 return None, None 27 fpath = os.path.join(cad_dir, fname) 28 if not os.path.isfile(fpath): 29 return None, None 30 with open(fpath, 'rb') as f: 31 data = f.read() 32 mime = { 33 '.glb': 'model/gltf-binary', 34 '.gltf': 'model/gltf+json', 35 '.bin': 'application/octet-stream', 36 }.get(os.path.splitext(fname)[1].lower(), 'application/octet-stream') 37 return data, mime
Read a CAD file. Returns (data, mime_type) or (None, None).