Удаление всех объектов и ограничений из чертежа
Скоро буду переходить на SolveSpace
This commit is contained in:
164
Canvas.cpp
164
Canvas.cpp
@@ -29,40 +29,13 @@ Canvas::Canvas(QWidget* parent)
|
|||||||
sys = System();
|
sys = System();
|
||||||
setMouseTracking(true);
|
setMouseTracking(true);
|
||||||
setBackgroundRole(QPalette::Base);
|
setBackgroundRole(QPalette::Base);
|
||||||
|
setFocusPolicy(Qt::StrongFocus);
|
||||||
setAutoFillBackground(true);
|
setAutoFillBackground(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
Canvas::~Canvas()
|
Canvas::~Canvas()
|
||||||
{
|
{
|
||||||
// Очистка динамически выделенной памяти
|
clearCanvas();
|
||||||
|
|
||||||
for (double* param : params) {
|
|
||||||
delete param;
|
|
||||||
}
|
|
||||||
|
|
||||||
for (Point* pt : points) {
|
|
||||||
delete pt;
|
|
||||||
}
|
|
||||||
|
|
||||||
for (Line* line : lines) {
|
|
||||||
delete line;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Очистка контейнеров
|
|
||||||
params.clear();
|
|
||||||
points.clear();
|
|
||||||
lines.clear();
|
|
||||||
|
|
||||||
parallelPairs.clear();
|
|
||||||
P2Ppairs.clear();
|
|
||||||
VERT_pairs.clear();
|
|
||||||
HORIZ_pairs.clear();
|
|
||||||
|
|
||||||
// Очистка временных указателей
|
|
||||||
if (current_line)
|
|
||||||
delete current_line;
|
|
||||||
if (firstPoint)
|
|
||||||
delete firstPoint;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// ===================================================================
|
// ===================================================================
|
||||||
@@ -661,6 +634,77 @@ void Canvas::paintEvent(QPaintEvent* event)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Canvas::keyPressEvent(QKeyEvent* event)
|
||||||
|
{
|
||||||
|
switch (event->key()) {
|
||||||
|
case Qt::Key_Delete:
|
||||||
|
case Qt::Key_Clear: {
|
||||||
|
QMessageBox::StandardButton reply;
|
||||||
|
reply = QMessageBox::question(this,
|
||||||
|
"Очистка canvas",
|
||||||
|
"Удалить все объекты и ограничения?",
|
||||||
|
QMessageBox::Yes | QMessageBox::No);
|
||||||
|
|
||||||
|
if (reply == QMessageBox::Yes) {
|
||||||
|
clearCanvas();
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
case Qt::Key_Escape: {
|
||||||
|
// Отмена текущего действия
|
||||||
|
if (mode == Mode::DrawingLine && current_line) {
|
||||||
|
// Отмена рисования линии
|
||||||
|
delete current_line;
|
||||||
|
current_line = nullptr;
|
||||||
|
|
||||||
|
// Удаляем созданные точки и параметры
|
||||||
|
if (points.size() >= 2) {
|
||||||
|
delete points.back();
|
||||||
|
points.pop_back();
|
||||||
|
delete points.back();
|
||||||
|
points.pop_back();
|
||||||
|
}
|
||||||
|
if (params.size() >= 4) {
|
||||||
|
delete params.back();
|
||||||
|
params.pop_back();
|
||||||
|
delete params.back();
|
||||||
|
params.pop_back();
|
||||||
|
delete params.back();
|
||||||
|
params.pop_back();
|
||||||
|
delete params.back();
|
||||||
|
params.pop_back();
|
||||||
|
}
|
||||||
|
mode = Mode::None;
|
||||||
|
update();
|
||||||
|
}
|
||||||
|
else if (mode != Mode::None) {
|
||||||
|
// Отмена любого другого режима
|
||||||
|
mode = Mode::None;
|
||||||
|
current_line = nullptr;
|
||||||
|
firstPoint = nullptr;
|
||||||
|
update();
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
case Qt::Key_Z: {
|
||||||
|
if (event->modifiers() & Qt::ControlModifier) {
|
||||||
|
// Ctrl+Z - отмена последнего ограничения
|
||||||
|
if (constraints_count > 0) {
|
||||||
|
remove_constraint(constraints_count - 1);
|
||||||
|
constraints_count--;
|
||||||
|
solve_for_canvas();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
default:
|
||||||
|
QWidget::keyPressEvent(event);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void Canvas::leaveEvent(QEvent* event)
|
void Canvas::leaveEvent(QEvent* event)
|
||||||
{
|
{
|
||||||
Q_UNUSED(event);
|
Q_UNUSED(event);
|
||||||
@@ -736,3 +780,65 @@ void Canvas::solve_for_canvas()
|
|||||||
after_constraint = false;
|
after_constraint = false;
|
||||||
update();
|
update();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// ===================================================================
|
||||||
|
// Очистка всего canvas
|
||||||
|
// ===================================================================
|
||||||
|
|
||||||
|
void Canvas::clearCanvas()
|
||||||
|
{
|
||||||
|
// Очистка солвера
|
||||||
|
sys.clear();
|
||||||
|
|
||||||
|
// Очистка динамически выделенной памяти
|
||||||
|
for (double* param : params) {
|
||||||
|
delete param;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (Point* pt : points) {
|
||||||
|
delete pt;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (Line* line : lines) {
|
||||||
|
delete line;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Очистка контейнеров
|
||||||
|
params.clear();
|
||||||
|
points.clear();
|
||||||
|
lines.clear();
|
||||||
|
|
||||||
|
// Очистка контейнеров ограничений
|
||||||
|
parallelPairs.clear();
|
||||||
|
P2Ppairs.clear();
|
||||||
|
VERT_pairs.clear();
|
||||||
|
HORIZ_pairs.clear();
|
||||||
|
perpendicularPairs.clear();
|
||||||
|
|
||||||
|
// Очистка информации об ограничениях
|
||||||
|
C_Info.clear();
|
||||||
|
|
||||||
|
// Сброс счетчиков
|
||||||
|
obj_count = 0;
|
||||||
|
constraints_count = 0;
|
||||||
|
|
||||||
|
// Очистка временных указателей
|
||||||
|
if (current_line) {
|
||||||
|
delete current_line;
|
||||||
|
current_line = nullptr;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (firstPoint) {
|
||||||
|
delete firstPoint;
|
||||||
|
firstPoint = nullptr;
|
||||||
|
}
|
||||||
|
|
||||||
|
draggedPoint = nullptr;
|
||||||
|
draggedLine = nullptr;
|
||||||
|
|
||||||
|
// Сброс режима
|
||||||
|
mode = Mode::None;
|
||||||
|
|
||||||
|
// Обновление отображения
|
||||||
|
update();
|
||||||
|
}
|
||||||
3
Canvas.h
3
Canvas.h
@@ -6,6 +6,7 @@ constexpr auto EPS = 1e-9;
|
|||||||
#include <QPointF>
|
#include <QPointF>
|
||||||
#include <QMessageBox>
|
#include <QMessageBox>
|
||||||
#include <QToolTip>
|
#include <QToolTip>
|
||||||
|
#include <QKeyEvent>
|
||||||
|
|
||||||
#ifdef _DEBUG
|
#ifdef _DEBUG
|
||||||
#include <QDebug>
|
#include <QDebug>
|
||||||
@@ -59,6 +60,7 @@ protected:
|
|||||||
void mouseMoveEvent(QMouseEvent* event) override;
|
void mouseMoveEvent(QMouseEvent* event) override;
|
||||||
void mouseReleaseEvent(QMouseEvent* event) override;
|
void mouseReleaseEvent(QMouseEvent* event) override;
|
||||||
void paintEvent(QPaintEvent* event) override;
|
void paintEvent(QPaintEvent* event) override;
|
||||||
|
void keyPressEvent(QKeyEvent* event);
|
||||||
void leaveEvent(QEvent* event) override;
|
void leaveEvent(QEvent* event) override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
@@ -148,4 +150,5 @@ private:
|
|||||||
std::map<int, ConstraintInfo> C_Info;
|
std::map<int, ConstraintInfo> C_Info;
|
||||||
|
|
||||||
void solve_for_canvas();
|
void solve_for_canvas();
|
||||||
|
void clearCanvas();
|
||||||
};
|
};
|
||||||
Reference in New Issue
Block a user