et je pensais que ça prendrait moins de temps de dessiner un 1/4 de cercle plutôt qu'un cercle entier ...
Currieux quand même ...
Code : Tout sélectionner
Procedure RoundBox(x.l,y.l,width.l,height.l,ray.l,color.l)
Box(x+ray,y,width-ray*2,height,color)
Box(x,y+ray,ray,height-ray*2,color)
Box(x+width-ray,y+ray,ray,height-ray*2,color)
last_dy=-1
For z=0 To 90
dx=Sin(z*#PI/180)*ray
dy=Cos(z*#PI/180)*ray
If last_dy<>dy
last_dy=dy
Line(x+ray,y+ray-dy,-dx,1,color)
Line(x+width-ray,y+ray-dy,dx,1,color)
Line(x+ray,y+height-ray+dy,-dx,1,color)
Line(x+width-ray,y+height-ray+dy,dx,1,color)
EndIf
Next
EndProcedure
Procedure RoundBox2(x.l,y.l,width.l,height.l,ray.l,color.l)
Protected x1.l,y1.l,x2.l,y2.l,dr.l,dx.l,dy.l
x1=x+ray
x2=x+width-ray
y1=y+ray
y2=y+height-ray-1
dr.l=ray<<1
Box(x1,y,width-dr,height,color)
Box(x,y1,ray,height-dr,color)
Box(x2,y1,ray,height-dr,color)
last_dy=-1
For z=0 To 90
dx=Sin(z*#PI/180)*ray
dy=Cos(z*#PI/180)*ray
If last_dy<>dy
last_dy=dy
Line(x1,y1-dy,-dx,1,color);Pour les vielles version de PB remplacer le ,1, part 0
Line(x2,y1-dy,dx,1,color);Pour les vielles version de PB remplacer le ,1, part 0
Line(x1,y2+dy,-dx,1,color);Pour les vielles version de PB remplacer le ,1, part 0
Line(x2,y2+dy,dx,1,color);Pour les vielles version de PB remplacer le ,1, part 0
EndIf
Next
EndProcedure
Procedure RoundBox3(x.l,y.l,width.l,height.l,ray.l,color.l)
Protected x1.l,y1.l,x2.l,y2.l,dr.l,dx.l,dy.l
x1=x+ray
x2=x+width-ray
y1=y+ray
y2=y+height-ray-1
dr.l=ray<<1
Box(x1,y,width-dr,height,color)
Box(x,y1,ray,height-dr,color)
Box(x2,y1,ray,height-dr,color)
Circle(x1,y1,ray,color)
Circle(x1,y2,ray,color)
Circle(x2-1,y1,ray,color)
Circle(x2-1,y2,ray,color)
EndProcedure
#Max=10000
If OpenWindow(0, 0, 0, 150, 150, "Rectangles", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
hdc=StartDrawing(WindowOutput(0))
t=ElapsedMilliseconds()
For z=1 To #Max
Box(10, 10, 100, 100,#Red)
Next
Fa=ElapsedMilliseconds()-t
Debug Fa
t=ElapsedMilliseconds()
For z=1 To #Max
RoundRect_(hDC,10,10,100,100,20,20)
Next
Fa=ElapsedMilliseconds()-t
Debug Fa
t=ElapsedMilliseconds()
For z=1 To #Max
RoundBox2(10, 10, 100, 100,10 ,#Green)
Next
Fb=ElapsedMilliseconds()-t
Debug Fb
t=ElapsedMilliseconds()
For z=1 To #Max
RoundBox3(10, 10, 100, 100,10 ,#Blue)
Next
Fc=ElapsedMilliseconds()-t
Debug Fc
StopDrawing() ; C'est absolument indispensable quand les opérations de dessins sont terminées !!! Ne jamais l'oublier !
EndIf
Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow