Context switch during SVG import
OverdOzed
Inscrit:
19/02/2009 16:27
De Un peu plus à l'ouest...
Post(s): 475
Salut à tous !
Je cherche à faire un tout petit script d'entraînement en ce moment :)
Pour l'instant, il n'est censé qu'importer deux fichiers svg (des cercles), puis les convertir en meshes.

Or je me heurte à un problème de contexte incorrect, à priori récurrent chez les débutants du scripting dans Blender.
Et malgré toute ma bonne volonté, je n'arrive pas à comprendre très rigoureusement ce concept.

Voici mon code :
import bpy
bpy.ops.object.select_all(action='SELECT')
bpy.ops.object.delete(use_global=True)

        
#Importation des SVG
bpy.ops.import_curve.svg(filepath="C:\\Users\\g.svg")
bpy.ops.import_curve.svg(filepath="C:\\Users\\pg.svg")

bpy.ops.object.convert(target='MESH',keep_original=False)
bpy.ops.object.select_all(action='SELECT')
bpy.ops.object.join()
bpy.ops.object.select_all(acion='SELECT')



J'obtiens comme retour en console un message m'informant que la fonction poll() (qui vérifie, si je ne me trompe pas, que le contexte est le bon pour la fonction) a échoué, car le contexte n'est pas le bon.

Operator bpy.ops.object.convert.poll() failed, context is incorrect


A noter que si je supprime la ligne du convert, j'ai la même erreur levée pour la fonction join.

Auriez-vous une idée ou des indications pour résoudre ce soucis ?

Merci beaucoup :)

Siskas

Contribution le : 27/07/2015 18:20
_________________
« Affirmation sans argumentation est signe de confusion ! »
Le mot de la fin : « Meeeeeuuuuuhhhh ! »
Créer un fichier PDF de la contribution Imprimer


Re: Context switch during SVG import
OverdOzed
Inscrit:
16/01/2011 17:05
De Le plus grand terrier du monde ! Et le plus high-tech.
Post(s): 4063
Désolé, je vais être un peu bref, mais j'écris depuis un mobile....

Le "problème" du contexte est que certain opérateur vérifie dans une fonction nommée poll, que le contexte, c'est-à-dire le mode actif, la fenêtre actuelle, la sélection (...) permet de correctement l'exécuter. Un opérateur pour extruder un vertex ne peux pas se lancer en mode édition.
Donc si tu n'est pas dans le bon contexte, la fonction poll renvoi False, et un erreur est levée, celle que tu as rencontrée.

As-tu un maillage sélectionné à ce moment là ? Est-tu en mode objet ? Est-tu dans la vue 3D ? Ça peut faire partie du contexte requis.

Contribution le : 27/07/2015 21:59
Créer un fichier PDF de la contribution Imprimer


Re: Context switch during SVG import
OverdOzed
Inscrit:
19/02/2009 16:27
De Un peu plus à l'ouest...
Post(s): 475
C'est rassurant, alors, j'avais bien compris la notion de contexte.
Par contre tu dis qu'un opérateur pour extruder un vertex ne peut pas se lancer en mode édition, c'est pas l'inverse ? Pour extruder un vertex je me mets en mode édition dans la vue 3D, non ?

Pour mon soucis, j'ai oublié de préciser que ce script est lancé par blender depuis un appel en ligne de commande, tq :

C:\Users\Siskas>"C:\Program Files\Blender Foundation\Blender\blender.exe" -P C:\U
sers\Siskas\BlenderRun_testjpg.py


J'ai bien essayé de me remettre en mode objet avant le convert (ce qui est, il me semble, ce qu'il faut pour une conversion), mais un poll est également levé sur le bpy.ops.object.mode_set(mode='OBJECT'):

import bpy
bpy.ops.object.select_all(action='SELECT')
bpy.ops.object.delete(use_global=True)
        
#Importation des SVG
##########

#Construction des formes
bpy.ops.object.select_all(action='SELECT')
for i,j in enumerate(bpy.context.selected_objects):
    j.location.z+=(i)*0.5/len(bpy.context.selected_objects)

bpy.ops.object.mode_set(mode='OBJECT')
bpy.ops.object.convert(target='MESH',keep_original=False)
bpy.ops.object.select_all(acion='SELECT')


Du coup j'ai regardé du côté du contexte nécessaire pour le changement de mode, et du côté des contextes en général, et effectivement, j'ai, avec :

print('W',bpy.context.window)
print('S',bpy.context.screen)
print('A',bpy.context.area)
print('R',bpy.context.region)


W <bpy_struct, Window at 0x0000000003D33478>
S <bpy_struct, Screen("Default")>
A None
R None


Il n'y a pas d'Area définie ! (ni donc de région, logiquement).
C'est d'un certain côté logique, puisque le script est exécuté en amont de toute interaction avec l'utilisateur, donc le hover de la souris n'a pas encore défini d'Area ni de Region.

La question à présent : comment forcer le contexte à se mettre sur la vue 3D ? (Area:'3D_View', Region:'Window')

J'ai bien vu dans la doc les override du contexte, mais je n'arrive pas à le faire fonctionenr.

Dans leur exemple, ils passent leur override à la fonction bpy.ops.screen.screen_full_area, qui d'après sa doc ne prend pas de paramètres particuliers.
Les override doivent donc vraisemblablement être acceptés comme paramètre optionnel par les opérateurs.

J'ai donc ajouté :
screen = bpy.context.window.screen
for area in screen.areas:
    print('-',area.type)
    if area.type == 'VIEW_3D':
        for region in area.regions:
            print('----',region.type)
            if region.type == 'WINDOW':
                override = {'window': bpy.context.window, 'screen': screen, 'area': area, 'region': region}
                break
bpy.ops.object.select_all(override,action='SELECT')


...et je progresse !
En effet, j'ai une nouvelle erreur, qui me vient cette fois-ci de l'override :
PyContext 'active_object' not found
PyContext 'scene' not found
PyContext 'edit_object' not found
PyContext 'active_object' not found
PyContext 'scene' not found
PyContext 'edit_object' not found
PyContext 'visible_bases' not found
PyContext 'scene' not found
PyContext 'visible_bases' not found
PyContext 'scene' not found
PyContext 'scene' not found

#####
RuntimeError: Operator bpy.ops.object.mode_set.poll() failed, context is incorrect


Du coup, il semblerait que Blender ne soit tout simplement par encore "initialisé" du point de vue de ses contextes, au moment du lancement du script.
Y-a-t-il un moyen de faire ça ?
Ou faut-il que je passe en plus 'scene', 'edit_object', 'active_object' et 'visible_bases' à mon override ?

Merci à vous !

Contribution le : 28/07/2015 10:36
_________________
« Affirmation sans argumentation est signe de confusion ! »
Le mot de la fin : « Meeeeeuuuuuhhhh ! »
Créer un fichier PDF de la contribution Imprimer


Re: Context switch during SVG import
OverdOzed
Inscrit:
29/03/2010 12:39
De là, à de là-bas
Post(s): 433
Salut.
Quand tu importes un .svg, il n'est pas sélectionné par defaut.
Blender ne peut donc pas le convertir.
Il te suffit donc de les sélectionner avant de les convertir.

Contribution le : 29/07/2015 18:23
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
Hors Sujet !! Quels secteurs exploite l'impression 3D ? 2 49 Aujourd'hui 11:27:36
Redstar 
Hors Sujet !! Le petit déjeuner à la Française - série de tutos - 2.9 2 32 Aujourd'hui 11:15:08
Bibi09 
Questions & Réponses Blender : le bon logiciel ?    [1][2] 14 2484 Aujourd'hui 10:35:32
Christoph 
Hors Sujet !! Un poisson clown low poly - 15 mm - Tutoriel - 2.9 2 65 Aujourd'hui 05:45:11
moonboots 
[WIP] et travaux terminés [terminé] Scène de Pti dej à la Française - EVEE a donf - 2.9 Blender    [1][2][3]...[5] 44 545 Hier 20:44:23
meltingman 
Questions & Réponses Peindre des voxels 3D: Est-ce possible? 0 22 Hier 17:23:30
Melodicpinpon 
Questions & Réponses Disparition de matériaux après système de particule 2 57 Hier 12:43:02
Zarathoustra 
Questions & Réponses Esalier avec ARRAY 4 41 Hier 11:04:28
francerf 
Questions & Réponses [résolu] Modificateur Curve sur une courbe multiple 3 59 Hier 09:29:38
oliviertij 
[WIP] et travaux terminés [WIP] Teeny Tiny - Story    [1][2][3]...[13] 125 10066 Hier 01:53:31
meltingman 
The Blender Clan 'tchat Pour les arboriculteurs 3D 2 134 26/10 21:47:01
iet 
Questions & Réponses Problème de collision dans un player FPS 1 61 26/10 14:56:23
Redstar 
Questions & Réponses [résolu] Placer sa camera sur un HDRI    [1][2] 11 372 26/10 14:38:31
Crocodile_13 
Questions & Réponses [WIP] Problème Rétopo    [1][2] 10 126 26/10 09:53:59
Laorz 
Questions & Réponses Prioriser la visibilité d'un objet ? 2 68 25/10 17:31:26
Rimpotche 
[WIP] et travaux terminés image couteau dans caillou qui saigne 2 70 25/10 07:03:37
Crocodile_13 
[WIP] et travaux terminés [terminé] Chaussures Très Réalistes (.bend disponible) 5 169 24/10 21:23:47
Crocodile_13 
Le coin des geeks gain de fluidité viewport entre ryzen 3900X et 3950X    [1][2][3] 28 1438 24/10 15:45:54
papillon 
Questions & Réponses hdri en mode ombrage 2 145 24/10 10:27:06
kimlicrea 
Questions & Réponses Modifier les attribue de plusieurs objet en même temps (lumière) 3 90 24/10 10:21:47
kimlicrea 

Qui est en ligne
166 utilisateur(s) en ligne (dont 87 sur Forums)

Membre(s): 0
Invité(s): 166


plus...
Nouveaux membres
LouellaBlo 28/10/2020
VINCHZ 27/10/2020
yawdpwal 26/10/2020
stano123 26/10/2020
Electricskull885 26/10/2020

Sina
25/10/2020
Christoph 24/10/2020
Sylv07 23/10/2020
Maxence34 23/10/2020
Talason 23/10/2020
Dernier Ajout
mirages-preview~0.jpg

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