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

Langage Delphi Discussion :

Dessin assez complexe


Sujet :

Langage Delphi

  1. #1
    Membre confirmé
    Avatar de diden138
    Profil pro
    Développeur Web
    Inscrit en
    Mai 2006
    Messages
    714
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2006
    Messages : 714
    Points : 589
    Points
    589
    Par défaut Dessin assez complexe
    Bonjour,
    dans le cadre de mon projet universitaire (étude des réseaux de neurones à réponses impulsionnel)bref ça c'est une autre histoire
    pour mon application je voulais savoir comment je pourrais dessiner un dessin ressemblant un peu à ceci http://www.hacking.free.fr/paris8/Ba...s/image001.jpg
    donc l'utilisateur entre le nombre de couche le nombre de neurone par couche et le dessin se fait
    je sais dessiner avec la méthode canvas certes mais comment faire si c'est un gros réseau ? (comment faire exactement pour que la scroll barre s'affiche dans ce cas la )
    un petit exemple serait le bienvenu
    Cordialement,

  2. #2
    Membre éprouvé Avatar de defluc
    Homme Profil pro
    Architecte
    Inscrit en
    Mai 2002
    Messages
    1 383
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : Belgique

    Informations professionnelles :
    Activité : Architecte

    Informations forums :
    Inscription : Mai 2002
    Messages : 1 383
    Points : 1 199
    Points
    1 199
    Par défaut
    Tu parles de "couches" au sens des applications graphiques à savoir, de layer ou de calque ?

  3. #3
    Membre confirmé

    Inscrit en
    Novembre 2002
    Messages
    770
    Détails du profil
    Informations forums :
    Inscription : Novembre 2002
    Messages : 770
    Points : 500
    Points
    500
    Par défaut
    salut ..

    Je pense que tu dois garder à l'esprit qu'une représentation graphique de bcp de données peut devenir vite illisible ( fonction des interactions entre chaque élément du dessin)

    Par contre pour répondre à ta question sur les scrollbars..

    Une solution consiste a mettre ton dessin dans un Timage, qui lui même est dans un TScrollBox1. Les scrollbars s'afficheront d'eux même si l'image est plus grande que le ScrollBox1.

    Une solution consiste a
    - Dessiner sur le Canvas d'un bitmap.
    - Resizer l'image en fonction de la taille du bitmap.
    - Transfèrer l'image du bitmap dans le Timage .

    l'exemple ci-dessus dessine quelque chose qui ressemble a ta demande en fonction des éléments saisies sans la stringGrid et se resize automatiquement

    la fiche est composée d'une StringGrid qui permet la saisie, d'un bouton , un Timage dans ScrollBox1.

    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
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
     
    procedure TForm5.FormCreate(Sender: TObject);
    begin
    // ceci est un Tstring qui permet de rentrer des infos
       TInfo.Cells[0,0]:='N° Couche'; // numero de couche
       TInfo.Cells[1,0]:='Nb Neu.';
       TInfo.Cells[2,0]:='Nom Neu';
       TInfo.Cells[3,0]:='Couleur';
     
       TInfo.Cells[0,1]:='1';        // numero de couche
       TInfo.Cells[1,1]:='3';        // nombre de neurone par couche
       TInfo.Cells[2,1]:='X';        // nom de la couche
       TInfo.Cells[3,1]:='$00C08080';// couleur de la couche ...
     
       TInfo.Cells[0,2]:='2';
       TInfo.Cells[1,2]:='4';
       TInfo.Cells[2,2]:='Y';
       TInfo.Cells[3,2]:='$001717FF';
     
       TInfo.Cells[0,3]:='3';
       TInfo.Cells[1,3]:='2';
       TInfo.Cells[2,3]:='Z';
       TInfo.Cells[3,3]:='$00FF5B5B';
     
       TInfo.Cells[0,4]:='4';
       TInfo.Cells[1,4]:='1';
       TInfo.Cells[2,4]:='U';
       TInfo.Cells[3,4]:='$0000DF70';
    end;
    //==============================================================
    procedure TForm5.Button2Click(Sender: TObject);
    Type Tneurone=record
       Orig:Tpoint;
       couche:integer;
       neurone:integer;
       neuroneMax:integer;
       Nom:string;
       couleur:Tcolor;
    end;
    var neurone:array of Tneurone;
     
    var L,H,T,K,N:integer;
        Dx,Dy:integer;
        Page:Tbitmap;
    begin
        // creation record
        T:=0;
        Dx:=0;
        Dy:=0;
        setlength(neurone,T);
        for L:=1 to TInfo.RowCount - 1 do
        begin
            if TInfo.Cells[1,L]<>'' then
            begin
                K:=strtoint(TInfo.Cells[1,L]);
                if Dy<K then Dy:=K ; // nombre meurone max
                for N := 1 to K do
                begin
                    setlength(neurone,T+1);
                    neurone[T].couche:=strtoint(TInfo.Cells[0,L]);
                    neurone[T].neurone:=N;
                    neurone[T].neuroneMax:=K;
                    neurone[T].nom:=TInfo.Cells[2,L]+inttostr(N);
                    neurone[T].couleur:=strtoint(TInfo.Cells[3,L]);
                    neurone[T].orig.X:=0;
                    neurone[T].orig.Y:=0;
                    inc(T);
                end;
                Inc(Dx);// nombre max de couche
            end;
        end;
     
        // initalisation position
        H:=Dy*70;
        for N := 0 to high(neurone) do
        begin
          neurone[N].orig.x:=(neurone[N].couche)*140;
          neurone[N].orig.y:=round ((H/(neurone[N].neuroneMax+1))*neurone[N].neurone);
        end;
     
        // creation du bitmap
        Page:=Tbitmap.create;
        Page.Width:=(Dx+1)*140;
        Page.height:=H;
        Page.canvas.rectangle(0,0,Page.Width,Page.Height);
     
        // dessine fleche
        for N := 0 to high(neurone) do
        begin
           for K := 0 to high(neurone) do
              with page.canvas do
              begin
                  if neurone[K].couche=neurone[N].couche-1 then
                   begin
                       pen.color:=neurone[K].couleur;
                       moveto(neurone[N].orig.x,neurone[N].orig.y);
                       lineto(neurone[K].orig.x,neurone[K].orig.y);
                   end;
              end;
        end;
     
        // dessine ellipse
        for N := 0 to high(neurone) do
        with page.Canvas do
         begin
             pen.Width:=2;
             pen.color:=neurone[N].couleur;
             ellipse(neurone[N].orig.x-30,neurone[N].orig.y-15,neurone[N].orig.x+30,neurone[N].orig.y+15);
             font.Style:=[Fsbold];
             textOut(neurone[N].orig.x-5,neurone[N].orig.y-6,neurone[N].nom);
         end;
     
         // transfere bitmap
        image1.Width:=page.Width;
        image1.height:=page.height;
        image1.Picture.Bitmap:=Page;
        // detruit le bitmap
        Page.free;
    end;

  4. #4
    Membre confirmé
    Avatar de diden138
    Profil pro
    Développeur Web
    Inscrit en
    Mai 2006
    Messages
    714
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2006
    Messages : 714
    Points : 589
    Points
    589
    Par défaut re:bonjour
    Tous je tiens à vous remercier pour vos réponses
    Citation Envoyé par defluc Voir le message
    Tu parles de "couches" au sens des applications graphiques à savoir, de layer ou de calque ?
    Non pas du tout je parlais des couches du réseau de neurone rien à voir
    @ petit coucou31 tes idées et suggestions sont très clairs et réalistes je crois que j'ai trouvé la solution mais je vous tiens au courants.
    Ps: Toute idée ou suggestion est la bienvenue
    Cordialement,

  5. #5
    Membre éprouvé Avatar de defluc
    Homme Profil pro
    Architecte
    Inscrit en
    Mai 2002
    Messages
    1 383
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : Belgique

    Informations professionnelles :
    Activité : Architecte

    Informations forums :
    Inscription : Mai 2002
    Messages : 1 383
    Points : 1 199
    Points
    1 199
    Par défaut
    Pour les dessins complexes, j'utilise le composant cartographique MapWinGis.Ocx de MapWindows.Org.

Discussions similaires

  1. Dessiner sur une image : assez complexe
    Par lisco dans le forum Qt
    Réponses: 38
    Dernier message: 25/06/2009, 11h06
  2. Réponses: 6
    Dernier message: 21/01/2008, 13h09
  3. Réponses: 13
    Dernier message: 12/10/2007, 10h09
  4. Curseur dynamique assez complexe...
    Par yiuche dans le forum Delphi
    Réponses: 7
    Dernier message: 20/03/2007, 12h55
  5. [RegEx] preg_replace assez complexe
    Par Info-Rital dans le forum Langage
    Réponses: 2
    Dernier message: 25/11/2005, 14h28

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