Questions création d'interface pour un script
Touriste
Inscrit:
20/11/2015 16:53
Post(s): 18
Salut à Tous !

Je suis actuellement sur le script d'un light manager que l'on pourrait gérer via l'interface blender (donc view3D, Tools,papata&Co).

En guise de test pour l'interface en python (ce que je n'ai jamais fait), je fais des choses très simple. Et pourtant, je rencontre actuellement un problème majeur qui est la gestion de ce qu'exécute les différentes commandes une fois qu'elles sont crées, notamment par rapport à un bool. Je souhaite avec ce dernier hide/!hide un cube.
Voici ce à quoi je suis abouti, sans poursuivre plus loin faute de comprendre.

##############################################
import bpy

from bpy.props import (StringProperty,
BoolProperty,
IntProperty,
FloatProperty,
EnumProperty,
PointerProperty,
)

from bpy.types import (Panel,
Operator,
PropertyGroup,
)


class initSceneProperties():
bpy.types.Scene.MyBool = BoolProperty(
name = "Boolean",
description= "None")
bpy.context.scene.MyBool=True

class TestPanel(bpy.types.Panel):
bl_idname = "TestPanel"
bl_label = "Test"
bl_space_type = 'VIEW_3D'
bl_region_type = 'TOOLS'
bl_category = "Tools"

def draw(self, context):
self.layout.operator("mesh.primitive_cube_add")
self.layout.prop(bpy.context.scene, "MyBool")
bpy.utils.register_class(TestPanel)
####################################################

En bref, j'ai juste réussi à créer un bouton pour add un cube

Plus sérieusement, j'ai d'autres questions de débutant à poser :
- par rapport à la ligne :
self.layout.operator("mesh.primitive_cube_add")
j'ai plus de 70 lignes qui vont devoir remplacer mesh.primitive_cuve_add. Dois-je toutes les rajouter à la place ?
- j'ai vu sur plusieurs tuto en ligne :
class ClassName(bpy.types.Operator):
A quoi sert exactement cet appel (que je comprends devoir exécuter des commandes en rapport avec le Panel) si je peux directement exécuter les dites commandes depuis le bpy.types.Panel

Bref, j'ai plein d'autres questions pour le moment, comment est-il possible de rentrer une position de Vector2(cqfd : X,Y) en input interface à la manière de C4D (comme un slider, mais en deux dimensions), afin de gérer la position x et y d'un objet ?
- A quoi sert réellement la commande class initSceneProperties() ?
- Est-il possible de définir une variable public qui récupère des informations de location ? Typiquement, linker un objet spécifique dans la scène, qui a donc la position (x,y,z), valeurs de position qu'on souhaite garder ?
(peut-être pas possible en python, c'est plutôt une logique de C# de récup des transform.position, mais peut-être ....)

Je me contenterai de celles là pour l'instant !!

En vous remerciant,
Une bonne nuit

Contribution le : 15/11/2017 22:48
Créer un fichier PDF de la contribution Imprimer


Re: Questions création d'interface pour un script
Touriste
Inscrit:
20/11/2015 16:53
Post(s): 18
Bonjour à tous et surpris de n'avoir eu aucune réponse

Bref, j'ai progressé, mais j'ai toujours des problèmes pour utiliser autre chose que des strings ou des button. J'arrive à afficher ce qui m'intéresse mais impossible de les utiliser.
J'aimerais utiliser mon BoolShading pour afficher ou cacher mes planes lights à la place de mon operator Reveal/Hide.

Pareil, si quelqu'un pouvait m'expliquer également comment utiliser un IntProperty ou un float property pour changer (notamment des translations) en temps réel des objets dans ma scène.

En vous remerciant d'avance,

Cdlt,
Snains

##############################
import bpy
from bpy.props import *

bpy.context.scene.render.engine = 'CYCLES'
bpy.context.scene.cursor_location=(0,0,0)
bpy.context.scene.layers=[i==0 for i in range(20)]

def initSceneProperties(scn):
bpy.types.Scene.MyString = StringProperty(
name="Object",
description="Obj u want to texturize")
scn['MyString'] = "Click & Drop obj"

bpy.types.Scene.BoolShading = BoolProperty(
name="Visibility",
description="Show/Hide ShadersLights")
scn['BoolShading'] = "Toggle visibility"

return

initSceneProperties(bpy.context.scene)

class ToolsPanel(bpy.types.Panel):
bl_label = "Shading Light"
bl_space_type = "VIEW_3D"
bl_region_type = "TOOLS"

def draw(self, context):
layout = self.layout
scn=context.scene
layout.prop(scn, 'MyString')
layout.operator("add.lightshading")
layout.operator("hide.lightshading")
layout.prop(scn, 'BoolShading')
layout.operator("delete.lightshading")

class AddLightShading (bpy.types.Operator):
bl_idname = "add.lightshading"
bl_label = "Create"

def execute(self, context):
scn = context.scene
bpy.ops.object.select_all(action='DESELECT')
bpy.data.objects[scn['MyString']].select=True
bpy.context.scene.objects.active=bpy.data.objects[scn['MyString']]
CubeTest = bpy.context.active_object
pos=CubeTest.location
bpy.context.scene.layers=[i==14 for i in range(20)]
for obj in bpy.context.visible_objects:
obj.select=True
bpy.ops.object.delete()
LightMat = bpy.data.materials.get("shaders Light Mat")
if LightMat is None :
LightMat=bpy.data.materials.new(name="shaders Light Mat")
LightMat.use_nodes = True
LightMat.node_tree.nodes.remove(LightMat.node_tree.nodes.get('Diffuse BSDF'))
emission=LightMat.node_tree.nodes.new(type='ShaderNodeEmission')
LightMat.node_tree.links.new(LightMat.node_tree.nodes.get('Material Output').inputs[0], emission.outputs[0])
bpy.ops.mesh.primitive_plane_add(location=(2,2,2))
PlaneLight = bpy.context.active_object
PlaneLight.name='shaders_lightPlane'
bpy.context.object.rotation_euler[0]=-((3.14*45)/180)
bpy.context.object.rotation_euler[2]=-((3.14*45)/180)
PlaneLight.active_material = LightMat
bpy.ops.object.origin_set(type='ORIGIN_CURSOR')
bpy.ops.object.transform_apply(location=True, rotation=True, scale=True)
bpy.ops.object.modifier_add(type='MIRROR')
bpy.context.object.modifiers["Mirror"].use_y=True
bpy.ops.transform.translate(value=pos)
bpy.context.scene.layers[0]=True
bpy.context.scene.BoolShading = True
return{'FINISHED'}

class HideLightShading (bpy.types.Operator):
bl_idname = "hide.lightshading"
bl_label = "Reveal/Hide"

def execute(self, context):
bpy.ops.object.select_all(action='DESELECT')
bpy.data.objects['shaders_lightPlane'].select=True
bpy.context.scene.objects.active=bpy.data.objects['shaders_lightPlane']

if bpy.data.objects['shaders_lightPlane'].hide==True :
bpy.context.object.hide = False
else :
bpy.context.object.hide = True
return{'FINISHED'}

class DeleteLightShading (bpy.types.Operator):
bl_idname = "delete.lightshading"
bl_label = "Delete"

def execute(self, context):
bpy.ops.object.select_all(action='DESELECT')
bpy.data.objects['shaders_lightPlane'].select=True
bpy.context.scene.objects.active=bpy.data.objects['shaders_lightPlane']
bpy.ops.object.delete()
return{'FINISHED'}



bpy.utils.register_module(__name__)
print ("fin")
#####################################################

Contribution le : 23/11/2017 15:30
Créer un fichier PDF de la contribution Imprimer


Re: Questions création d'interface pour un script
OverdOzed
Inscrit:
19/01/2008 03:25
De tu voit le nuage sur la carte météo bin j'habite là
Post(s): 2554
Salut

Déjà met des balise parce que la ton code et juste super pénible a lire...

sinon pour ta question:

la création:
bpy.types.Scene.float_name = bpy.props.FloatProperty(name="float_name", default=2.0, min=1.0, max=10.0)
bpy.types.Scene.String_name= bpy.props.StringProperty(name="String_name", default="blabla")
bpy.types.Scene.Boolean_name= bpy.props.BoolProperty(name="Boolean_name")

pour le récup dans un operator tu fait par exemple pour le boolean:
bpy.context.scene.Boolean_name

pour l'affiche dans un panel:
layout = self.layout
row = layout.row()
row.prop(context.scene, "Boolean_name", text="character jump")

bien sur tu peut remplacer truc_name par ce que tu veux

voila voila

j'espère t'avoir aider

Contribution le : 24/11/2017 19:19
Créer un fichier PDF de la contribution Imprimer



 Haut   Précédent   Suivant




Enregistrer votre réponse
Compte*
Nom   Mot de passe   Authentification
Message:*



[Recherche avancée]



Sujets récemment répondus
Forums Sujets Réponses Lus Dernières contributions
Questions & Réponses Rendement en temps réel pour l'animation ? 2 25 Aujourd'hui 09:25:39
moonboots 
Questions & Réponses Texture Procedural Cercle de point 1 18 Aujourd'hui 07:46:02
yawdpwal 
Questions & Réponses Armature en IK sur squelette complexe 4 137 Hier 13:59:10
Redstar 
Questions & Réponses comment modifier l'échelle d'incrémentation d'un champ? 1 21711 24/10 20:09:37
moonboots 
Le coin des geeks vitesse d'un rendu EEVEE Windows/Linux 5 148 24/10 15:18:10
Bibi09 
Hors Sujet !! les tutos de Moonboots    [1][2][3]...[22] 218 21826 23/10 16:17:44
moonboots 
Moteur de jeu GameBlender et alternatives [WIP] Godot Engine - Projet Arsenal    [1][2] 18 1374 22/10 16:38:22
Redstar 
Questions & Réponses Pousser le pc au max 3 167 22/10 11:07:37
xjoce 
Questions & Réponses [non résolu] Problème de vide 1 106 21/10 18:09:50
sapajou 
[WIP] et travaux terminés [WIP] La gabarre '' Le Gros Ventre''    [1][2][3]...[10] 98 17869 21/10 15:53:58
Guiu 
Questions & Réponses [résolu] Os et FBX 3 283 20/10 16:15:38
zeromeetsinfinity 
Moteur de jeu GameBlender et alternatives [non résolu] Cs (vaisseau)    [1][2][3]...[56] 559 171321 20/10 11:06:51
Redstar 
Questions & Réponses texture procédurale qui suis une plane 2 158 20/10 10:19:22
Many 
Questions & Réponses Vertex groups qui disparaissent 0 83 20/10 09:09:22
Melodicpinpon 
Questions & Réponses MeasureIt et dpi 4 970 20/10 09:02:36
jcnouveau 
Questions & Réponses De Maya vers Blender concordance de axes. 9 220 19/10 17:04:59
Bibi09 
Questions & Réponses [résolu] Enlever "snapping" dans la timeline ? 6 185 19/10 09:47:12
CBY 
Questions & Réponses Débutant Blender, temps de travail pour un rendu ? 2 149 18/10 11:37:55
Jalis 
Questions & Réponses [WIP] Dragster-Tracteur pour Bécassine    [1][2][3] 24 5849 17/10 18:37:48
Laorz 
Graphisme alternatif faire de la bd avec blender    [1][2][3]...[13] 123 9523 17/10 14:20:26
blend74 

Qui est en ligne
147 utilisateur(s) en ligne (dont 95 sur Forums)

Membre(s): 5
Invité(s): 142


HwaPreston, HUHKeri167, MattCarlis, FloraDanfo, EdgardoPro, plus...
Nouveaux membres
MelodyCoun 26/10/2021
SavannahTe 26/10/2021
LandonArre 26/10/2021
MarieZfw39 26/10/2021
MarlaMcClo 26/10/2021
AlejandraP 26/10/2021
CarlosHans 26/10/2021
FinlayWell 26/10/2021
LulaLomax2 26/10/2021
MyrtisHzv 26/10/2021
Dernier Ajout
2020-09-24.jpg

Evènements à venir
Nov 18
Anniversaire de RichDeg
Dec 29
Anniversaire d'ebrain
Jan 8
BUG de Lyon
plus 247 plus d'élément(s)
 Par Mickaël Guédon [ebrain] © 2003-2021 The Blender Clan - hébergé par TuxFamily - Site déclaré à la CNIL sous le numéro 1155445