j'ai fait un code qui permet de dessiner un camembert en 3D
j'ai utilisé la fonction de l'API Pie_() qui permet de dessiner un camembert en 2D et j'ai bidouillé pour donner un effet de 3D
Code : Tout sélectionner
; Auteur : Le Soldat Inconnu
; Version de PB : 3.90
;
; Explication du programme :
; Dessiner un camembert en 3D
Procedure Pie3D(HDC.l, X.l, Y.l, Rayon.l, Orientation.f, Hauteur.l, AngleDepart.f, AngleFin.f, Couleur.l)
; HDC : Handle du dessin
; X, Y : centre du camembert
; Rayon : Rayon du camembert
; Orientation : Orientation du camembert qui donne l'effet 3D. cette valeur doit être comprise entre 0 et 1
; Hauteur : Hauteur ou épaisseur du camembert
; AngleDepart : Angle de départ en radian
; AngleFin : Angle de fin en radian
; Couleur : Couleur du camenbert
Protected R.l, G.l, B.l, n.l, AX1.l, AY1.l, AX2.l, AY2.l, Rayon2.l
Rayon2 = Rayon * Orientation ; calul du rayon sur l'axe Y du camembert
Y = Y - Hauteur / 2 ; on recentre le camemenbert en fonction de l'épaisseur
R = Red(Couleur) : G = Green(Couleur) : B = Blue(Couleur) ; On décompose la couleur en RGB
AX2 = Int(X + 100 * Cos(AngleDepart)) ; calcul du point d'arriver
AY2 = Int(Y + 100 * Sin(AngleDepart) * Orientation)
AX1 = Int(X + 100 * Cos(AngleFin)) ; calcul du point de départ
AY1 = Int(Y + 100 * Sin(AngleFin) * Orientation)
For n = Hauteur To 1 Step -1 ; On dessine l'épaisseur du camembert
FrontColor(R * (0.8 - 0.08 * n / Hauteur), G * (0.8 - 0.08 * n / Hauteur), B * (0.8 - 0.08 * n / Hauteur)) ; Choix de la couleur du bord du camembert
Pie_(HDC, X - Rayon, Y - Rayon2 + n, X + Rayon, Y + Rayon2 + n, AX1, AY1 + n, AX2, AY2 + n)
Next
FrontColor(R, G, B)
Pie_(HDC, X - Rayon, Y - Rayon2, X + Rayon, Y + Rayon2, AX1, AY1, AX2, AY2) ; on dessine le dessus du camembert
EndProcedure
; Création de la fenêtre et dela GadgetList
If OpenWindow(0, 0, 0, 300, 300, #PB_Window_SystemMenu | #PB_Window_ScreenCentered | #PB_Window_MinimizeGadget, "Test") = 0 Or CreateGadgetList(WindowID()) = 0
End
EndIf
HDC = StartDrawing(WindowOutput())
Pie3D(HDC, 150, 150, 120, 0.45, 20, 3 * #Pi / 4, 0 , RGB(100, 200, 100))
StopDrawing()
Repeat
Event = WaitWindowEvent()
Until Event = #PB_EventCloseWindow
End