Bonjour à tous,
Voici mon problème.
J'essaie de faire fonctionner un script qui me semble "assez correct", du moins, correspondant à ce que je souhaite faire, mais il ne fonctionne pas.
En effet, je souhaite diminuer la taille de fichiers ".wrl" (pièces 3D) en automatisant cela sur plus de 3000 fichiers.
Les étapes je sais les faire de façon manuelle, j'obtiens bien un fichier moins lourd, mais je souhaite automatiser cette tâche en l'automatisant grâce à un script pour 3000 pièces.
En effet, chacune de ces pièces se composent de plusieurs élements.
Les étapes manuelles sont les suivantes :
- Conversion en un seul object ("Object Mode" sous Blinder).
- JOIN
- Je rechange de mode, "Edit Mode"
- Je sélectionne "Remove Doubles"
- Et je sauvegarde ma pièce. Je gagne environ 25-30% de la taille.
Mon Script est le suivant :
J'ai mis en commentaire la ligne sur laquelle j'ai une erreur.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37 import bpy from mathutils import Vector, Matrix, Quaternion, Euler, Color from os import * input_dir = "C:\\Users\\fdu\\Documents\\MesDocumentsPersos\\Programmation\\Python\\vrml-De-Base\\" output_dir = "C:\\Users\\fdu\\Documents\\MesDocumentsPersos\\Programmation\\Python\\vrml-Allege\\" for wrl_file in listdir(input_dir): if wrl_file.endswith(".wrl"): object_all = bpy.context.scene.objects for ob in object_all: ob.select = True bpy.ops.object.delete(use_global=False) # Permet de supprimer les caméras (servent à rien) filepath = path.join(input_dir, wrl_file) bpy.ops.import_scene.x3d(filepath=filepath, filter_glob="*.wrl") object_all = bpy.context.scene.objects for ob in object_all: ob.select = ob.name.startswith("Viewpoint") # Viewpoint : CAMERAS bpy.ops.object.delete(use_global=False) object_all = bpy.context.scene.objects for ob in object_all: ob.select = ob.name.startswith("Shape_IndexedFaceSet") # Shape_IndexedFaceSet -> Chaque pièce composant le wrl if bpy.context.object.mode == "EDIT": # PB sur cette ligne à l'exécution bpy.ops.object.editmode_toggle() bpy.ops.object.join() if bpy.context.object.mode == "OBJECT": bpy.ops.object.editmode_toggle() bpy.ops.mesh.remove_doubles(use_unselected=False, threshold=9.999999747378752e-05) filepath = os.path.join(output_dir, wrl_file) bpy.ops.export_scene.vrml2(filepath=filepath)
Est-ce que quelqu'un peut m'aider car il faut dire que je débute totalement sur ce logiciel ainsi qu'en Python.
Merci d'avance
Partager