Canva avec forme personnalisable

Vous avez une idée pour améliorer ou modifier PureBasic ? N'hésitez pas à la proposer.
Shadow
Messages : 1373
Inscription : mer. 04/nov./2015 17:39

Canva avec forme personnalisable

Message par Shadow »

Salut,

Se serais vraiment bien on pouvais donner une forme voulue en canvas.
Par exemple Ronde, Triangle ou même polygonale !
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
Ar-S
Messages : 9477
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: Canva avec forme personnalisable

Message par Ar-S »

En natif ça ne sera pas possible. Tout comme un bouton rond.
L’intérêt du canvas est de pouvoir mettre du graphisme dessus, donc tu peux très bien créer un canvas carré qui aura un fond couleur fenêtre et une forme géométrique à l’intérieur. ça donnera l'illusion d'un bouton non carré.
~~~~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 : 1373
Inscription : mer. 04/nov./2015 17:39

Re: Canva avec forme personnalisable

Message par Shadow »

Oui mais c'est pas très propre, a cause des coins :/
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
Ar-S
Messages : 9477
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: Canva avec forme personnalisable

Message par Ar-S »

Il ni a rien de "pas très propre, a cause des coins"
Ou commence le gadget ? Ou finit le gadget ?

Code : Tout sélectionner

Enumeration
  #Win
  #C
EndEnumeration

Procedure exit()
  End
EndProcedure

Procedure DR()
  StartDrawing(CanvasOutput(#C))
  Box(0,0,300,200,$FFFFFF)
  Circle(80,70,60,#Red)
  StopDrawing()
EndProcedure


OpenWindow(#win,#PB_Ignore,#PB_Ignore,300,160,"",#PB_Window_ScreenCentered|#PB_Window_SystemMenu)
SetWindowColor(#Win,$FFFFFF)

CanvasGadget(#C,1,1,200,150)
DR()
BindEvent(#PB_Event_CloseWindow, @Exit() )

Repeat 
   WaitWindowEvent() 
ForEver
~~~~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
Avatar de l’utilisateur
GallyHC
Messages : 1703
Inscription : lun. 17/déc./2007 12:44

Re: Canva avec forme personnalisable

Message par GallyHC »

Bonjour,

J'imagine mal un "canvas" autre que rectangulaire, juste sur le fait des calculs a faire pour obtenir les bords. Après je penses que la mémoire est lineaire et qu'un rectangle est la seul chose possible (à part une ligne). A mon avis ce que tu demande ressemble plus à une transparence avec le fond (fenêtre et touts objets en dessous).

Cordialement,
GallyHC
Configuration : Tower: Windows 10 (Processeur: i7 "x64") (Mémoire: 16Go) (GeForce GTX 760 - 2Go) - PureBasic 5.72 (x86 et x64)
Avatar de l’utilisateur
SPH
Messages : 4726
Inscription : mer. 09/nov./2005 9:53

Re: Canva avec forme personnalisable

Message par SPH »

Bien dit Gally 8)
http://HexaScrabble.com/
!i!i!i!i!i!i!i!i!i!
!i!i!i!i!i!i!
!i!i!i!
//// Informations ////
Intel Core i7 4770 64 bits - GTX 650 Ti
Version de PB : 6.00 - 64 bits
Shadow
Messages : 1373
Inscription : mer. 04/nov./2015 17:39

Re: Canva avec forme personnalisable

Message par Shadow »

Si tu clique sur la partie transparente, dans les coins, alors tu est encore sur le Bouton !
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 : 2522
Inscription : dim. 02/oct./2011 16:17
Localisation : 35520 La Mézière

Re: Canva avec forme personnalisable

Message par Micoute »

Quel est l'imbécile qui clique sur les coins d'un cercle ?
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 5.73 PB 6.00 LTS (x64)
Un homme doit être poli, mais il doit aussi être libre !
Avatar de l’utilisateur
Zorro
Messages : 2185
Inscription : mar. 31/mai/2016 9:06

Re: Canva avec forme personnalisable

Message par Zorro »

:lol: :lol:
Image
Image
Site: http://michel.dobro.free.fr/
Devise :"dis moi ce dont tu as besoin, je t'expliquerai comment t'en passer"
Avatar de l’utilisateur
JohnJohnsonSHERMAN
Messages : 648
Inscription : dim. 13/déc./2015 11:05
Localisation : Allez, cherche...
Contact :

Re: Canva avec forme personnalisable

Message par JohnJohnsonSHERMAN »

:mrgreen: :mrgreen: :mrgreen:

@Shadow :
Tu pourrais toujours te protéger de cela en faisant des calculs extrêmement compliqués à base de sinus et de cosinus, pour déterminer si tu est ou non dans le fameux cercle au moment du clic :P
"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
falsam
Messages : 7244
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: Canva avec forme personnalisable

Message par falsam »

La solution est de passer par la lib vector. Un exemple avec ce code. Passe le souris sur le cercle le rectangle et le polygone.

Code : Tout sélectionner

Enumeration window
  #mainform
EndEnumeration

Enumeration gadget
  #title
  #result
  #shape
EndEnumeration

Enumeration font
  #fontvector
  #fontapp
EndEnumeration

Declare DrawTitle()
Declare DrawShape()

;Initialisation des fonts
LoadFont(#fontvector, "Impact", 10) 
LoadFont(#fontapp, "Verdana", 11)
SetGadgetFont(#PB_Default, FontID(#fontapp))

If OpenWindow(#mainform, 0, 0, 600, 400, "VectorDrawing", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)   
  SetWindowColor(#mainform, RGB(255, 255, 255))
  Gadget = TextGadget(#PB_Any, 20, 100, 200, 20, "Forme selectionnée")
  SetGadgetColor(Gadget, #PB_Gadget_BackColor, RGB(255, 255, 255))
  StringGadget(#result, 220, 100, 200, 22, "")
  
  CanvasGadget(#title, 20, 10, 400, 80)
  DrawTitle()
  
  CanvasGadget(#shape, 0, 150, 600, 120)
  DrawShape()
  
  BindGadgetEvent(#shape, @DrawShape(), #PB_EventType_MouseMove)  
  Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow 
EndIf

Procedure DrawTitle()
  If StartVectorDrawing(CanvasVectorOutput(#Title))
    VectorFont(FontID(#fontvector), 60) 
    AddPathText("Mon application")
    
    ;Remplissage du texte & contour
    VectorSourceColor(RGBA(255, 215, 0, 255))
    FillPath(#PB_Path_Preserve)
    
    VectorSourceColor(RGBA(0, 0, 0, 255))
    StrokePath(1)
    StopVectorDrawing()
  EndIf     
EndProcedure
  
Procedure DrawShape()    
  x = GetGadgetAttribute(#Shape, #PB_Canvas_MouseX)
  y = GetGadgetAttribute(#Shape, #PB_Canvas_MouseY)
  
  SetGadgetText(#Result, "")
  
  If StartVectorDrawing(CanvasVectorOutput(#Shape))       
    ;Cercle
    AddPathCircle(50, 50, 30) ;Ajout cercle
    
    If IsInsidePath(x, y, #PB_Coordinate_Device) 
      ;Curseur dans le cercle
      SetGadgetText(#result, "Cercle vert")
      VectorSourceColor(RGBA(0, 255, 0, 255))
    Else
      ;Curseur en dehors du cercle
      VectorSourceColor(RGBA(0, 0, 255, 255))
    EndIf
    FillPath() ;Remplissage avec la couleur couante
    
    ;Box
    VectorSourceColor(RGBA(255, 0, 0, 255))
    AddPathBox(200, 30, 100, 50) 
    
    If IsInsidePath(x, y, #PB_Coordinate_Device) 
      SetGadgetText(#result, "Rectangle rouge")
      VectorSourceColor(RGBA(255, 0, 0, 255))
    Else
      VectorSourceColor(RGBA(0, 0, 255, 255))
    EndIf
    FillPath() 
        
    ;Polygone
    VectorSourceColor(RGBA(0, 0, 255, 255))
    MovePathCursor(450, 20)
    AddPathLine(50, 10, #PB_Path_Relative)
    AddPathLine(10, 20, #PB_Path_Relative)
    AddPathLine(0, 30, #PB_Path_Relative)
    AddPathLine(-50, 30, #PB_Path_Relative)
    AddPathLine(-50, -30, #PB_Path_Relative)
    AddPathLine(-10, -20, #PB_Path_Relative)
    AddPathLine(50, -40, #PB_Path_Relative)
    If IsInsidePath(x, y, #PB_Coordinate_Device) 
      SetGadgetText(#result, "Polygone jaune")
      VectorSourceColor(RGBA(255, 215, 0, 255))
    Else
      VectorSourceColor(RGBA(0, 0, 255, 255))
    EndIf
    FillPath()
    
    StopVectorDrawing()
  EndIf      
EndProcedure
Configuration : Windows 11 Famille 64-bit - PB 6.03 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Shadow
Messages : 1373
Inscription : mer. 04/nov./2015 17:39

Re: Canva avec forme personnalisable

Message par Shadow »

Magnifique Falsam :D :wink:
Merci.
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
Zorro
Messages : 2185
Inscription : mar. 31/mai/2016 9:06

Re: Canva avec forme personnalisable

Message par Zorro »

JohnJohnsonSHERMAN a écrit ::mrgreen: :mrgreen: :mrgreen:

@Shadow :
Tu pourrais toujours te protéger de cela en faisant des calculs extrêmement compliqués à base de sinus et de cosinus, pour déterminer si tu est ou non dans le fameux cercle au moment du clic :P
:lol: il serai plus simple alors de calculer la distance du pointeur par rapport au centre du cercle non ??

parceque c'est un cercle, et que du coup ,forcement si on mesure la distance par rapport au centre on se trouve obligatoirement au dehors ou en dedans
pas de sinus ou de trucmuch compliqué :lol:

la methode architecte de cleopatre (Asterix)
Image
Image
Site: http://michel.dobro.free.fr/
Devise :"dis moi ce dont tu as besoin, je t'expliquerai comment t'en passer"
Avatar de l’utilisateur
JohnJohnsonSHERMAN
Messages : 648
Inscription : dim. 13/déc./2015 11:05
Localisation : Allez, cherche...
Contact :

Re: Canva avec forme personnalisable

Message par JohnJohnsonSHERMAN »

@Dobro : En fait t'as raison... Jai zappé un truc super utile qu'on utilise souvent... le théoréme de Pythagore :P

Pour exprimer la distance entre le pointeur et le centre du cercle, il faut convertir des coordonnées cartésiennes (x,y) en coordonnées polaires (angle,rayon) pour avoir la distance centre-pointeur... Et pour ca il faut et il suffit de quelques calculs simples : théoréme de Pythagore

Prenons le triangle rectangle formé par le centre du cercle A, un point B situé sur l'axe des abscisses et un point C situé à l'emplacement du pointeur. On a donc un triangle rectangle.
Image

Il est simplissime de calculer la longueur AC de l'hypoténuse (et aussi distance entre le pointeur et le centre du cercle) :
AC² = AB² + BC²
<=>AC = sqrt(AB² + BC²)

Si l'on extrapole cela à notre probléme ca donne :

Code : Tout sélectionner

rayon = Sqrt(Pow(centreX-pointeurX, 2) + Pow(centreY+pointeurY, 2))
Simple non? Et pourtant je l'avais oublié... :)
"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
Ar-S
Messages : 9477
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: Canva avec forme personnalisable

Message par Ar-S »

Ou travailler en détectant la couleur du cercle... 0 calcul..
Bref faut se creuser un peu la tête.. Les solutions sont là.
~~~~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
Répondre