Re: Comment Faire une rotation d'un Texte en son centre
Publié : jeu. 23/mars/2017 12:47
j'ai edité mon message ci dessus 

Forums PureBasic - Français
http://forums.purebasic.com/french/
Code : Tout sélectionner
Global Police = LoadFont(10, "Arial", 10,#PB_Font_HighQuality)
Global ImageRot = CreateImage(1,300,300,32,RGB(255, 255, 255))
StartDrawing(ImageOutput(1))
Box(0, 0, 300, 300, RGB(255, 255, 255))
StopDrawing()
Procedure GenereAnim()
StartDrawing(ImageOutput(1))
DrawingFont(Police)
Texte$="Hello World !"
Hauteur.i = TextHeight(Texte$)
Longueur.i = TextWidth(Texte$+Space(1))
demi_hypo.d=Sqr(Pow(Hauteur,2)+Pow(Longueur,2))/2
ang_hypo.d= Degree(ASin(Hauteur/Longueur))
StopDrawing()
For Angle = 0 To 359 ; Step 1
StartDrawing(ImageOutput(1))
x = 150 + (Longueur/2) * Sin(Angle / 180 * #PI)
y = 150 + (Longueur/2) * Cos(Angle / 180 * #PI)
Box(0,0,300,300,RGB(255,255,255))
DrawRotatedText(x, y, Texte$, (90+Angle)+ang_hypo+5, RGB(0, 0, 0))
AddImageFrame(1, Angle)
StopDrawing()
Next Angle
EndProcedure
;- PROG
GenereAnim()
RemoveImageFrame(1, 359)
If OpenWindow(0, 0, 0, 300, 300, "RotatedTextCentré", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
CanvasGadget(2,0,0,300,300)
AddWindowTimer(0,2,15)
Repeat
Event = WaitWindowEvent()
Select Event
Case #PB_Event_Timer
If Count < ImageFrameCount(1)-1
Count+1
Else
Count = 1
EndIf
SetImageFrame(1, Count)
StartDrawing(CanvasOutput(2))
DrawImage(ImageID(1), 0, 0)
StopDrawing()
EndSelect
Until Event = #PB_Event_CloseWindow
EndIf
Code : Tout sélectionner
Enumeration
#Window
#Canvas
#Refresh
EndEnumeration
Procedure DrawCenterRotatedText(Gadget,Text$,Angle.f,BackColor,ForeColor)
StartVectorDrawing(CanvasVectorOutput(Gadget))
Protected outWidth = VectorOutputWidth(), outHeight = VectorOutputHeight()
VectorSourceColor(BackColor)
FillVectorOutput()
VectorFont(LoadFont(0,"Verdana",20))
VectorSourceColor(ForeColor)
RotateCoordinates(outWidth/2,outHeight/2,Angle);,#PB_Coordinate_Source)
MovePathCursor(0, outHeight/2 - VectorParagraphHeight(Text$, outWidth, outHeight)/2)
DrawVectorParagraph(Text$, outWidth, outHeight, #PB_VectorParagraph_Center)
AddPathCircle(outWidth/2,outHeight/2,5)
VectorSourceColor(RGBA(200,220,255,120))
For i=0 To outWidth Step 20
MovePathCursor(i,0)
AddPathLine(i,outHeight)
Next
For i=0 To outHeight Step 20
MovePathCursor(0,i)
AddPathLine(outWidth,i)
Next
StrokePath(2)
StopVectorDrawing()
EndProcedure
OpenWindow(#Window,0,0,400,400,"Rotation de texte VectorDrawing",#PB_Window_ScreenCentered | #PB_Window_SizeGadget | #PB_Window_MaximizeGadget | #PB_Window_MinimizeGadget)
CanvasGadget(#Canvas,0,0,400,400)
AddWindowTimer(#Window,#Refresh,50)
Repeat
event = WaitWindowEvent()
Select event
Case #PB_Event_Timer
If EventTimer() = #Refresh
i +1
DrawCenterRotatedText(#Canvas,"Ce texte tourne",i,RGBA(0,100,180,255),RGBA(255,255,255,255))
EndIf
Case #PB_Event_SizeWindow
ResizeGadget(#Canvas,0,0,WindowWidth(#Window),WindowHeight(#Window))
EndSelect
Until event = #PB_Event_CloseWindow
Code : Tout sélectionner
Enumeration
#Window
#Canvas
#Refresh
EndEnumeration
Procedure DrawCenterRotatedText(Gadget,Text$,Angle.f,BackColor,ForeColor)
StartVectorDrawing(CanvasVectorOutput(Gadget))
Protected outWidth = VectorOutputWidth(), outHeight = VectorOutputHeight()
VectorSourceColor(BackColor)
FillVectorOutput()
VectorFont(LoadFont(0,"Verdana",20))
VectorSourceColor(ForeColor)
RotateCoordinates(outWidth/2,outHeight/2,Angle);,#PB_Coordinate_Source)
MovePathCursor(0, outHeight/2 - VectorParagraphHeight(Text$, outWidth, outHeight)/2)
DrawVectorParagraph(Text$, outWidth, outHeight, #PB_VectorParagraph_Center)
AddPathCircle(outWidth/2,outHeight/2,5)
VectorSourceColor(RGBA(200,220,255,120))
For i=0 To outWidth Step 20
MovePathCursor(i,0)
AddPathLine(i,outHeight)
Next
For i=0 To outHeight Step 20
MovePathCursor(0,i)
AddPathLine(outWidth,i)
Next
StrokePath(2)
StopVectorDrawing()
EndProcedure
OpenWindow(#Window,0,0,400,400,"Rotation de texte VectorDrawing",#PB_Window_ScreenCentered | #PB_Window_SizeGadget | #PB_Window_MaximizeGadget | #PB_Window_MinimizeGadget)
CanvasGadget(#Canvas,0,0,400,400)
AddWindowTimer(#Window,#Refresh,50)
Repeat
event = WaitWindowEvent()
Select event
Case #PB_Event_Timer
If EventTimer() = #Refresh
i.f +0.1
DrawCenterRotatedText(#Canvas,"Ce texte tourne",i,RGBA(0,100,180,255),RGBA(255,255,255,255))
EndIf
Case #PB_Event_SizeWindow
ResizeGadget(#Canvas,0,0,WindowWidth(#Window),WindowHeight(#Window))
EndSelect
Until event = #PB_Event_CloseWindow
et qui te dis que dans la simulation de Vie que nous appelons LA VIE , l'ordinateur de DieuKwai chang caine a écrit :Ouaih...quant on pense aux whatmilliards de calculs qu'il fait pour juste ce qu'on pourrait faire avec deux doigts sur une feuille pivotant sur un bureau
J'ai du mal à suivre...Zorro a écrit :et qui te dis que dans la simulation de Vie que nous appelons LA VIE , l'ordinateur de Dieu
n’exécute pas encore plus d'operations ??
Zorro a écrit :et qui te dis que dans la simulation de Vie que nous appelons LA VIE , l'ordinateur de Dieu
n’exécute pas encore plus d'operations ??
operation pour t'avoir fait avec des doigts , qui font tourner la feuille ,
et tes yeux qui compare avec l'ordinateur qui fait tourner un prg fait par un mega prg appelé "humain" recursivité au summum