Page 1 sur 1

Camembert simple façon excel

Publié : dim. 10/janv./2021 2:50
par Ekim
Bonsoir et bonne année à tous

Savez vous comment puis je construire un camembert très simplement,

mon bout de code est laborieux

Code : Tout sélectionner

If OpenWindow(0, 0, 0, 200, 200, "", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
	If CreateImage(0, 200, 200) And StartDrawing(ImageOutput(0))
		Box(0, 0, 200, 200, RGB(255, 255, 255))
		
		Angled.f = 90.0
		Anglef.f = -90.0
		
		;debut
		LineXY(100, 100, 100+Cos(Angled)*90, 100+Sin(Angled)*90, #Red)
		
		;fin
		LineXY(100, 100, 100+Cos(Anglef)*90, 100+Sin(Anglef)*90, #Red)
		
		For Angle2 = 0 To 360
			Plot(100+Cos(Angle2)*90, 100+Sin(Angle2)*90,#Red)
		Next Angle2
		
		FillArea(100, 100, -1, $0000FF)
		
		StopDrawing() 
		ImageGadget(0, 0, 0, 200, 200, ImageID(0))
	EndIf
	
	Repeat
		Event = WaitWindowEvent()
	Until Event = #PB_Event_CloseWindow
EndIf
:wink:

Re: Camembert simple façon excel

Publié : dim. 10/janv./2021 8:18
par kernadec
bjr Ekim
merci, pour le partage
pour les fonctions de trigos, il faut convertir en radians

pour la fonction plot() en mode cercle et avec une boucle de 360 degrés, il y aura des fuites
en utilisant la fonction et FillArea() qui remplira toute la surface.
il faut utiliser la fonction Circle() et mettre un DrawingMode(#PB_2DDrawing_Outlined)
pour les contours des figures géométriques

avec plot() pour éviter les fuites il faut tracer plus serrer exemple:

Code : Tout sélectionner

 d.d = 0
    For Angle2 = 0 To 1080  ; 3 fois le tour
      d = d + 0.333333333
             Plot(100+Cos(d)*90, 100+Sin(d)*90,#Red)
    Next Angle2
Cordialement

Code : Tout sélectionner

If OpenWindow(0, 0, 0, 200, 200, "LineXY", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
  If CreateImage(0, 200, 200) And StartDrawing(ImageOutput(0))
    Box(0, 0, 200, 200, RGB(255, 255, 255),#black)

    DrawingMode(#PB_2DDrawing_Outlined) 
 
    Angled.f = Radian(45.0)
    Anglef.f = Radian(-45.0)
    
    ;debut
    LineXY(100, 100, 100+Cos(Angled)*90, 100+Sin(Angled)*90, #Red)
    
    ;fin
    LineXY(100, 100, 100+Cos(Anglef)*90, 100+Sin(Anglef)*90, #Red)
    
    ;       For Angle2 = 0 To 360
    ;          Plot(100+Cos(Angle2)*90, 100+Sin(Angle2)*90,#Red)
    ;       Next Angle2
    
    Circle(100,100,90,#Red)
    
    FillArea(100, 100, #Red, #Green)
    
    StopDrawing()
    ImageGadget(0, 0, 0, 200, 200, ImageID(0))
  EndIf
  
  Repeat
    Event = WaitWindowEvent()
  Until Event = #PB_Event_CloseWindow
EndIf

[RESOLU] Camembert simple façon excel

Publié : dim. 10/janv./2021 20:19
par Ekim
Oh c'est cool @kernadec :D

Merci pour cette correction, grâce à toi, je vais pouvoir avancer dans mon projet :P

et effectivement, la méthode cercle était la plus correct

encore merci :wink:

Re: Camembert simple façon excel

Publié : dim. 10/janv./2021 21:33
par kernadec
Ekim
Je te conseillerais plutot d utiliser les fonctions
du mode: VectorDrawing() en particulier AddPathCircle()
Qui permet ce genre de chart
Cordialement

Re: Camembert simple façon excel

Publié : lun. 11/janv./2021 11:21
par microdevweb
Bonjour,

Voici un exemple en utilisant Vector.

Image

Code : Tout sélectionner


#MAIN_FORM = 0
#CANVAS = 0
#TRACK = 1
#FONT = 0

Procedure evCloseWindow()
  End
EndProcedure

Procedure draw()
  StartVectorDrawing(CanvasVectorOutput(#CANVAS))
  ; clear canvas
  VectorSourceColor($FFC7C7C7)
  FillVectorOutput()
  VectorFont(FontID(#FONT))
  Protected v.d = GetGadgetState(#TRACK),
            p.d = (360 / 100) * v,
            x = GadgetWidth(#CANVAS) / 2,
            y = GadgetHeight(#CANVAS) / 2,
            xt = x - (VectorTextWidth(StrD(v)+" %")/2)
  MovePathCursor(x,y)
  If v > 0
    AddPathCircle(x,y,200,0,p,#PB_Path_Connected)
    ClosePath()
    VectorSourceColor($FF008B00)
    StrokePath(10,#PB_Path_Preserve)
    VectorSourceColor($FF00EE00)
    FillPath()
  EndIf
  MovePathCursor(xt,y)
  VectorSourceColor($FF8B0000)
  DrawVectorText(StrD(v)+" %")
  StopVectorDrawing()
EndProcedure

Procedure evTrack()
  draw()
EndProcedure

Procedure openMainForm()
  LoadFont(#FONT,"arial",12,#PB_Font_HighQuality|#PB_Font_Bold)
  OpenWindow(#MAIN_FORM,0,0,800,600,"Camember",#PB_Window_ScreenCentered|#PB_Window_SystemMenu)
  CanvasGadget(#CANVAS,0,0,WindowWidth(#MAIN_FORM),WindowHeight(#MAIN_FORM) - 60)
  TextGadget(#PB_Any,10,WindowHeight(#MAIN_FORM) - 60,WindowWidth(#MAIN_FORM) - 20,20,"Percentage")
  TrackBarGadget(#TRACK,10,WindowHeight(#MAIN_FORM) - 30,WindowWidth(#MAIN_FORM) - 20,25,0,100)
  SetGadgetState(#TRACK,100)
  draw()
  BindEvent(#PB_Event_CloseWindow,@evCloseWindow(),#MAIN_FORM)
  BindGadgetEvent(#TRACK,@evTrack())
EndProcedure

openMainForm()

Repeat
  WaitWindowEvent()
ForEver 

Re: Camembert simple façon excel

Publié : lun. 11/janv./2021 16:56
par kernadec
bjr microdevweb
Merci pour le partage, vraiment cool à adapter :D
Cordialement

Re: Camembert simple façon excel

Publié : dim. 17/janv./2021 19:49
par Kwai chang caine
Waouuuh !!! superbe 8O
Je ne sais pas en Belgique, mais en France on mange le camemberT comme en angleterre ...... avec le "Thé" :lol: :wink:
En tout cas merci beaucoup de se super code 8)

Re: Camembert simple façon excel

Publié : dim. 25/avr./2021 10:44
par Ekim
Mais c'est excellent))
Merci beaucoup @microdevweb

La qualité y est au rendez vous en plus

Encore merci)