IdentifiantMot de passe
Loading...
Mot de passe oubli� ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les r�ponses en temps r�el, voter pour les messages, poser vos propres questions et recevoir la newsletter

GTK+ avec C & C++ Discussion :

Typage des donn�es/manipulation des donn�es


Sujet :

GTK+ avec C & C++

Vue hybride

Message pr�c�dent Message pr�c�dent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    G�omaticien
    Inscrit en
    F�vrier 2010
    Messages
    63
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activit� : G�omaticien

    Informations forums :
    Inscription : F�vrier 2010
    Messages : 63
    Par d�faut Typage des donn�es/manipulation des donn�es
    Bonjour � tous,

    Je reviens avec une nouvelle difficult�.
    En fait, je cherche � repr�senter/dessiner une sorte de diagramme dans mon projet. Je dispose d�j� de fonctions de dessin gr�ce � la biblioth�que Cairo, l� n'est pas le probl�me. Le souci est plut�t comment g�rer les donn�es pour pouvoir le faire. Le diagramme doit �tre constitu� ainsi :
    - il est constitu� de plusieurs cases.
    - chaque case porte un nom et un id unique.
    - chaque case renferme un nombre connu � l'avance de "connecteurs" en entr�e (� gauche de la case) et en sortie (� droite de la case) ; ils disposeront d'un nom et d'un "id" qui ne sera pas unique (voir plus bas).

    Cela serait simple ainsi sauf qu'il y a une pr�cision importante : chaque connecteur peut �tre connect� avec un ou des autres oppos�s, c�d un connecteur en sortie ne peut �tre connect� qu'avec un ou plusieurs connecteurs en entr�e d'une autre case, et vice versa. Les connecteurs qui auront le m�me id (comme �nonc�) seront alors connect�s entre eux.

    Il faut donc lors de l'affichage que j'arrive � repr�senter les connexions par les lignes, il faut donc que je g�re les donn�es proprement et rapidement pour ne pas alt�rer les performances d'affichage.

    Je sollicite donc votre aide pour savoir quelle est la meilleure solution. Mon probl�me me fait penser � l'utilisation de la programmation orient�e objet, mais je souhaite rester en C/GTK. Il y aussi ce tutoriel http://nicolasj.developpez.com/gobject/classe/#LV mais je trouve l'utilisation de GObject assez rebutante. Est-ce possible d'utiliser le typage abstrait classique des donn�es ici ?

  2. #2
    Membre averti
    Homme Profil pro
    G�omaticien
    Inscrit en
    F�vrier 2010
    Messages
    63
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activit� : G�omaticien

    Informations forums :
    Inscription : F�vrier 2010
    Messages : 63
    Par d�faut
    Bon voil� comment j'essaie de me d�brouiller en typage abstrait classique des donn�es :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    typedef struct
    {
        gchar    *BoxName;
        gchar    *ID;
        GList    *pIN;
        GList    *pOUT;
    } stBox;
     
    typedef struct
    {
        gchar                          *BoxParent;
        gchar                          *ID;
        gchar                          *Name;
        guint                           X;
        guint                           Y;
    } stIN;
     
    typedef struct
    {
        gchar                          *BoxParent;
        gchar                          *ID;
        gchar                          *Name;
        guint                           X;
        guint                           Y;
    } stOUT;
    En gros, je place chaque Box dans une structure qui sont tous ensuite regroup� dans une GList. J'ai cr�e aussi une structure pour les petits connecteurs, une pour les entr�es, une pour les sorties, qui seront eux aussi plac�s dans une GList. �a fait beaucoup de GList et j'ai un peu peur que cela soit lourd et complexe � g�rer en plus d'impacter les performances. Quelqu'un aurait peut-�tre une solution plus �l�gante ?

  3. #3
    Mod�rateur

    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Juin 2009
    Messages
    1 395
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activit� : D�veloppeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2009
    Messages : 1 395
    Par d�faut
    Citation Envoy� par Moravski Voir le message
    Mon probl�me me fait penser � l'utilisation de la programmation orient�e objet, mais je souhaite rester en C/GTK.
    GTK est en C et orient� objet. Tu peux faire de la POO en C, avec ou sans GObject. C'est s�r que sans GObject tu es assez limit�, mais le programmation orient� objet, ce n'est pas que l'h�ritage. Avoir une structure o� tu rassembles des donn�es coh�rentes entre elles et des fonctions qui manipulent cette structure, c'est d�j� de la programmation orient� objet.

    Bon, pour ton probl�me, il est clair que les listes cha�n�es c'est sympa un moment, mais c'est tr�s long � parcourir quand tu as beaucoup d'�l�ments. Il est en revanche tr�s rapide de supprimer un �l�ment.

    Les tableaux sont rapides pour ajouter un �l�ment, mais lents pour en supprimer un quand ce n'est pas le dernier. A parcourir, c'est moins long que la liste, mais c'est pas encore la panac�e.

    Les tables de hachage sont rapides pour chercher un �l�ment, mais moins rapides � parcourir que les tableaux.

    Je te conseille tout de m�me de regarder du c�t� des projets gstreamer et conduit. GStreamer a cette notion d'�l�ments (tes boites) et de pads (tes connecteurs). Conduit fait � peu pr�s ce que tu veux faire au niveau graphique.

    J'ai des commentaires � faire sur tes structures et sur ce que tu pourrais adopter comme solution, mais je n'ai pas trop le temps l�, je ferai �a plus tard.

  4. #4
    Membre averti
    Homme Profil pro
    G�omaticien
    Inscrit en
    F�vrier 2010
    Messages
    63
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activit� : G�omaticien

    Informations forums :
    Inscription : F�vrier 2010
    Messages : 63
    Par d�faut
    OK c'est d�j� sympa de m'aider. En fait je me rend compte que j'ai d�j� manipuler GObject... en ayant cr�e un widget perso ! Du coup, je vois comment cela fonctionne, m�me si le probl�me est diff�rent. Je tenterai probablement les deux voies (celle en cours et celle de GObject). et voir quelles est la solution la plus id�ale.
    J'ai d�j� d�cortiqu� Conduit, mais c'est du Python, j'en ai qu'une vague connaissance... mais promis, j'apprendrai le Python quand j'aurai plus le temps !
    Pour Gstreamer, je ne savais pas, je vais consulter �a.

  5. #5
    Mod�rateur

    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Juin 2009
    Messages
    1 395
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activit� : D�veloppeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2009
    Messages : 1 395
    Par d�faut
    Pour gstreamer, c'est plus pour le principe: tu n'auras pas de code � en tirer, mais ce que tu veux faire ressemble furieusement aux concepts d'�l�ments, pads et sinks de gstreamer. D'ailleurs, tu as gst-editor qui est une application graphique (jamais fiinie, elle est rest�e en version 0.0.2) de configuration de pipeline gstreamer. Voici ce que �a donne:



    C'est en python aussi, mais �a se lit facilement car du gtk en python ou en C, �a reste du GTK. Les noms de fonctions et d'object sont quasi identiques.

  6. #6
    Membre averti
    Homme Profil pro
    G�omaticien
    Inscrit en
    F�vrier 2010
    Messages
    63
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activit� : G�omaticien

    Informations forums :
    Inscription : F�vrier 2010
    Messages : 63
    Par d�faut
    Hello,

    J'ai fait un sch�ma de mes donn�es avec leurs typages pour que ce soit plus clair :



    Mes structures stIN et stOUT ont �t� modifi�es, j'ai mis une variable type pointrices pour X et Y. Je vais m'expliquer progressivement pourquoi.

    Voici comment je m'oriente pour proc�der � ce que je veux, et le stade d'avancement :
    1. Listage des box ------------------------------> fait
    2. Listage des connecteurs de chaque box -------> fait
    3. Dessin des box -------------------------------> fait, mais � modifier pour que l'�tape suivante puisse marcher
    4. Liaison des connecteurs avec une ligne --------> pas encore possible

    A l'�tape 1, je r�cup�re les noms, id etc. de chaque box. A l'�tape 2, ce sont les connecteurs. Attention, � ce stade, je ne peux pas savoir � l'avance quelle sera la position x et y sur le plan de dessin.
    A l'�tape 3, c'est la fonction de dessin, et m�me si je ne l'ai pas encore fait, je peux r�cup�rer les donn�es x et y de chaque connecteur qui seront n�cessaire pour pouvoir dessiner la ligne de connexion. C'est justement l� o� j'ai des soucis. Vu que je fait appel � une fonction ext�rieure pour dessiner, il faut que je puisse modifier la structure du ou des connecteurs pour leur attribuer une valeur x et y, une fois chaque box dessin�e. Donc j'ai pens� � utiliser des variables pointrices. Est-ce la bonne id�e, puisque je n'y arrive pas ?
    Images attach�es Images attach�es  

  7. #7
    Mod�rateur

    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Juin 2009
    Messages
    1 395
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activit� : D�veloppeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2009
    Messages : 1 395
    Par d�faut
    Je pense que tu devrais passer plus de temps � r�fl�chir � tes structures de donn�es et remettre ton probl�me � plat, sans penser � ce que tu as d�j� fait...

Discussions similaires

  1. R�ponses: 5
    Dernier message: 09/05/2014, 11h47
  2. Manipuler des TDateTime comme des entiers?
    Par toufou25 dans le forum C++Builder
    R�ponses: 8
    Dernier message: 22/06/2006, 15h52
  3. R�ponses: 1
    Dernier message: 27/11/2005, 14h30
  4. Fonctions de manipulation des chaines et des dates
    Par Fares BELHAOUAS dans le forum D�buter
    R�ponses: 3
    Dernier message: 09/11/2002, 22h43

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo