Dessin Ligne 2D avec épaisseur

Partagez votre expérience de PureBasic avec les autres utilisateurs.
Guimauve
Messages : 1015
Inscription : mer. 11/févr./2004 0:32
Localisation : Québec, Canada

Dessin Ligne 2D avec épaisseur

Message par Guimauve »

Bonjour à tous.

Dessiner une ligne en 2D avec le contrôle de l'épaisseur de la ligne.

En passant, ça pourrait être intéressant d'ajouter l'option aux commandes Line() et LineXY() de la librairie 2D Drawing.

N.B. Il y a sûrement une commande dans l'API windoze qui fait ce genre de truc. J'ai pas chercher avant de la programmer.

A+
Guimauve

Code : Tout sélectionner

; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; Nom du projet : Dessin Ligne 2D avec épaisseur
; Fichier : Trucs et Astuces
; Version : 1.0.0
; Programmation : OK
; Programmé par : Guimauve
; Date : 02-03-2007
; Mise à jour : 02-03-2007
; Codé avec PureBasic V4.02
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

Procedure Line2D(x1.w, y1.w, x2.w, y2.w, Thickness.w, Color.l)
   
   vector_i.w = x2 - x1
   vector_j.w = y2 - y1
   Radius.w = Thickness >> 1 
   Modulus.f = Sqr(vector_i * vector_i + vector_j * vector_j)
   
   While t.f <= Modulus
      
      Circle(x1 + vector_i * t ,y1 + vector_j * t, Radius, Color)
      t + 0.004
      
   Wend
   
EndProcedure

;/ <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
;/ <<<<< !!! ATTENTION - CODE D'ESSAI - ATTENTION !!! <<<<<
;/ <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

If CreateImage(0,256,256)
   
   If StartDrawing(ImageOutput(0))
      
      Line2D(000, 000, 250, 125, 20, #Red)
      LineXY(000, 000, 250, 125, #Yellow)
      
      Line2D(256, 000, 000, 256, 10, #Yellow)
      LineXY(256, 000, 000, 256, #Red)
      
      Line2D(000, 128, 128, 000, 30, #Blue)
      LineXY(000, 128, 128, 000, #Green)
      
      StopDrawing()
      
   EndIf
   
EndIf

If OpenWindow(0, 0, 0, 270, 270, "ImageGadget", #PB_Window_SystemMenu | #PB_Window_ScreenCentered) And CreateGadgetList(WindowID(0))
   
   If CreateGadgetList(WindowID(0))
      ImageGadget(1, 5, 5, 256,256, ImageID(0), #PB_Image_Border)
   EndIf 
  
   Repeat
      
      EventID = WaitWindowEvent()
      
      Select EventID
         
         Case #PB_Event_Menu
            
            Select EventMenu()
               
            EndSelect
            
         Case #PB_Event_Gadget
            
            Select EventGadget()
               
            EndSelect
            
      EndSelect
      
   Until EventID = #PB_Event_CloseWindow
   
EndIf

; <<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< FIN DU FICHIER <<<<<
; <<<<<<<<<<<<<<<<<<<<<<<<<<