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.
← Commit history
drawings: end only Fusion's Edit Auto Dimensions command by name; close:true leaves a drawing someone edited open (fusion-lane review)
2 files changed
+25−2
addin/AdomBridge/commands/mechanical/drawings.py+8−1@@ -72,6 +72,8 @@ VIEW_TYPES = {0: "base", 1: "projected", 2: "section", 3: "detail", 4: "auxiliar EXTENSIONS = {"pdf": ".pdf", "dwg": ".dwg", "dxf": ".dxf"} IDLE_COMMANDS = ("", "SelectCommand") AUTO_DIMENSION_EDIT = "AUTODIMENSIONEDIT"+# the same command as Fusion's UI names it; only this command is ever ended, never one a person started+AUTO_DIMENSION_UI_COMMAND = "FusionDrawingAutoDimensionEditCommand" # file id -> {"at": time.time() when a call here opened that drawing (its engine log is read from then on), # "previous": the document that was active then, active again when the drawing closes,@@ -387,7 +389,7 @@ def drawing_export(app, args): ready, detail = readiness(app, doc, file_id) if not ready: unfinished = [c for cmds in ((detail.get("engine") or {}).get("unfinished") or {}).values() for c in cmds]- if detail.get("activeCommand") not in IDLE_COMMANDS and doc.isActive and AUTO_DIMENSION_EDIT in unfinished:+ if detail.get("activeCommand") == AUTO_DIMENSION_UI_COMMAND and doc.isActive and AUTO_DIMENSION_EDIT in unfinished: # Fusion starts Edit Auto Dimensions when an automatic drawing opens; end it like Esc would ended = app.userInterface.terminateActiveCommand() not_ready("Ended Fusion's Edit Auto Dimensions command on the drawing; export in the next call.",@@ -423,6 +425,11 @@ def close_drawing(app, doc, file_id): references = {refs.item(i).dataFile.id for i in range(refs.count) if refs.item(i).dataFile is not None} except Exception: pass+ if doc.isModified:+ # someone changed the drawing since this session opened it: leave it (and its design) open for them+ if record.get("previous") is not None and record["previous"].isValid:+ record["previous"].activate()+ return [] doc.close(False) closed = [file_id] before = record.get("before") or set()
tests/test_mechanical_drawings.py+17−1@@ -293,7 +293,7 @@ class Export(unittest.TestCase): sheet = NS(name="Bracket", width=42.0, height=29.7, sheetSize=adsk.drawing.SheetSizes.A3ISOSheetSize, views=Items(self.views)) self.closed, self.activated = [], [] self.previous = NS(isValid=True, activate=lambda: self.activated.append("previous"))- self.doc = NS(dataFile=NS(id="lineage:drawing"), name="Bracket Drawing", isActive=True, isVisible=True,+ self.doc = NS(dataFile=NS(id="lineage:drawing"), name="Bracket Drawing", isActive=True, isVisible=True, isModified=False, drawing=NS(sheets=Items([sheet]), exportManager=self.manager, documentSettings=NS(units=adsk.drawing.DrawingUnitTypes.MillimeterDrawingUnitType)), close=lambda save: self.closed.append(save))@@ -360,6 +360,22 @@ class Export(unittest.TestCase): raises(self, "drawing_not_ready", self.call) self.assertEqual((self.ui.terminated, self.manager.calls), ([], [])) + def test_another_command_is_not_ended_even_while_the_engine_edits_dimensions(self):+ # only Fusion's own Edit Auto Dimensions command is ended, never one a person started on the drawing+ self.open_here()+ self.ui.activeCommand = "FusionDrawingTextCommand"+ self.engine["unfinished"] = {"50928": ["AUTODIMENSIONEDIT"]}+ e = raises(self, "drawing_not_ready", self.call)+ self.assertEqual((self.ui.terminated, self.manager.calls), ([], []))+ self.assertNotIn("terminated", e.details)++ def test_close_leaves_a_drawing_someone_edited_open(self):+ self.open_here()+ self.doc.isModified = True+ out = self.call(close=True)+ self.assertEqual(self.manager.calls, ["pdf", "dwg", "dxf"])+ self.assertEqual((out["closed"], self.closed, self.activated), ([], [], ["previous"]))+ def test_an_engine_that_just_logged_or_never_loaded_is_not_ready(self): self.open_here() self.engine["quietSeconds"] = 1.0