Skip to content

YanZaharov/Compas2D

Repository files navigation

Compas 2D

Compas 2D - это легкая САПР система для двумерного черчения с поддержкой формата DXF, созданная на Python и PySide6.

Описание программы

Compas 2D позволяет создавать различные геометрические объекты (линии, окружности, дуги, прямоугольники, многоугольники, сплайны) и сохранять их в формате DXF, а также открывать существующие DXF-файлы. Программа имеет интуитивно понятный интерфейс с возможностью настройки параметров отображения и вычерчивания.

Основные возможности:

  • Рисование геометрических примитивов:

    • Линии
    • Окружности (по центру и радиусу, по трем точкам)
    • Дуги (по трем точкам, по радиусу и хорде)
    • Прямоугольники (по сторонам, от центра)
    • Многоугольники (произвольные, вписанные, описанные)
    • Кривые Безье и сегментные сплайны
  • Работа с файлами DXF:

    • Создание новых файлов
    • Открытие существующих DXF-файлов
    • Сохранение в формат DXF
    • Поддержка атрибутов DXF (типы линий, толщина, цвет)
  • Настройки отображения:

    • Светлая и темная тема
    • Настраиваемая сетка
    • Декартовая и полярная системы координат
    • Настройка типа, толщины и цвета линий
  • Управление объектами:

    • Древовидный список объектов
    • Редактирование параметров объектов
    • Поворот и удаление объектов
    • Отмена последнего действия

Системные требования

  • Операционная система: Windows 10/11, macOS 10.14+, Linux (с поддержкой графического интерфейса)
  • Python: 3.12 (в проекте используются определенные настройки для обеспечения совместимости с PySide6)
  • Оперативная память: Минимум 4 GB
  • Дисковое пространство: ~100 MB для установки всех зависимостей
  • Разрешение экрана: Рекомендуется минимум 1280x720

Установка и запуск

Требования

  • Python 3.12
  • PySide6 6.6.0 или новее (графический интерфейс)
  • ezdxf 1.1.0 или новее (работа с DXF файлами)

Установка в виртуальное окружение

# Создание виртуального окружения
python -m venv compas2d_env

# Активация виртуального окружения
# Windows:
compas2d_env\Scripts\activate
# Linux/Mac:
# source compas2d_env/bin/activate

# Установка зависимостей
pip install -r requirements.txt

Возможные проблемы с Python 3.12 и PySide6

Хотя мы сконфигурировали проект для работы с Python 3.12, вы можете столкнуться с определенными предупреждениями или незначительными проблемами. В случае серьезных проблем рекомендуется использовать Python 3.11.

Структура проекта

compas2d/
├── core/                # Базовые классы геометрии
│   ├── arc.py           # Модуль для работы с дугами
│   ├── base_geometry.py # Базовый класс для всех геометрических объектов
│   ├── circle.py        # Модуль для работы с окружностями
│   ├── line.py          # Модуль для работы с линиями
│   ├── polygon.py       # Модуль для работы с многоугольниками
│   ├── rectangle.py     # Модуль для работы с прямоугольниками
│   └── spline.py        # Модуль для работы со сплайнами
├── ui/                  # Пользовательский интерфейс
│   ├── canvas.py        # Канва для рисования
│   └── objects_tree.py  # Дерево объектов
├── utils/               # Вспомогательные модули
│   └── handle_input.py  # Утилиты для обработки ввода
├── dxf_handler.py       # Обработчик DXF-файлов
├── main.py              # Главный файл программы
├── requirements.txt     # Зависимости проекта
└── README.md            # Документация проекта

Важные замечания по совместимости PySide6

Программа использует PySide6 вместо PyQt5, что требует учитывать следующие особенности:

  1. Расположение класса QAction: В PySide6 класс QAction находится в модуле QtGui, а не в QtWidgets
  2. Сигналы: В PySide6 используется Signal вместо pyqtSignal
  3. Метод exec: В PySide6 используется exec() вместо устаревшего exec_()
  4. Параметры в диалогах: В PySide6 используется minValue/maxValue вместо min/max в методах типа QInputDialog.getInt()
  5. Возвращаемые значения: Некоторые методы могут возвращать разные типы данных в PySide6 и PyQt5

Запуск приложения

# Находясь в корневой директории проекта и активировав виртуальное окружение
python main.py

Как пользоваться программой

  1. Создание объектов:

    • Выберите тип объекта в меню "Объекты"
    • Задайте параметры линии (тип, толщина, цвет) в соответствующих меню
    • Нарисуйте объект, кликая мышью на канве
  2. Ручной ввод координат:

    • Нажмите клавишу "V" для вызова диалога ручного ввода координат
    • В зависимости от режима рисования и выбранной системы координат введите необходимые параметры
    • Для переключения между декартовой и полярной системами используйте клавиши "C" и "P" соответственно
  3. Работа с файлами:

    • Создание нового файла: Файл → Новый (Ctrl+N)
    • Открытие DXF файла: Файл → Открыть DXF... (Ctrl+O)
    • Сохранение файла: Файл → Сохранить (Ctrl+S) или Файл → Сохранить как... (Ctrl+Shift+S)
    • При выходе из программы с несохраненными изменениями будет предложено сохранить файл
  4. Управление видом:

    • Панорамирование: Зажмите среднюю кнопку мыши и перемещайте курсор
    • Масштабирование: Крутите колесико мыши
    • Поворот: Ctrl + стрелка влево/вправо
    • Переключение сетки: Клавиша "G" или Сетка → Показать/скрыть сетку
    • Изменение размера сетки: Сетка → Размер сетки
  5. Редактирование объектов:

    • В дереве объектов (панель справа) щелкните правой кнопкой мыши по объекту
    • Выберите "Редактировать", "Удалить" или "Повернуть"
    • Дважды щелкните по параметру объекта для его редактирования
  6. Темная тема:

    • Для переключения между светлой и темной темой используйте пункт меню "Сменить тему"
  7. Горячие клавиши:

    • Z: Отменить последнее действие (удалить последний созданный объект)
    • Esc: Отменить текущее построение
    • G: Показать/скрыть сетку
    • M: Показать/скрыть оси координат
    • C: Переключиться на декартову систему координат
    • P: Переключиться на полярную систему координат
    • V: Ручной ввод координат
    • Ctrl+N: Создать новый файл
    • Ctrl+O: Открыть DXF-файл
    • Ctrl+S: Сохранить файл
    • Ctrl+Shift+S: Сохранить файл как...
    • Ctrl+Q: Выход из программы

Устранение проблем

1. Проблемы с темной темой

Если в темной теме элементы дерева объектов не видны или плохо различимы:

  • Переключитесь на светлую тему
  • Убедитесь, что используется последняя версия кода

2. Ошибки импорта QAction

Если вы видите ошибку ImportError: cannot import name 'QAction' from 'PySide6.QtWidgets', убедитесь что QAction импортируется из модуля QtGui:

# Неправильно:
from PySide6.QtWidgets import QAction

# Правильно:
from PySide6.QtGui import QAction

3. Ошибки сигналов

В PySide6 используется Signal вместо pyqtSignal. Если вы увидите ошибки связанные с сигналами, замените:

# Неправильно:
from PySide6.QtCore import pyqtSignal
class MyClass:
    mySignal = pyqtSignal()

# Правильно:
from PySide6.QtCore import Signal
class MyClass:
    mySignal = Signal()

4. Ошибки с методом exec_()

Если вы видите предупреждение о устаревшем методе exec_(), замените его на exec():

# Неправильно:
menu.exec_(position)
app.exec_()

# Правильно:
menu.exec(position)
app.exec()

5. Ошибки с параметрами QInputDialog

Если вы видите ошибку unsupported keyword 'min' или unsupported keyword 'max', замените параметры:

# Неправильно:
size, ok = QInputDialog.getInt(self, "Размер", "Введите размер:", value=10, min=1, max=100)

# Правильно:
size, ok = QInputDialog.getInt(self, "Размер", "Введите размер:", value=10, minValue=1, maxValue=100)

6. Проблемы с запуском на Python 3.12

Если возникают проблемы при запуске на Python 3.12:

  • Убедитесь, что установлена совместимая версия PySide6 (6.6.0 или новее)
  • В случае критических ошибок, попробуйте использовать Python 3.11

Технические детали

Приложение построено на следующих технологиях:

  • PySide6: для создания графического интерфейса
  • ezdxf: для работы с DXF-файлами
  • Объектно-ориентированная архитектура: каждый тип геометрического объекта представлен своим классом

Работа с DXF файлами

При сохранении в DXF:

  1. Каждый геометрический объект конвертируется в соответствующий DXF-примитив
  2. Атрибуты объектов (цвет, тип и толщина линии) переносятся в DXF
  3. Файл сохраняется в формате AutoCAD 2010 (R2010)

При открытии DXF:

  1. Примитивы DXF конвертируются в соответствующие объекты приложения
  2. Атрибуты примитивов (цвет, тип и толщина линии) применяются к объектам
  3. Объекты добавляются на канву и отображаются в дереве объектов

About

Compas2D - light CAD system with .dwg files

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages