Pie Workspaces

Ici on parle des scripts

Modérateurs : frez, Yadoob, stilobique, Matpi, ModSquad

Pie Workspaces

Message par Ethan Aeris » 03 Nov 2018, 15:59

Hello!

un premier jet de mon pie en cours pour les workspaces de la 2.8, qui ne liste pour l'instant que ceux par défaut.
Un merci spécial à Lapineige qui m'a montré le chemin de la lumière ;) .
EDIT : Raccourci modifié Shift + TAB pour l'afficher, pour éviter des conflits avec d'autres addons, et en cohérence avec le pie officiel Ctrl+TAB qui affiche les modes.

ça marche, mais 2 petits bémols pour l'instant :
1-le pie ne s'active que dans une vue 3D, donc si on choisit un workspace sans vue 3D comme rendering ou scripting, rien ne s'affiche :(

2- le pie 2D animation ne marche que si l'on a précédemment ajouté le workspace, ce qui n'est pas le cas par défaut. Avec des tests, cela devrait s'arranger.

Il y a un gros travail d’optimisation qui me semble possible, en faisant une énumération par exemple.
Mais je voudrais d'abord corriger les deux points précédents d'abord.
Code : Tout sélectionner
# -*- coding: utf-8 -*-

# ##### BEGIN GPL LICENSE BLOCK #####
#
#  This program is free software; you can redistribute it and/or
#  modify it under the terms of the GNU General Public License
#  as published by the Free Software Foundation; either version 2
#  of the License, or (at your option) any later version.
#
#  This program is distributed in the hope that it will be useful,
#  but WITHOUT ANY WARRANTY; without even the implied warranty of
#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
#  GNU General Public License for more details.
#
#  You should have received a copy of the GNU General Public License
#  along with this program; if not, write to the Free Software Foundation,
#  Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
# ##### END GPL LICENSE BLOCK #####

bl_info = {
    "name": "Pie Workspaces",
    "description": "Pie Workspaces",
    "author": "Laurent Laget, Lapineige",
    "version": (0, 1, 2),
    "blender": (2, 8, 0),
    "location": "alt right mouse button",
    "warning": "",
    "wiki_url": "",
    "category": "3d View"
    }

import bpy
from bpy.types import Menu


# Pie Workspaces - alt right mouse button
class VIEW3D_PIE_workspaces(Menu):
    bl_idname = "pie.workspaces"
    bl_label = "Workspaces"

    def draw(self, context):
        layout = self.layout
        pie = layout.menu_pie()
        col = pie.split().column()
        row = col.split(align=True)
 
        col.operator("class.layout", text ="Layout", icon ='SCENE_DATA')
        col = pie.column(align=True)
       
        col.operator("class.modeling", text ="Modeling", icon ='EDITMODE_HLT')
        col = pie.column(align=True)
       
        col.operator("class.worksculpt", text ="Sculpt", icon ='SCULPTMODE_HLT')
        col = pie.column(align=True)
       
        col.operator("class.uvediting", text ="UV Editing", icon ='UV_ISLANDSEL')
        col = pie.column(align=True)
       
        col.operator("class.texturepaint", text ="Texture Paint", icon ='BRUSH_DATA')
        col = pie.column(align=True)
       
        col.operator("class.shading", text ="Shading", icon ='MATERIAL_DATA')
        col = pie.column(align=True)
       
        col.operator("class.animation", text ="3D Animation", icon ='SEQUENCE')
        col.operator("class.da", text ="2D Animation", icon ='GREASEPENCIL')
        col.operator("class.scripting", text ="Scripting", icon ='SCRIPTPLUGINS')
        col = pie.column(align=True)
       
        col.operator("class.rendering", text ="Rendering", icon ='SCENE')
        col.operator("class.compositing", text ="Compositing", icon ='RENDER_RESULT')
        col = pie.column(align=True)
       

class layout(bpy.types.Operator):
    bl_idname = "class.layout"
    bl_label = "layout"
   
    def execute(self, context):
       
        layout = self.layout
        bpy.data.window_managers['WinMan'].windows[0].workspace = bpy.data.workspaces['Layout']
        return {'FINISHED'}

class modeling(bpy.types.Operator):
    bl_idname = "class.modeling"
    bl_label = "modeling"
   
    def execute(self, context):
       
        layout = self.layout
        bpy.data.window_managers['WinMan'].windows[0].workspace = bpy.data.workspaces['Modeling']
        return {'FINISHED'}

class worksculpt(bpy.types.Operator):
    bl_idname = "class.worksculpt"
    bl_label = "worksculpt"
   
    def execute(self, context):
       
        layout = self.layout
        bpy.data.window_managers['WinMan'].windows[0].workspace = bpy.data.workspaces['Sculpting']
        return {'FINISHED'}
   
class uvediting(bpy.types.Operator):
    bl_idname = "class.uvediting"
    bl_label = "uvediting"
   
    def execute(self, context):
       
        layout = self.layout
        bpy.data.window_managers['WinMan'].windows[0].workspace = bpy.data.workspaces['UV Editing']
        return {'FINISHED'}
   
class texturepaint(bpy.types.Operator):
    bl_idname = "class.texturepaint"
    bl_label = "texturepaint"
   
    def execute(self, context):
       
        layout = self.layout
        bpy.data.window_managers['WinMan'].windows[0].workspace = bpy.data.workspaces['Texture Paint']
        return {'FINISHED'}

class shading(bpy.types.Operator):
    bl_idname = "class.shading"
    bl_label = "shading"
   
    def execute(self, context):
       
        layout = self.layout
        bpy.data.window_managers['WinMan'].windows[0].workspace = bpy.data.workspaces['Shading']
        return {'FINISHED'}

class animation(bpy.types.Operator):
    bl_idname = "class.animation"
    bl_label = "animation"
   
    def execute(self, context):
       
        layout = self.layout
        bpy.data.window_managers['WinMan'].windows[0].workspace = bpy.data.workspaces['Animation']
        return {'FINISHED'}
   
class rendering(bpy.types.Operator):
    bl_idname = "class.rendering"
    bl_label = "rendering"
   
    def execute(self, context):
       
        layout = self.layout
        bpy.data.window_managers['WinMan'].windows[0].workspace = bpy.data.workspaces['Rendering']
        return {'FINISHED'}
   
class compositing(bpy.types.Operator):
    bl_idname = "class.compositing"
    bl_label = "compositing"
   
    def execute(self, context):
       
        layout = self.layout
        bpy.data.window_managers['WinMan'].windows[0].workspace = bpy.data.workspaces['Compositing']
        return {'FINISHED'}
   

class da(bpy.types.Operator):
    bl_idname = "class.da"
    bl_label = "da"
   
    def execute(self, context):
       
        layout = self.layout
        bpy.data.window_managers['WinMan'].windows[0].workspace = bpy.data.workspaces['2D Animation']
        return {'FINISHED'}
   
   
class scripting(bpy.types.Operator):
    bl_idname = "class.scripting"
    bl_label = "scripting"
   
    def execute(self, context):
       
        layout = self.layout
        bpy.data.window_managers['WinMan'].windows[0].workspace = bpy.data.workspaces['Scripting']
        return {'FINISHED'}

classes = (
    VIEW3D_PIE_workspaces,
    modeling,
    worksculpt,
    uvediting,
    layout,
    texturepaint,
    shading,
    animation,
    rendering,
    compositing,
    da,
    scripting,
    )

addon_keymaps = []


def register():

    for cls in classes:
        bpy.utils.register_class(cls)
    wm = bpy.context.window_manager

    if wm.keyconfigs.addon:
        # Object Modes
        km = wm.keyconfigs.addon.keymaps.new(name='Object Non-modal')
        kmi = km.keymap_items.new('wm.call_menu_pie', 'TAB', 'PRESS' ,shift=True)
        kmi.properties.name = "pie.workspaces"
        addon_keymaps.append((km, kmi))

def unregister():
    for cls in classes:
        bpy.utils.unregister_class(cls)

    wm = bpy.context.window_manager
    kc = wm.keyconfigs.addon
    if kc:
        for km, kmi in addon_keymaps:
            km.keymap_items.remove(kmi)
    addon_keymaps.clear()


if __name__ == "__main__":
    register()


-------
Mise à jour avec le lien du addon terminé :
https://gist.github.com/ethanaeris/1b45f91d32164ad40b2e3e6e5b1d1f8c
Dernière édition par Ethan Aeris le 27 Nov 2018, 19:22, édité 2 fois.
Avatar de l’utilisateur
Ethan Aeris
 
Message(s) : 272
Inscription : 29 Juin 2016, 17:58

Re: Pie Workspaces

Message par lapineige » 03 Nov 2018, 16:50

Ethan Aeris a écrit :Un merci spécial à Lapineige qui m'a montré le chemin de la lumière ;) .

Follow the white rabbit :mrgreen: :lol: :lol:

1-le pie ne s'active que dans une vue 3D, donc si on choisit un workspace sans vue 3D comme rendering ou scripting, rien ne s'affiche :(

Alors depuis le temps que je n'ai pas écrit un pie je ne m'en souviens pas, mais de mémoire tu peux définir dans quel(s) espace(s) il apparaît.
Mon terrier/blog: https://lapineige.fr/wp (l'ancien: le-terrier-de-lapineige.over-blog.com) | Mon GitHub: https://github.com/lapineige/Blender_add-ons | Lapineige's Tools: http://cgcookiemarkets.com/blender/all- ... ompilation
Avatar de l’utilisateur
lapineige
 
Message(s) : 3716
Inscription : 25 Juin 2014, 07:06

Re: Pie Workspaces

Message par Ethan Aeris » 03 Nov 2018, 18:57

Bon, j'ai un peu avancé.
le pie s'affiche désormais aussi dans la vue UV et la vue Text/script, en ajoutant les lignes suivantes au niveau de la keymap.


Code : Tout sélectionner
km = wm.keyconfigs.addon.keymaps.new(name='Image',space_type='IMAGE_EDITOR')
km = wm.keyconfigs.addon.keymaps.new(name='Text',space_type='TEXT_EDITOR')


j'ai trouvé une référence pour les spacetypes, mais peut être n'est elle pas à jour pour la 2.8,
car si je tente la ligne ci-dessous, cela ne marche pas dans le shader editor.
Donc en gros, il me manquerait juste le nom à jour des spacetypes restants pour que ça fonctionne.

Code : Tout sélectionner
km = wm.keyconfigs.addon.keymaps.new(name='Node',space_type='NODE_EDITOR')


Référence
https://docs.blender.org/api/2.78a/bpy.types.Space.html

EDIT : ce qui semblait marcher sur le coup, ne marche pas quand je redémarre Blender.
Les espaces semblent s'écraser les uns les autres. je n'arrive pas à les ajouter, seuls les derniers déclarés semblent être pris en compte, au point de me bloquer le pie... dans la vue 3D :-(
Faudrait que j'arrive à les déclarer dans une liste ou une suite, mais je buggue au niveau de la syntaxe :?
Avatar de l’utilisateur
Ethan Aeris
 
Message(s) : 272
Inscription : 29 Juin 2016, 17:58

Re: Pie Workspaces

Message par Ethan Aeris » 10 Nov 2018, 18:22

Malgré le peu de temps disponible, j'essaie d'avancer dessus, mais c'est à pas de fourmis.
j'ai trouvé qu'avec un space type empty, cela marche de partout...dans la 2.79 (pas avec les workspaces bien sur :-) mais sur des pie de test ) .

dans la 2.8, cela ne fonctionne que dans certains éditeurs genre la console.

je suis bien conscient que l'api n'est pas complète, mais je suis dans le flou total.
Dois je laisser le space type empty en espérant que cela marche plus tard, ou est ce qu'il y a une autre façon de procéder ?

ça donne un truc du genre :
km = wm.keyconfigs.addon.keymaps.new(name = "Window",space_type='EMPTY', region_type='WINDOW')
Avatar de l’utilisateur
Ethan Aeris
 
Message(s) : 272
Inscription : 29 Juin 2016, 17:58

Re: Pie Workspaces

Message par jidoeuf » 10 Nov 2018, 23:25

Pour la 2.8 la doc de l'API est là :
https://docs.blender.org/api/blender2.8/bpy.types.html
jidoeuf
 
Message(s) : 6
Inscription : 03 Mars 2014, 17:15

Re: Pie Workspaces

Message par Ethan Aeris » 17 Nov 2018, 18:30

Merci d'avoir rappelé cette page, mais il n'y a eu quasiment aucune modification depuis la dernière fois que j'y avais jeté un oeil.
La doc étant toujours en cours de construction, j'ai l'impression que certains pans sont "écrits" mais pas actifs , et vice-versa.
Tout le nouveau code n'est pas forcément documenté.
Faut que je teste avec une boucle peut être.
Avatar de l’utilisateur
Ethan Aeris
 
Message(s) : 272
Inscription : 29 Juin 2016, 17:58

Re: Pie Workspaces

Message par Ethan Aeris » 17 Nov 2018, 19:00

Warf, je me doutais qu'il suffirait d'un rien pour avancer, mais là, ça en devient risible.
Cela n'avait rien à voir avec l'Api, en fait, en tout cas, pas directement.

cela venait en fait de la gestion des raccourcis clavier.
Avant, quand on en définissait un, il écrasait l'existant et ça passait crème.
ben là, non, en fonction de la fenêtre dans laquelle il se trouve, le raccourci d'origine prend la priorité.
du coup, c'est en voyant l"icône du magnétisme grid s'activer quand je faisait shift+tab, sans activer le pie, que j'ai capté.
dans le genre détail qui bloque tout pour rien... il suffisait d'attribuer un raccourci qui ne soit pas attribué dans aucun autre type de fenêtre pour ça passe.
donc , le script marche en passant sur Ctrl+Alt+W , en restant sur le spacetype empty :-)
Il ne me reste plus qu'à le rendre compatible en tant qu'addon installable 2.8, et je le mettrais en ligne.
Pour l'instant, si j'essaie de l'installer , j'ai un message de refus.
ça passe en lançant le script à la main.
je lis "convertir un addon 2.8 pour les nuls" et je reviens :-)
Avatar de l’utilisateur
Ethan Aeris
 
Message(s) : 272
Inscription : 29 Juin 2016, 17:58

Re: Pie Workspaces

Message par Ethan Aeris » 17 Nov 2018, 19:29

Avatar de l’utilisateur
Ethan Aeris
 
Message(s) : 272
Inscription : 29 Juin 2016, 17:58

Re: Pie Workspaces

Message par Ethan Aeris » 27 Nov 2018, 19:21

Mise à jour de l'addon.
Tous les principaux workspaces d'origine sont désormais supportés.
Avatar de l’utilisateur
Ethan Aeris
 
Message(s) : 272
Inscription : 29 Juin 2016, 17:58

Re: Pie Workspaces

Message par Ethan Aeris » 12 Juil 2019, 07:48

La vidéo de présentation :

phpBB [video]
Avatar de l’utilisateur
Ethan Aeris
 
Message(s) : 272
Inscription : 29 Juin 2016, 17:58


Retour vers Scripts - Python - OSL

Qui est en ligne ?

Utilisateur(s) parcourant ce forum : Aucun utilisateur inscrit et 0 invité(s)