app
Adom Desktop - Fusion 360 Bridge
Public Made by Adomby adom
Drive Autodesk Fusion 360 from the cloud via Adom Desktop: component libraries, IPC package generation, board layout, exports (STEP/Gerbers/BOM/CPL), fast APS cloud search, and parametric modeling.
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127
"""App state command — list open documents, active workspace, and Fusion state."""
import adsk.core
def handle_get_app_state(app: adsk.core.Application, args: dict) -> dict:
"""Get the current state of Fusion 360: open documents, active workspace, etc.
Returns information about every open document/tab, which one is active,
the current workspace, and product type.
"""
# Active workspace
active_workspace = "unknown"
try:
ws = app.executeTextCommand("DebugCommands.ActiveWorkspace")
if ws:
active_workspace = ws.strip()
except Exception:
pass
# Check if Electronics editor is active
is_electronics = False
try:
app.executeTextCommand("Electron.run DISPLAY")
is_electronics = True
except Exception:
pass
# Active document
active_doc_name = None
try:
doc = app.activeDocument
if doc:
active_doc_name = doc.name
except Exception:
pass
# Active product type
product_type = None
try:
product = app.activeProduct
if product:
product_type = product.productType
except Exception:
pass
# All open documents
documents = []
try:
for i in range(app.documents.count):
doc = app.documents.item(i)
doc_info = {
"name": doc.name,
"isActive": (doc.name == active_doc_name) if active_doc_name else False,
}
# documentType may not exist on all document types
try:
doc_info["type"] = _document_type_name(doc.documentType)
except Exception:
doc_info["type"] = "unknown"
# isSaved may not be available on all document types
try:
doc_info["isSaved"] = doc.isSaved
except Exception:
pass
# Try to get data file info (cloud save path)
try:
df = doc.dataFile
if df:
doc_info["dataFile"] = {
"name": df.name,
"id": df.id,
}
try:
doc_info["dataFile"]["parentFolder"] = df.parentFolder.name
except Exception:
pass
except Exception:
pass
documents.append(doc_info)
except Exception as e:
documents = [{"error": f"Failed to enumerate documents: {e}"}]
# Build context-aware hint
hints = []
if is_electronics:
hints.append("Electronics workspace active — fusion_electron_run, fusion_board_info, "
"fusion_export_source, fusion_export_eagle_source are available.")
else:
hints.append("Not in Electronics workspace. Use fusion_show_2d_board to enter board view, "
"or fusion_open_cloud_file to open an electronics project (.fprj).")
hints.append("Check fusion_window_info for blocking dialogs before running commands.")
hint = " ".join(hints)
return {
"success": True,
"output": f"{len(documents)} document(s) open, active workspace: {active_workspace}",
"data": {
"activeWorkspace": active_workspace,
"activeDocument": active_doc_name,
"productType": product_type,
"isElectronics": is_electronics,
"documents": documents,
},
"_hint": hint,
}
def _document_type_name(doc_type) -> str:
"""Convert a DocumentType enum to a readable string."""
type_map = {
0: "FusionDesign",
1: "FusionDesign", # DesignDocumentType
2: "Drawing",
3: "Electronics",
4: "PCB",
}
# The enum value might be an int or an enum object
try:
val = int(doc_type)
return type_map.get(val, f"Unknown({val})")
except (TypeError, ValueError):
return str(doc_type)