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, вы можете столкнуться с определенными предупреждениями или незначительными проблемами. В случае серьезных проблем рекомендуется использовать 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 вместо PyQt5, что требует учитывать следующие особенности:
- Расположение класса QAction: В PySide6 класс
QAction
находится в модулеQtGui
, а не вQtWidgets
- Сигналы: В PySide6 используется
Signal
вместоpyqtSignal
- Метод exec: В PySide6 используется
exec()
вместо устаревшегоexec_()
- Параметры в диалогах: В PySide6 используется
minValue/maxValue
вместоmin/max
в методах типаQInputDialog.getInt()
- Возвращаемые значения: Некоторые методы могут возвращать разные типы данных в PySide6 и PyQt5
# Находясь в корневой директории проекта и активировав виртуальное окружение
python main.py
-
Создание объектов:
- Выберите тип объекта в меню "Объекты"
- Задайте параметры линии (тип, толщина, цвет) в соответствующих меню
- Нарисуйте объект, кликая мышью на канве
-
Ручной ввод координат:
- Нажмите клавишу "V" для вызова диалога ручного ввода координат
- В зависимости от режима рисования и выбранной системы координат введите необходимые параметры
- Для переключения между декартовой и полярной системами используйте клавиши "C" и "P" соответственно
-
Работа с файлами:
- Создание нового файла: Файл → Новый (Ctrl+N)
- Открытие DXF файла: Файл → Открыть DXF... (Ctrl+O)
- Сохранение файла: Файл → Сохранить (Ctrl+S) или Файл → Сохранить как... (Ctrl+Shift+S)
- При выходе из программы с несохраненными изменениями будет предложено сохранить файл
-
Управление видом:
- Панорамирование: Зажмите среднюю кнопку мыши и перемещайте курсор
- Масштабирование: Крутите колесико мыши
- Поворот: Ctrl + стрелка влево/вправо
- Переключение сетки: Клавиша "G" или Сетка → Показать/скрыть сетку
- Изменение размера сетки: Сетка → Размер сетки
-
Редактирование объектов:
- В дереве объектов (панель справа) щелкните правой кнопкой мыши по объекту
- Выберите "Редактировать", "Удалить" или "Повернуть"
- Дважды щелкните по параметру объекта для его редактирования
-
Темная тема:
- Для переключения между светлой и темной темой используйте пункт меню "Сменить тему"
-
Горячие клавиши:
- Z: Отменить последнее действие (удалить последний созданный объект)
- Esc: Отменить текущее построение
- G: Показать/скрыть сетку
- M: Показать/скрыть оси координат
- C: Переключиться на декартову систему координат
- P: Переключиться на полярную систему координат
- V: Ручной ввод координат
- Ctrl+N: Создать новый файл
- Ctrl+O: Открыть DXF-файл
- Ctrl+S: Сохранить файл
- Ctrl+Shift+S: Сохранить файл как...
- Ctrl+Q: Выход из программы
Если в темной теме элементы дерева объектов не видны или плохо различимы:
- Переключитесь на светлую тему
- Убедитесь, что используется последняя версия кода
Если вы видите ошибку ImportError: cannot import name 'QAction' from 'PySide6.QtWidgets'
, убедитесь что QAction импортируется из модуля QtGui:
# Неправильно:
from PySide6.QtWidgets import QAction
# Правильно:
from PySide6.QtGui import QAction
В PySide6 используется Signal
вместо pyqtSignal
. Если вы увидите ошибки связанные с сигналами, замените:
# Неправильно:
from PySide6.QtCore import pyqtSignal
class MyClass:
mySignal = pyqtSignal()
# Правильно:
from PySide6.QtCore import Signal
class MyClass:
mySignal = Signal()
Если вы видите предупреждение о устаревшем методе exec_()
, замените его на exec()
:
# Неправильно:
menu.exec_(position)
app.exec_()
# Правильно:
menu.exec(position)
app.exec()
Если вы видите ошибку 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)
Если возникают проблемы при запуске на Python 3.12:
- Убедитесь, что установлена совместимая версия PySide6 (6.6.0 или новее)
- В случае критических ошибок, попробуйте использовать Python 3.11
Приложение построено на следующих технологиях:
- PySide6: для создания графического интерфейса
- ezdxf: для работы с DXF-файлами
- Объектно-ориентированная архитектура: каждый тип геометрического объекта представлен своим классом
При сохранении в DXF:
- Каждый геометрический объект конвертируется в соответствующий DXF-примитив
- Атрибуты объектов (цвет, тип и толщина линии) переносятся в DXF
- Файл сохраняется в формате AutoCAD 2010 (R2010)
При открытии DXF:
- Примитивы DXF конвертируются в соответствующие объекты приложения
- Атрибуты примитивов (цвет, тип и толщина линии) применяются к объектам
- Объекты добавляются на канву и отображаются в дереве объектов