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

Langage Delphi Discussion :

Dessin vectoriel


Sujet :

Langage Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de Speed41
    Homme Profil pro
    Inscrit en
    Novembre 2002
    Messages
    718
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France

    Informations forums :
    Inscription : Novembre 2002
    Messages : 718
    Par défaut Dessin vectoriel
    Je viens de faire une recherche sur les dessins vectoriel et si j'ai bien compri, il me faut un objet pour faire ce type de dessin ?

    Ce que je voucrais c'est faire un vrai dessin vectoriel (WMF) des rectangles des lignes et du texte. Je le voudrais vectoriel pour le texte, et avec un format facilement exploitable par la pluparts des utilisateurs de PC (je connais un peu le format d'un logiciel de dessin DXF je croix mais ça va pas)

    Merci de m'indiquer la meilleurs solution.

  2. #2
    Membre chevronné
    Profil pro
    Inscrit en
    Février 2003
    Messages
    560
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 560
    Par défaut
    Bonjour,

    Il est possible d'utiliser des Metafile pour tracer des dessins vectoriels.
    Dans ce cas ce n'est pas le dessin qui est enregistré mais les ordres nécessaires pour le créer.

    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
     
     
     
      Meta := TMetaFile.create;
      try 
          Meta.Enhanced := FileFormat; // True si le format est EMF, False si le format est WMF
          MetaCanvas := TMetaFileCanvas.Create(Meta,canvas.handle);
          Try
                  Dessiner içi a l’aide des orders du canvas.
                  Attention certaines API du GDI (exemple TransparentBLT) ne fonctionne pas dans les fichiers EMF ou WMF
         finally
            MetaCanvas.Free;  // Indique la fin du dessin et l’enregistrement de celui ci dans le metaFile
          end;
          Meta.saveToFile(Filename);
      finally
        Meta.free;
      end;
    Il est aussi possible de copier le contenu d’un metafile dans un canvas. Ce qui donne une image bitmap à l’échelle désirer (le facteur d’échelle de l’exemple est n).
    Tés pratique pour les prévisualisation et impression.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
     
      FLastBitmap.Width  := AMetaFile.Width * n;
      FLastBitmap.Height := AMetaFile.Height * n;
      FLastBitmap.Canvas.Draw(0, 0, AMetaFile);

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 16
    Par défaut Metafile en CLX = TDrawing???
    je suis très intéressé par ta réponse.
    en CLX, il n'existe pas de Metafile, est ce que TDrawing correspond au TMetafile?

  4. #4
    Membre chevronné
    Profil pro
    Inscrit en
    Février 2003
    Messages
    560
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 560
    Par défaut
    Bonjour,

    Je ne connait pas les TDRawing, mais cela apres une première lecture du fichier d'aide, cela ressemble effectivement à un metafile.

    Comme vous sempblez chercher des renseignement sur les TDRawing, je pense que vous seriez éventuellment intéressé par un exemple de TMetaFile. En voici donc un.
    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
     
    procedure TTOTO.ExportAsMetaFile(FileName: string;Out_Canvas: TCanvas; FileFormat: boolean);
    var
      Meta: TMetaFile;
      MetaCanvas: TMetaFileCanvas;
    begin
      Meta := TMetaFile.create;
      try
        Meta.Enhanced := FileFormat; 
       // True pour ecrire un EMF format, False ppour un WMF 
     
        Meta.Width := FWidthNumber * FWorkSize.X;
        Meta.Height := FHeightNumber * FWorkSize.Y;
     
          MetaCanvas := TMetaFileCanvas.Create(Meta,canvas.handle);
          try
            with metaCanvas do begin
              pen.Style := psSolid;
              pen.width := 1;
              pen.mode  := pmcopy;
              pen.Color := clBlack;
              brush.Style := bsClear;
              circle(0,0,Meta.Width, Meta.Height);
              // dessine un cercle vide sur toute la surface du canvas
     
     
            end;  
          finally
            MetaCanvas.Free;
          end;
          Meta.saveToFile(Filename);  
         // Sauve le dessin sous form d'un WMF ou d'un EMF (meta fichier de windows WMF est un format plus récent)
         // Le choix d'un WMF ou d'un EMF dépend de FileFormat (variable de la procédure)
      finally
        Meta.free;
      end;
        Out_Canvas.Draw(0, 0, AMetaFile);
        // Recopie le contenue du metafile dans un TCanvas. Pour une impression (Canvas du TPrinter) une previsualisation ou le
        //   Desin d'un composant par exemple
    end;

  5. #5
    Membre chevronné
    Profil pro
    Inscrit en
    Février 2003
    Messages
    560
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 560
    Par défaut
    Complement au message precedent.

    Excusez mois, j'avais oublié de précisser que cela marche parfaitement sous windows, mais je ne sais pas si cela fonctionne sous linux (Kilix)

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 16
    Par défaut TDrawing différent de TMetafile
    j'ai utiliser les TMetafile et les TDrawing et j'ai trouvé une différence importante:
    - on peut enregistrer plusieurs dessins dans un TMetafile mais pas dans un TDrawing.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
      TMetafile* mtfTest=new TMetafile();
      TMetafileCanvas *mtcTest=new TMetafileCanvas(mtfTest,0);
     
      mtcTest->Rectangle(10,20,80,100);
      mtcTest->Ellipse(20,80,190,260);
     
      mtcTest->Free();
     
      Canvas->Draw(0,0,mtfTest);
    Il apparaît bien à l'écran un cercle et un rectangle.

    Par contre,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
      TDrawing* drwTest=new TDrawing();
      TDrawingCanvas *drcTest=new TDrawingCanvas(mtfTest,0);
     
      drcTest->Rectangle(10,20,80,100);
      drcTest->Ellipse(20,80,190,260);
     
      drcTest->Free();
     
      Canvas->Draw(0,0,drwTest);
    il n'apparaît que le cercle et pas le rectangle.

    P.S: je sais que je suis un forum delphi, ne m'en veuillez pas d'écrire en C++Builder

  7. #7
    Membre éclairé Avatar de Speed41
    Homme Profil pro
    Inscrit en
    Novembre 2002
    Messages
    718
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France

    Informations forums :
    Inscription : Novembre 2002
    Messages : 718
    Par défaut
    Super

    Merci pour votre aide à tous.


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

Discussions similaires

  1. Librairie pour dessin vectoriel
    Par bouba dans le forum C++
    Réponses: 3
    Dernier message: 20/06/2006, 18h09
  2. [Lazarus] Dessin vectoriel ou MetaFileCanvas
    Par pdufresn dans le forum Lazarus
    Réponses: 6
    Dernier message: 01/06/2006, 10h34
  3. Dessin vectoriel 2D : librairies, docs, etc.
    Par lio33 dans le forum MFC
    Réponses: 3
    Dernier message: 24/05/2006, 13h43
  4. Dessin vectoriel et PHP
    Par Pagan dans le forum Bibliothèques et frameworks
    Réponses: 1
    Dernier message: 15/05/2006, 22h32
  5. Dessin vectoriel avec Python
    Par cboudy dans le forum PyQt
    Réponses: 2
    Dernier message: 04/04/2006, 21h38

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