Исправление P2P
При сдвиге точек двух линий в одну без наложения P2P-ограничения, эти точки ведут себя как P2P
This commit is contained in:
31
Canvas.cpp
31
Canvas.cpp
@@ -4,17 +4,17 @@ static double dist_P2P(QPointF p1, QPointF p2) {
|
||||
return sqrt(pow(p2.x() - p1.x(), 2) + pow(p2.y() - p1.y(), 2));
|
||||
}
|
||||
|
||||
void Canvas::changeMode(Mode _mode)
|
||||
{
|
||||
mode = _mode;
|
||||
}
|
||||
|
||||
template <typename T, typename A, typename B>
|
||||
T makeOrderedPair(A* obj1, B* obj2)
|
||||
{
|
||||
return (obj1->get_tag() < obj2->get_tag()) ? std::make_pair(obj1, obj2) : std::make_pair(obj2, obj1);
|
||||
}
|
||||
|
||||
void Canvas::changeMode(Mode _mode)
|
||||
{
|
||||
mode = _mode;
|
||||
}
|
||||
|
||||
// TODO
|
||||
Line* Canvas::findAt(QPointF& pos)
|
||||
{
|
||||
@@ -43,21 +43,24 @@ Point* Canvas::findPointAt(QPointF pos, qreal tolerance)
|
||||
|
||||
bool Canvas::areCoincident(Point* p1, Point* p2, bool mode)
|
||||
{
|
||||
int tag_0 = p1->get_tag(), tag_1 = p2->get_tag();
|
||||
if (!mode){
|
||||
return (tag_0 != tag_1 && *p1 == *p2);
|
||||
int tag_0 = p1->get_tag();
|
||||
int tag_1 = p2->get_tag();
|
||||
|
||||
if (!mode) {
|
||||
return tag_0 != tag_1 && *p1 == *p2;
|
||||
}
|
||||
else {
|
||||
for (PointPair pair : P2Ppairs) {
|
||||
int pair_tag_0 = pair.first->get_tag();
|
||||
int pair_tag_1 = pair.second->get_tag();
|
||||
if (pair_tag_0 == tag_0 && pair_tag_1 == tag_1 ||
|
||||
pair_tag_0 == tag_1 && pair_tag_1 == tag_0)
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
|
||||
bool isSamePair = (pair_tag_0 == tag_0 && pair_tag_1 == tag_1) ||
|
||||
(pair_tag_0 == tag_1 && pair_tag_1 == tag_0);
|
||||
|
||||
if (isSamePair) return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
bool Canvas::areAlreadyParallel(Line* l1, Line* l2)
|
||||
|
||||
Reference in New Issue
Block a user