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

Composants FMX Delphi Discussion :

[TPATH] Dessin de polygones


Sujet :

Composants FMX Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 663
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 663
    Billets dans le blog
    65
    Par défaut [TPATH] Dessin de polygones
    Bonjour

    Je sais que certains me considèrent comme le plus pointu sur les Tpaths mais il y a encore beaucoup de choses qui m'échappent.

    Je veux dessiner un polygone
    Code XML : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <svg viewBox="0 0 200 100" xmlns="http://www.w3.org/2000/svg">
      <!-- Exemple d'un polygone avec le remplissage par défaut -->
      <polygon points="0,100 50,25 50,75 100,0" />
    </svg>

    Seulement voilà mon résultat n'est pas bon , tout d'abord il est "à l'envers"

    Nom : Capture.PNG
Affichages : 307
Taille : 19,2 Ko

    et il prend tout l'espace au lieu d'être limité à la zone comme le montre les deux composants tiers

    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
    procedure TLoadSVGForm.SVGPolygone(aNode: IXMLNode; LytParent: TLayout; F : TBrush=nil; S : TStrokeBrush=nil);
    var val : String;
        vals,vpoint : TArray<String>;
        aPoint : TPointF;
        i : Integer;
        ChildPath : Tpath;
    begin
      ChildPath:=TPath.Create(lytParent);
      ChildPath.Parent:=lytParent;
      ChildPath.WrapMode:=TPathWrapMode.Stretch; 
      ChildPath.Align:=TAlignLayout.Contents;
      val:=Trim(anode.Attributes['points']);
      // retire la mise en forme
      val:=StringReplace(val,#$A,' ',[rfReplaceAll]);
      val:=Trim(val); // pour être sur de commencer avec le premier point
      vals:=val.Split([' ']);
      for I := Low(vals) to High(vals) do
        begin
           if not vals[i].isempty then  // c'est un point
             begin
               vpoint:=Vals[i].Split([',']);
               aPoint:=TPointF.Zero;
               aPoint.y:=StrToFloatDef(vpoint[0],0,USFormatSettings);
               aPoint.x:=StrToFloatDef(vpoint[1],0,USFormatSettings);
               if i>0 then ChildPath.Data.LineTo(aPoint)
                      else ChildPath.Data.MoveTo(aPoint);
             end;
        end;
      ChildPath.Data.ClosePath;
    end;
    c'est encore plus flagrant avec
    Code XML : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <svg viewBox="0 0 200 100" xmlns="http://www.w3.org/2000/svg">
      <!-- Exemple d'un polygone avec le remplissage par défaut -->
      <polygon points="0,100 50,25 50,75 100,0" />
     
      <!-- Le même polygone sans remplissage et avec un contour -->
      <polygon points="100,100 150,25 150,75 200,0" fill="none" stroke="red" />
    </svg>

    Nom : Capture.PNG
Affichages : 304
Taille : 30,1 Ko

    Jouer sur ChildPath.WrapMode ne fonctionne pas.

  2. #2
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 663
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 663
    Billets dans le blog
    65
    Par défaut
    Premier élément de réponse pour corriger le "à l'envers"
    je me suis tout bêtement planté entre les coordonnées x et y
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
      aPoint.x:=StrToFloatDef(vpoint[0],0,USFormatSettings);
               aPoint.y:=StrToFloatDef(vpoint[1],0,USFormatSettings);
    Nom : Capture.PNG
Affichages : 300
Taille : 10,6 Ko

  3. #3
    Expert éminent
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Par défaut
    sur TPath tu as la propriété WrapMode pour déterminer comme la forme est dessinée

    NB: il y a un bug sur le mode Fit car il utilise GetBounds qui est buggé https://quality.embarcadero.com/browse/RSP-24659 il ne tient pas compte des courbes de Bézier, du coup les dimensions ne sont pas bonnes
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  4. #4
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 663
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 663
    Billets dans le blog
    65
    Par défaut
    Bon, cette partie est résolue (ou presque)
    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
     
      Childpath.Data.MoveTo(Tpointf.Zero); // se poistionner au point 0,0 équivalment de M
      for I := Low(vals) to High(vals) do
        begin
           if not vals[i].isempty then  // c'est un point
             begin
               vpoint:=Vals[i].Split([',']);
               aPoint:=TPointF.Zero;
               aPoint.x:=StrToFloatDef(vpoint[0],0,USFormatSettings);
               aPoint.y:=StrToFloatDef(vpoint[1],0,USFormatSettings);
               if i>0 then ChildPath.Data.LineTo(aPoint)
                      else ChildPath.Data.MoveTo(aPoint);
             end;
        end;
     ChildPath.Data.ClosePath; // fermer le dessin 
     {todo : mémoriser la fenêtre (viewBox="0 0 200 100") }  
     Childpath.Data.MoveTo(Tpointf.Create(200,100)); // se positionner en bas à droite
    Nom : Capture.PNG
Affichages : 286
Taille : 31,4 Ko

    même s'il semble que le pourtour soit un peu fin, je mets pour cette partie (j'en ai d'autres sous le coude, désormais, je vais m'attaquer aux translation, rotation et échelle

  5. #5
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 663
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 663
    Billets dans le blog
    65
    Par défaut
    Citation Envoyé par Paul TOTH Voir le message
    sur TPath tu as la propriété WrapMode pour déterminer comme la forme est dessinée
    j'avais déjà tenté, pas la bonne piste

    NB: il y a un bug sur le mode Fit car il utilise GetBounds qui est buggé https://quality.embarcadero.com/browse/RSP-24659 il ne tient pas compte des courbes de Bézier, du coup les dimensions ne sont pas bonnes
    Pour ce qui est des courbes de Bézier, j'avais déjà fait le nécessaire (modification des sources) pour la 10.3, c'est maintenant corrigé en 11.2.
    Je n'ai pas vérifié cette histoire de Fit et surtout de Getbounds , affaire à suivre.

  6. #6
    Membre Expert
    Avatar de pprem
    Homme Profil pro
    MVP Embarcadero - formateur&développeur Delphi, PHP et JS
    Inscrit en
    Juin 2013
    Messages
    1 876
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : MVP Embarcadero - formateur&développeur Delphi, PHP et JS
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 876
    Par défaut
    va falloir qu'on se le fasse ce LOGO pour dessiner des TPath

  7. #7
    Membre Expert
    Avatar de ALWEBER
    Homme Profil pro
    Expert Delphi
    Inscrit en
    Mars 2006
    Messages
    1 543
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Expert Delphi

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 543
    Billets dans le blog
    10
    Par défaut Triangulation de delauney
    Pourquoi pas une triangulation de delauney pour simplifier ton dessin ?

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

Discussions similaires

  1. Dessiner un polygone sur une figure
    Par berberat dans le forum MATLAB
    Réponses: 1
    Dernier message: 03/08/2007, 10h16
  2. dessiner plusieurs polygones
    Par tawsi dans le forum 2D
    Réponses: 8
    Dernier message: 30/05/2007, 13h14
  3. Script dessin de polygone
    Par ffaadd dans le forum Général JavaScript
    Réponses: 9
    Dernier message: 04/04/2007, 13h47
  4. dessiner un polygone sur une photo
    Par barbare_krater dans le forum Graphisme
    Réponses: 4
    Dernier message: 18/06/2006, 14h37
  5. dessiner un polygon transparent
    Par pavlacki dans le forum Langage
    Réponses: 3
    Dernier message: 22/04/2006, 21h08

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