diff --git a/bridge.py b/bridge.py index d7f545e..cde55f0 100644 --- a/bridge.py +++ b/bridge.py @@ -33,8 +33,10 @@ class PythonJSBridge(QObject): data = None if command == KompasCommand.OPEN_KOMPAS: data = self.kompas.get_open_documents() + if command == KompasCommand.GET_AVAILABLE_ACTIONS: + data = self.kompas.get_available_actions() - return json.dumps(data) - + return json.dumps(data, ensure_ascii=False) + def send_event_to_js(self, event_type: str, data: dict): self.emitter.onEvent.emit(event_type, data) \ No newline at end of file diff --git a/enums.py b/enums.py index 4ffec3c..e18dad4 100644 --- a/enums.py +++ b/enums.py @@ -2,6 +2,7 @@ from enum import Enum class KompasCommand(str, Enum): OPEN_KOMPAS = "open_kompas" + GET_AVAILABLE_ACTIONS = "get_available_actions" @classmethod def has_value(cls, value): diff --git a/main.py b/main.py index 08db18e..97ee1ac 100644 --- a/main.py +++ b/main.py @@ -7,23 +7,17 @@ from PyQt6.QtCore import QUrl, QThread from config import MAIN_URL from bridge import PythonJSBridge -from parser.main import KompasDocumentParser - class KompasWorker(QThread): def run(self): pythoncom.CoInitialize() - self.parser = KompasDocumentParser() class BrowserWindow(QMainWindow): def __init__(self): super().__init__() self.setWindowTitle("QT6 Браузер") - self.resize(1000, 800) - - self.kompas_thread = KompasWorker() - self.kompas_thread.start() + self.resize(1366, 768) container = QWidget() layout = QVBoxLayout() diff --git a/parser/main.py b/parser/main.py index 5672b34..6efa5fb 100644 --- a/parser/main.py +++ b/parser/main.py @@ -22,6 +22,7 @@ class KompasDocumentParser: """Инициализация API КОМПАС версий 5 и 7""" try: import pythoncom + pythoncom.CoInitialize() # Получаем API версии 5 @@ -62,7 +63,9 @@ class KompasDocumentParser: for i in range(docs_collection.Count): try: - doc = docs_collection.Item(i + 1) # Индексация с 1 + doc = docs_collection.Item(i) # Индексация с 1 + if doc is None: + continue documents.append( { @@ -75,4 +78,57 @@ class KompasDocumentParser: except Exception as e: print(f"Ошибка при обработке документа #{i + 1}: {e}") - return documents \ No newline at end of file + return documents + + # --- Заглушки для действий --- + + def get_all_sheets(self): + """Заглушка: Извлечение данных о листовых деталях""" + pass + + def save_to_iges(self): + """Заглушка: Экспорт в IGES""" + pass + + def collect_statistics(self): + """Заглушка: Сбор статистики по элементам, гибам и сваркам""" + pass + + def export_to_raster(self): + """Заглушка: Экспорт в растровый формат""" + pass + + def get_available_actions(self): + """ + Возвращает список доступных действий и допустимые типы документов + Формат: { action_key: { 'label': str, 'allowed_types': list } } + """ + # Допустимые типы документов + ALLOWED_TYPES_3D = [ + self.constants.ksDocumentPart, + self.constants.ksDocumentAssembly, + ] + ALLOWED_TYPES_2D = [ + self.constants.ksDocumentDrawing, + self.constants.ksDocumentFragment, + ] + ALLOWED_TYPES_SPEC = [self.constants.ksDocumentSpecification] + ALLOWED_TYPES_ALL = ALLOWED_TYPES_3D + ALLOWED_TYPES_2D + ALLOWED_TYPES_SPEC + return { + "iges": { + "label": "Сохранить как IGES", + "allowed_types": ALLOWED_TYPES_3D, + }, + "stats": { + "label": "Собрать статистику по элементам", + "allowed_types": ALLOWED_TYPES_3D, + }, + "export_pdf": { + "label": "Экспортировать в PDF", + "allowed_types": ALLOWED_TYPES_2D + ALLOWED_TYPES_SPEC, + }, + "project_support": { + "label": "Создать чертежи деталей", + "allowed_types": ALLOWED_TYPES_3D, + }, + } diff --git a/parser/worker.py b/parser/worker.py deleted file mode 100644 index ccbdf44..0000000 --- a/parser/worker.py +++ /dev/null @@ -1,27 +0,0 @@ -# kompas_worker.py -from PyQt6.QtCore import QObject, pyqtSignal -import pythoncom -from parser.main import KompasDocumentParser - - -class KompasWorker(QObject): - result_ready = pyqtSignal(object) - error_occurred = pyqtSignal(str) - - def run_kompas(self): - try: - # Инициализируем COM правильно - pythoncom.CoInitializeEx(pythoncom.COINIT_APARTMENTTHREADED) - - # Выполняем работу с КОМПАС - parser = KompasDocumentParser() - documents = parser.get_open_documents() - - # Отправляем результат обратно - self.result_ready.emit(documents) - except Exception as e: - import traceback - error_msg = f"[Ошибка] {e}\n{traceback.format_exc()}" - self.error_occurred.emit(error_msg) - finally: - pythoncom.CoUninitialize() \ No newline at end of file