mirror of
https://github.com/qelectrotech/qelectrotech-source-mirror.git
synced 2025-12-19 14:50:53 +01:00
Le nombre de segments pour les conducteurs n'est desormais plus limite par les algorithmes.
git-svn-id: svn+ssh://svn.tuxfamily.org/svnroot/qet/qet/trunk@111 bfdf4180-ca20-0410-9c96-a3a8aa849046
This commit is contained in:
@@ -14,8 +14,8 @@ ConducerSegment::ConducerSegment(
|
|||||||
ConducerSegment *cs1,
|
ConducerSegment *cs1,
|
||||||
ConducerSegment *cs2
|
ConducerSegment *cs2
|
||||||
) :
|
) :
|
||||||
point1(p1),
|
point1(p1),
|
||||||
point2(p2)
|
point2(p2)
|
||||||
{
|
{
|
||||||
setPreviousSegment(cs1);
|
setPreviousSegment(cs1);
|
||||||
setNextSegment(cs2);
|
setNextSegment(cs2);
|
||||||
@@ -44,7 +44,7 @@ bool ConducerSegment::canMove1stPointX(const qreal &asked_dx, qreal &possible_dx
|
|||||||
Q_ASSERT_X(isVertical(), "ConducerSegment::canMove1stPointX", "segment non vertical");
|
Q_ASSERT_X(isVertical(), "ConducerSegment::canMove1stPointX", "segment non vertical");
|
||||||
|
|
||||||
/// On ne bouge jamais le premier point d'un segment statique.
|
/// On ne bouge jamais le premier point d'un segment statique.
|
||||||
if (!hasPreviousSegment()) {
|
if (isStatic()) {
|
||||||
possible_dx = 0.0;
|
possible_dx = 0.0;
|
||||||
return(false);
|
return(false);
|
||||||
}
|
}
|
||||||
@@ -102,8 +102,8 @@ bool ConducerSegment::canMove2ndPointX(const qreal &asked_dx, qreal &possible_dx
|
|||||||
|
|
||||||
Q_ASSERT_X(isVertical(), "ConducerSegment::canMove2ndPointX", "segment non vertical");
|
Q_ASSERT_X(isVertical(), "ConducerSegment::canMove2ndPointX", "segment non vertical");
|
||||||
|
|
||||||
/// On ne modifie jamais l'ordonnee du second point d'un segment statique.
|
/// On ne modifie jamais l'abscisse du second point d'un segment statique.
|
||||||
if (!hasNextSegment()) {
|
if (isStatic()) {
|
||||||
possible_dx = 0.0;
|
possible_dx = 0.0;
|
||||||
return(false);
|
return(false);
|
||||||
}
|
}
|
||||||
@@ -162,7 +162,7 @@ bool ConducerSegment::canMove1stPointY(const qreal &asked_dy, qreal &possible_dy
|
|||||||
Q_ASSERT_X(isHorizontal(), "ConducerSegment::canMove1stPointY", "segment non horizontal");
|
Q_ASSERT_X(isHorizontal(), "ConducerSegment::canMove1stPointY", "segment non horizontal");
|
||||||
|
|
||||||
/// On ne bouge jamais le premier point d'un segment statique.
|
/// On ne bouge jamais le premier point d'un segment statique.
|
||||||
if (!hasPreviousSegment()) {
|
if (isStatic()) {
|
||||||
possible_dy = 0.0;
|
possible_dy = 0.0;
|
||||||
return(false);
|
return(false);
|
||||||
}
|
}
|
||||||
@@ -221,7 +221,7 @@ bool ConducerSegment::canMove2ndPointY(const qreal &asked_dy, qreal &possible_dy
|
|||||||
Q_ASSERT_X(isHorizontal(), "ConducerSegment::canMove2ndPointY", "segment non horizontal");
|
Q_ASSERT_X(isHorizontal(), "ConducerSegment::canMove2ndPointY", "segment non horizontal");
|
||||||
|
|
||||||
/// On ne modifie jamais l'abscisse du second point d'un segment statique.
|
/// On ne modifie jamais l'abscisse du second point d'un segment statique.
|
||||||
if (!hasNextSegment()) {
|
if (isStatic()) {
|
||||||
possible_dy = 0.0;
|
possible_dy = 0.0;
|
||||||
return(false);
|
return(false);
|
||||||
}
|
}
|
||||||
@@ -278,7 +278,7 @@ void ConducerSegment::moveX(const qreal &dx) {
|
|||||||
bool has_prev_segment = hasPreviousSegment();
|
bool has_prev_segment = hasPreviousSegment();
|
||||||
bool has_next_segment = hasNextSegment();
|
bool has_next_segment = hasNextSegment();
|
||||||
|
|
||||||
if (!has_prev_segment || !has_next_segment) return;
|
if (isStatic()) return;
|
||||||
|
|
||||||
// determine si le mouvement demande doit etre limite et, le cas echeant, a quelle valeur il faut le limiter
|
// determine si le mouvement demande doit etre limite et, le cas echeant, a quelle valeur il faut le limiter
|
||||||
qreal real_dx_for_1st_point = 0.0;
|
qreal real_dx_for_1st_point = 0.0;
|
||||||
@@ -291,7 +291,7 @@ void ConducerSegment::moveX(const qreal &dx) {
|
|||||||
// applique le mouvement au premier point
|
// applique le mouvement au premier point
|
||||||
if (has_prev_segment) {
|
if (has_prev_segment) {
|
||||||
point1.rx() += final_movement;
|
point1.rx() += final_movement;
|
||||||
if (!previous_segment -> hasPreviousSegment() && previous_segment -> isVertical()) {
|
if (previous_segment -> isFirstSegment()) {
|
||||||
new ConducerSegment(
|
new ConducerSegment(
|
||||||
previous_segment -> point2,
|
previous_segment -> point2,
|
||||||
point1,
|
point1,
|
||||||
@@ -304,7 +304,7 @@ void ConducerSegment::moveX(const qreal &dx) {
|
|||||||
// applique le mouvement au second point
|
// applique le mouvement au second point
|
||||||
if (has_next_segment) {
|
if (has_next_segment) {
|
||||||
point2.rx() += final_movement;
|
point2.rx() += final_movement;
|
||||||
if (!next_segment -> hasNextSegment() && next_segment -> isVertical()) {
|
if (next_segment -> isLastSegment()) {
|
||||||
new ConducerSegment(
|
new ConducerSegment(
|
||||||
point2,
|
point2,
|
||||||
next_segment -> point1,
|
next_segment -> point1,
|
||||||
@@ -326,7 +326,7 @@ void ConducerSegment::moveY(const qreal &dy) {
|
|||||||
bool has_prev_segment = hasPreviousSegment();
|
bool has_prev_segment = hasPreviousSegment();
|
||||||
bool has_next_segment = hasNextSegment();
|
bool has_next_segment = hasNextSegment();
|
||||||
|
|
||||||
if (!has_prev_segment || !has_next_segment) return;
|
if (isStatic()) return;
|
||||||
|
|
||||||
// determine si le mouvement demande doit etre limite et, le cas echeant, a quelle valeur il faut le limiter
|
// determine si le mouvement demande doit etre limite et, le cas echeant, a quelle valeur il faut le limiter
|
||||||
qreal real_dy_for_1st_point = 0.0;
|
qreal real_dy_for_1st_point = 0.0;
|
||||||
@@ -339,7 +339,7 @@ void ConducerSegment::moveY(const qreal &dy) {
|
|||||||
// applique le mouvement au premier point
|
// applique le mouvement au premier point
|
||||||
if (has_prev_segment) {
|
if (has_prev_segment) {
|
||||||
point1.ry() += final_movement;
|
point1.ry() += final_movement;
|
||||||
if (!previous_segment -> hasPreviousSegment() && previous_segment -> isHorizontal()) {
|
if (previous_segment -> isFirstSegment()) {
|
||||||
new ConducerSegment(
|
new ConducerSegment(
|
||||||
previous_segment -> point2,
|
previous_segment -> point2,
|
||||||
point1,
|
point1,
|
||||||
@@ -352,7 +352,7 @@ void ConducerSegment::moveY(const qreal &dy) {
|
|||||||
// applique le mouvement au second point
|
// applique le mouvement au second point
|
||||||
if (has_next_segment) {
|
if (has_next_segment) {
|
||||||
point2.ry() += final_movement;
|
point2.ry() += final_movement;
|
||||||
if (!next_segment -> hasNextSegment() && next_segment -> isHorizontal()) {
|
if (next_segment -> isLastSegment()) {
|
||||||
new ConducerSegment(
|
new ConducerSegment(
|
||||||
point2,
|
point2,
|
||||||
next_segment -> point1,
|
next_segment -> point1,
|
||||||
@@ -362,75 +362,7 @@ void ConducerSegment::moveY(const qreal &dy) {
|
|||||||
} else next_segment -> setFirstPoint(point2);
|
} else next_segment -> setFirstPoint(point2);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
/*
|
|
||||||
void ConducerSegment::moveY(qreal dy) {
|
|
||||||
if (isVertical()) return;
|
|
||||||
Q_ASSERT_X(isHorizontal(), "ConducerSegment::moveY", "segment non horizontal");
|
|
||||||
|
|
||||||
bool has_prev_segment = hasPreviousSegment();
|
|
||||||
bool has_next_segment = hasNextSegment();
|
|
||||||
|
|
||||||
if (!has_prev_segment || !has_next_segment) return;
|
|
||||||
|
|
||||||
// s'il y a un segment precedent
|
|
||||||
if (has_prev_segment) {
|
|
||||||
// et que celui-ci est statique,
|
|
||||||
if (!previous_segment -> hasPreviousSegment()) {
|
|
||||||
// on agit differemment selon que le segment statique est vertical...
|
|
||||||
if (previous_segment -> isVertical()) {
|
|
||||||
// auquel cas, on limite le deplacement
|
|
||||||
qreal real_dy;
|
|
||||||
/// @todo limiter le deplacement
|
|
||||||
real_dy = 0.0;
|
|
||||||
point1.ry() += real_dy;
|
|
||||||
previous_segment -> setSecondPoint(point1);
|
|
||||||
} else {
|
|
||||||
// ou horizontal : auquel cas, on ajoute un segment vertical
|
|
||||||
point1.ry() += dy;
|
|
||||||
new ConducerSegment(
|
|
||||||
previous_segment -> point2,
|
|
||||||
point1,
|
|
||||||
previous_segment,
|
|
||||||
this
|
|
||||||
);
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
// si le segment n'est pas statique, on applique le deplacement
|
|
||||||
point1.ry() += dy;
|
|
||||||
previous_segment -> setSecondPoint(point1);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// s'il y a un segment suivant
|
|
||||||
if (has_next_segment) {
|
|
||||||
// et que celui-ci est statique,
|
|
||||||
if (!next_segment -> hasNextSegment()) {
|
|
||||||
// on agit differemment selon que le segment statique est vertical...
|
|
||||||
if (next_segment -> isVertical()) {
|
|
||||||
// auquel cas, on limite le deplacement
|
|
||||||
qreal real_dy;
|
|
||||||
/// @todo limiter le deplacement
|
|
||||||
real_dy = 0.0;
|
|
||||||
point2.ry() += real_dy;
|
|
||||||
next_segment -> setFirstPoint(point2);
|
|
||||||
} else {
|
|
||||||
// ou horizontal : auquel cas, on ajoute un segment horizontal
|
|
||||||
point2.ry() += dy;
|
|
||||||
new ConducerSegment(
|
|
||||||
point2,
|
|
||||||
next_segment -> point1,
|
|
||||||
this,
|
|
||||||
next_segment
|
|
||||||
);
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
// si le segment n'est pas statique, on applique le deplacement
|
|
||||||
point2.ry() += dy;
|
|
||||||
next_segment -> setFirstPoint(point2);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
/**
|
/**
|
||||||
Change le segment precedent
|
Change le segment precedent
|
||||||
@param ps Le nouveau segment precedent
|
@param ps Le nouveau segment precedent
|
||||||
@@ -453,6 +385,21 @@ void ConducerSegment::setNextSegment(ConducerSegment *ns) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// @return true si ce segment est un segment statique, cad un segment relie a une borne
|
||||||
|
bool ConducerSegment::isStatic() const {
|
||||||
|
return(isFirstSegment() || isLastSegment());
|
||||||
|
}
|
||||||
|
|
||||||
|
/// @return true si ce segment est le premier du conducteur
|
||||||
|
bool ConducerSegment::isFirstSegment() const {
|
||||||
|
return(!hasPreviousSegment());
|
||||||
|
}
|
||||||
|
|
||||||
|
/// @return true si ce segment est le dernier du conducteur
|
||||||
|
bool ConducerSegment::isLastSegment() const {
|
||||||
|
return(!hasNextSegment());
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@return Le segment precedent
|
@return Le segment precedent
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -31,6 +31,9 @@ class ConducerSegment {
|
|||||||
bool hasNextSegment() const;
|
bool hasNextSegment() const;
|
||||||
void setPreviousSegment(ConducerSegment *);
|
void setPreviousSegment(ConducerSegment *);
|
||||||
void setNextSegment(ConducerSegment *);
|
void setNextSegment(ConducerSegment *);
|
||||||
|
bool isStatic() const;
|
||||||
|
bool isFirstSegment() const;
|
||||||
|
bool isLastSegment() const;
|
||||||
QPointF firstPoint() const;
|
QPointF firstPoint() const;
|
||||||
QPointF secondPoint() const;
|
QPointF secondPoint() const;
|
||||||
void setFirstPoint(const QPointF &);
|
void setFirstPoint(const QPointF &);
|
||||||
|
|||||||
Reference in New Issue
Block a user