Исправление 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));
|
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>
|
template <typename T, typename A, typename B>
|
||||||
T makeOrderedPair(A* obj1, B* obj2)
|
T makeOrderedPair(A* obj1, B* obj2)
|
||||||
{
|
{
|
||||||
return (obj1->get_tag() < obj2->get_tag()) ? std::make_pair(obj1, obj2) : std::make_pair(obj2, obj1);
|
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
|
// TODO
|
||||||
Line* Canvas::findAt(QPointF& pos)
|
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)
|
bool Canvas::areCoincident(Point* p1, Point* p2, bool mode)
|
||||||
{
|
{
|
||||||
int tag_0 = p1->get_tag(), tag_1 = p2->get_tag();
|
int tag_0 = p1->get_tag();
|
||||||
if (!mode){
|
int tag_1 = p2->get_tag();
|
||||||
return (tag_0 != tag_1 && *p1 == *p2);
|
|
||||||
|
if (!mode) {
|
||||||
|
return tag_0 != tag_1 && *p1 == *p2;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
for (PointPair pair : P2Ppairs) {
|
for (PointPair pair : P2Ppairs) {
|
||||||
int pair_tag_0 = pair.first->get_tag();
|
int pair_tag_0 = pair.first->get_tag();
|
||||||
int pair_tag_1 = pair.second->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)
|
bool isSamePair = (pair_tag_0 == tag_0 && pair_tag_1 == tag_1) ||
|
||||||
return true;
|
(pair_tag_0 == tag_1 && pair_tag_1 == tag_0);
|
||||||
}
|
|
||||||
return false;
|
if (isSamePair) return true;
|
||||||
}
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
bool Canvas::areAlreadyParallel(Line* l1, Line* l2)
|
bool Canvas::areAlreadyParallel(Line* l1, Line* l2)
|
||||||
|
|||||||
Reference in New Issue
Block a user