Lier des points/objets

dinahajjar Messages postés 6 Date d'inscription lundi 2 mars 2009 Statut Membre Dernière intervention 5 mars 2009 - 2 mars 2009 à 23:20
dinahajjar Messages postés 6 Date d'inscription lundi 2 mars 2009 Statut Membre Dernière intervention 5 mars 2009 - 5 mars 2009 à 02:01
bonjour,
j'aimerais savoir comment permettre a l'utilisateur de dessiner une ligne reliant deux objets par leurs centres de gravite (comme l'option OSNAP dans autocad).
merci d'avance

8 réponses

Caribensila Messages postés 2527 Date d'inscription jeudi 15 janvier 2004 Statut Membre Dernière intervention 16 octobre 2019 18
3 mars 2009 à 00:19
Bonjour,

Tiens! Tu portes le même prénom que ma soeur...

Tu parles de 2D ou de 3D ?
0
dinahajjar Messages postés 6 Date d'inscription lundi 2 mars 2009 Statut Membre Dernière intervention 5 mars 2009
3 mars 2009 à 00:25
:) ah bon!

je parle en 2D. au fait je concois un programme de distribution d'eau comme l'epanet (code a source ouverte) et je veux que l'utilisateur par un clique sur l'interface il obtient une jonction, par un 2eme clique une 2eme jonction (point) et je veux qu'il puisse lier ces jonctions par des lignes (les conduites).

merci bien :)
0
Caribensila Messages postés 2527 Date d'inscription jeudi 15 janvier 2004 Statut Membre Dernière intervention 16 octobre 2019 18
3 mars 2009 à 00:25
Question subsidiaire :  Tes objets peuvent-ils être concaves?
0
dinahajjar Messages postés 6 Date d'inscription lundi 2 mars 2009 Statut Membre Dernière intervention 5 mars 2009
3 mars 2009 à 00:28
je comptais les faire sous forme de cercle
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
dinahajjar Messages postés 6 Date d'inscription lundi 2 mars 2009 Statut Membre Dernière intervention 5 mars 2009
3 mars 2009 à 19:50
lol tu imagines des reseaux de distribution de patates! et des robinets de frites!

Merci beaucoup pour ce code, ca m'aide un peu a mieux visualiser comment je vais faire le code de lier les points!
Merci bcp pour l'aide!
0
dinahajjar Messages postés 6 Date d'inscription lundi 2 mars 2009 Statut Membre Dernière intervention 5 mars 2009
4 mars 2009 à 23:24
bonjour de nouveau,
J'ai commence mon programme. Pour le moment j'ai commence par coder que lorsque l'utilisateur clique sur une Timage que j'ai creee, un cercle apparait.
Le probleme c'est que le cercle est decale par rapport a la position de la souris. Je n'arrive pas a savoir comment faire pour que le centre du cercle soit exactement la ou la souris a clique.
Un autre probleme est que lorsque je clique une 2eme fois le premier cercle disparait, comment faire pour qu'il reste? et pourquoi j'ai parfois bcp de cercles qui apparaissent lorsque je clique une fois?

Merci bcp pour l'aide!

voila mon code:

unit Projet;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ExtCtrls, StdCtrls;

type
  TForm1 = class(TForm)
    Image1: TImage;
    Button1: TButton;
    Edit1: TEdit;
    procedure Button3Click(Sender: TObject);
    procedure Button1Click(Sender: TObject);

  private
  Jonctions: array of Tpoint;
  NbJonctions: integer;
  Centre: Tpoint;
  Rayon: integer;
  Cer: Trect;
  procedure Tracer;
  procedure BackGroundBlanc;

  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button3Click(Sender: TObject);
begin
   BackGroundBlanc;
   Tracer;
end;

// pour faire un background blanc, la ou tout les schemas seront dessines:

procedure TForm1.BackGroundBlanc;
begin
  Image1.Canvas.brush.color:=clWhite;
  Image1.Canvas.pen.color:=clWhite;
  Image1.Canvas.Rectangle(0,0,Image1.Width,Image1.Height);
  Image1.Canvas.pen.color:=clBlack;
end;

procedure TForm1.Tracer;
Var
     X,Y,Index : integer;

begin   {tracer les differentes jonctions par clic sur la partie image1}

      NbJonctions:=StrToInt(Edit1.Text);

        for  Index := 0 to 1000 - 1 do

        begin
      Centre:=Point(X,Y);
      Rayon:=3;

      X:=Mouse.CursorPos.X;
      Y:=Mouse.CursorPos.Y;

      Cer.TopLeft:=Point(Centre.X-Rayon,Centre.Y-Rayon);
      Cer.BottomRight:=Point(Centre.X+Rayon,Centre.Y+Rayon);

      Image1.Canvas.Ellipse(Cer);
             end;

end;

 procedure TForm1.Button1Click(Sender: TObject);
begin
    BackGroundBlanc;
    Tracer;
end;

end.
0
Caribensila Messages postés 2527 Date d'inscription jeudi 15 janvier 2004 Statut Membre Dernière intervention 16 octobre 2019 18
5 mars 2009 à 01:53
Bonjour,



D'abord un conseil, Dina ( j'aime bien ton prénom  ) :
quand tu as plusieurs questions, tu dois déposer plusieurs posts sur le forum.
Moi, par exemple, je m'absente demain pour quelques semaines, et ce post ne sera plus lu par les membres car trop ancien... Et personne ne t'aidera.
N'hésite donc pas à poser une question bien précise par post, et crée un nouveau thread à chaque fois.

Sinon, pour ton problème, essaie ça :

const RayonJonction = 10;


procedure TForm1.FormCreate(Sender: TObject);
begin
  Image1.Canvas.FillRect(Image1.Canvas.ClipRect); //On peint le canvas du TImage en blanc.
end;





              {Evénement 'OnMouseUp' de Image1.}
procedure TForm1.Image1MouseUp(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
Image1.Canvas.Ellipse(X-RayonJonction, Y-RayonJonction, X+RayonJonction, Y+RayonJonction);
//C'est ici qu'il faudra remplir ton tableau JonctionsArray...
end;
0
dinahajjar Messages postés 6 Date d'inscription lundi 2 mars 2009 Statut Membre Dernière intervention 5 mars 2009
5 mars 2009 à 02:01
Ah merci beaucoup Caribensila pour le code!

Et merci aussi pour les conseils.  Au fait je n'ai pas aime faire plusieurs posts pour que je ne remplisse pas une page moi seule lol mais je suivrais ton conseil pour mes prochains posts

Si ton absence est pour raison de vacances, alors je te souhaite de bonnes vacances!
Merci de nouveau
0
Rejoignez-nous