Page 2 sur 3

Re: Comment Faire une rotation d'un Texte en son centre

Publié : jeu. 23/mars/2017 12:47
par Zorro
j'ai edité mon message ci dessus ;)

Re: Comment Faire une rotation d'un Texte en son centre

Publié : jeu. 23/mars/2017 13:41
par Ar-S
La version animée avec les nouvelles commandes de PB 5.60 ( AddImageFrame(), ImageFrameCount(), SetImageFrame(), GetImageFrame() )

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


Re: Comment Faire une rotation d'un Texte en son centre

Publié : jeu. 23/mars/2017 15:12
par Shadow
Je vous remercie.

Re: Comment Faire une rotation d'un Texte en son centre

Publié : jeu. 23/mars/2017 15:37
par djes
J'ai corrigé vite fait le code de JohnJohnsonSHERMAN, pas besoin d'utiliser la trigo ; il suffit de penser au texte comme s'il était contenu dans un rectangle.

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

Re: Comment Faire une rotation d'un Texte en son centre

Publié : jeu. 23/mars/2017 16:13
par Kwai chang caine
Dans le codes de ARS et Sherman/DJES, je pense que ce doit être normal que toutes les lettres aient la danse de saint guy ? 8O

Re: Comment Faire une rotation d'un Texte en son centre

Publié : jeu. 23/mars/2017 16:45
par Shadow
Faudrait rassembler tous ça et en faire un tuto car c'est utile :)
Merci à vous.

Oui ça dense mais je ne sais pas si on peut faire mieux, c'est déjà pas mal !

Re: Comment Faire une rotation d'un Texte en son centre

Publié : jeu. 23/mars/2017 16:53
par Micoute
Il suffit de mettre une police plus grosse et ça ne dance plus, je trouve ça magnifique, merci pour le partage

Re: Comment Faire une rotation d'un Texte en son centre

Publié : jeu. 23/mars/2017 16:54
par JohnJohnsonSHERMAN
Merci Djes ! :P 8)

@KCC : Chez moi le mien (VectorDrawing) ne danse pas, mais alors pas du tout :D
Sur la seconde version (par djes), par contre ca danse,mais il n'y a pas moyen de faire autrement je pense.

@Micoute :je vais tester ca, merci :)

Re: Comment Faire une rotation d'un Texte en son centre

Publié : jeu. 23/mars/2017 17:19
par Kwai chang caine
Ok merci pour la réponse, j'avais peur que y'ai encore que chez moi :wink:

Re: Comment Faire une rotation d'un Texte en son centre

Publié : jeu. 23/mars/2017 17:29
par djes
Il suffit de ralentir pour comprendre pourquoi (code ci-dessous). Il semble que le calcul de la position des lettres ne se fait pas au sous-pixel, et donc, ça saute de pixel en pixel. Pour éviter ça, soit on change la résolution de sortie (et on réduit après), soit on dessine le texte une fois sur une image et on tourne l'image.

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

Re: Comment Faire une rotation d'un Texte en son centre

Publié : jeu. 23/mars/2017 19:00
par Kwai chang caine
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 :lol:
D'un autre coté, il fait autant d'opérations à la seconde que moi j'en aurait jamais fait dans toute une vie :mrgreen:

Re: Comment Faire une rotation d'un Texte en son centre

Publié : jeu. 23/mars/2017 20:53
par Zorro
Kwai 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 :lol:
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 :)

Re: Comment Faire une rotation d'un Texte en son centre

Publié : jeu. 23/mars/2017 21:43
par Shadow
Dobro serait-il croyant ?
J'pense pas mais qui sais :)

D'ailleurs qui l'es ici !

Re: Comment Faire une rotation d'un Texte en son centre

Publié : jeu. 23/mars/2017 22:42
par Ollivier
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 ??
J'ai du mal à suivre...

Re: Comment Faire une rotation d'un Texte en son centre

Publié : ven. 24/mars/2017 9:52
par Kwai chang caine
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 :)
:lol: :lol:

En fait rien. :oops:
Chaque chose qui est découverte depuis la nuit des temps, paraissait parfois impossible encore quelque secondes avant 8O
Il se dit aussi que tout peut être converti en mathématique, alors ta théorie est pas si ridicule que ça
La nature reste encore pour beaucoup un mystère, et pourquoi pas peut être un matin, apercevoir MATRIX au réveil, à défaut de "MATRIQ" 8O :mrgreen:

Image