Тест на перпендикулярность
This commit is contained in:
51
Canvas.cpp
51
Canvas.cpp
@@ -136,6 +136,11 @@ bool Canvas::areAlreadyParallel(Line* l1, Line* l2)
|
||||
return parallelPairs.count(makeOrderedPair<LinePair>(l1, l2));
|
||||
}
|
||||
|
||||
bool Canvas::areAlreadyPerpendicular(Line* line1, Line* line2)
|
||||
{
|
||||
return perpendicularPairs.count(makeOrderedPair<LinePair>(line1, line2));
|
||||
}
|
||||
|
||||
// ===================================================================
|
||||
// Методы работы с ограничениями
|
||||
// ===================================================================
|
||||
@@ -443,6 +448,52 @@ void Canvas::mousePressEvent(QMouseEvent* event)
|
||||
update();
|
||||
return;
|
||||
}
|
||||
|
||||
else if (mode == Mode::Perpendicular) {
|
||||
Line* found = findAt(scene);
|
||||
|
||||
if (!found) {
|
||||
current_line = nullptr;
|
||||
update();
|
||||
return;
|
||||
}
|
||||
|
||||
// Первый клик: выбираем первую линию
|
||||
if (!current_line) {
|
||||
current_line = found;
|
||||
update();
|
||||
return;
|
||||
}
|
||||
|
||||
// Повторный клик на ту же линию: сброс выбора
|
||||
if (found == current_line) {
|
||||
current_line = nullptr;
|
||||
update();
|
||||
return;
|
||||
}
|
||||
|
||||
if (!areAlreadyPerpendicular(found, current_line)) {
|
||||
auto pair = makeOrderedPair<LinePair>(found, current_line);
|
||||
sys.addConstraintPerpendicular(*found, *current_line, constraints_count++);
|
||||
perpendicularPairs.insert(pair);
|
||||
|
||||
current_line = nullptr;
|
||||
mode = Mode::None;
|
||||
after_constraint = true;
|
||||
update();
|
||||
}
|
||||
else {
|
||||
|
||||
QMessageBox::warning(this,
|
||||
QString("Wrong"),
|
||||
QString("Perpendicular lines can not be more perpendicular!"),
|
||||
QMessageBox::Ok
|
||||
);
|
||||
current_line = nullptr;
|
||||
update();
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void Canvas::mouseMoveEvent(QMouseEvent* event)
|
||||
|
||||
Reference in New Issue
Block a user