Примитивное перемещение линий
Если точнее, то перемещаем их концевые точки
This commit is contained in:
35
Canvas.cpp
35
Canvas.cpp
@@ -52,7 +52,15 @@ void Canvas::mousePressEvent(QMouseEvent* event)
|
||||
qDebug() << "Scene point in" << scene.x() << scene.y();
|
||||
#endif
|
||||
|
||||
if (mode == Mode::DrawingLine) {
|
||||
if (mode == Mode::None){
|
||||
Point* p = findPointAt(scene);
|
||||
if (p) {
|
||||
draggedPoint = p;
|
||||
dragOffset = scene - QPointF(*p->x, *p->y);
|
||||
return;
|
||||
}
|
||||
}
|
||||
else if (mode == Mode::DrawingLine) {
|
||||
if (!current_line) {
|
||||
current_line = new Line();
|
||||
current_line->set_tag(obj_count);
|
||||
@@ -101,6 +109,7 @@ void Canvas::mousePressEvent(QMouseEvent* event)
|
||||
current_line = nullptr;
|
||||
mode = Mode::None;
|
||||
obj_count++;
|
||||
after_constraint = true;
|
||||
}
|
||||
update();
|
||||
return;
|
||||
@@ -133,6 +142,7 @@ void Canvas::mousePressEvent(QMouseEvent* event)
|
||||
current_line = nullptr;
|
||||
update();
|
||||
mode = Mode::None;
|
||||
after_constraint = true;
|
||||
}
|
||||
else {
|
||||
|
||||
@@ -189,11 +199,30 @@ void Canvas::mousePressEvent(QMouseEvent* event)
|
||||
sys.addConstraintP2PCoincident(*firstPoint, *clickedPoint, constraints_count++);
|
||||
firstPoint = nullptr;
|
||||
mode = Mode::None;
|
||||
after_constraint = true;
|
||||
update();
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
void Canvas::mouseMoveEvent(QMouseEvent* event)
|
||||
{
|
||||
if (draggedPoint) {
|
||||
QPointF pos = event->pos() - dragOffset;
|
||||
*draggedPoint->x = pos.x();
|
||||
*draggedPoint->y = pos.y();
|
||||
update();
|
||||
}
|
||||
}
|
||||
|
||||
void Canvas::mouseReleaseEvent(QMouseEvent* event)
|
||||
{
|
||||
if (draggedPoint) {
|
||||
draggedPoint = nullptr;
|
||||
update();
|
||||
}
|
||||
}
|
||||
|
||||
void Canvas::paintEvent(QPaintEvent*)
|
||||
{
|
||||
QPainter p(this);
|
||||
@@ -205,10 +234,12 @@ void Canvas::paintEvent(QPaintEvent*)
|
||||
if (res == SolveStatus::Success || res == SolveStatus::Converged) {
|
||||
sys.applySolution();
|
||||
}
|
||||
else {
|
||||
else if (res == SolveStatus::Failed && after_constraint){
|
||||
QMessageBox::warning(this, QString("Error!"), QString("Last constraint is unavailable!"));
|
||||
sys.removeConstraint(sys.get_last_constraint());
|
||||
constraints_count--;
|
||||
}
|
||||
after_constraint = false;
|
||||
}
|
||||
|
||||
for (Line* line : lines) {
|
||||
|
||||
Reference in New Issue
Block a user