begin process at 2010 02 10 05:51:25
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Archive Delphi

 > 

Archives

 > 

J'AI BESOIN D'AIDE !!!! :O

 > 

dessin


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

dessin

lundi 28 juin 2004 à 10:08:45 | dessin

sebmime

Bonjou,
Je développe un petit logiciel de dessin en delphi. Je dois pouvoir dessiner des lignes entre 2 points par exemple (pour ceci j'utilise des polyline). Ensuite, je veux savoir si l'utilisateur clique sur une ligne. Et je ne sais pas comment faire!! Apparemment c'est impossible avec les polyline car il n'y a pas d'évenements associés. Y'a t'il des objets qui font çà? Comment puis-je faire?

Merci
lundi 28 juin 2004 à 19:46:23 | Re : dessin

Delphiprog

Administrateur CodeS-SourceS
L'unité Types déclare la fonction :


function PtInRect(const Rect: TRect; const P: TPoint): Boolean;

Description
PtInRect renvoie True si le point, P, se trouve à l'intérieur du rectangle, Rect, et False si P n'est pas dans Rect.

Or, un ligne n'est-elle pas un rectangle plat ?

Sinon, il reste la possibilité de vérifier la couleur du pixel là où a eu lieu le clic sur le composant graphique.
May Delphi be with you
mardi 29 juin 2004 à 17:43:28 | Re : dessin

Kenavo

Autre solution (mathématique) :

-Une ligne est définie par deux points (X1,Y1) et (X2,Y2).
-Pour tout point de la ligne (X,Y) on a les égalités :
(X2-X1)/(Y2-Y1) = (X-X1)/(Y-Y1) = (X2-X)/(Y2-Y);

Comme tu risques de cliquer à coté (les points de la ligne théoriques ne sont pas forcément entiers), il faut regarder si la valeur absolue de la différence entre deux systèmes est inférieur à une tolérance, par exemple
if abs((X2-X1)/(Y2-Y1) - (X-X1)/(Y-Y1) ) < 0.05 then
EnPleinDedans
// Touché coulé !
else
SegmentSuivant;
// tu vérifies pour chaque segment du polyline.


Ken@vo
____________________
Code, Code, Codec !
mercredi 30 juin 2004 à 12:07:04 | Re : dessin

Kenavo

Ah m.... ,
1 - Fais gaffe quand même, vérifie que X1<=X<=X2 ou
X2<=X<=X1, sinon ça identifie un point situé dans le prolongement de la ligne comme faisant partie de la ligne.
2 - Si Y1=Y2 (horizontale) ça plante grave ! (division par zéro) : cas à traiter à part. on doit avoir Y=Y1=Y2 (à un ou deux pixels près, ça dépend de ce que tu as bu avant) et (X1<=X<=X2 ou X2<=X<=X1)
3- Pour les verticales (X1=X2) il faut avoir X=X1=X2 (à un ou deux pixels près) et Y1<=Y<=Y ou Y2<=Y<=Y1

Et tout ça, ça ne simplifie pas le code !

Ken@vo
____________________
Code, Code, Codec !
lundi 6 septembre 2004 à 14:25:55 | Re : dessin

atupac1

Et pour la solution du " PtInRect", est-ce que ca marche quand les rectangles se chevauchent ???????

Urgent.

lundi 6 septembre 2004 à 15:31:54 | Re : dessin

Kenavo

Tu peux tester le résultat de la fonction

PtInRect(Rect(10,10,10,500),Point(10,200));
Pour moi ça marche pas !
Donc pour les lignes verticales (ou horizontales) pas de résultat. Et il est impossible de distinguer les deux diagonales d'un rectangle ....!

Ken@vo
____________________
Code, Code, Codec !
vendredi 28 octobre 2005 à 12:37:14 | Re : dessin

akrame

pour la solution mathméatique , kenavo a utilisé l'equation d'une droite dans l'espace , mais puisque tu travaille sur un plan il suffit d'utiliser l'equation :
   a * Y + b * X + c = 0

pour trouver les réels a ,b et c il suffit de connaitre 2 points ( M(x,y) et N(x',y') , une fois que tu as ces 3 réels , a chaque clique tu vérifie si l'equation est égale à zéro , tu n'aura pa s de problème de virgule  . pour un meilleur résultat tu peux faire :
     -0.1  < ay+bx+c < 0.1


fais attention :

       Si l'objet en question est un ségment et non une droite , il faut faire attention a ce que X > inf(x,x')  et Y > inf(y,y') et X < sup(x,x')  et Y < sup (y,y')

bonne chance
Akrame ------ www.informaticien.tk


Cette discussion est classée dans : dessin, polyline


Répondre à ce message

Sujets en rapport avec ce message

dessin sur un bitmap [ par jlg75 ] J'ai commencé un petit prog de dessin pour mes débuts en DELPHI.Je dessine sur un bitmap (feuille blanche pour l'instant),chargé dans une TImage. J'ut Image dans une TStatusBar !!! [ par MAsterC ] Comment fait-on pour mettre un Tprogresbar et un petit dessin dans l'item TStatusBar ????POUR PLUS DE DÉTAILS ALLER VOIR DANS INTERNET EXPLORER EN BAS Ajouter OnKeyPress à un TPaintBox [ par jlg75 ] J'utilise un TPaintBox pour un programme de dessin, je voudrais qu'il réagisse à l'événement OnKeyPress (ou OnKeyDown) pour sortir de la fonction dess CreateParented et rafraichissement ... [ par almi ] Bonjour à tous,Je cherche à créer un ToolBox dans une application de dessin que je n'ai pas conçu.Pour ce faire, j'utilise la méthode CreateParented e grille de dessin [ par ghassenus ] salut bein je suis débutant en delphi et je souhaite crééer une grille de dessin ( comme papier millimetré )je voudrait que le crayon de dessin ait un dessiner sur un flux vidéo [ par lupoo ] hello,je n'arrive pas à faire apparaître du dessin sur l'image vidéo, elle s'impose toujours par dessus le dessin...comment faire pour inverser cela?m selection de dessin [ par lupoo ] bonjour,g un prog qui dessine une ligne élastique avec la souris. Je peux en faire un nombre indéfini. Mais si je veux reséléctionner une ligne que g Ecrire dans un dessin [ par baygoor ] voila, j ai utiliser un PaintBox pour dessiner un bulletin de notes, grace a de nombreux rectangles (les cellules), mais il faut aue l utilisateur pui Dessin vectoriel (dur dur ???) [ par yoghisan ] Bonjour,Comment peut on dessiner un point ?Comment peut on dessiner une ligne entre deux points ?Comment peut on dessiner une surface entre plusieurs dessin dans une stringgrid [ par delphsur ] Bonjour,Je souhaite mettre dans la première colonne de ma stringgrid une forme. Je sais mettre un rectangle mais je souhaiterai mettre un triangle ou


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,624 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales