[Logiciel 2D] Animatoon

Programmation d'applications complexes
G-Rom
Messages : 3626
Inscription : dim. 10/janv./2010 5:29

Re: [Logiciel 2D] Animatoon

Message par G-Rom »

Salut,
Ah oui, mais c'est un logiciel free et open-source, donc , c'est pour les pauvres comme moi :D.
Et nous, les pâuvres, on n'a pas d'écran 4k, mais un petit PC portable 14pouces à moins de 300e, et là, c'est nickel en 1360*768 :)

Sinon, tu devrais tester gimp ou open-office en 4K, tu vas bien t'amuser aussi ^^.
Alors je suis un pauvre avec un écran 4k ^^ j'ai eu l'écran au rabais, mais c'est une connerie , malgrès une rtx, peu de jeux tourne en 4k 60fps.
je connais gimp , mais j'utilise surtout pyxeledit ou asesprite pour mes besoins perso, j'adore le pixel art ^^

Windows 10 permet de changer le pourcentage d'agrandissement (en 1920*1080, je choisis 150% par exemple), et hop ça passe nickel du coup.
Ca me rapelle que je n'avait pas coché l'option de compilation adéquat , et là, ca marche... :oops:
donc , fait comme ci je ne t'avais rien dit ^^ l'interface est nickel.
J'ai regardé ton exemple de undo/redo, le problème c'est que ce n'est pas du tout comme ça que j'ai codé mon logiciel, et je ne vois pas du tout comment l'intégrer ^^.
En plus, c'est quand même très compliqué pour moi.
Oui, je suis pas très balèze en code, oui. Mais je fais des choses pas trop pourries avec mes limites ^^.
C'est sur, c'est quelque chose qu'il faut intégrer dès le départ. après si tu veut un coup de main à comprendre , n'hésite pas à me demander quoi que ce soit. il n'y a rien de vraiment compliqué.
Voici un exemple concret le plus simple possible avec du texte (pb mache beaucoup le travail) :

Code : Tout sélectionner

Prototype virtual_execute(*data)
Prototype virtual_undo(*data)
Prototype virtual_redo(*data)

Structure Command
  execute.virtual_execute
  undo.virtual_undo
  redo.virtual_redo
EndStructure

Structure CommandManager
  List *undo.Command()
  List *redo.Command()
  List *command_instance() ; servira à supprimer de la mémoire les commandes orpheline ( undo - undo - redo - next) 
                           ; à "next" une commande sera orpheline il faudra la supprimer de la mémoire
EndStructure

Procedure ExecuteCommand(*cm.CommandManager, *cmd.Command)  
  AddElement(*cm\command_instance())
  *cm\command_instance() = *cmd  
  ClearList(*cm\redo())   
  *cmd\execute(*cmd)          ; on execute la commande
  AddElement(*cm\undo())  ; on l'ajoute a undo
  *cm\undo() = *cmd
EndProcedure

Procedure Undo(*cm.CommandManager)
  If ListSize(*cm\undo())
    LastElement(*cm\undo()) ; on execute undo
    *cm\undo()\undo(*cm\undo())
    AddElement(*cm\redo())  ; on l'ajoute a redo
    *cm\redo() = *cm\undo()    
    DeleteElement(*cm\undo()) ; on efface undo
  EndIf
EndProcedure

Procedure Redo(*cm.CommandManager)
  If ListSize(*cm\redo())
    LastElement(*cm\redo()) ; on execute redo
    *cm\redo()\redo(*cm\redo())
    AddElement(*cm\undo())  ; on l'ajoute a undo
    *cm\undo() = *cm\redo()    
    DeleteElement(*cm\redo()) ; on efface redo
  EndIf
EndProcedure

Procedure check(*cm.CommandManager)
  ForEach *cm\command_instance()
    *A = *cm\command_instance()
    delete_it = #True 
    ForEach *cm\undo()
      *B = *cm\undo()
      If *A = *B
        delete_it = #False 
      EndIf
    Next  
    ForEach *cm\redo()
      *B = *cm\redo()
      If *A = *B
        delete_it = #False 
      EndIf
    Next  
    If delete_it = #True 
      FreeStructure(*A)
      DeleteElement(*cm\command_instance(),1)
    EndIf 
  Next
EndProcedure



Structure TextCommand Extends Command
  value.s
EndStructure

Procedure TextCommand_Execute(*cmd.TextCommand)
EndProcedure

Procedure TextCommand_Undo(*cmd.TextCommand)
  SetGadgetText(0,*cmd\value)
EndProcedure

Procedure TextCommand_Redo(*cmd.TextCommand)
  SetGadgetText(0,*cmd\value)
EndProcedure




OpenWindow(0,0,0,1024,768,"Undo/Redo Example")
EditorGadget(0,10,10,1004,748 - MenuHeight())

CreateMenu(0,WindowID(0))
MenuTitle("&Edition")
MenuItem(0, "&Undo" + Chr(9) + "Ctrl+Z")
MenuItem(1, "&Redo" + Chr(9) + "Ctrl+Y")
AddKeyboardShortcut(0,#PB_Shortcut_Control | #PB_Shortcut_Z, 0)
AddKeyboardShortcut(0,#PB_Shortcut_Control | #PB_Shortcut_Y, 1)



Manager.CommandManager : InitializeStructure(@Manager,CommandManager)

; commande vide , sinon on ne pourra pas annulé jusqu'au début ( texte vide )
; l'idéal serait d'intercepter le texte saisi dans execute() , de sauvegardé 
; la position du caret , et d'injecter le texte dans le gadget. cela permettrais de connaitre
; le changement qu'il y a eu et d'évité d'inserer une commande vide au départ.
; surement jouable avec les apis, mais la flemme...

*cmd.TextCommand = AllocateStructure(TextCommand)
*cmd\execute     = @TextCommand_Execute()
*cmd\undo        = @TextCommand_Undo()
*cmd\redo        = @TextCommand_Redo()
*cmd\value       = ""          
ExecuteCommand(@Manager,*cmd)



While #True 
  
  
  Repeat
    event = WindowEvent()
    
    If event = #PB_Event_CloseWindow
      End
    EndIf 
    
    If event = #PB_Event_Gadget
      event_gadget = EventGadget()
      
      If event_gadget = 0 ; editor
        event_type = EventType()
        If event_type = #PB_EventType_Change
          *cmd.TextCommand = AllocateStructure(TextCommand)
          *cmd\execute     = @TextCommand_Execute()
          *cmd\undo        = @TextCommand_Undo()
          *cmd\redo        = @TextCommand_Redo()
          *cmd\value       = GetGadgetText(0)          
          ExecuteCommand(@Manager,*cmd)
        EndIf 
      EndIf
      
    EndIf
    
        
    If event = #PB_Event_Menu
      event_menu = EventMenu()
      If event_menu = 0 ; undo
        Undo(@Manager)
      EndIf 
      If event_menu = 1 ; redo
        Redo(@Manager)
      EndIf 
    EndIf 
    
    
    check(@Manager)
    
  Until event = #PB_Event_None
  

  If ListSize(Manager\redo()) = 0
    DisableMenuItem(0,1, #True)
  Else
    DisableMenuItem(0,1, #False)
  EndIf 
  
  If ListSize(Manager\undo()) = 0
    DisableMenuItem(0,0, #True)
  Else
    DisableMenuItem(0,0, #False)
  EndIf   
  
Wend
Avatar de l’utilisateur
threedslider
Messages : 380
Inscription : dim. 01/juil./2018 22:38

Re: [Logiciel 2D] Animatoon

Message par threedslider »

Pas mal du tout ton logiciel Blendman !
Avatar de l’utilisateur
blendman
Messages : 2017
Inscription : sam. 19/févr./2011 12:46

Re: [Logiciel 2D] Animatoon

Message par blendman »

Salut

Voici quelques news de mon superbe logiciel de colorisation et dessin 2D, j'ai nommé le fabuleux "Animatoon", conçu avec le non-moins fabuleux langage "Purebasic", langage fantastique :).

Après cette présentation digne d'un mauvais film d'hollywood, voici les news :
- j'ai beaucoup optimisé animatoon, avec mon fichier tes (3500x 2500pixels, 6 calques), je passe de 1,5Go de ram à environ 600 à 700mo, donc, c'est super, je suis bien content.
- j'ai ajouté un mode canvas, mais ce n'est pas encore fini, il reste des bugs. En plus, c'est quand même plus lent que dessiner avec les sprites, mais il y a plus de blendmode.
- j'ai corrigé pas mal de bugs (notamment, correction de l'autosave, mais aussi de certains outils)
- j'ai amélioré plein de trucs (oui, je suis hyper précis, je sais)
- J'ai ajouté quelques fonctions, notamment un début de brush editor (pour concevoir des brush encore mieux, mais ce n'est pas fini du tout).

La dernière version est toujours sur mon github en open-source ;) :
https://github.com/blendman/animatoon


Et puis, j'ai fait de nouveaux dessins mis en couleur avec Animatoon :
ceux-là, je les ai fait en mode "production", donc en 3500x2500 pixels (A4 en 300DPI, pour de la BD par exemple).

Image

Image

Et voiloutch :)



@G-rom : je vais regarder ton exemple avec plus de concentration, car là, j'ai pas encore trouvé comment intégrer ça ^^.
Mais merci :)

threedslider a écrit : dim. 11/avr./2021 20:01 Pas mal du tout ton logiciel Blendman !
Merci bien ;)
Avatar de l’utilisateur
Micoute
Messages : 2522
Inscription : dim. 02/oct./2011 16:17
Localisation : 35520 La Mézière

Re: [Logiciel 2D] Animatoon

Message par Micoute »

Ce n'est pas seulement pas mal, mais je trouve ça plutôt merveilleux, car avec un fabuleux et fantastique langage et un programmeur ingénieux, ça ne peut faire que de l'excellence. J'adore !
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 !
Répondre