Зачатаки для Circle
This commit is contained in:
54
Canvas.cpp
54
Canvas.cpp
@@ -92,6 +92,14 @@ void Canvas::zoomReset()
|
|||||||
|
|
||||||
Line* Canvas::findAt(QPointF& pos, qreal tolerance)
|
Line* Canvas::findAt(QPointF& pos, qreal tolerance)
|
||||||
{
|
{
|
||||||
|
//for (Curve* curve : curves) {
|
||||||
|
// if (Line* line = dynamic_cast<Line*>(curve)) {
|
||||||
|
// if (line->contains(pos, tolerance)) {
|
||||||
|
// return line;
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
//}
|
||||||
|
|
||||||
for (Line* line : lines) {
|
for (Line* line : lines) {
|
||||||
if (line->contains(pos, tolerance)) {
|
if (line->contains(pos, tolerance)) {
|
||||||
return line;
|
return line;
|
||||||
@@ -103,6 +111,19 @@ Line* Canvas::findAt(QPointF& pos, qreal tolerance)
|
|||||||
Point* Canvas::findPointAt(QPointF pos, qreal tolerance)
|
Point* Canvas::findPointAt(QPointF pos, qreal tolerance)
|
||||||
{
|
{
|
||||||
Point* temp = nullptr;
|
Point* temp = nullptr;
|
||||||
|
|
||||||
|
//for (Curve* curve : curves) {
|
||||||
|
// if (Line* line = dynamic_cast<Line*>(curve)) {
|
||||||
|
// QPointF p1(*line->p1.x, *line->p1.y);
|
||||||
|
// QPointF p2(*line->p2.x, *line->p2.y);
|
||||||
|
|
||||||
|
// if (dist_P2P(p1, pos) <= tolerance)
|
||||||
|
// temp = line->start_ref;
|
||||||
|
// if (dist_P2P(p2, pos) <= tolerance)
|
||||||
|
// temp = line->end_ref;
|
||||||
|
// }
|
||||||
|
//}
|
||||||
|
|
||||||
for (Line* line : lines) {
|
for (Line* line : lines) {
|
||||||
QPointF p1(*line->p1.x, *line->p1.y);
|
QPointF p1(*line->p1.x, *line->p1.y);
|
||||||
QPointF p2(*line->p2.x, *line->p2.y);
|
QPointF p2(*line->p2.x, *line->p2.y);
|
||||||
@@ -350,6 +371,7 @@ void Canvas::mousePressEvent(QMouseEvent* event)
|
|||||||
current_line->set_tag(obj_count++);
|
current_line->set_tag(obj_count++);
|
||||||
// Завершаем создание линии
|
// Завершаем создание линии
|
||||||
lines.append(current_line);
|
lines.append(current_line);
|
||||||
|
curves.append(current_line);
|
||||||
current_line = nullptr;
|
current_line = nullptr;
|
||||||
mode = Mode::None;
|
mode = Mode::None;
|
||||||
after_constraint = true;
|
after_constraint = true;
|
||||||
@@ -437,6 +459,16 @@ void Canvas::mousePressEvent(QMouseEvent* event)
|
|||||||
// Находим линии, к которым принадлежат точки
|
// Находим линии, к которым принадлежат точки
|
||||||
Line* l1 = nullptr;
|
Line* l1 = nullptr;
|
||||||
Line* l2 = nullptr;
|
Line* l2 = nullptr;
|
||||||
|
|
||||||
|
//for (Curve* curve : curves) {
|
||||||
|
// if (Line* l = dynamic_cast<Line*>(curve)) {
|
||||||
|
// if (l->start_ref == firstPoint || l->end_ref == firstPoint)
|
||||||
|
// l1 = l;
|
||||||
|
// if (l->start_ref == clickedPoint || l->end_ref == clickedPoint)
|
||||||
|
// l2 = l;
|
||||||
|
// }
|
||||||
|
//}
|
||||||
|
|
||||||
for (Line* l : lines) {
|
for (Line* l : lines) {
|
||||||
if (l->start_ref == firstPoint || l->end_ref == firstPoint)
|
if (l->start_ref == firstPoint || l->end_ref == firstPoint)
|
||||||
l1 = l;
|
l1 = l;
|
||||||
@@ -610,6 +642,12 @@ void Canvas::paintEvent(QPaintEvent* event)
|
|||||||
p.drawLine(0, -5, 0, 5);
|
p.drawLine(0, -5, 0, 5);
|
||||||
|
|
||||||
// ====================== Отрисовка линий ======================
|
// ====================== Отрисовка линий ======================
|
||||||
|
|
||||||
|
// for (Curve* curve : curve){
|
||||||
|
// if (Line* line = dynamic_cast<Line*>(curve)) {
|
||||||
|
// ...
|
||||||
|
// }
|
||||||
|
// }
|
||||||
for (Line* line : lines) {
|
for (Line* line : lines) {
|
||||||
bool isSelected = (mode == Mode::Parallel && line == current_line);
|
bool isSelected = (mode == Mode::Parallel && line == current_line);
|
||||||
|
|
||||||
@@ -803,6 +841,11 @@ void Canvas::solve_for_canvas()
|
|||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
sys.applySolution();
|
sys.applySolution();
|
||||||
|
// for (Curve* curve : curve){
|
||||||
|
// if (Line* line = dynamic_cast<Line*>(curve)) {
|
||||||
|
// ...
|
||||||
|
// }
|
||||||
|
// }
|
||||||
for (Line* line : lines) {
|
for (Line* line : lines) {
|
||||||
if (abs(*line->p1.x - *line->p2.x) < EPS && abs(*line->p1.y - *line->p2.y) < EPS && after_constraint) {
|
if (abs(*line->p1.x - *line->p2.x) < EPS && abs(*line->p1.y - *line->p2.y) < EPS && after_constraint) {
|
||||||
sys.undoSolution();
|
sys.undoSolution();
|
||||||
@@ -811,13 +854,15 @@ void Canvas::solve_for_canvas()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if (flag && after_constraint) {
|
||||||
if (flag) {
|
|
||||||
QMessageBox::warning(this, QString("Error!"), QString("Last constraint is unavailable!"));
|
QMessageBox::warning(this, QString("Error!"), QString("Last constraint is unavailable!"));
|
||||||
remove_constraint(constraints_count - 1);
|
remove_constraint(constraints_count - 1);
|
||||||
C_Info.erase(constraints_count - 1);
|
C_Info.erase(constraints_count - 1);
|
||||||
constraints_count--;
|
constraints_count--;
|
||||||
}
|
}
|
||||||
|
else if (flag) {
|
||||||
|
sys.undoSolution();
|
||||||
|
}
|
||||||
after_constraint = false;
|
after_constraint = false;
|
||||||
update();
|
update();
|
||||||
}
|
}
|
||||||
@@ -840,6 +885,10 @@ void Canvas::clearCanvas()
|
|||||||
delete pt;
|
delete pt;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// for (Curve* curve : curve){
|
||||||
|
// delete curve;
|
||||||
|
// }
|
||||||
|
|
||||||
for (Line* line : lines) {
|
for (Line* line : lines) {
|
||||||
delete line;
|
delete line;
|
||||||
}
|
}
|
||||||
@@ -848,6 +897,7 @@ void Canvas::clearCanvas()
|
|||||||
params.clear();
|
params.clear();
|
||||||
points.clear();
|
points.clear();
|
||||||
lines.clear();
|
lines.clear();
|
||||||
|
// curves.clear();
|
||||||
|
|
||||||
// Очистка контейнеров ограничений
|
// Очистка контейнеров ограничений
|
||||||
parallelPairs.clear();
|
parallelPairs.clear();
|
||||||
|
|||||||
5
Canvas.h
5
Canvas.h
@@ -34,7 +34,8 @@ enum class Mode : int
|
|||||||
Coincedent = 3, ///< Режим задания совпадения точек
|
Coincedent = 3, ///< Режим задания совпадения точек
|
||||||
Horizontal = 4, ///< Режим задания горизонтальности
|
Horizontal = 4, ///< Режим задания горизонтальности
|
||||||
Vertical = 5, ///< Режим задания вертикальности
|
Vertical = 5, ///< Режим задания вертикальности
|
||||||
Perpendicular = 6 ///< Режим задания перпендикулярности
|
Perpendicular = 6, ///< Режим задания перпендикулярности
|
||||||
|
DrawingCircle = 7 ///< Режим рисования окружности
|
||||||
};
|
};
|
||||||
|
|
||||||
/// Удобный тип для хранения пары параллельных линий (порядок не важен)
|
/// Удобный тип для хранения пары параллельных линий (порядок не важен)
|
||||||
@@ -255,6 +256,8 @@ private:
|
|||||||
// ====================== Данные геометрической системы ======================
|
// ====================== Данные геометрической системы ======================
|
||||||
System sys; ///< Геометрический солвер
|
System sys; ///< Геометрический солвер
|
||||||
QVector<Line*> lines; ///< Завершённые линии
|
QVector<Line*> lines; ///< Завершённые линии
|
||||||
|
QVector<Circle*> circles; ///< Завершённые окружности
|
||||||
|
QVector<Curve*> curves;
|
||||||
QVector<Point*> points; ///< Все точки сцены
|
QVector<Point*> points; ///< Все точки сцены
|
||||||
std::vector<double*> params; ///< Все параметры, передаваемые в солвер
|
std::vector<double*> params; ///< Все параметры, передаваемые в солвер
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user