app
Fusion - the Fusion 360 Bridge
Public Made by Adomby adom
Drive Autodesk Fusion 360 from the cloud via Adom Bridge: component libraries, IPC package generation, board layout, exports (STEP/Gerbers/BOM/CPL), fast APS cloud search, and parametric modeling.
master
John Lauer
Add bounded obstacle planning and live calculations using the Adom activity palette
e936bc3
1mo ago
"""CLI for development probes. --script-transport exercises the embedded source before installing the exe."""
import argparse
import json
from pathlib import Path
import subprocess
ROOT=Path(__file__).resolve().parents[2]
def call(verb,args,target='AdomLapper',script_transport=False):
if script_transport:
source='\n'.join((ROOT/'rust/bridge/src'/name).read_text() for name in ('routing_script.py','routing_planner.py'))
script='import json\nexec('+repr(source)+')\nresult=handle(app,json.loads('+repr(json.dumps(args))+'),'+repr(verb.removeprefix('fusion_'))+')\n'
verb='fusion_run_modeling_script'; args={'script':script,'expectDocument':args.get('expectDocument')}
cp=subprocess.run(['adom-bridge','--target',target,'--ai-thread','Fusion trace routing',verb,json.dumps(args)],capture_output=True,text=True,timeout=190)
r=json.loads(cp.stdout)
if isinstance(r.get('output'),str):
try:
inner=json.loads(r['output'])
if isinstance(inner,dict):
for k,v in inner.items():
if k not in r:r[k]=v
if isinstance(inner.get('data'),dict):
for k,v in inner['data'].items():
if k not in r:r[k]=v
except (ValueError,TypeError):pass
if script_transport and isinstance(r.get('data',{}).get('result'),dict): return r['data']['result']
return {k:v for k,v in r.items() if k!='output'}
if __name__=='__main__':
p=argparse.ArgumentParser();p.add_argument('verb');p.add_argument('args');p.add_argument('--script-transport',action='store_true');p.add_argument('--output')
a=p.parse_args();r=call(a.verb,json.loads(a.args),script_transport=a.script_transport)
if a.output: Path(a.output).write_text(json.dumps(r,indent=2)+'\n')
print(json.dumps(r,indent=2))