diff --git a/src/Mod/FreeCADExchange/ExchangeWriteBack.py b/src/Mod/FreeCADExchange/ExchangeWriteBack.py index d8e3eb6..884612b 100644 --- a/src/Mod/FreeCADExchange/ExchangeWriteBack.py +++ b/src/Mod/FreeCADExchange/ExchangeWriteBack.py @@ -150,6 +150,12 @@ def _collect_terminal_bindings(doc): instance_id = getattr(device_group, "QetInstanceId", "").strip() for terminal_obj in _iter_terminal_objects(device_group): terminal_uuid = getattr(terminal_obj, "QetTerminalUuid", "").strip() + binding_mode = getattr(terminal_obj, "QetTerminalBindingMode", "").strip().lower() + if ( + TerminalObjects.is_local_terminal_uuid(terminal_uuid) + or binding_mode == TerminalObjects.TERMINAL_BINDING_MODE_LOCAL + ): + continue terminal_instance_id = getattr(terminal_obj, "QetInstanceId", "").strip() or instance_id if not terminal_uuid or not terminal_instance_id: continue diff --git a/tests/python/freecad_exchange_wiring_test.py b/tests/python/freecad_exchange_wiring_test.py index 4f7a7e0..4a1a313 100644 --- a/tests/python/freecad_exchange_wiring_test.py +++ b/tests/python/freecad_exchange_wiring_test.py @@ -400,6 +400,68 @@ class WiringTest(unittest.TestCase): else: os.environ["QET_2D_TO_3D_JSON"] = old_json + def test_writeback_skips_local_terminal_bindings(self): + _install_fake_freecad() + terminal_objects, _wiring_objects, _manual_wiring, write_back = _reload_modules() + + doc = FakeDocument() + root = terminal_objects.ensure_root_group(doc, "project-1") + device = doc.addObject("App::DocumentObjectGroup", "QETDevice_device_a") + root.addObject(device) + terminal_objects.ensure_string_property( + device, + "QetElementUuid", + "QET Exchange", + "Element UUID", + "device-a", + ) + terminal_objects.ensure_string_property( + device, + "QetInstanceId", + "QET Exchange", + "Instance ID", + "instance-a", + ) + terminal_group = terminal_objects.ensure_terminal_group( + doc, + device, + project_uuid="project-1", + instance_id="instance-a", + ) + + qet_terminal = terminal_objects.create_lcs_object(doc, "QETTerminal_A") + terminal_group.addObject(qet_terminal) + terminal_objects.set_terminal_semantics( + qet_terminal, + "project-1", + "device-a", + "terminal-a", + "instance-a", + label="A", + ) + local_terminal = terminal_objects.create_lcs_object(doc, "QETTerminal_Local") + terminal_group.addObject(local_terminal) + terminal_objects.set_terminal_semantics( + local_terminal, + "project-1", + "device-a", + "local:instance-a:P1", + "instance-a", + label="P1", + ) + + with tempfile.TemporaryDirectory() as tmp_dir: + report = write_back.write_back_document( + doc, + scene_path=str(Path(tmp_dir) / "scene.FCStd"), + payload={"project_uuid": "project-1"}, + ) + + self.assertEqual( + [{"terminal_uuid": "terminal-a", "instance_id": "instance-a"}], + report["terminals"], + ) + if __name__ == "__main__": unittest.main()