mirror of
https://github.com/qelectrotech/qelectrotech-source-mirror.git
synced 2025-12-18 05:00:33 +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 *cs2
|
||||
) :
|
||||
point1(p1),
|
||||
point2(p2)
|
||||
point1(p1),
|
||||
point2(p2)
|
||||
{
|
||||
setPreviousSegment(cs1);
|
||||
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");
|
||||
|
||||
/// On ne bouge jamais le premier point d'un segment statique.
|
||||
if (!hasPreviousSegment()) {
|
||||
if (isStatic()) {
|
||||
possible_dx = 0.0;
|
||||
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");
|
||||
|
||||
/// On ne modifie jamais l'ordonnee du second point d'un segment statique.
|
||||
if (!hasNextSegment()) {
|
||||
/// On ne modifie jamais l'abscisse du second point d'un segment statique.
|
||||
if (isStatic()) {
|
||||
possible_dx = 0.0;
|
||||
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");
|
||||
|
||||
/// On ne bouge jamais le premier point d'un segment statique.
|
||||
if (!hasPreviousSegment()) {
|
||||
if (isStatic()) {
|
||||
possible_dy = 0.0;
|
||||
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");
|
||||
|
||||
/// On ne modifie jamais l'abscisse du second point d'un segment statique.
|
||||
if (!hasNextSegment()) {
|
||||
if (isStatic()) {
|
||||
possible_dy = 0.0;
|
||||
return(false);
|
||||
}
|
||||
@@ -278,7 +278,7 @@ void ConducerSegment::moveX(const qreal &dx) {
|
||||
bool has_prev_segment = hasPreviousSegment();
|
||||
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
|
||||
qreal real_dx_for_1st_point = 0.0;
|
||||
@@ -291,7 +291,7 @@ void ConducerSegment::moveX(const qreal &dx) {
|
||||
// applique le mouvement au premier point
|
||||
if (has_prev_segment) {
|
||||
point1.rx() += final_movement;
|
||||
if (!previous_segment -> hasPreviousSegment() && previous_segment -> isVertical()) {
|
||||
if (previous_segment -> isFirstSegment()) {
|
||||
new ConducerSegment(
|
||||
previous_segment -> point2,
|
||||
point1,
|
||||
@@ -304,7 +304,7 @@ void ConducerSegment::moveX(const qreal &dx) {
|
||||
// applique le mouvement au second point
|
||||
if (has_next_segment) {
|
||||
point2.rx() += final_movement;
|
||||
if (!next_segment -> hasNextSegment() && next_segment -> isVertical()) {
|
||||
if (next_segment -> isLastSegment()) {
|
||||
new ConducerSegment(
|
||||
point2,
|
||||
next_segment -> point1,
|
||||
@@ -326,7 +326,7 @@ void ConducerSegment::moveY(const qreal &dy) {
|
||||
bool has_prev_segment = hasPreviousSegment();
|
||||
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
|
||||
qreal real_dy_for_1st_point = 0.0;
|
||||
@@ -339,7 +339,7 @@ void ConducerSegment::moveY(const qreal &dy) {
|
||||
// applique le mouvement au premier point
|
||||
if (has_prev_segment) {
|
||||
point1.ry() += final_movement;
|
||||
if (!previous_segment -> hasPreviousSegment() && previous_segment -> isHorizontal()) {
|
||||
if (previous_segment -> isFirstSegment()) {
|
||||
new ConducerSegment(
|
||||
previous_segment -> point2,
|
||||
point1,
|
||||
@@ -352,7 +352,7 @@ void ConducerSegment::moveY(const qreal &dy) {
|
||||
// applique le mouvement au second point
|
||||
if (has_next_segment) {
|
||||
point2.ry() += final_movement;
|
||||
if (!next_segment -> hasNextSegment() && next_segment -> isHorizontal()) {
|
||||
if (next_segment -> isLastSegment()) {
|
||||
new ConducerSegment(
|
||||
point2,
|
||||
next_segment -> point1,
|
||||
@@ -362,75 +362,7 @@ void ConducerSegment::moveY(const qreal &dy) {
|
||||
} 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
|
||||
@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
|
||||
*/
|
||||
|
||||
@@ -31,6 +31,9 @@ class ConducerSegment {
|
||||
bool hasNextSegment() const;
|
||||
void setPreviousSegment(ConducerSegment *);
|
||||
void setNextSegment(ConducerSegment *);
|
||||
bool isStatic() const;
|
||||
bool isFirstSegment() const;
|
||||
bool isLastSegment() const;
|
||||
QPointF firstPoint() const;
|
||||
QPointF secondPoint() const;
|
||||
void setFirstPoint(const QPointF &);
|
||||
|
||||
Reference in New Issue
Block a user