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 Découper un objet selon un autre 3 63 Aujourd'hui 18:06:34
mamain83 
Questions & Réponses Solution rendu saccade    [1][2] 13 190 Aujourd'hui 09:59:17
CBY 
Questions & Réponses Texture baké devient noir    [1][2] 14 96 Aujourd'hui 07:58:33
moonboots 
Questions & Réponses Raccourcis clavier qui ne marchent plus v 2.93.4 0 41 Hier 19:16:31
GFC 
Hors Sujet !! les tutos de Moonboots    [1][2][3]...[24] 238 24809 Hier 15:42:12
moonboots 
The Blender Clan 'tchat Conseil pour débutante 4 353 25/11 16:24:59
Ksuhma 
Moteur de jeu GameBlender et alternatives [WIP] DeadSigns FPS Unity - Version alpha disponible + discord    [1][2][3]...[68] 672 152170 25/11 11:59:06
Hook 
Questions & Réponses Récupérer la couleur en sortie de shader 8 165 25/11 09:33:29
bibi 
Questions & Réponses Peut-on entrer les coordonnées du point visé de la caméra ? 4 131 24/11 19:16:16
CBY 
Questions & Réponses [résolu] snap fixe sur les cm ou mm 2 105 24/11 17:47:40
mamain83 
Questions & Réponses debutant- engrenage en pointe 8 251 24/11 17:30:55
CBY 
The Blender Clan 'tchat ANNONCE IMPORTANTE : LE BLENDER CLAN REOUVRE !! Etat des lieux sur le présent et le futur :)    [1][2][3] 20 39282 24/11 01:55:17
jor760 
Questions & Réponses [non résolu] Fusion 360 - recherche d'un connaisseur 0 94 22/11 18:24:48
Redstar 
The Blender Clan 'tchat [abandonné] Clavier Corsair K55 RGB Pro / Raccourcis clavier    [1][2] 14 440 21/11 19:46:01
CBY 
Questions & Réponses Paramétrage des Particle System 0 107 21/11 10:05:15
Horemheb 
Questions & Réponses Gestion des Hook 4 173 21/11 09:26:17
Horemheb 
Questions & Réponses Tissu élastique    [1][2] 14 483 21/11 09:21:27
Horemheb 
Questions & Réponses csv>python>blender 8 1247 18/11 18:46:06
Cdric 
Questions & Réponses Editer un nom avec la police 'DroidSans.ttf' en hindi 0 120 18/11 09:55:16
Melodicpinpon 
Questions & Réponses Debutant - accentuation de relief 3 232 17/11 11:42:08
CBY 

Qui est en ligne
174 utilisateur(s) en ligne (dont 83 sur Forums)

Membre(s): 3
Invité(s): 171


EltonCalla, CorinaFior, YettaFfb71, plus...
Nouveaux membres
JodyFairfa 27/11/2021
ConnorKeat 27/11/2021
KristyBett 27/11/2021
BennieAlst 27/11/2021
LeonaDarby 27/11/2021
AbelJ48651 27/11/2021
GinoBaley9 27/11/2021
MaribelOsh 27/11/2021
Maxwell641 27/11/2021
FrankRedmo 27/11/2021
Dernier Ajout
2020-09-24.jpg

Evènements à venir
Dec 29
Anniversaire d'ebrain
Jan 8
BUG de Lyon
Fev 15
Anniversaire de Dany
plus 246 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