добавил функционал приложению для работы с компасом
This commit is contained in:
parent
05fbce1c43
commit
310ecb6fda
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
122
app.py
122
app.py
|
@ -2,9 +2,12 @@ from kivy.app import App
|
|||
from kivy.uix.button import Button
|
||||
from kivy.uix.label import Label
|
||||
from kivy.uix.boxlayout import BoxLayout
|
||||
from kivy.uix.gridlayout import GridLayout
|
||||
from kivy.uix.scrollview import ScrollView
|
||||
from kivy.core.window import Window
|
||||
from kivy.clock import Clock
|
||||
from export_opened_to_raster import export_opened_to_raster # Импорт функции обработки
|
||||
from save_to_iges import save_opened_to_iges # Импорт функции сохранения в IGES
|
||||
from get_all_sheets import get_all_sheets # Импорт функции для получения всех листов
|
||||
from project_support import project_support # Импорт функции Project Support
|
||||
|
||||
class MyApp(App):
|
||||
def build(self):
|
||||
|
@ -18,18 +21,20 @@ class MyApp(App):
|
|||
left_panel = BoxLayout(orientation='vertical', size_hint=(0.3, 1), spacing=10)
|
||||
|
||||
# Заголовок
|
||||
header = Label(text="Моё приложение", size_hint=(1, 0.1), font_size=24, bold=True)
|
||||
header = Label(text="Kompas Saver", size_hint=(1, 0.1), font_size=24, bold=True)
|
||||
|
||||
# Кнопки слева
|
||||
button1 = Button(text="Кнопка 1", on_press=self.show_content)
|
||||
button2 = Button(text="Кнопка 2", on_press=self.show_content)
|
||||
button3 = Button(text="Кнопка 3", on_press=self.show_content)
|
||||
button1 = Button(text="Создать PDF", on_press=self.process_kompas)
|
||||
button2 = Button(text="Сохранить в IGES", on_press=self.save_to_iges)
|
||||
button3 = Button(text="Get All Sheets", on_press=self.get_all_sheets)
|
||||
button4 = Button(text="Project Support", on_press=self.project_support)
|
||||
|
||||
# Добавляем заголовок и кнопки в левую панель
|
||||
left_panel.add_widget(header)
|
||||
left_panel.add_widget(button1)
|
||||
left_panel.add_widget(button2)
|
||||
left_panel.add_widget(button3)
|
||||
left_panel.add_widget(button4)
|
||||
|
||||
# Правая панель (пространство для контента)
|
||||
self.right_panel = BoxLayout(orientation='vertical', size_hint=(0.7, 1))
|
||||
|
@ -46,16 +51,107 @@ class MyApp(App):
|
|||
self.right_panel.clear_widgets()
|
||||
|
||||
# Добавляем контент в зависимости от нажатой кнопки
|
||||
if instance.text == "Кнопка 1":
|
||||
content = Label(text="Контент для Кнопки 1", font_size=18)
|
||||
elif instance.text == "Кнопка 2":
|
||||
content = Label(text="Контент для Кнопки 2", font_size=18)
|
||||
elif instance.text == "Кнопка 3":
|
||||
content = Label(text="Контент для Кнопки 3", font_size=18)
|
||||
|
||||
if instance.text == "Кнопка 4":
|
||||
content = Label(text="Контент для Кнопки 4", font_size=18)
|
||||
|
||||
self.right_panel.add_widget(content)
|
||||
|
||||
def process_kompas(self, instance):
|
||||
# Очищаем правую панель
|
||||
self.right_panel.clear_widgets()
|
||||
|
||||
# Добавляем сообщение о начале обработки
|
||||
self.right_panel.add_widget(Label(text="Обработка документов КОМПАС...", font_size=18))
|
||||
|
||||
# Запускаем обработку в отдельном потоке (чтобы не блокировать интерфейс)
|
||||
Clock.schedule_once(lambda dt: self.run_kompas_processing(), 0.1)
|
||||
|
||||
def run_kompas_processing(self):
|
||||
try:
|
||||
# Вызываем функцию обработки документов КОМПАС
|
||||
result = export_opened_to_raster()
|
||||
|
||||
# Обновляем правую панель с результатом
|
||||
self.right_panel.clear_widgets()
|
||||
self.right_panel.add_widget(Label(text=result, font_size=18))
|
||||
|
||||
except Exception as e:
|
||||
# В случае ошибки выводим сообщение
|
||||
self.right_panel.clear_widgets()
|
||||
self.right_panel.add_widget(Label(text=f"Ошибка: {e}", font_size=18))
|
||||
|
||||
def save_to_iges(self, instance):
|
||||
# Очищаем правую панель
|
||||
self.right_panel.clear_widgets()
|
||||
|
||||
# Добавляем сообщение о начале сохранения
|
||||
self.right_panel.add_widget(Label(text="Сохранение документов в IGES...", font_size=18))
|
||||
|
||||
# Запускаем сохранение в отдельном потоке (чтобы не блокировать интерфейс)
|
||||
Clock.schedule_once(lambda dt: self.run_save_to_iges(), 0.1)
|
||||
|
||||
def run_save_to_iges(self):
|
||||
try:
|
||||
# Вызываем функцию сохранения в IGES
|
||||
result = save_opened_to_iges()
|
||||
|
||||
# Обновляем правую панель с результатом
|
||||
self.right_panel.clear_widgets()
|
||||
self.right_panel.add_widget(Label(text=result, font_size=18))
|
||||
|
||||
except Exception as e:
|
||||
# В случае ошибки выводим сообщение
|
||||
self.right_panel.clear_widgets()
|
||||
self.right_panel.add_widget(Label(text=f"Ошибка: {e}", font_size=18))
|
||||
|
||||
def get_all_sheets(self, instance):
|
||||
# Очищаем правую панель
|
||||
self.right_panel.clear_widgets()
|
||||
|
||||
# Добавляем сообщение о начале анализа
|
||||
self.right_panel.add_widget(Label(text="Анализ документов...", font_size=18))
|
||||
|
||||
# Запускаем анализ в отдельном потоке (чтобы не блокировать интерфейс)
|
||||
Clock.schedule_once(lambda dt: self.run_get_all_sheets(), 0.1)
|
||||
|
||||
def run_get_all_sheets(self):
|
||||
try:
|
||||
# Вызываем функцию для получения всех листов
|
||||
result = get_all_sheets()
|
||||
|
||||
# Обновляем правую панель с результатом
|
||||
self.right_panel.clear_widgets()
|
||||
self.right_panel.add_widget(Label(text=result, font_size=18))
|
||||
|
||||
except Exception as e:
|
||||
# В случае ошибки выводим сообщение
|
||||
self.right_panel.clear_widgets()
|
||||
self.right_panel.add_widget(Label(text=f"Ошибка: {e}", font_size=18))
|
||||
|
||||
def project_support(self, instance):
|
||||
# Очищаем правую панель
|
||||
self.right_panel.clear_widgets()
|
||||
|
||||
# Добавляем сообщение о начале поддержки проекта
|
||||
self.right_panel.add_widget(Label(text="Поддержка проекта...", font_size=18))
|
||||
|
||||
# Запускаем поддержку проекта в отдельном потоке (чтобы не блокировать интерфейс)
|
||||
Clock.schedule_once(lambda dt: self.run_project_support(), 0.1)
|
||||
|
||||
def run_project_support(self):
|
||||
try:
|
||||
# Вызываем функцию поддержки проекта
|
||||
result = project_support()
|
||||
|
||||
# Обновляем правую панель с результатом
|
||||
self.right_panel.clear_widgets()
|
||||
self.right_panel.add_widget(Label(text=result, font_size=18))
|
||||
|
||||
except Exception as e:
|
||||
# В случае ошибки выводим сообщение
|
||||
self.right_panel.clear_widgets()
|
||||
self.right_panel.add_widget(Label(text=f"Ошибка: {e}", font_size=18))
|
||||
|
||||
# Запуск приложения
|
||||
if __name__ == '__main__':
|
||||
MyApp().run()
|
File diff suppressed because it is too large
Load Diff
1064
build/app/EXE-00.toc
1064
build/app/EXE-00.toc
File diff suppressed because it is too large
Load Diff
1058
build/app/PKG-00.toc
1058
build/app/PKG-00.toc
File diff suppressed because it is too large
Load Diff
Binary file not shown.
1864
build/app/PYZ-00.toc
1864
build/app/PYZ-00.toc
File diff suppressed because it is too large
Load Diff
Binary file not shown.
Binary file not shown.
File diff suppressed because it is too large
Load Diff
|
@ -14,18 +14,17 @@ Types if import:
|
|||
IMPORTANT: Do NOT post this list to the issue-tracker. Use it as a basis for
|
||||
tracking down the missing module yourself. Thanks!
|
||||
|
||||
missing module named pyimod02_importers - imported by C:\Users\Андрей\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.11_qbz5n2kfra8p0\LocalCache\local-packages\Python311\site-packages\PyInstaller\hooks\rthooks\pyi_rth_pkgutil.py (delayed)
|
||||
missing module named 'org.python' - imported by copy (optional), xml.sax (delayed, conditional)
|
||||
missing module named org - imported by pickle (optional)
|
||||
missing module named pwd - imported by posixpath (delayed, conditional, optional), shutil (delayed, optional), tarfile (optional), pathlib (delayed, optional), subprocess (delayed, conditional, optional), http.server (delayed, optional), webbrowser (delayed), netrc (delayed, conditional), getpass (delayed)
|
||||
missing module named grp - imported by shutil (delayed, optional), tarfile (optional), pathlib (delayed, optional), subprocess (delayed, conditional, optional)
|
||||
missing module named posix - imported by posixpath (optional), shutil (conditional), importlib._bootstrap_external (conditional), os (conditional, optional)
|
||||
missing module named resource - imported by posix (top-level)
|
||||
missing module named urllib.pathname2url - imported by urllib (conditional), kivy.core.audio.audio_gstplayer (conditional), kivy.core.video.video_gstplayer (conditional)
|
||||
excluded module named _frozen_importlib - imported by importlib (optional), importlib.abc (optional), zipimport (top-level)
|
||||
missing module named _frozen_importlib_external - imported by importlib._bootstrap (delayed), importlib (optional), importlib.abc (optional), zipimport (top-level)
|
||||
missing module named pwd - imported by posixpath (delayed, conditional, optional), pathlib (delayed, optional), shutil (delayed, optional), tarfile (optional), subprocess (delayed, conditional, optional), http.server (delayed, optional), webbrowser (delayed), netrc (delayed, conditional), getpass (delayed)
|
||||
missing module named grp - imported by pathlib (delayed, optional), shutil (delayed, optional), tarfile (optional), subprocess (delayed, conditional, optional)
|
||||
missing module named _posixsubprocess - imported by subprocess (conditional), multiprocessing.util (delayed)
|
||||
missing module named fcntl - imported by subprocess (optional), kivy.input.providers.hidinput (conditional), kivy.input.providers.linuxwacom (conditional)
|
||||
missing module named _frozen_importlib_external - imported by importlib._bootstrap (delayed), importlib (optional), importlib.abc (optional), zipimport (top-level)
|
||||
excluded module named _frozen_importlib - imported by importlib (optional), importlib.abc (optional), zipimport (top-level)
|
||||
missing module named org - imported by pickle (optional)
|
||||
missing module named urllib.pathname2url - imported by urllib (conditional), kivy.core.audio.audio_gstplayer (conditional), kivy.core.video.video_gstplayer (conditional)
|
||||
missing module named posix - imported by os (conditional, optional), posixpath (optional), importlib._bootstrap_external (conditional), shutil (conditional)
|
||||
missing module named resource - imported by posix (top-level)
|
||||
missing module named 'org.python' - imported by copy (optional), xml.sax (delayed, conditional)
|
||||
missing module named _posixshmem - imported by multiprocessing.resource_tracker (conditional), multiprocessing.shared_memory (conditional)
|
||||
missing module named _scproxy - imported by urllib.request (conditional)
|
||||
missing module named termios - imported by tty (top-level), getpass (optional)
|
||||
|
@ -36,53 +35,68 @@ missing module named multiprocessing.get_context - imported by multiprocessing (
|
|||
missing module named multiprocessing.TimeoutError - imported by multiprocessing (top-level), multiprocessing.pool (top-level)
|
||||
missing module named multiprocessing.set_start_method - imported by multiprocessing (top-level), multiprocessing.spawn (top-level)
|
||||
missing module named multiprocessing.get_start_method - imported by multiprocessing (top-level), multiprocessing.spawn (top-level)
|
||||
missing module named Queue - imported by kivy.compat (optional)
|
||||
missing module named PIL - imported by kivy.atlas (delayed, optional), kivy.core.text.text_pil (top-level), kivy.core.image.img_pil (optional), pygments.formatters.img (optional)
|
||||
missing module named Leap - imported by kivy.input.providers.leapfinger (delayed)
|
||||
missing module named pygame - imported by kivy.input.providers.androidjoystick (conditional), kivy.app (delayed, conditional), kivy.core.audio.audio_pygame (conditional, optional), kivy.core.window.window_pygame (top-level), kivy.support (delayed), kivy.core.clipboard.clipboard_pygame (optional), kivy.core.image.img_pygame (optional), kivy.core.text.text_pygame (optional)
|
||||
missing module named oscpy - imported by kivy.input.providers.tuio (delayed, optional)
|
||||
missing module named asyncio.DefaultEventLoopPolicy - imported by asyncio (delayed, conditional), asyncio.events (delayed, conditional)
|
||||
missing module named pyimod02_importers - imported by C:\projects\3knopki\.venv\Lib\site-packages\PyInstaller\hooks\rthooks\pyi_rth_pkgres.py (delayed), C:\projects\3knopki\.venv\Lib\site-packages\PyInstaller\hooks\rthooks\pyi_rth_pkgutil.py (delayed)
|
||||
missing module named _manylinux - imported by pkg_resources._vendor.packaging._manylinux (delayed, optional), packaging._manylinux (delayed, optional)
|
||||
missing module named jinja2 - imported by pkg_resources._vendor.pyparsing.diagram (top-level)
|
||||
missing module named pyparsing - imported by pkg_resources._vendor.pyparsing.diagram (top-level)
|
||||
missing module named railroad - imported by pkg_resources._vendor.pyparsing.diagram (top-level)
|
||||
missing module named readline - imported by site (delayed, optional), rlcompleter (optional), cmd (delayed, conditional, optional), code (delayed, conditional, optional), pdb (delayed, optional)
|
||||
missing module named 'pkg_resources.extern.pyparsing' - imported by pkg_resources._vendor.packaging.markers (top-level), pkg_resources._vendor.packaging.requirements (top-level)
|
||||
missing module named 'pkg_resources.extern.importlib_resources' - imported by pkg_resources._vendor.jaraco.text (optional)
|
||||
missing module named 'pkg_resources.extern.more_itertools' - imported by pkg_resources._vendor.jaraco.functools (top-level)
|
||||
missing module named 'com.sun' - imported by pkg_resources._vendor.appdirs (delayed, conditional, optional)
|
||||
missing module named com - imported by pkg_resources._vendor.appdirs (delayed)
|
||||
missing module named 'win32com.gen_py' - imported by win32com (conditional, optional)
|
||||
missing module named _winreg - imported by platform (delayed, optional), pkg_resources._vendor.appdirs (delayed, conditional), pygments.formatters.img (optional)
|
||||
missing module named pkg_resources.extern.packaging - imported by pkg_resources.extern (top-level), pkg_resources (top-level)
|
||||
missing module named pkg_resources.extern.appdirs - imported by pkg_resources.extern (top-level), pkg_resources (top-level)
|
||||
missing module named 'pkg_resources.extern.jaraco' - imported by pkg_resources (top-level), pkg_resources._vendor.jaraco.text (top-level)
|
||||
missing module named vms_lib - imported by platform (delayed, optional)
|
||||
missing module named java - imported by platform (delayed)
|
||||
missing module named typing_extensions - imported by PIL._typing (conditional, optional)
|
||||
missing module named numpy - imported by PIL._typing (conditional, optional), kivy.core.camera.camera_android (delayed), kivy.core.camera.camera_picamera (top-level)
|
||||
missing module named olefile - imported by PIL.FpxImagePlugin (top-level), PIL.MicImagePlugin (top-level)
|
||||
missing module named defusedxml - imported by PIL.Image (optional)
|
||||
missing module named gobject - imported by kivy.support (delayed, optional)
|
||||
missing module named gi - imported by kivy.support (delayed, optional), kivy.core.clipboard.clipboard_gtk3 (top-level)
|
||||
missing module named android - imported by kivy.metrics (delayed, conditional), kivy.core.window (delayed, conditional), kivy.base (delayed, optional), kivy.input.providers.androidjoystick (optional), kivy.app (delayed, conditional), kivy.core.window.window_sdl2 (delayed, conditional), kivy.core.clipboard.clipboard_android (top-level), kivy.core.audio.audio_android (top-level), kivy.support (delayed, optional), kivy.core.window.window_pygame (conditional, optional)
|
||||
missing module named pygame - imported by kivy.input.providers.androidjoystick (conditional), kivy.app (delayed, conditional), kivy.core.clipboard.clipboard_pygame (optional), kivy.core.audio.audio_pygame (conditional, optional), kivy.support (delayed), kivy.core.text.text_pygame (optional), kivy.core.image.img_pygame (optional), kivy.core.window.window_pygame (top-level)
|
||||
missing module named Image - imported by kivy.core.image.img_pil (optional), docutils.parsers.rst.directives.images (optional)
|
||||
missing module named 'PIL.Image' - imported by docutils.parsers.rst.directives.images (optional)
|
||||
missing module named 'gi.repository' - imported by kivy.core.clipboard.clipboard_gtk3 (top-level), kivy.core.camera.camera_gi (top-level)
|
||||
missing module named pygments.formatters.BBCodeFormatter - imported by pygments.formatters (top-level), kivy.uix.codeinput (top-level)
|
||||
missing module named ctags - imported by pygments.formatters.html (optional)
|
||||
missing module named pygments.lexers.PrologLexer - imported by pygments.lexers (top-level), pygments.lexers.cplint (top-level)
|
||||
missing module named _winreg - imported by platform (delayed, optional), pygments.formatters.img (optional)
|
||||
missing module named chardet - imported by pygments.lexer (delayed, conditional, optional)
|
||||
missing module named roman - imported by docutils.writers.latex2e (optional), docutils.writers.manpage (optional)
|
||||
missing module named gobject - imported by kivy.support (delayed, optional)
|
||||
missing module named gi - imported by kivy.support (delayed, optional), kivy.core.clipboard.clipboard_gtk3 (top-level)
|
||||
missing module named 'gi.repository' - imported by kivy.core.clipboard.clipboard_gtk3 (top-level), kivy.core.camera.camera_gi (top-level)
|
||||
missing module named AppKit - imported by kivy.core.spelling.spelling_osxappkit (top-level)
|
||||
missing module named ffmpeg - imported by kivy.core.video.video_ffmpeg (optional)
|
||||
missing module named 'ffpyplayer.tools' - imported by kivy.core.audio.audio_ffpyplayer (optional), kivy.core.image.img_ffpyplayer (top-level), kivy.core.video.video_ffpyplayer (optional)
|
||||
missing module named 'ffpyplayer.player' - imported by kivy.core.audio.audio_ffpyplayer (optional), kivy.core.video.video_ffpyplayer (optional)
|
||||
missing module named ffpyplayer - imported by kivy.core.audio.audio_ffpyplayer (optional), kivy.core.image.img_ffpyplayer (top-level), kivy.core.video.video_ffpyplayer (optional)
|
||||
missing module named numpy - imported by kivy.core.camera.camera_android (delayed), kivy.core.camera.camera_picamera (top-level)
|
||||
missing module named picamera - imported by kivy.core.camera.camera_picamera (top-level)
|
||||
missing module named smb - imported by kivy.loader (delayed, conditional, optional)
|
||||
missing module named ios - imported by kivy.metrics (delayed, conditional), kivy.core.window (delayed)
|
||||
missing module named jnius - imported by kivy.metrics (delayed, conditional), kivy.app (delayed, conditional), kivy.core.camera.camera_android (top-level), kivy.core.clipboard.clipboard_android (top-level), kivy.core.audio.audio_android (top-level)
|
||||
missing module named 'ffpyplayer.tools' - imported by kivy.core.video.video_ffpyplayer (optional), kivy.core.image.img_ffpyplayer (top-level), kivy.core.audio.audio_ffpyplayer (optional)
|
||||
missing module named 'ffpyplayer.player' - imported by kivy.core.video.video_ffpyplayer (optional), kivy.core.audio.audio_ffpyplayer (optional)
|
||||
missing module named ffpyplayer - imported by kivy.core.video.video_ffpyplayer (optional), kivy.core.image.img_ffpyplayer (top-level), kivy.core.audio.audio_ffpyplayer (optional)
|
||||
missing module named 'pyobjus.dylib_manager' - imported by kivy.core.audio.audio_avplayer (top-level), kivy.core.clipboard.clipboard_nspaste (optional)
|
||||
missing module named pyobjus - imported by kivy.core.audio.audio_avplayer (top-level), kivy.core.clipboard.clipboard_nspaste (optional)
|
||||
missing module named 'kivy.core.text._text_pango' - imported by kivy.core.text.text_pango (top-level)
|
||||
missing module named jnius - imported by kivy.metrics (delayed, conditional), kivy.app (delayed, conditional), kivy.core.clipboard.clipboard_android (top-level), kivy.core.camera.camera_android (top-level), kivy.core.audio.audio_android (top-level)
|
||||
missing module named cv2 - imported by kivy.core.camera.camera_opencv (optional), kivy.core.camera.camera_android (delayed)
|
||||
missing module named enchant - imported by kivy.core.spelling.spelling_enchant (top-level)
|
||||
missing module named 'pygame.scrap' - imported by kivy.core.clipboard.clipboard_pygame (optional)
|
||||
missing module named kivy.lib.vidcore_lite.egl - imported by kivy.lib.vidcore_lite (top-level), kivy.core.window.window_egl_rpi (top-level)
|
||||
missing module named kivy.lib.vidcore_lite.bcm - imported by kivy.lib.vidcore_lite (top-level), kivy.core.window.window_egl_rpi (top-level)
|
||||
missing module named 'android.runnable' - imported by kivy.core.clipboard.clipboard_android (top-level)
|
||||
missing module named Leap - imported by kivy.input.providers.leapfinger (delayed)
|
||||
missing module named oscpy - imported by kivy.input.providers.tuio (delayed, optional)
|
||||
missing module named dbus - imported by kivy.core.clipboard.clipboard_dbusklipper (optional)
|
||||
missing module named cv2 - imported by kivy.core.camera.camera_android (delayed), kivy.core.camera.camera_opencv (optional)
|
||||
missing module named 'opencv.highgui' - imported by kivy.core.camera.camera_opencv (optional)
|
||||
missing module named opencv - imported by kivy.core.camera.camera_opencv (optional)
|
||||
missing module named enchant - imported by kivy.core.spelling.spelling_enchant (top-level)
|
||||
missing module named 'ffpyplayer.pic' - imported by kivy.core.image.img_ffpyplayer (top-level)
|
||||
missing module named android_mixer - imported by kivy.core.audio.audio_pygame (conditional, optional)
|
||||
missing module named 'android.mixer' - imported by kivy.core.audio.audio_pygame (conditional, optional)
|
||||
missing module named smb - imported by kivy.loader (delayed, conditional, optional)
|
||||
missing module named 'android.runnable' - imported by kivy.core.clipboard.clipboard_android (top-level)
|
||||
missing module named AppKit - imported by kivy.core.spelling.spelling_osxappkit (top-level)
|
||||
missing module named picamera - imported by kivy.core.camera.camera_picamera (top-level)
|
||||
missing module named ffmpeg - imported by kivy.core.video.video_ffmpeg (optional)
|
||||
missing module named 'pygame.scrap' - imported by kivy.core.clipboard.clipboard_pygame (optional)
|
||||
missing module named kivy.lib.vidcore_lite.egl - imported by kivy.lib.vidcore_lite (top-level), kivy.core.window.window_egl_rpi (top-level)
|
||||
missing module named kivy.lib.vidcore_lite.bcm - imported by kivy.lib.vidcore_lite (top-level), kivy.core.window.window_egl_rpi (top-level)
|
||||
missing module named 'kivy.core.text._text_pango' - imported by kivy.core.text.text_pango (top-level)
|
||||
missing module named usercustomize - imported by site (delayed, optional)
|
||||
missing module named sitecustomize - imported by site (delayed, optional)
|
||||
missing module named readline - imported by site (delayed, optional), rlcompleter (optional)
|
||||
missing module named vms_lib - imported by platform (delayed, optional)
|
||||
missing module named java - imported by platform (delayed)
|
||||
missing module named android - imported by kivy.metrics (delayed, conditional), kivy.core.window (delayed, conditional), kivy.base (delayed, optional), kivy.input.providers.androidjoystick (optional), kivy.app (delayed, conditional), kivy.core.clipboard.clipboard_android (top-level), kivy.core.window.window_pygame (conditional, optional), kivy.support (delayed, optional), kivy.core.audio.audio_android (top-level), kivy.core.window.window_sdl2 (delayed, conditional)
|
||||
missing module named ios - imported by kivy.metrics (delayed, conditional), kivy.core.window (delayed)
|
||||
missing module named ConfigParser - imported by kivy.config (optional)
|
||||
missing module named asyncio.DefaultEventLoopPolicy - imported by asyncio (delayed, conditional), asyncio.events (delayed, conditional)
|
||||
missing module named trio - imported by kivy.clock (delayed, conditional)
|
||||
missing module named Queue - imported by kivy.compat (optional)
|
||||
missing module named ConfigParser - imported by kivy.config (optional)
|
||||
|
|
File diff suppressed because it is too large
Load Diff
Binary file not shown.
|
@ -0,0 +1,147 @@
|
|||
import pythoncom
|
||||
from win32com.client import Dispatch, gencache
|
||||
import os
|
||||
from PIL import Image, ImageDraw, ImageFont
|
||||
|
||||
def export_opened_to_raster():
|
||||
try:
|
||||
# Получаем API интерфейсов версии 5
|
||||
api5_module = gencache.EnsureModule("{0422828C-F174-495E-AC5D-D31014DBBE87}", 0, 1, 0)
|
||||
api5_api = api5_module.KompasObject(
|
||||
Dispatch("Kompas.Application.5")._oleobj_.QueryInterface(
|
||||
api5_module.KompasObject.CLSID, pythoncom.IID_IDispatch
|
||||
)
|
||||
)
|
||||
|
||||
module = gencache.EnsureModule("{69AC2981-37C0-4379-84FD-5DD2F3C0A520}", 0, 1, 0)
|
||||
api = module.IKompasAPIObject(
|
||||
Dispatch("Kompas.Application.7")._oleobj_.QueryInterface(
|
||||
module.IKompasAPIObject.CLSID, pythoncom.IID_IDispatch
|
||||
)
|
||||
)
|
||||
|
||||
k_constants = gencache.EnsureModule(
|
||||
"{75C9F5D0-B5B8-4526-8681-9903C567D2ED}", 0, 1, 0
|
||||
).constants
|
||||
|
||||
application = module.IApplication(api)
|
||||
save_param = None
|
||||
images = []
|
||||
|
||||
application.Visible = True
|
||||
first_doc_name = None # Для хранения имени первого документа
|
||||
print("Начинаем обработку документов КОМПАС...")
|
||||
|
||||
for i in range(application.Documents.Count):
|
||||
try:
|
||||
doc = application.Documents.Open(i)
|
||||
doc_type = doc.DocumentType
|
||||
|
||||
# Проверяем тип документа: чертеж, фрагмент, спецификация
|
||||
if doc_type in [
|
||||
k_constants.ksDocumentDrawing,
|
||||
k_constants.ksDocumentFragment,
|
||||
k_constants.ksDocumentSpecification,
|
||||
]:
|
||||
doc.Active = True
|
||||
doc_path = doc.Path
|
||||
doc_name = "-".join(doc.Name.split(".")[:-1])
|
||||
print(f"Обрабатываем документ: {doc_name}")
|
||||
|
||||
doc_api5 = api5_api.ActiveDocument2D()
|
||||
doc_api7 = module.IKompasDocument(doc)
|
||||
|
||||
# Сохраняем имя первого документа
|
||||
if first_doc_name is None:
|
||||
first_doc_name = (
|
||||
doc_api7.LayoutSheets.ItemByNumber(1).Stamp.Text(2).Str
|
||||
)
|
||||
|
||||
if doc_type == k_constants.ksDocumentSpecification:
|
||||
doc_api5 = api5_api.SpcActiveDocument()
|
||||
|
||||
if doc_api5 and save_param is None:
|
||||
rasterParJPG = doc_api5.RasterFormatParam()
|
||||
rasterParJPG.Init()
|
||||
rasterParJPG.colorBPP = 8
|
||||
rasterParJPG.colorType = 3
|
||||
rasterParJPG.extResolution = 96
|
||||
rasterParJPG.format = 0
|
||||
rasterParJPG.greyScale = False
|
||||
|
||||
for ext in ["jpg", "dxf"]:
|
||||
path = f"{doc_path}{ext}/"
|
||||
filename = f"{doc_name}.{ext}"
|
||||
full_path = os.path.join(path, filename)
|
||||
|
||||
if not os.path.exists(path):
|
||||
os.makedirs(path)
|
||||
print(f"Создана папка: {path}")
|
||||
|
||||
if ext == "jpg":
|
||||
doc_api5.SaveAsToRasterFormat(full_path, rasterParJPG)
|
||||
print(f"Сохранен JPG: {full_path}")
|
||||
|
||||
# Открываем сохраненное изображение и добавляем его в список
|
||||
img = Image.open(full_path)
|
||||
images.append(img)
|
||||
|
||||
if ext == "dxf":
|
||||
doc_api5.ksSaveToDXF(full_path)
|
||||
print(f"Сохранен DXF: {full_path}")
|
||||
|
||||
except Exception as e:
|
||||
print(f"Ошибка при обработке документа {i}: {e}")
|
||||
|
||||
# Если есть изображения, создаем PDF
|
||||
if images:
|
||||
desktop_path = os.path.join(
|
||||
os.path.expanduser("~"), "Desktop"
|
||||
) # Путь к рабочему столу
|
||||
pdf_filename = f"{first_doc_name}_pages.pdf" # Имя PDF-файла
|
||||
pdf_output_path = os.path.join(desktop_path, pdf_filename) # Полный путь к PDF
|
||||
|
||||
# Создаем первую страницу с заголовком
|
||||
try:
|
||||
# Попытка загрузить шрифт Arial (или другой шрифт с поддержкой кириллицы)
|
||||
font = ImageFont.truetype(
|
||||
"arial.ttf", size=48
|
||||
) # Размер шрифта можно изменить
|
||||
except IOError:
|
||||
print(
|
||||
"Шрифт Arial не найден. Используется стандартный шрифт (без поддержки кириллицы)."
|
||||
)
|
||||
font = ImageFont.load_default()
|
||||
|
||||
# Создаем изображение для заголовка с увеличенной высотой
|
||||
title_image = Image.new("RGB", (images[0].width, 200), color="white")
|
||||
draw = ImageDraw.Draw(title_image)
|
||||
|
||||
# Текст заголовка
|
||||
title_text = f"{first_doc_name}\nКоличество страниц: {len(images)}"
|
||||
|
||||
# Рисуем текст на изображении с отступами между строками
|
||||
draw.text((10, 50), title_text, fill="black", font=font, spacing=10)
|
||||
|
||||
# Добавляем заголовок как первую страницу
|
||||
images.insert(0, title_image)
|
||||
|
||||
# Сохраняем все изображения в многостраничный PDF
|
||||
images[0].save(
|
||||
pdf_output_path,
|
||||
"PDF",
|
||||
resolution=96.0,
|
||||
save_all=True,
|
||||
append_images=images[1:],
|
||||
)
|
||||
print(
|
||||
f"Многостраничный PDF успешно сохранен на рабочий стол: {pdf_output_path}"
|
||||
)
|
||||
|
||||
return f"PDF сохранен: {pdf_output_path}"
|
||||
|
||||
else:
|
||||
return "Ошибка: Нет документов для обработки."
|
||||
|
||||
except Exception as e:
|
||||
return f"Произошла ошибка: {e}"
|
|
@ -0,0 +1,147 @@
|
|||
# pip install pywin32
|
||||
import pythoncom
|
||||
from win32com.client import Dispatch, gencache
|
||||
import os
|
||||
|
||||
def get_all_sheets():
|
||||
try:
|
||||
# Получи API интерфейсов версии 5
|
||||
api5_module = gencache.EnsureModule("{0422828C-F174-495E-AC5D-D31014DBBE87}", 0, 1, 0)
|
||||
api5_api = api5_module.KompasObject(
|
||||
Dispatch("Kompas.Application.5")._oleobj_.QueryInterface(
|
||||
api5_module.KompasObject.CLSID, pythoncom.IID_IDispatch
|
||||
)
|
||||
)
|
||||
|
||||
module = gencache.EnsureModule("{69AC2981-37C0-4379-84FD-5DD2F3C0A520}", 0, 1, 0)
|
||||
api = module.IKompasAPIObject(
|
||||
Dispatch("Kompas.Application.7")._oleobj_.QueryInterface(
|
||||
module.IKompasAPIObject.CLSID, pythoncom.IID_IDispatch
|
||||
)
|
||||
)
|
||||
|
||||
application = module.IApplication(api)
|
||||
|
||||
application.Visible = True
|
||||
result = []
|
||||
|
||||
for i in range(application.Documents.Count):
|
||||
try:
|
||||
doc = application.Documents.Open(i)
|
||||
doc_type = doc.DocumentType
|
||||
if doc_type in [4, 5]: # 4 — чертеж, 5 — сборка
|
||||
doc.Active = True
|
||||
doc_path = doc.Path
|
||||
doc_name = "-".join(doc.Name.split(".")[:-1])
|
||||
print(f"Анализируем документ: {doc_name}")
|
||||
|
||||
doc_3d = module.IKompasDocument3D(doc)
|
||||
top_part = doc_3d.TopPart
|
||||
elements = []
|
||||
bends = []
|
||||
welding = []
|
||||
|
||||
def look_features(element):
|
||||
feature = module.IFeature7(element)
|
||||
sub_features = feature.SubFeatures(1, True, False) or []
|
||||
for item in sub_features:
|
||||
if type(item) in (module.ISheetMetalBend, module.ISheetMetalLineBend, module.ISheetMetalBody):
|
||||
sub_sheets = item.Owner.SubFeatures(1, True, False)
|
||||
if sub_sheets:
|
||||
for b in sub_sheets:
|
||||
bend = module.ISheetMetalBend(b)
|
||||
bends.append(bend)
|
||||
|
||||
def look_drawing(part):
|
||||
drawing_context = module.IDrawingContainer(part)
|
||||
macro = module.IMacroObject3D(drawing_context)
|
||||
sub_features = macro.Owner.SubFeatures(1, True, False) or []
|
||||
for item in sub_features:
|
||||
if type(item) in (module.IUserDesignationCompObj,):
|
||||
welding.append(item)
|
||||
|
||||
def find_elements(part):
|
||||
try:
|
||||
drawing_context = module.IDrawingContainer(part)
|
||||
macro = module.IMacroObject3D(drawing_context)
|
||||
sub_features = macro.Owner.SubFeatures(1, True, False) or []
|
||||
for item in sub_features:
|
||||
if type(item) in (module.IUserDesignationCompObj,):
|
||||
welding.append(item)
|
||||
except Exception as e:
|
||||
print("Ошибка в DrawingContext")
|
||||
|
||||
try:
|
||||
doc_parts = module.IParts7(part.Parts)
|
||||
for i in range(doc_parts.Count):
|
||||
element = doc_parts.Part(i)
|
||||
if element.Parts.Count == 0:
|
||||
elements.append(element)
|
||||
look_features(element)
|
||||
find_elements(element)
|
||||
except Exception as e:
|
||||
print("Ошибка в Parts")
|
||||
|
||||
if doc_type == 5:
|
||||
find_elements(top_part)
|
||||
else:
|
||||
elements.append(top_part)
|
||||
look_drawing(top_part)
|
||||
look_features(top_part)
|
||||
|
||||
print(f"Найдено:\n Элементов: {len(elements)}\n Гибов: {len(bends)}\n")
|
||||
|
||||
sorted_data = {
|
||||
"Name": {},
|
||||
"Material": {},
|
||||
"Area": {},
|
||||
}
|
||||
|
||||
for e in elements:
|
||||
for n in sorted_data.keys():
|
||||
if n == "Name":
|
||||
v = f"{getattr(e, n)}, масса {round(getattr(e, 'Mass'), 3)}"
|
||||
res = sorted_data[n].get(v, 0) + 1
|
||||
elif n == "Area":
|
||||
mass_inertial_params = module.IMassInertiaParam7(e)
|
||||
val = mass_inertial_params.Area * 0.0001
|
||||
v = f"площадь {getattr(e, 'Material')}, м²:"
|
||||
res = round(sorted_data[n].get(v, 0) + val, 6)
|
||||
else:
|
||||
v = getattr(e, n)
|
||||
res = sorted_data[n].get(v, 0) + 1
|
||||
sorted_data[n][v] = res
|
||||
|
||||
sorted_data["Area"]["Total"] = sum(sorted_data["Area"].values())
|
||||
|
||||
welding_key = "Welding"
|
||||
for w in welding:
|
||||
if welding_key not in sorted_data:
|
||||
sorted_data[welding_key] = {}
|
||||
w_name = w.Name
|
||||
w_name_split = w_name.split("-")
|
||||
w_len = w_name_split[-1].split("@")[0]
|
||||
sorted_data[welding_key][w_name] = w_len
|
||||
|
||||
if welding_key in sorted_data:
|
||||
def float_f(n):
|
||||
try:
|
||||
return float(n)
|
||||
except Exception as e:
|
||||
return 0
|
||||
sorted_data[welding_key]["Total"] = sum([float_f(f) for f in sorted_data[welding_key].values()])
|
||||
|
||||
result.append(f"Документ: {doc_name}")
|
||||
for s in sorted_data:
|
||||
result.append(s)
|
||||
for n in sorted_data[s]:
|
||||
result.append(f"{n} -- {sorted_data[s][n]}")
|
||||
result.append("-----")
|
||||
|
||||
except Exception as e:
|
||||
result.append(f"Ошибка при обработке документа {i}: {e}")
|
||||
|
||||
return "\n".join(result)
|
||||
|
||||
except Exception as e:
|
||||
return f"Произошла ошибка: {e}"
|
|
@ -0,0 +1,123 @@
|
|||
# pip install pywin32
|
||||
import pythoncom
|
||||
from win32com.client import Dispatch, gencache
|
||||
import os
|
||||
import math
|
||||
|
||||
def project_support():
|
||||
try:
|
||||
# Получи API интерфейсов версии 5
|
||||
api5_module = gencache.EnsureModule("{0422828C-F174-495E-AC5D-D31014DBBE87}", 0, 1, 0)
|
||||
api5_api = api5_module.KompasObject(
|
||||
Dispatch("Kompas.Application.5")._oleobj_.QueryInterface(
|
||||
api5_module.KompasObject.CLSID, pythoncom.IID_IDispatch
|
||||
)
|
||||
)
|
||||
|
||||
module = gencache.EnsureModule("{69AC2981-37C0-4379-84FD-5DD2F3C0A520}", 0, 1, 0)
|
||||
api = module.IKompasAPIObject(
|
||||
Dispatch("Kompas.Application.7")._oleobj_.QueryInterface(
|
||||
module.IKompasAPIObject.CLSID, pythoncom.IID_IDispatch
|
||||
)
|
||||
)
|
||||
|
||||
k_constants = gencache.EnsureModule(
|
||||
"{75C9F5D0-B5B8-4526-8681-9903C567D2ED}", 0, 1, 0
|
||||
).constants
|
||||
|
||||
application = module.IApplication(api)
|
||||
saving_path = "../cdw/"
|
||||
|
||||
application.Visible = True
|
||||
result = []
|
||||
|
||||
for i in range(application.Documents.Count):
|
||||
try:
|
||||
doc = application.Documents.Open(i)
|
||||
doc_type = doc.DocumentType
|
||||
if doc_type in [k_constants.ksDocumentAssembly, k_constants.ksDocumentPart]:
|
||||
doc.Active = True
|
||||
doc_path = doc.Path
|
||||
doc_name = "-".join(doc.Name.split(".")[:-1])
|
||||
result.append(f"Анализируем документ: {doc_name}")
|
||||
|
||||
doc_3d = module.IKompasDocument3D(doc)
|
||||
doc_components = []
|
||||
|
||||
def all_elements(part):
|
||||
doc_parts = module.IParts7(part.Parts)
|
||||
for i in range(doc_parts.Count):
|
||||
element = doc_parts.Part(i)
|
||||
if element.Parts.Count == 0:
|
||||
if not element.Standard and not any(
|
||||
[el.Name == element.Name for el in doc_components]
|
||||
):
|
||||
doc_components.append(element)
|
||||
else:
|
||||
all_elements(element)
|
||||
|
||||
if doc_type == k_constants.ksDocumentAssembly:
|
||||
all_elements(doc_3d.TopPart)
|
||||
else:
|
||||
doc_components.append(doc_3d.TopPart)
|
||||
|
||||
for component in doc_components:
|
||||
component_ipart = module.IPart7(component)
|
||||
if component_ipart.Standard:
|
||||
continue
|
||||
result.append(f"Создаем чертеж для {component.Name}")
|
||||
|
||||
c_doc = application.Documents.Add(k_constants.ksDocumentDrawing)
|
||||
# Делаем лист А3 альбомный
|
||||
c_layout = c_doc.LayoutSheets
|
||||
c_sheet = c_layout.Item(0)
|
||||
c_sheet.Format.Format = k_constants.ksFormatA3
|
||||
c_sheet.Format.VerticalOrientation = False
|
||||
c_sheet.Update()
|
||||
|
||||
c_size = [1, 1, 1]
|
||||
if component_ipart.Owner.ResultBodies:
|
||||
gabarit = [0, 0, 0, 0, 0, 0]
|
||||
gabarit = component_ipart.Owner.ResultBodies.GetGabarit(*gabarit)
|
||||
g1 = gabarit[1:4]
|
||||
g2 = gabarit[4:]
|
||||
c_size = [abs(g1[i] - g2[i]) for i in range(len(g1))]
|
||||
g = max(c_size)
|
||||
|
||||
c_filename = component_ipart.FileName
|
||||
c_name = component_ipart.Name
|
||||
c_doc_2d = module.IKompasDocument2D(c_doc)
|
||||
c_views = c_doc_2d.ViewsAndLayersManager.Views
|
||||
c_scale = c_sheet.Format.FormatHeight / sum(c_size)
|
||||
c_views.AddStandartViews(
|
||||
c_filename,
|
||||
c_name,
|
||||
[1, 3, 5, 7],
|
||||
c_size[1] * c_scale,
|
||||
c_sheet.Format.FormatHeight - 25,
|
||||
c_scale,
|
||||
20,
|
||||
20,
|
||||
)
|
||||
|
||||
if not os.path.exists(f"{doc_path}{saving_path}"):
|
||||
os.makedirs(f"{doc_path}{saving_path}")
|
||||
filename = "_".join(filter(None, [component_ipart.Marking, c_name[:20]])).replace(" ", "-")
|
||||
result.append(f"Сохраняем чертеж: {doc_path}{saving_path}{filename}.cdw")
|
||||
c_doc.SaveAs(f"{doc_path}{saving_path}{filename}.cdw")
|
||||
|
||||
if doc_type == k_constants.ksDocumentAssembly:
|
||||
spec = application.Documents.Add(k_constants.ksDocumentSpecification)
|
||||
spec_doc = module.ISpecificationDocument(spec)
|
||||
spec_doc.AttachedDocuments.Add(doc.PathName, True)
|
||||
filename = "Список_деталей"
|
||||
result.append(f"Сохраняем спецификацию: {doc_path}{saving_path}{filename}.spw")
|
||||
spec.SaveAs(f"{doc_path}{saving_path}{filename}.spw")
|
||||
|
||||
except Exception as e:
|
||||
result.append(f"Ошибка при обработке документа {i}: {e}")
|
||||
|
||||
return "\n".join(result)
|
||||
|
||||
except Exception as e:
|
||||
return f"Произошла ошибка: {e}"
|
|
@ -0,0 +1,65 @@
|
|||
# pip install pywin32
|
||||
import pythoncom
|
||||
from win32com.client import Dispatch, gencache
|
||||
import os
|
||||
|
||||
def save_opened_to_iges():
|
||||
try:
|
||||
# Получи API интерфейсов версии 5
|
||||
api5_module = gencache.EnsureModule("{0422828C-F174-495E-AC5D-D31014DBBE87}", 0, 1, 0)
|
||||
api5_api = api5_module.KompasObject(
|
||||
Dispatch("Kompas.Application.5")._oleobj_.QueryInterface(
|
||||
api5_module.KompasObject.CLSID, pythoncom.IID_IDispatch
|
||||
)
|
||||
)
|
||||
|
||||
module = gencache.EnsureModule("{69AC2981-37C0-4379-84FD-5DD2F3C0A520}", 0, 1, 0)
|
||||
api = module.IKompasAPIObject(
|
||||
Dispatch("Kompas.Application.7")._oleobj_.QueryInterface(
|
||||
module.IKompasAPIObject.CLSID, pythoncom.IID_IDispatch
|
||||
)
|
||||
)
|
||||
|
||||
k_constants = gencache.EnsureModule(
|
||||
"{75C9F5D0-B5B8-4526-8681-9903C567D2ED}", 0, 1, 0
|
||||
).constants
|
||||
|
||||
application = module.IApplication(api)
|
||||
|
||||
application.Visible = True
|
||||
for i in range(application.Documents.Count):
|
||||
try:
|
||||
doc = application.Documents.Open(i)
|
||||
doc_type = doc.DocumentType
|
||||
if doc_type in [k_constants.ksDocumentPart, k_constants.ksDocumentAssembly]:
|
||||
doc.Active = True
|
||||
doc_path = doc.Path
|
||||
doc_name = "-".join(doc.Name.split(".")[:-1])
|
||||
print(f"Попытка сохранить {doc_name}")
|
||||
|
||||
doc_3d = module.IKompasDocument3D(doc)
|
||||
doc_api5 = api5_api.ActiveDocument3D()
|
||||
|
||||
save_params = doc_api5.AdditionFormatParam()
|
||||
save_params.Init()
|
||||
save_params.format = k_constants.ksConverterToIGES
|
||||
|
||||
ext = "igs"
|
||||
|
||||
path = f"{doc_path}{ext}/"
|
||||
filename = f"{doc_name}.{ext}"
|
||||
full_path = "".join([path, filename])
|
||||
|
||||
if not os.path.exists(path):
|
||||
os.makedirs(path)
|
||||
|
||||
doc_api5.SaveAsToAdditionFormat(full_path, save_params)
|
||||
print(f"Файл {doc_name} сохранен как IGES: {full_path}")
|
||||
|
||||
except Exception as e:
|
||||
print(f"Ошибка при обработке документа {i}: {e}")
|
||||
|
||||
return "Сохранение в IGES завершено."
|
||||
|
||||
except Exception as e:
|
||||
return f"Произошла ошибка: {e}"
|
Loading…
Reference in New Issue