From af9c849d07b13908552b8d8da04e7c96de06e2d6 Mon Sep 17 00:00:00 2001 From: Mark Voltov Date: Sat, 10 Jun 2023 22:56:53 +0300 Subject: [PATCH] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=B8=D0=BB=20?= =?UTF-8?q?=D1=81=D0=BA=D1=80=D0=B8=D0=BF=D1=82=20=D0=B4=D0=BB=D1=8F=20?= =?UTF-8?q?=D1=80=D0=B0=D0=B7=D0=BE=D0=B2=D0=BE=D0=B3=D0=BE=20=D1=8D=D0=BA?= =?UTF-8?q?=D1=81=D0=BF=D0=BE=D1=80=D1=82=D0=B0=20=D0=B2=D1=81=D0=B5=D1=85?= =?UTF-8?q?=20=D0=B2=D1=81=D0=BF=D0=BE=D0=BC=D0=BE=D0=B3=D0=B0=D1=82=D0=B5?= =?UTF-8?q?=D0=BB=D1=8C=D0=BD=D1=8B=D1=85=20=D0=BE=D0=B1=D1=8C=D0=B5=D0=BA?= =?UTF-8?q?=D1=82=D0=BE=D0=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- cg/freecad/Frames/ImportExportEntities.py | 105 ++++++++++++++++++++++ 1 file changed, 105 insertions(+) create mode 100644 cg/freecad/Frames/ImportExportEntities.py diff --git a/cg/freecad/Frames/ImportExportEntities.py b/cg/freecad/Frames/ImportExportEntities.py new file mode 100644 index 0000000..cc51f72 --- /dev/null +++ b/cg/freecad/Frames/ImportExportEntities.py @@ -0,0 +1,105 @@ +import os +import json +import FreeCAD +import Tools + +def export_coordinate_systems(): + # Получение активного документа FreeCAD + doc = FreeCAD.ActiveDocument + if not doc: + raise ValueError("Нет активного документа FreeCAD.") + + # Получение имени активного документа + doc_name = doc.Name + + + # Получение пути к папке и имя файла активного документа + folder_path, file_name = os.path.split(doc.FileName) + + # Создание папки для экспорта, если она не существует + output_folder = os.path.join(folder_path, 'entities') + if not os.path.exists(output_folder): + os.makedirs(output_folder) + + + + # Создание копии активного документа + # надо сохраняться, а не копироваться + + doc.save() + + + + # Получение списка объектов документа + objects = doc.Objects + + # Обход объектов для сохранения локальных систем координат + for obj in objects: + if obj.TypeId == 'PartDesign::CoordinateSystem': + + partprops = Tools.getLocalPartProps(obj) + + + output_file_path = os.path.join(output_folder, f"{obj.Label}.json") + with open(output_file_path, "w", encoding="utf8") as propfile: + json.dump(partprops, propfile, indent=1, separators=(',', ': ')) + + + print("Экспорт обьектов завершен.") + +export_coordinate_systems() + + +#работает + + +def import_coordinate_systems(): + # Получение активного документа FreeCAD + doc = FreeCAD.ActiveDocument + if not doc: + raise ValueError("Нет активного документа FreeCAD.") + + # Получение имени активного документа + doc_name = doc.Name + + # Получение пути к папке активного документа + folder_path, _ = os.path.split(doc.FileName) + + # Получение пути к папке с файлами JSON + json_folder_path = os.path.join(folder_path, doc_name) + + # Проверка существования папки с файлами JSON + if not os.path.exists(json_folder_path): + raise ValueError(f"Папка {json_folder_path} не существует.") + + # Получение списка файлов JSON в папке + json_files = [f for f in os.listdir(json_folder_path) if f.endswith(".json")] + + # Обход файлов JSON для создания локальных систем координат + for json_file in json_files: + json_file_path = os.path.join(json_folder_path, json_file) + with open(json_file_path, "r") as file: + json_data = json.load(file) + + # Извлечение информации о локальной системе координат из файла JSON + name = json_data.get("Name") + x = json_data.get("X") + y = json_data.get("Y") + z = json_data.get("Z") + + # Создание локальной системы координат + placement = FreeCAD.Placement() + placement.Base = FreeCAD.Vector(x, y, z) + part = doc.addObject("Part::Feature", name) + part.Placement = placement + + # Добавление дополнительных свойств из файла JSON + for key, value in json_data.items(): + if key not in ["Name", "X", "Y", "Z"]: + setattr(part, key, value) + + print("Импорт локальных систем координат завершен.") + +# Пример использования +#import_coordinate_systems() +