← Commit history

drawings: end only Fusion's Edit Auto Dimensions command by name; close:true leaves a drawing someone edited open (fusion-lane review)

Colby Knox ·ad5a07371d ·6d ago ·parent 0b67928
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