Publicité
+ Répondre à la discussion
Affichage des résultats 1 à 8 sur 8
  1. #1
    Membre Expert
    Avatar de Archimède
    Homme Profil pro anthony LAURENT
    Enseignant
    Inscrit en
    avril 2005
    Messages
    1 183
    Détails du profil
    Informations personnelles :
    Nom : Homme anthony LAURENT
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : avril 2005
    Messages : 1 183
    Points : 1 122
    Points
    1 122

    Par défaut Ligne en pointillés

    ci-joint, une tentative de ligne en pointillés :

    Code :
    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
     
    program Project6;
     
    {$FRAME_WIDTH 550}
    {$FRAME_HEIGHT 400}
    {$FRAME_RATE 12}
    {$BACKGROUND $FFFFFF}
     
    uses
      Flash8;
      var
          matrix1:Matrix;
     
    begin
      matrix1:=matrix.create();
      matrix1.createGradientBox(10,10,math.pi/2,0,0);
      with _root do
      begin
       lineStyle(1);
       lineGradientStyle('linear',[$000000,$ffffff], [100,100],[20,100], matrix1,'repeat','linearRGB',0.9);
       moveTo(50,10);
       lineTo(300,10);
       lineto(300,260);
       lineto(50,260);
       lineto(50,10);
      end;
    les lignes verticales sont en pointillés ...normal !.... en revanche, je suis obligé de mettre rotation à 0 pour avoir les lignes horizontales en pointillés aussi et je perds les lignes verticales... et ne parlons pas des obliques

    dashdot n'est pas présent en as2...

    comment faire pour contourner le problème ?

    merci

  2. #2
    Membre Expert
    Avatar de Archimède
    Homme Profil pro anthony LAURENT
    Enseignant
    Inscrit en
    avril 2005
    Messages
    1 183
    Détails du profil
    Informations personnelles :
    Nom : Homme anthony LAURENT
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : avril 2005
    Messages : 1 183
    Points : 1 122
    Points
    1 122

    Par défaut

    vite fait, dans l'instant, un truc adapté comme ça, c'est bon...
    Code :
    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
     
    program Project7;
     
    {$FRAME_WIDTH 550}
    {$FRAME_HEIGHT 400}
    {$FRAME_RATE 12}
    {$BACKGROUND $FFFFFF}
     
    uses
      Flash8,math;
     
    procedure traitpointille(startx, starty, endx, endy, len, gap:number;mc:movieclip);
    var seglength, deltax, deltay,delta, cx, cy,radians:number;
        n,segs:integer;
    begin
    // calculate the legnth of a segment
     seglength := len + gap;
    // calculate the length of the dashed line
     deltax := endx - startx;
     deltay := endy - starty;
     delta :=sqrt((deltax * deltax) + (deltay * deltay));
    // calculate the number of segments needed
     segs :=floor(abs(delta / seglength));
    // get the angle of the line in radians
     radians := atan2(deltay,deltax);
    // start the line here
     cx := startx;
     cy := starty;
    // add these to cx, cy to get next seg start
     deltax :=cos(radians)*seglength;
     deltay :=sin(radians)*seglength;
    // loop through each seg
     for  n :=0 to segs  do
     begin
      with mc do
      begin
       linestyle(1,$000000);
       moveTo(cx,cy);
       lineTo(cx+Math.cos(radians)*len,cy+Math.sin(radians)*len);
      end;
      cx :=cx+ deltax;
      cy :=cy+ deltay;
     end;
     mc.moveTo(cx,cy);
     delta :=sqrt((endx-cx)*(endx-cx)+(endy-cy)*(endy-cy));
     if(delta>len) then
     // segment ends in the gap, so draw a full dash
     mc.lineTo(cx+cos(radians)*len,cy+sin(radians)*len)
     else if(delta>0) then
     // segment is shorter than dash so only draw what is needed
     mc.lineTo(cx+Math.cos(radians)*delta,cy+Math.sin(radians)*delta);
    // move the pen to the end position
     mc.moveTo(endx,endy);
    end;
     
    begin
     traitpointille(10,10,300,400,5,5,_root);
    end.

  3. #3
    Membre Expert
    Avatar de Archimède
    Homme Profil pro anthony LAURENT
    Enseignant
    Inscrit en
    avril 2005
    Messages
    1 183
    Détails du profil
    Informations personnelles :
    Nom : Homme anthony LAURENT
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : avril 2005
    Messages : 1 183
    Points : 1 122
    Points
    1 122

    Par défaut avec un léger lifting...

    Code :
    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
     
    {$FRAME_WIDTH 550}
    {$FRAME_HEIGHT 400}
    {$FRAME_RATE 12}
    {$BACKGROUND $FFFFFF}
     
    uses
      Flash8;
     
    procedure traitpointille(startx, starty, endx, endy, len, gap:number;mc:movieclip);
    var seglength, deltax, deltay,delta, cx, cy,radians:number;
        n,segs:integer;
    begin
     seglength := len + gap;
     deltax := endx - startx;
     deltay := endy - starty;
     delta :=sqrt((deltax * deltax) + (deltay * deltay));
     segs :=floor(abs(delta / seglength));
     radians := atan2(deltay,deltax);
     cx := startx;
     cy := starty;
     deltax :=cos(radians)*seglength;
     deltay :=sin(radians)*seglength;
     for  n :=0 to segs  do
     begin
      with mc do
      begin
       moveTo(cx,cy);
       lineTo(cx+cos(radians)*len,cy+sin(radians)*len);
      end;
      cx :=cx+ deltax;
      cy :=cy+ deltay;
     end;
     mc.moveTo(cx,cy);
     delta :=sqrt((endx-cx)*(endx-cx)+(endy-cy)*(endy-cy));
     if delta>len then
     mc.lineTo(cx+cos(radians)*len,cy+sin(radians)*len)
     else if delta>0 then mc.lineTo(cx+cos(radians)*delta,cy+sin(radians)*delta);
     mc.moveTo(endx,endy);
    end;
     
    begin
     _root.linestyle(2,clblack);
     traitpointille(10,200,300,100,7,5,_root);
    end.

  4. #4
    Expert Confirmé Sénior
    Avatar de Paul TOTH
    Homme Profil pro Paul TOTH
    Freelance
    Inscrit en
    novembre 2002
    Messages
    5 492
    Détails du profil
    Informations personnelles :
    Nom : Homme Paul TOTH
    Âge : 45
    Localisation : Réunion

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : novembre 2002
    Messages : 5 492
    Points : 14 442
    Points
    14 442

    Par défaut

    en effet il n'y a pas d'effet standard pour cela

    une autre solution aussi, tu gardes ta première méthode avec le lineGradientStyle mais tu dessines chaque ligne dans un nouveau MovieClip auquel tu appliques une rotation.

    exemple, la fonction dot() qui fonctionne comme une tortue "logo" ... mais c'est surtout pour éviter les calculs, on pourrait très bien calculer d'après x1,y1,x2,y2 la position est l'angle de rotation de la ligne.

    Code :
    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
     
    program Project1;
     
    {$FRAME_WIDTH 550}
    {$FRAME_HEIGHT 400}
    {$FRAME_RATE 12}
    {$BACKGROUND $FFFFFF}
     
    uses
      Flash8;
     
    var
      matrix1: Matrix;
      ox, oy : Number;
      om     : MovieClip;
     
    procedure dot(a, l: Number);
    var
      m: MovieClip;
    begin
      m := MovieClip.Create(om, '', _root.getNextHighestDepth());
      with m do
      begin
       lineStyle(1);
       _x := ox;
       _y := oy;
       lineGradientStyle('linear',[$000000,$ffffff], [100,100],[20,100], matrix1,'repeat','linearRGB',0.9);
       lineTo(l,0);
       _rotation := a;
      end;
      ox := l;
      oy := 0;
      om := m;
    end;
     
    begin
      matrix1:=matrix.create();
      matrix1.createGradientBox(10,10,0,0,0);
      om := _root;
      ox := 100;
      oy := 100;
      dot(-30, 100);
      dot(+60, 100);
      dot(+60, 150);
      dot(+90, 175);
      dot(+90, 150);
      dot(+130, 240);
    end.
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Produits : UPnP, RemoteOffice, FlashPascal
    Embarcadero : Ile de la Réunion, Dephi, C++Builder, RADPHP...TVA à 8,5%

  5. #5
    Membre Expert
    Avatar de Archimède
    Homme Profil pro anthony LAURENT
    Enseignant
    Inscrit en
    avril 2005
    Messages
    1 183
    Détails du profil
    Informations personnelles :
    Nom : Homme anthony LAURENT
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : avril 2005
    Messages : 1 183
    Points : 1 122
    Points
    1 122

    Par défaut

    Bravo , super bien vu !

    merci, nickel

  6. #6
    Membre Expert
    Avatar de Archimède
    Homme Profil pro anthony LAURENT
    Enseignant
    Inscrit en
    avril 2005
    Messages
    1 183
    Détails du profil
    Informations personnelles :
    Nom : Homme anthony LAURENT
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : avril 2005
    Messages : 1 183
    Points : 1 122
    Points
    1 122

    Par défaut

    oui, en effet, on pouvait le faire comme ceci :

    Code :
    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
     
    program Project6;
     
    {$FRAME_WIDTH 550}
    {$FRAME_HEIGHT 400}
    {$FRAME_RATE 12}
    {$BACKGROUND $FFFFFF}
     
    uses
      Flash8;
     
    procedure dot(x1,y1,x2,y2:number;m:movieclip);
    var theta:number;
        matrix1:Matrix;
    begin
       theta:=atan2(y2-y1,x2-x1);
       matrix1:=matrix.create();
       matrix1.createGradientBox(10,10,theta,0,0);
     
       with m do
       begin
        lineGradientStyle('linear',[$000000,$ffffff], [100,100],[20,100], matrix1,'repeat','linearRGB',0.9);
        moveTo(x1,y1);
        lineTo(x2,y2);
       end;
    end;
     
    begin
      with _root do
      begin
       lineStyle(1,clblack);
       dot(50,50,350,50,_root);
       dot(350,50,350,350,_root);
       dot(50,350,350,350,_root);
       dot(50,350,50,50,_root);
       dot(50,50,350,350,_root);
       dot(50,350,350,50,_root);
      end;
     
    end.
    merci

  7. #7
    Expert Confirmé Sénior
    Avatar de Paul TOTH
    Homme Profil pro Paul TOTH
    Freelance
    Inscrit en
    novembre 2002
    Messages
    5 492
    Détails du profil
    Informations personnelles :
    Nom : Homme Paul TOTH
    Âge : 45
    Localisation : Réunion

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : novembre 2002
    Messages : 5 492
    Points : 14 442
    Points
    14 442

    Par défaut

    ah oui encore mieux, je n'avais pas songé à jouer sur la matrice
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Produits : UPnP, RemoteOffice, FlashPascal
    Embarcadero : Ile de la Réunion, Dephi, C++Builder, RADPHP...TVA à 8,5%

  8. #8
    Membre Expert
    Avatar de Archimède
    Homme Profil pro anthony LAURENT
    Enseignant
    Inscrit en
    avril 2005
    Messages
    1 183
    Détails du profil
    Informations personnelles :
    Nom : Homme anthony LAURENT
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : avril 2005
    Messages : 1 183
    Points : 1 122
    Points
    1 122

    Par défaut

    Ceci dit l'inutilité du with et la répétition du _root n'est pas très judicieuse... Les neurones étaient en panne hier soir

    Code :
    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
     
    program Project6;
     
    {$FRAME_WIDTH 550}
    {$FRAME_HEIGHT 400}
    {$FRAME_RATE 12}
    {$BACKGROUND $FFFFFF}
     
    uses
      Flash8;
     
    type
      pointille=class(movieclip)
       procedure dot(x1,y1,x2,y2:number);
      end;
     
     
     
    procedure pointille.dot(x1,y1,x2,y2:number);
    var theta:number;
        matrix1:Matrix;
    begin
       theta:=atan2(y2-y1,x2-x1);
       matrix1:=matrix.create();
       matrix1.createGradientBox(10,10,theta,0,0);
       lineGradientStyle('linear',[$000000,$ffffff], [100,100],[20,100], matrix1,'repeat','linearRGB',0.9);
       moveTo(x1,y1);
       lineTo(x2,y2);
    end;
     
    var m:pointille;
     
    begin
      m:= pointille.create(_root,'pointille',0);
      with m do
      begin
       lineStyle(1,clblack);
       dot(50,50,350,50);
       dot(350,50,350,350);
       dot(50,350,350,350);
       dot(50,350,50,50);
       dot(50,50,350,350);
       dot(50,350,350,50);
      end;
     
    end.
    Bonne journée et merci pour ton idée...

+ Répondre à la discussion
Cette discussion est résolue.

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •