Précédent   Forum du club des développeurs et IT Pro > Environnements de développement > Delphi > Composants VCL
Composants VCL Utilisation des différents composants VCL (Visual Component Library)
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 04/01/2013, 11h35   #1
retwas
Membre à l'essai
 
Inscription : mars 2010
Messages : 133
Détails du profil
Informations forums :
Inscription : mars 2010
Messages : 133
Points : 23
Points : 23
Par défaut Courbe de Polybezier

Bonjour,

Sur un TImage, à chaque clic je crée un trait avec le point précédent.
A la fin mon point final est mon point de départ de sorte a avoir une forme fermée.

Je remplis un "array of TPoint" avec les points de ma courbe.

Quand je fais un canvas.polybezier(ptPlan) cela ne m'affiche rien.. à moins de mettre énormément de point de contrôle..

Pouvez vous m'aider ?

Merci
retwas est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/01/2013, 11h39   #2
Archimède
Membre émérite
 
Avatar de Archimède
 
Homme anthony
Enseignant
Inscription : avril 2005
Messages : 1 027
Détails du profil
Informations personnelles :
Nom : Homme anthony
Localisation : France, Charente Maritime (Poitou Charente)

Informations professionnelles :
Activité : Enseignant
Secteur : Enseignement

Informations forums :
Inscription : avril 2005
Messages : 1 027
Points : 977
Points : 977
Citation:
Envoyé par retwas Voir le message
Bonjour,

Sur un TImage, à chaque clic je crée un trait avec le point précédent.
Merci
Mieux vaut utiliser polyline dans ce cas non ?
__________________
Citation:
tout développeur plongé dans son code subit une poussée d'urticaire de bas en haut égale au poids du volume d'unités qu'il ajoute.
Archimède est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/01/2013, 12h08   #3
Archimède
Membre émérite
 
Avatar de Archimède
 
Homme anthony
Enseignant
Inscription : avril 2005
Messages : 1 027
Détails du profil
Informations personnelles :
Nom : Homme anthony
Localisation : France, Charente Maritime (Poitou Charente)

Informations professionnelles :
Activité : Enseignant
Secteur : Enseignement

Informations forums :
Inscription : avril 2005
Messages : 1 027
Points : 977
Points : 977
Un truc comme ça :

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
 
  private
    { Déclarations privées }
    dimtab:integer;
    tabpoints:array of TPoint;
    Procedure Addline(pt:Tpoint);
  public
    { Déclarations publiques }
  end;
 
var
  Form1: TForm1;
 
implementation
 
{$R *.dfm}
 
Procedure TForm1.Addline(pt:Tpoint);
var i:integer;
begin
  inc(dimtab);
  setlength(tabpoints,dimtab);
  tabpoints[dimtab-1]:=pt;
  for i:=0 to dimtab-1 do canvas.polyline(tabpoints);
end;
 
procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
 Addline(point(x,y));
end;
 
end.
@+
__________________
Citation:
tout développeur plongé dans son code subit une poussée d'urticaire de bas en haut égale au poids du volume d'unités qu'il ajoute.
Archimède est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/01/2013, 13h39   #4
retwas
Membre à l'essai
 
Inscription : mars 2010
Messages : 133
Détails du profil
Informations forums :
Inscription : mars 2010
Messages : 133
Points : 23
Points : 23
Merci, mais le fait d'utiliser un polyline revient au même nan?

Pour lisser les angles je dois forcement faire un polybezier, a moins que je n'est pas compris ?
retwas est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/01/2013, 13h49   #5
Archimède
Membre émérite
 
Avatar de Archimède
 
Homme anthony
Enseignant
Inscription : avril 2005
Messages : 1 027
Détails du profil
Informations personnelles :
Nom : Homme anthony
Localisation : France, Charente Maritime (Poitou Charente)

Informations professionnelles :
Activité : Enseignant
Secteur : Enseignement

Informations forums :
Inscription : avril 2005
Messages : 1 027
Points : 977
Points : 977
non :
Citation:
La première courbe est dessinée à partir du premier point jusqu'au quatrième point, en utilisant le deuxième et le troisième points comme points de contrôle
il est normal de ne pas obtenir une courbe à chaque click avec polybézier...

@+
__________________
Citation:
tout développeur plongé dans son code subit une poussée d'urticaire de bas en haut égale au poids du volume d'unités qu'il ajoute.
Archimède est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/01/2013, 14h09   #6
retwas
Membre à l'essai
 
Inscription : mars 2010
Messages : 133
Détails du profil
Informations forums :
Inscription : mars 2010
Messages : 133
Points : 23
Points : 23
Enfaîte je construit pas courbe et je remplis mon tableau de TPoint.

Une fois que la courbe est tracé je fais un polybezier(tabPT) mais c'est la que j'obtiens rien..

Je vais ressayer avec polyline pour voir
retwas est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/01/2013, 14h25   #7
Archimède
Membre émérite
 
Avatar de Archimède
 
Homme anthony
Enseignant
Inscription : avril 2005
Messages : 1 027
Détails du profil
Informations personnelles :
Nom : Homme anthony
Localisation : France, Charente Maritime (Poitou Charente)

Informations professionnelles :
Activité : Enseignant
Secteur : Enseignement

Informations forums :
Inscription : avril 2005
Messages : 1 027
Points : 977
Points : 977
Si tu remplis d'abord ton tableau et que tu dessines en faisant un polybézier, il n'y a pas de raison que la courbe ne se s'affiche pas !

En remplaçant polyline par polybezier dans l'exemple que je t'ai donné, tu remarqueras que les portions de courbe s'affichent un click sur 3 sauf pour le début qui se fait sur 4 clicks...normal...
__________________
Citation:
tout développeur plongé dans son code subit une poussée d'urticaire de bas en haut égale au poids du volume d'unités qu'il ajoute.
Archimède est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/01/2013, 15h04   #8
retwas
Membre à l'essai
 
Inscription : mars 2010
Messages : 133
Détails du profil
Informations forums :
Inscription : mars 2010
Messages : 133
Points : 23
Points : 23
Justement cela marche si j'ai 7 ou 10 points, si j'en est 9 ou 5 ou autres il n'y a rien qui s'affiche

Cela marche si mon nombre de point est de la forme (3*n)+1 ... :'(
retwas est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/01/2013, 15h14   #9
Archimède
Membre émérite
 
Avatar de Archimède
 
Homme anthony
Enseignant
Inscription : avril 2005
Messages : 1 027
Détails du profil
Informations personnelles :
Nom : Homme anthony
Localisation : France, Charente Maritime (Poitou Charente)

Informations professionnelles :
Activité : Enseignant
Secteur : Enseignement

Informations forums :
Inscription : avril 2005
Messages : 1 027
Points : 977
Points : 977
Tu as l'unité je crois : UBezier qui gère toutes les manières de tracer des courbes de bézier... Fais une recherche sur google, elle est facile à trouver...

@+
__________________
Citation:
tout développeur plongé dans son code subit une poussée d'urticaire de bas en haut égale au poids du volume d'unités qu'il ajoute.
Archimède est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/01/2013, 16h26   #10
retwas
Membre à l'essai
 
Inscription : mars 2010
Messages : 133
Détails du profil
Informations forums :
Inscription : mars 2010
Messages : 133
Points : 23
Points : 23
Merci je vais regarder avec UBezier
retwas est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/01/2013, 01h57   #11
retwas
Membre à l'essai
 
Inscription : mars 2010
Messages : 133
Détails du profil
Informations forums :
Inscription : mars 2010
Messages : 133
Points : 23
Points : 23
Rebon jour/soir..

Finalement c'est bon ça marche parfaitement, je combine du polybezier avec du polyline.. parfait

Par contre sur le doubleClick/mouseMove de mon TImage savez comment je peut détecter que je suis sur une portion de la courbe/droite ?

Peut être récupérer les points X et Y, pixel par pixel pour voir si mon X Y de mon MouseMove est dessus, mais comment avoir cette ensemble de point.. j'ai peur que ce soit lourd quand même..

Merci
retwas est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/01/2013, 09h16   #12
Charly910
Membre chevronné
 
Avatar de Charly910
 
Homme Charly
Ingénieur TP
Inscription : décembre 2006
Messages : 582
Détails du profil
Informations personnelles :
Nom : Homme Charly
Localisation : France

Informations professionnelles :
Activité : Ingénieur TP
Secteur : Bâtiment Travaux Publics

Informations forums :
Inscription : décembre 2006
Messages : 582
Points : 664
Points : 664
Bonjour,

je l'ai déjà fait pour sélectionner des points ou des segments à la souris, en calculant la distance du curseur à ces éléments.

Pour 50 segments et une centaine de points cela ne pose pas de problème, c'est très rapide.

Par contre, dans mon cas, je connais les coordonnées des points et donc c'est facile - peut être que l'unité UBeziers permet de calculer ces coordonnées ?

A+

Charly
Charly910 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/01/2013, 10h19   #13
Archimède
Membre émérite
 
Avatar de Archimède
 
Homme anthony
Enseignant
Inscription : avril 2005
Messages : 1 027
Détails du profil
Informations personnelles :
Nom : Homme anthony
Localisation : France, Charente Maritime (Poitou Charente)

Informations professionnelles :
Activité : Enseignant
Secteur : Enseignement

Informations forums :
Inscription : avril 2005
Messages : 1 027
Points : 977
Points : 977
oui, si l'image n'est pas trop grande, tu peux toujours balayer celle-ci et en ayant fixé une couleur particulière pour ta courbe, récupérer avec getpixel la couleur de chaque pixel de l'image et ainsi la comparer à la couleur fixée.
scanline pour gagner en rapidité...
__________________
Citation:
tout développeur plongé dans son code subit une poussée d'urticaire de bas en haut égale au poids du volume d'unités qu'il ajoute.
Archimède est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/01/2013, 11h24   #14
retwas
Membre à l'essai
 
Inscription : mars 2010
Messages : 133
Détails du profil
Informations forums :
Inscription : mars 2010
Messages : 133
Points : 23
Points : 23
Merci, j'ai fait comme ça du coup, je regarde la couleur du pixel pour voir si cela correspond à la couleur de ma courbe.
retwas est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/01/2013, 18h11   #15
retwas
Membre à l'essai
 
Inscription : mars 2010
Messages : 133
Détails du profil
Informations forums :
Inscription : mars 2010
Messages : 133
Points : 23
Points : 23
Je reviens vous voir pour savoir comment avoir des courbes bien lisse ?

Sur l'image a gauche c'est ce que j'ai, et a droite c'est ce que je voudrais..



Je comprends pas pourquoi mes courbes font "des escaliers" ..

Merci
retwas est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/01/2013, 18h46   #16
Archimède
Membre émérite
 
Avatar de Archimède
 
Homme anthony
Enseignant
Inscription : avril 2005
Messages : 1 027
Détails du profil
Informations personnelles :
Nom : Homme anthony
Localisation : France, Charente Maritime (Poitou Charente)

Informations professionnelles :
Activité : Enseignant
Secteur : Enseignement

Informations forums :
Inscription : avril 2005
Messages : 1 027
Points : 977
Points : 977
Une procédure d'antialiasing...
__________________
Citation:
tout développeur plongé dans son code subit une poussée d'urticaire de bas en haut égale au poids du volume d'unités qu'il ajoute.
Archimède est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/01/2013, 13h57   #17
retwas
Membre à l'essai
 
Inscription : mars 2010
Messages : 133
Détails du profil
Informations forums :
Inscription : mars 2010
Messages : 133
Points : 23
Points : 23
Citation:
Envoyé par Archimède Voir le message
Une procédure d'antialiasing...
J'ai regardé et j'ai trouvé quelques solutions que je trouve gourmande, avec Graphics 32 ou OpenGL.

Il n'existe pas une procedure toute simple ou on lui passe un ensemble de TPoint et qui nous tracerais une courbe/droite avec antialiasing ?

Merci
retwas est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/01/2013, 17h13   #18
Archimède
Membre émérite
 
Avatar de Archimède
 
Homme anthony
Enseignant
Inscription : avril 2005
Messages : 1 027
Détails du profil
Informations personnelles :
Nom : Homme anthony
Localisation : France, Charente Maritime (Poitou Charente)

Informations professionnelles :
Activité : Enseignant
Secteur : Enseignement

Informations forums :
Inscription : avril 2005
Messages : 1 027
Points : 977
Points : 977
ça se trouve assez facilement...

ici sur un Timage :http://www.swissdelphicenter.ch/torr...de.php?id=1484 par exemple.

je viens de tester, c'est lourd et disgracieux...surtout sur ton fond blanc quadrillé. Tu peux trouver mieux...

Sinon directement sur tes points, regarde du côté des posts de Gilbert Geyer. C'est un spécialiste dans ce genre de truc...
__________________
Citation:
tout développeur plongé dans son code subit une poussée d'urticaire de bas en haut égale au poids du volume d'unités qu'il ajoute.
Archimède est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/01/2013, 22h09   #19
retwas
Membre à l'essai
 
Inscription : mars 2010
Messages : 133
Détails du profil
Informations forums :
Inscription : mars 2010
Messages : 133
Points : 23
Points : 23
Oui pareil j'en est essayé plusieurs et c'est vraiment lourd..
Surtout que je redessine mon Canvas dans le mouseMove quand attrape le point d'une courbe, je regarde ce que tu m'as dit et je reviens, merci
retwas est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/01/2013, 04h44   #20
Paul TOTH
Expert Confirmé Sénior
 
Avatar de Paul TOTH
 
Homme Paul TOTH
Freelance
Inscription : novembre 2002
Messages : 4 405
Détails du profil
Informations personnelles :
Nom : Homme Paul TOTH
Âge : 43
Localisation : Réunion

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

Informations forums :
Inscription : novembre 2002
Messages : 4 405
Points : 10 756
Points : 10 756
pour l'antialiasing il y a l'algorithme de Xiaolin Wu
http://stackoverflow.com/questions/3...n-for-delphi-7
__________________
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%
Paul TOTH est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Cette discussion est résolue.
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 03h12.


 
 
 
 
Partenaires

Hébergement Web