Comment Faire une rotation d'un Texte en son centre

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Avatar de l’utilisateur
Zorro
Messages : 2186
Inscription : mar. 31/mai/2016 9:06

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

Message par Zorro »

j'ai edité mon message ci dessus ;)
Avatar de l’utilisateur
Ar-S
Messages : 9540
Inscription : dim. 09/oct./2005 16:51
Contact :

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

Message 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

~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
Shadow
Messages : 1413
Inscription : mer. 04/nov./2015 17:39

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

Message par Shadow »

Je vous remercie.
Processeur: Intel Core I7-4790 - 4 Cœurs - 8 Thread: 3.60 Ghz.
Ram: 32 GB.
Disque: C: SDD 250 GB, D: 3 TB.
Vidéo: NVIDIA GeForce GTX 960: 2 GB DDR5.
Écran: Asus VX248 24 Pouces: 1920 x 1080.
Système: Windows 7 64 Bits.

PureBasic: 5.60 x64 Bits.
Avatar de l’utilisateur
djes
Messages : 4252
Inscription : ven. 11/févr./2005 17:34
Localisation : Arras, France

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

Message 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
Avatar de l’utilisateur
Kwai chang caine
Messages : 6989
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

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

Message 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
ImageLe bonheur est une route...
Pas une destination

PureBasic Forum Officiel - Site PureBasic
Shadow
Messages : 1413
Inscription : mer. 04/nov./2015 17:39

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

Message 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 !
Processeur: Intel Core I7-4790 - 4 Cœurs - 8 Thread: 3.60 Ghz.
Ram: 32 GB.
Disque: C: SDD 250 GB, D: 3 TB.
Vidéo: NVIDIA GeForce GTX 960: 2 GB DDR5.
Écran: Asus VX248 24 Pouces: 1920 x 1080.
Système: Windows 7 64 Bits.

PureBasic: 5.60 x64 Bits.
Avatar de l’utilisateur
Micoute
Messages : 2584
Inscription : dim. 02/oct./2011 16:17
Localisation : 35520 La Mézière

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

Message par Micoute »

Il suffit de mettre une police plus grosse et ça ne dance plus, je trouve ça magnifique, merci pour le partage
Microsoft Windows 10 Famille 64 bits : Carte mère : ASRock 970 Extreme3 R2.0 : Carte Graphique NVIDIA GeForce RTX 3080 : Processeur AMD FX 6300 6 cœurs 12 threads 3,50 GHz PB 6.20 LTS (x64)
Un homme doit être poli, mais il doit aussi être libre !
Avatar de l’utilisateur
JohnJohnsonSHERMAN
Messages : 648
Inscription : dim. 13/déc./2015 11:05
Localisation : Allez, cherche...
Contact :

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

Message 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 :)
"Le bug se situe entre la chaise et le clavier"
Votre expert national en bogage et segfaults.

CPU : AMD A8 Quad core - RAM 8Gb - HDD 2To
  • Windows 10 x64 - PB 5.61 x64
  • Linux Ubuntu 16.04 LTS x64 (dual boot) - PB pas encore réinstallé
Avatar de l’utilisateur
Kwai chang caine
Messages : 6989
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

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

Message par Kwai chang caine »

Ok merci pour la réponse, j'avais peur que y'ai encore que chez moi :wink:
ImageLe bonheur est une route...
Pas une destination

PureBasic Forum Officiel - Site PureBasic
Avatar de l’utilisateur
djes
Messages : 4252
Inscription : ven. 11/févr./2005 17:34
Localisation : Arras, France

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

Message 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
Avatar de l’utilisateur
Kwai chang caine
Messages : 6989
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

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

Message 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:
ImageLe bonheur est une route...
Pas une destination

PureBasic Forum Officiel - Site PureBasic
Avatar de l’utilisateur
Zorro
Messages : 2186
Inscription : mar. 31/mai/2016 9:06

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

Message 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 :)
Shadow
Messages : 1413
Inscription : mer. 04/nov./2015 17:39

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

Message par Shadow »

Dobro serait-il croyant ?
J'pense pas mais qui sais :)

D'ailleurs qui l'es ici !
Processeur: Intel Core I7-4790 - 4 Cœurs - 8 Thread: 3.60 Ghz.
Ram: 32 GB.
Disque: C: SDD 250 GB, D: 3 TB.
Vidéo: NVIDIA GeForce GTX 960: 2 GB DDR5.
Écran: Asus VX248 24 Pouces: 1920 x 1080.
Système: Windows 7 64 Bits.

PureBasic: 5.60 x64 Bits.
Ollivier
Messages : 4197
Inscription : ven. 29/juin/2007 17:50
Localisation : Encore ?
Contact :

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

Message 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...
Avatar de l’utilisateur
Kwai chang caine
Messages : 6989
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

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

Message 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
ImageLe bonheur est une route...
Pas une destination

PureBasic Forum Officiel - Site PureBasic
Répondre