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): 4082
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 !! Acquérir un TOEIC, TOEFL, IELTS, certificat sans examens (etsglobalscores@gmail.com) 0 351 02/12 02:25:48
Jules55 
Questions & Réponses bonjour 2 194 28/11 20:12:18
Melodicpinpon 
Questions & Réponses vertex weights 1 737 28/11 20:08:02
Melodicpinpon 
Questions & Réponses [non résolu] Rendu vide pour une simple animation 1 543 28/11 20:03:29
Melodicpinpon 
Questions & Réponses Export png de mauvaise qualité 1 683 28/11 20:01:49
Melodicpinpon 
Questions & Réponses Objets non visibles 1 88 28/11 20:00:01
Melodicpinpon 
Questions & Réponses Déplacer une vertex ou une edge parallèlement à une autre edge 1 91 28/11 19:56:56
Melodicpinpon 
Hors Sujet !! bande-annonce des petits poissons dans l'aquarium 0 74 19/11 17:40:16
xorturion 
Questions & Réponses Comment percer une forme courbe 1 689 17/11 17:16:05
sam90 
Questions & Réponses Remplissage objet 3 932 17/11 17:04:38
sam90 
Questions & Réponses Mirroring light 0 357 02/11 07:51:49
Melodicpinpon 
Questions & Réponses Animation cycle de marche Fall Guys - Rigify 2 1225 03/10 08:42:06
Ediuire 
Hors Sujet !! Tuto Tips - Faire des coutures dans Blender - fabriquer un pouf 1 1476 27/09 14:34:24
perrin34 
Hors Sujet !! Alors elle est PUNK cette bande-annonce de palette CMJN 0 1073 24/09 15:33:07
xorturion 
Questions & Réponses Effets sabre laser image par image 2 735 23/09 07:27:45
muthesaint 
Questions & Réponses [non résolu] comment engendrer un mouvement selon un autre dans un simple système 1 673 18/09 17:10:37
doraynico 
Questions & Réponses [non résolu] Comment fusionner deux fichiers .blend ? 2 746 18/09 16:53:07
doraynico 
Questions & Réponses Comment mettre un délai sur une animation contenue dans une instance de collection? 0 8321 18/09 16:31:16
doraynico 
[WIP] et travaux terminés [WIP] Super Blenderello.    [1][2][3]...[7] 60 38128 05/09 14:50:01
albron 
Questions & Réponses bagapie 0 744 31/08 16:12:59
zilou 

Qui est en ligne
99 utilisateur(s) en ligne (dont 61 sur Forums)

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


plus...
Nouveaux membres
MaggieP01 4/12/2023
HallieStin 4/12/2023
JarrodRoes 4/12/2023
JosephS253 4/12/2023
KashaBella 4/12/2023
LucaPrell 4/12/2023
DarnellDid 4/12/2023
AstridSwea 4/12/2023
MillaShave 4/12/2023
MichaelaLy 4/12/2023
Dernier Ajout
2020-09-24.jpg

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