mirror of
https://github.com/qelectrotech/qelectrotech-source-mirror.git
synced 2025-12-22 17:50:52 +01:00
Documentation de la classe ElementPerso
git-svn-id: svn+ssh://svn.tuxfamily.org/svnroot/qet/qet/trunk@35 bfdf4180-ca20-0410-9c96-a3a8aa849046
This commit is contained in:
157
elementperso.cpp
157
elementperso.cpp
@@ -1,5 +1,25 @@
|
|||||||
#include "elementperso.h"
|
#include "elementperso.h"
|
||||||
|
|
||||||
|
/**
|
||||||
|
Constructeur de la classe ElementPerso. Permet d'instancier un element
|
||||||
|
utilisable comme un element fixe a la difference que l'element perso lit
|
||||||
|
sa description (noms, dessin, comportement) dans un fichier XML a fournir
|
||||||
|
en parametre.
|
||||||
|
@param nom_fichier Le chemin du fichier XML decrivant l'element
|
||||||
|
@param qgi Le QGraphicsItem parent de cet element
|
||||||
|
@param s Le Schema affichant cet element
|
||||||
|
@param etat Un pointeur facultatif vers un entier. La valeur de cet entier
|
||||||
|
sera changee de maniere a refleter le deroulement de l'instanciation :
|
||||||
|
- 0 : L'instanciation a reussi
|
||||||
|
- 1 : Le fichier n'existe pas
|
||||||
|
- 2 : Le fichier n'a pu etre ouvert
|
||||||
|
- 3 : Le fichier n'est pas un document XML
|
||||||
|
- 4 : Le document XML n'a pas une "definition" comme racine
|
||||||
|
- 5 : Les attributs de la definition ne sont pas presents et / ou valides
|
||||||
|
- 6 : La definition est vide
|
||||||
|
- 7 : L'analyse d'un element XML decrivant une partie du dessin de l'element a echoue
|
||||||
|
- 8 : Aucune partie du dessin n'a pu etre chargee
|
||||||
|
*/
|
||||||
ElementPerso::ElementPerso(QString &nom_fichier, QGraphicsItem *qgi, Schema *s, int *etat) : ElementFixe(qgi, s) {
|
ElementPerso::ElementPerso(QString &nom_fichier, QGraphicsItem *qgi, Schema *s, int *etat) : ElementFixe(qgi, s) {
|
||||||
nomfichier = nom_fichier;
|
nomfichier = nom_fichier;
|
||||||
nb_bornes = 0;
|
nb_bornes = 0;
|
||||||
@@ -134,14 +154,35 @@ ElementPerso::ElementPerso(QString &nom_fichier, QGraphicsItem *qgi, Schema *s,
|
|||||||
elmt_etat = 0;
|
elmt_etat = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
@return Le nombre de bornes que l'element possede
|
||||||
|
*/
|
||||||
int ElementPerso::nbBornes() const {
|
int ElementPerso::nbBornes() const {
|
||||||
return(nb_bornes);
|
return(nb_bornes);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
Dessine le composant sur le Schema
|
||||||
|
@param qp Le QPainter a utiliser pour dessiner l'element
|
||||||
|
@param qsogi Les options graphiques
|
||||||
|
*/
|
||||||
void ElementPerso::paint(QPainter *qp, const QStyleOptionGraphicsItem *) {
|
void ElementPerso::paint(QPainter *qp, const QStyleOptionGraphicsItem *) {
|
||||||
dessin.play(qp);
|
dessin.play(qp);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
Analyse et prend en compte un element XML decrivant une partie du dessin
|
||||||
|
de l'element perso. Si l'analyse reussit, la partie est ajoutee au dessin.
|
||||||
|
Cette partie peut etre une borne, une ligne, une ellipse, un cercle, un arc
|
||||||
|
de cercle ou un polygone. Cette methode renvoie false si l'analyse
|
||||||
|
d'une de ces formes echoue. Si l'analyse reussit ou dans le cas d'une forme
|
||||||
|
inconnue, cette methode renvoie true. A l'exception des bornes, toutes les
|
||||||
|
formes peuvent avoir un attribut style. @see setPainterStyle
|
||||||
|
@param e L'element XML a analyser
|
||||||
|
@param qp Le QPainter a utiliser pour dessiner l'element perso
|
||||||
|
@param s Le schema sur lequel sera affiche l'element perso
|
||||||
|
@return true si l'analyse reussit, false sinon
|
||||||
|
*/
|
||||||
bool ElementPerso::parseElement(QDomElement &e, QPainter &qp, Schema *s) {
|
bool ElementPerso::parseElement(QDomElement &e, QPainter &qp, Schema *s) {
|
||||||
if (e.tagName() == "borne") return(parseBorne(e, s));
|
if (e.tagName() == "borne") return(parseBorne(e, s));
|
||||||
else if (e.tagName() == "ligne") return(parseLigne(e, qp));
|
else if (e.tagName() == "ligne") return(parseLigne(e, qp));
|
||||||
@@ -152,6 +193,17 @@ bool ElementPerso::parseElement(QDomElement &e, QPainter &qp, Schema *s) {
|
|||||||
else return(true); // on n'est pas chiant, on ignore l'element inconnu
|
else return(true); // on n'est pas chiant, on ignore l'element inconnu
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
Analyse un element XML suppose representer une ligne. Si l'analyse
|
||||||
|
reussit, la ligne est ajoutee au dessin.
|
||||||
|
La ligne est definie par les attributs suivants :
|
||||||
|
- x1, y1 : reels, coordonnees d'une extremite de la ligne
|
||||||
|
- x2, y2 : reels, coordonnees de l'autre extremite de la ligne
|
||||||
|
|
||||||
|
@param e L'element XML a analyser
|
||||||
|
@param qp Le QPainter a utiliser pour dessiner l'element perso
|
||||||
|
@return true si l'analyse reussit, false sinon
|
||||||
|
*/
|
||||||
bool ElementPerso::parseLigne(QDomElement &e, QPainter &qp) {
|
bool ElementPerso::parseLigne(QDomElement &e, QPainter &qp) {
|
||||||
// verifie la presence et la validite des attributs obligatoires
|
// verifie la presence et la validite des attributs obligatoires
|
||||||
double x1, y1, x2, y2;
|
double x1, y1, x2, y2;
|
||||||
@@ -166,6 +218,19 @@ bool ElementPerso::parseLigne(QDomElement &e, QPainter &qp) {
|
|||||||
return(true);
|
return(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
Analyse un element XML suppose representer un cercle. Si l'analyse
|
||||||
|
reussit, le cercle est ajoute au dessin.
|
||||||
|
Le cercle est defini par les attributs suivants :
|
||||||
|
- x : abscisse du coin superieur gauche de la quadrature du cercle
|
||||||
|
- y : ordonnee du coin superieur gauche de la quadrature du cercle
|
||||||
|
- rayon : diametre du cercle
|
||||||
|
|
||||||
|
@param e L'element XML a analyser
|
||||||
|
@param qp Le QPainter a utiliser pour dessiner l'element perso
|
||||||
|
@return true si l'analyse reussit, false sinon
|
||||||
|
@todo utiliser des attributs plus coherents : x et y = centre, rayon = vrai rayon
|
||||||
|
*/
|
||||||
bool ElementPerso::parseCercle(QDomElement &e, QPainter &qp) {
|
bool ElementPerso::parseCercle(QDomElement &e, QPainter &qp) {
|
||||||
// verifie la presence des attributs obligatoires
|
// verifie la presence des attributs obligatoires
|
||||||
double cercle_x, cercle_y, cercle_r;
|
double cercle_x, cercle_y, cercle_r;
|
||||||
@@ -179,6 +244,20 @@ bool ElementPerso::parseCercle(QDomElement &e, QPainter &qp) {
|
|||||||
return(true);
|
return(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
Analyse un element XML suppose representer une ellipse. Si l'analyse
|
||||||
|
reussit, l'ellipse est ajoutee au dessin.
|
||||||
|
L'ellipse est definie par les attributs suivants :
|
||||||
|
- x : abscisse du coin superieur gauche du rectangle dans lequel s'inscrit l'ellipse
|
||||||
|
- y : ordonnee du coin superieur gauche du rectangle dans lequel s'inscrit l'ellipse
|
||||||
|
- largeur : dimension de la diagonale horizontale de l'ellipse
|
||||||
|
- hauteur : dimension de la diagonale verticale de l'ellipse
|
||||||
|
|
||||||
|
@param e L'element XML a analyser
|
||||||
|
@param qp Le QPainter a utiliser pour dessiner l'element perso
|
||||||
|
@return true si l'analyse reussit, false sinon
|
||||||
|
@todo utiliser des attributs plus coherents : x et y = centre
|
||||||
|
*/
|
||||||
bool ElementPerso::parseEllipse(QDomElement &e, QPainter &qp) {
|
bool ElementPerso::parseEllipse(QDomElement &e, QPainter &qp) {
|
||||||
// verifie la presence des attributs obligatoires
|
// verifie la presence des attributs obligatoires
|
||||||
double ellipse_x, ellipse_y, ellipse_l, ellipse_h;
|
double ellipse_x, ellipse_y, ellipse_l, ellipse_h;
|
||||||
@@ -193,6 +272,20 @@ bool ElementPerso::parseEllipse(QDomElement &e, QPainter &qp) {
|
|||||||
return(true);
|
return(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
Analyse un element XML suppose representer un arc de cercle. Si l'analyse
|
||||||
|
reussit, l'arc de cercle est ajoute au dessin.
|
||||||
|
L'arc de cercle est defini par les quatres parametres d'une ellipse (en fait
|
||||||
|
l'ellipse dans laquelle s'inscrit l'arc de cercle) auxquels s'ajoutent les
|
||||||
|
attributs suivants :
|
||||||
|
- start : angle de depart : l'angle "0 degre" est a trois heures
|
||||||
|
- angle : etendue (en degres) de l'arc de cercle ; une valeur positive
|
||||||
|
va dans le sens contraire des aiguilles d'une montre
|
||||||
|
|
||||||
|
@param e L'element XML a analyser
|
||||||
|
@param qp Le QPainter a utiliser pour dessiner l'element perso
|
||||||
|
@return true si l'analyse reussit, false sinon
|
||||||
|
*/
|
||||||
bool ElementPerso::parseArc(QDomElement &e, QPainter &qp) {
|
bool ElementPerso::parseArc(QDomElement &e, QPainter &qp) {
|
||||||
// verifie la presence des attributs obligatoires
|
// verifie la presence des attributs obligatoires
|
||||||
double arc_x, arc_y, arc_l, arc_h, arc_s, arc_a;
|
double arc_x, arc_y, arc_l, arc_h, arc_s, arc_a;
|
||||||
@@ -210,6 +303,16 @@ bool ElementPerso::parseArc(QDomElement &e, QPainter &qp) {
|
|||||||
return(true);
|
return(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
Analyse un element XML suppose representer un polygone. Si l'analyse
|
||||||
|
reussit, le polygone est ajoute au dessin.
|
||||||
|
Le polygone est defini par une serie d'attributs x1, x2, ..., xn et autant
|
||||||
|
d'attributs y1, y2, ..., yn representant les coordonnees des differents
|
||||||
|
points du polygone.
|
||||||
|
@param e L'element XML a analyser
|
||||||
|
@param qp Le QPainter a utiliser pour dessiner l'element perso
|
||||||
|
@return true si l'analyse reussit, false sinon
|
||||||
|
*/
|
||||||
bool ElementPerso::parsePolygone(QDomElement &e, QPainter &qp) {
|
bool ElementPerso::parsePolygone(QDomElement &e, QPainter &qp) {
|
||||||
int i = 1;
|
int i = 1;
|
||||||
while(true) {
|
while(true) {
|
||||||
@@ -231,6 +334,17 @@ bool ElementPerso::parsePolygone(QDomElement &e, QPainter &qp) {
|
|||||||
return(true);
|
return(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
Analyse un element XML suppose representer une borne. Si l'analyse
|
||||||
|
reussit, la borne est ajoutee a l'element.
|
||||||
|
Une borne est definie par les attributs suivants :
|
||||||
|
- x, y : coordonnees de la borne
|
||||||
|
- orientation : orientation de la borne = Nord (n), Sud (s), Est (e) ou Ouest (w)
|
||||||
|
|
||||||
|
@param e L'element XML a analyser
|
||||||
|
@param s Le schema sur lequel l'element perso sera affiche
|
||||||
|
@return true si l'analyse reussit, false sinon
|
||||||
|
*/
|
||||||
bool ElementPerso::parseBorne(QDomElement &e, Schema *s) {
|
bool ElementPerso::parseBorne(QDomElement &e, Schema *s) {
|
||||||
// verifie la presence et la validite des attributs obligatoires
|
// verifie la presence et la validite des attributs obligatoires
|
||||||
double bornex, borney;
|
double bornex, borney;
|
||||||
@@ -241,19 +355,32 @@ bool ElementPerso::parseBorne(QDomElement &e, Schema *s) {
|
|||||||
if (e.attribute("orientation") == "n") borneo = Borne::Nord;
|
if (e.attribute("orientation") == "n") borneo = Borne::Nord;
|
||||||
else if (e.attribute("orientation") == "s") borneo = Borne::Sud;
|
else if (e.attribute("orientation") == "s") borneo = Borne::Sud;
|
||||||
else if (e.attribute("orientation") == "e") borneo = Borne::Est;
|
else if (e.attribute("orientation") == "e") borneo = Borne::Est;
|
||||||
else if (e.attribute("orientation") == "o") borneo = Borne::Ouest;
|
else if (e.attribute("orientation") == "w") borneo = Borne::Ouest;
|
||||||
else return(false);
|
else return(false);
|
||||||
new Borne(bornex, borney, borneo, this, s);
|
new Borne(bornex, borney, borneo, this, s);
|
||||||
++ nb_bornes;
|
++ nb_bornes;
|
||||||
return(true);
|
return(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
Active / desactive l'antialiasing sur un QPainter
|
||||||
|
@param qp Le QPainter a modifier
|
||||||
|
@param aa Booleen a true pour activer l'antialiasing, a false pour le desactiver
|
||||||
|
*/
|
||||||
void ElementPerso::setQPainterAntiAliasing(QPainter &qp, bool aa) {
|
void ElementPerso::setQPainterAntiAliasing(QPainter &qp, bool aa) {
|
||||||
qp.setRenderHint(QPainter::Antialiasing, aa);
|
qp.setRenderHint(QPainter::Antialiasing, aa);
|
||||||
qp.setRenderHint(QPainter::TextAntialiasing, aa);
|
qp.setRenderHint(QPainter::TextAntialiasing, aa);
|
||||||
qp.setRenderHint(QPainter::SmoothPixmapTransform, aa);
|
qp.setRenderHint(QPainter::SmoothPixmapTransform, aa);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
Permet de savoir si l'attribut nom_attribut d'un element XML e est bien un
|
||||||
|
entier. Si oui, sa valeur est copiee dans entier.
|
||||||
|
@param e Element XML
|
||||||
|
@param nom_attribut Nom de l'attribut a analyser
|
||||||
|
@param entier Pointeur facultatif vers un entier
|
||||||
|
@return true si l'attribut est bien un entier, false sinon
|
||||||
|
*/
|
||||||
bool ElementPerso::attributeIsAnInteger(QDomElement &e, QString nom_attribut, int *entier) {
|
bool ElementPerso::attributeIsAnInteger(QDomElement &e, QString nom_attribut, int *entier) {
|
||||||
// verifie la presence de l'attribut
|
// verifie la presence de l'attribut
|
||||||
if (!e.hasAttribute(nom_attribut)) return(false);
|
if (!e.hasAttribute(nom_attribut)) return(false);
|
||||||
@@ -265,6 +392,14 @@ bool ElementPerso::attributeIsAnInteger(QDomElement &e, QString nom_attribut, in
|
|||||||
return(true);
|
return(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
Permet de savoir si l'attribut nom_attribut d'un element XML e est bien un
|
||||||
|
reel. Si oui, sa valeur est copiee dans reel.
|
||||||
|
@param e Element XML
|
||||||
|
@param nom_attribut Nom de l'attribut a analyser
|
||||||
|
@param reel Pointeur facultatif vers un double
|
||||||
|
@return true si l'attribut est bien un reel, false sinon
|
||||||
|
*/
|
||||||
bool ElementPerso::attributeIsAReal(QDomElement &e, QString nom_attribut, double *reel) {
|
bool ElementPerso::attributeIsAReal(QDomElement &e, QString nom_attribut, double *reel) {
|
||||||
// verifie la presence de l'attribut
|
// verifie la presence de l'attribut
|
||||||
if (!e.hasAttribute(nom_attribut)) return(false);
|
if (!e.hasAttribute(nom_attribut)) return(false);
|
||||||
@@ -276,6 +411,25 @@ bool ElementPerso::attributeIsAReal(QDomElement &e, QString nom_attribut, double
|
|||||||
return(true);
|
return(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
Verifie si l'attribut "orientation" de l'element XML e correspond bien a la
|
||||||
|
syntaxe decrivant les orientations possibles pour un element.
|
||||||
|
Cette syntaxe comprend exactement 4 lettres :
|
||||||
|
- une pour le Nord
|
||||||
|
- une pour l'Est
|
||||||
|
- une pour le Sud
|
||||||
|
- une pour l'Ouest
|
||||||
|
|
||||||
|
Pour chaque orientation, on indique si elle est :
|
||||||
|
- l'orientation par defaut : d
|
||||||
|
- une orientation autorisee : y
|
||||||
|
- une orientation interdire : n
|
||||||
|
|
||||||
|
Exemple : "dnny" represente un element par defaut oriente vers le nord et qui
|
||||||
|
peut etre oriente vers l'ouest mais pas vers le sud ou vers l'est.
|
||||||
|
@param e Element XML
|
||||||
|
@return true si l'attribut "orientation" est valide, false sinon
|
||||||
|
*/
|
||||||
bool ElementPerso::validOrientationAttribute(QDomElement &e) {
|
bool ElementPerso::validOrientationAttribute(QDomElement &e) {
|
||||||
// verifie la presence de l'attribut orientation
|
// verifie la presence de l'attribut orientation
|
||||||
if (!e.hasAttribute("orientation")) return(false);
|
if (!e.hasAttribute("orientation")) return(false);
|
||||||
@@ -317,6 +471,7 @@ bool ElementPerso::validOrientationAttribute(QDomElement &e) {
|
|||||||
- white : remplissage blanc
|
- white : remplissage blanc
|
||||||
- black : remplissage noir
|
- black : remplissage noir
|
||||||
- none : pas de remplissage [par defaut]
|
- none : pas de remplissage [par defaut]
|
||||||
|
|
||||||
Les autres valeurs ne sont pas prises en compte.
|
Les autres valeurs ne sont pas prises en compte.
|
||||||
@param e L'element XML a parser
|
@param e L'element XML a parser
|
||||||
@param qp Le QPainter a modifier en fonction des styles
|
@param qp Le QPainter a modifier en fonction des styles
|
||||||
|
|||||||
@@ -16,6 +16,6 @@
|
|||||||
<borne orientation="s" x="0" y="20" />
|
<borne orientation="s" x="0" y="20" />
|
||||||
<borne orientation="n" x="0" y="-20" />
|
<borne orientation="n" x="0" y="-20" />
|
||||||
<!--Borne Gachette-->
|
<!--Borne Gachette-->
|
||||||
<borne orientation="o" x="-15" y="15" />
|
<borne orientation="w" x="-15" y="15" />
|
||||||
</description>
|
</description>
|
||||||
</definition>
|
</definition>
|
||||||
|
|||||||
Reference in New Issue
Block a user