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

C++Builder Discussion :

Dessiner des formes géométriques 2D et 3D


Sujet :

C++Builder

  1. #1
    Membre habitué
    Inscrit en
    Septembre 2007
    Messages
    360
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 360
    Points : 170
    Points
    170
    Par défaut Dessiner des formes géométriques 2D et 3D
    Bonjour,

    Je dois être capable de dessiner des formes géométriques 2D et 3D (dans le cas de la 2D, il s'agit de forme simple, des traits, des arrondis, utilisant des formules mathématiques). Dans le cas de la 3D, dans un premier temps, il s'agit de représenter les formes 2D en relief (des tubes, cylindres, tuyeaux, etc.). Dans un second temps, il s'agit de représenter en vrai 3D les formes.

    Depuis que je fréquente le forum, dés qu'il s'agit de dessin, je peux lire que l'on utilise le un Canevas. Mais sans vraiment me préoccuper de quoi il s'agit.

    Pourrais-je avoir confirmation que le meilleur moyen de dessiner est l'utilisation de canevas ? Ou bien ou dois-je effectuer mes recherches ?

    J'utilise BCB 2007, et ma société est prête à acheter des composants payants. Le type d'application que je dois étudier la réalisation dans un premier temps est de type industrielle. Le rendu que je dois avoir n'est pas celui d'un jeu vidéo.

    Merci.

    PS: avez vous déjà entendu parler de composants BCB qui utilise se couplent avec autocad ? Pour importer des dessins j'ai vu CAD Import VCL, connaissez vous ?

  2. #2
    Membre chevronné
    Avatar de Gilles Louïse
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    421
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2002
    Messages : 421
    Points : 1 911
    Points
    1 911
    Par défaut
    Pour dessiner, on utilise en principe une PaintBox et on accède effectivement à la propriété Canvas qui représente la surface de dessin et vous donne accès à un certain nombre de fonctionnalités comme cercle, ellipse et ainsi de suite.

    Voyez mes Remarques sur mon site, alinéa 72, je parle de la PaintBox, ça devrait vous donner des idées.

    À bientôt
    Gilles

  3. #3
    Membre habitué
    Inscrit en
    Septembre 2007
    Messages
    360
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 360
    Points : 170
    Points
    170
    Par défaut
    Merci de votre réponse. J'ai lu vos articles concernant le PaintBox, mais existe-il peut-être une solution plus récente ? Votre article date de 2002, je me posais cette question avant de choisir cette solution.

    Merci

  4. #4
    Membre chevronné
    Avatar de Gilles Louïse
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    421
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2002
    Messages : 421
    Points : 1 911
    Points
    1 911
    Par défaut
    Effectivement, mon texte est assez vieux, je ne sais pas si on a réinventé la roue depuis.

    Attendons d'autres réponses.

    À bientôt
    Gilles

  5. #5
    Membre chevronné

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    1 374
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 1 374
    Points : 1 759
    Points
    1 759
    Par défaut
    Salut !

    En terme de fluidité, avec mon pauvre BCB3 Pro, l'idée est de dessiner sur un bitmap que l'on dessine ensuite sur la form !

    Sans doute qu'avec les versions ultérieures... on devrait peut-être pouvoir dessiner directement sur la form (c'est une histoire de scintillements)

    La PaintBox introduit une strate suplémentaire au niveau GDI... donc autant s'en passer !

    A plus !

  6. #6
    Membre habitué
    Inscrit en
    Septembre 2007
    Messages
    360
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 360
    Points : 170
    Points
    170
    Par défaut
    Afin d'aiguiller vos réponses (merci), je vous donne plus de précision sur l'objet de mon travail. Dans une application industrielle, je dois donner à l'utilisateur de choisir une forme existante (représentant des barres de fers).

    L'utilisateur me fournit les longueurs, les angles si cette barre est composée de plusieurs barres (ex: "/_____\" en imaginant que ces trois formes son reliées entres-elles; désolé pour ce vilain dessin). Avec ces informations (et d'autres encores) je dois calculer la longueur réel et total de fer, et faire un dessin réaliste pour envoyer à la découpe.

    Si cette forme n'existe pas, je dois proposer un petit outil de dessin pour la créer et renseigner directement sur le dessin les informations d'angles, de longueur, etc.).

    En soit, ça ne parait pas compliqué mais étant donné que je n'ai jamais réalisé d'application utilisant réellement la souris, et encore moins de dessin...

    Voilà, vos réponses sont d'un très grand secours pour moi. Dans cette attente, a bientôt.

    PS: si vous avez des sources d'exemples, je suis preneur

  7. #7
    Membre chevronné
    Avatar de Gilles Louïse
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    421
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2002
    Messages : 421
    Points : 1 911
    Points
    1 911
    Par défaut
    Vous avez bien de la chance d'avoir à réaliser une application de ce genre, surtout en ayant une certaine marge de manoeuvre en termes de réalisation, j'avoue que ça me plaîrait bien.

    Quant à vous aider, c'est très difficile (en tout cas en ce qui me concerne) dans le cadre de ce forum qui ne peut répondre que sur des détails particuliers mais non concernant une application dans son ensemble qui peut se réaliser de bien des manières.

    Bonne chance à vous et à bientôt
    Gilles

  8. #8
    Membre habitué
    Inscrit en
    Septembre 2007
    Messages
    360
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 360
    Points : 170
    Points
    170
    Par défaut
    Merci pour le projet. Moi, je ne vois pas ça encore comme une chance, car je ne sais pas comment je vais faire et j'ai une grande pression sur mes épaules (conserver mon job entre autre ). Mais votre avis me donne beaucoup de motivation.

    Pour revenir sur des questions précises, je pourrais savoir quelles sont les composants, librairies (pour les fonctions mathématiques) que vous utilisez, pour cette partie de dessin ? J'attends avec impatience vos réponses à ce sujet (j'ai bien pris en compte le dessin via un PaintBox). Le Bitmap n'est pas une bonne solution ?

    Et une autre question : si je veux poser un champs Texte sur un dessin(ou l'utilisateur peut écrire du texte, ex: un bouton "[T]"), quelle est la meilleure solution ?

    Encore désolé, mais je n'ai jamais conçu ce type d'application... Je ne suis pas contre l'idée d'acheter des composants appropriés, ou d'acheter un livre BCB, donc si vous avez des références.

    Merci

  9. #9
    Membre chevronné
    Avatar de Gilles Louïse
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    421
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2002
    Messages : 421
    Points : 1 911
    Points
    1 911
    Par défaut
    Moi, je fais quasiment tout moi-même si je ne trouve pas le composant approprié car le temps de le trouver, j'ai écrit le code, et en plus, on n'est jamais mieux servi que par soi-même.

    Le Bitmap est évidemment une très bonne solution. Regardez mes Remarques sur la manière de concevoir des dessins, il y a sans doute quelques alinéas qui devraient vous interpeller.

    En principe, on dessine dans le Bitmap et dans le OnPaint du composant choisi (forme ou PaintBox), vous ne faites que recopier le contenu et ce, pour que l’affichage se maintienne.

    Regardez aussi dans les exemples de C++ Builder (il y a un répertoire dédié aux exemples d'application de tout type), vous aurez forcément des applications toutes prêtes sur le dessin, ça va vous donner des idées et des syntaxes.

    À bientôt
    Gilles

  10. #10
    Membre chevronné

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    1 374
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 1 374
    Points : 1 759
    Points
    1 759
    Par défaut
    Salut !

    Tu as juste besoin de modéliser un certain nombre de choses.
    Par exemple :
    - un objet point pour les sommets sachant se projeter de son monde en 3D sur le monde en 2D de l'écran.
    - un objet sachant dessiner des segments reliant les sommets pour avoir au minimum un représentation en "fil de fer".

    Pour se projeter du 3D sur le 2D, tu n'a besoin que de sin, cos et hypot donc :

    Donc, juste une histoire de formules trigonométriques à retrouver et à appliquer !

    A plus !

  11. #11
    Membre habitué
    Inscrit en
    Décembre 2004
    Messages
    188
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 188
    Points : 143
    Points
    143
    Par défaut
    Pour le dessin 2D TPaintBox convient, bien que personnellement j'ai refait pour les besoins d'un projet un composant similaire mais descendant de TCustomControl au lieu de TGraphicControl (ce qui est le cas de TPaintBox) et ce qui permet à ce composant de contenir d'autre composant (par exemple des TEdit ou d'autres composants pour modifier les propriétés de tes objets), mais aussi parce que le réaffichage était meilleur qu'avec la TPaintBox. J'ai mis le code en dessous, c'est en Delphi mais ça ne doit pas être compliqué à mettre en C++.

    En ce qui concerne la 3D, j'utiliserais OpenGL (ou DirectX mais je ne connais pas) car ça devient vite compliqué et OpenGL n'est pas si difficile à mettre en oeuvre. Va voir du coté de www.glscene.org pour un composant.

    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
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    unit MyCustomGraphic;
    interface
     
    uses
      SysUtils, Classes, Controls;
     
    type
      TMyCustomGraphic = class(TCustomControl)
      private
        { Déclarations privées }
        FOnPaint : TNotifyEvent;
      protected
        procedure Paint; override;
      public
       constructor Create(AOwner: TComponent); override;
      published
        property Align;
        property Color;
        property Canvas;
        property OnPaint : TNotifyEvent read FOnPaint write FOnPaint;
        property OnClick;
        property OnMouseDown;
        property OnMouseMove;
        property OnMouseUp;
        property OnResize;
     
      end;
     
    procedure Register;
     
    implementation
     
    procedure Register;
    begin
      RegisterComponents('MyComponents', [TMyCustomGraphic]);
    end;
     
    constructor TMyCustomGraphic.Create(AOwner: TComponent);
    begin
       Inherited;
       ControlStyle := ControlStyle + [csAcceptsControls];
       DoubleBuffered := TRUE;
    end;
     
    procedure TMyCustomGraphic.Paint;
    begin
       If Assigned(FOnPaint) then FOnPaint(Self);
    end;

  12. #12
    Membre habitué

    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    137
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 137
    Points : 161
    Points
    161
    Par défaut
    Alfred12> Très bonne idée de faire un composant spécifique pour l'affichage. Pour les descendants de TWinControl :
    ...Si DoubleBuffered a la valeur true, le contrôle fenêtré se dessine dans un bitmap mémoire qui est ensuite utilisé pour dessiner la fenêtre. L'utilisation d'un double tampon réduit les "sautillements" quand le contrôle se redessine mais consomme davantage de mémoire.
    Si ton projet était seulement en 2D, je te conseillerais probablement TCanvas pour l'affichage. Cette solution est la plus rapide et la plus simple à priori.

    Mais si tu as besoin de générer des dessins en 3D, je pense qu'il faut se mettre à OpenGL... (Il est d'ailleurs tout à fait possible de gérer de la 2D avec = Projection orthogonale). OpenGL se révelera incroyablement plus rapide si tu dois faire des rotations autour de ton objet pour le visualiser... Le problème est qu'il te faudra un peu de temps pour comprendre et utiliser cette librairie.

    Reste à voir l'importance de la 3D dans ton projet...

  13. #13
    Membre habitué
    Inscrit en
    Septembre 2007
    Messages
    360
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 360
    Points : 170
    Points
    170
    Par défaut
    La 2D est mon principal souci pour le moment, la 3D sera un plus, ou quelque chose à venir dans une version ultérieure. De plus, l'affichage 3D a pour seul objectif de controler les dimensions 2D, le rendu n'est pas important.

    En ce qui concerne la création d'un composant d'affichage, peut-être qu'il existe déjà un composant (payant ou gratuit) ?

    Je vais étudier ces solutions. Mais j'ai encore 1 questions :

    - que je passe sur une TPaintBox ou un TCanevas, est-ce que l'impression sera un grand mystère ?

    Merci de vos réponses.

  14. #14
    Rédacteur
    Avatar de dvsoft
    Homme Profil pro
    Architecte technique
    Inscrit en
    Août 2002
    Messages
    176
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2002
    Messages : 176
    Points : 622
    Points
    622
    Par défaut
    bonjour

    C++Builder 2007 est basé sur la VCL, regarde là tu as des tonnes de composants

    http://torry.net/pages.php?id=196

    Drawing Engine v.2.00 par exemple

    Bon courage
    Alain

  15. #15
    Membre habitué
    Inscrit en
    Décembre 2004
    Messages
    188
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 188
    Points : 143
    Points
    143
    Par défaut
    l'impression sera un grand mystère ?
    TCanvas n'est pas un contrôle en lui même, c'est une propriété publiée par les contrôle pour accéder à leur surface de dessin et qui fournit des outils de dessins. Par exemple TPaintBox donne accès à son TCanvas.

    Pour l'impression tu utilises également un TCanvas, celui de l'imprimante (propriété TPrinter.Canvas). Donc si ta méthode de dessin prend comme paramètre un TCanvas (sans savoir si c'est celui du contrôle ou de l'imprimante), tu dessineras exactement de la même manière à l'écran que sur l'imprimante.

    Ce qu'il faut gérer, c'est la résolution du support. Pour un écran c'est en général 96PPI ou 120PPI, alors que pour l'imprimante c'est plutôt 300PPI.

Discussions similaires

  1. Tracer des formes géométriques
    Par Pithonnette dans le forum Tkinter
    Réponses: 6
    Dernier message: 02/02/2008, 18h41
  2. dessiner des forme deplacables
    Par haksasse dans le forum AWT/Swing
    Réponses: 0
    Dernier message: 05/12/2007, 10h18
  3. vba Excel2003-Comment dessiner des formes
    Par stargates dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 10/07/2007, 09h52
  4. Réponses: 1
    Dernier message: 21/11/2006, 17h00
  5. Dessiner des formes dans un formulaire
    Par karimspace dans le forum Access
    Réponses: 3
    Dernier message: 30/12/2005, 14h24

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