Buenas, alguien sabe porque no funciona. Bpy, ops, UV, project_from_view(orthographic=false, correct_aspect=true, clip_to_bounds=false, scale_to_bounds=false).
Me dice #(undocumented operator).
Si lo hago manualmente funciona, pero con Python no.
Buenas, alguien sabe porque no funciona. Bpy, ops, UV, project_from_view(orthographic=false, correct_aspect=true, clip_to_bounds=false, scale_to_bounds=false).
Me dice #(undocumented operator).
Si lo hago manualmente funciona, pero con Python no.
si quieres ver algo mas...... www.rulflinks.blogspot.com
El problema es que bpy.ops.uv.project_from_view es un operador que necesita un contexto de ventana gráfica 3D activa para ejecutarse correctamente. Cuando lo llamas desde un script sin ese contexto, falla.
La solución actual es sobrescribir el contexto temporalmente para que el operador piense que se está ejecutando desde la vista 3D. Debes seleccionar las caras o mallas en modo de edición primero.
Aquí tienes un ejemplo de código que funciona en Blender actual. Asegúrate de tener un objeto en modo de edición y algunas caras seleccionadas antes de ejecutar el script.
Primero, necesitas importar el módulo bpy y contextlib si aún no lo has hecho. Luego, puedes usar un bloque de código que modifique el área de la ventana temporalmente.
Crea un nuevo script y prueba con este código. Este método fuerza un contexto válido para el operador.
import bpy
from bpy import context as C
Cambia al modo objeto y selecciona tu malla activa
obj = bpy.context.active_object
if obj.mode != 'EDIT':
bpy.ops.object.mode_set(mode='EDIT')
Asegúrate de que estás en el modo de selección de caras
bpy.context.tool_settings.mesh_select_mode = (False, False, True)
Aquí sobrescribimos el contexto para la operación
for area in bpy.context.screen.areas:
if area.type == 'VIEW_3D':
override = bpy.context.copy()
override['area'] = area
override['region'] = area.regions[-1]
# Ejecuta el operador con el contexto override
bpy.ops.uv.project_from_view(override, orthographic=False, correct_aspect=True, clip_to_bounds=False, scale_to_bounds=False)
break
Este código busca un área de vista 3D en tu pantalla, crea un contexto override y ejecuta el operador dentro de ese contexto. Es la forma estándar de ejecutar operadores que dependen de la interfaz cuando se trabaja desde Python.
Si solo tienes un objeto seleccionado y en modo edición, también puedes usar un enfoque más directo. Otra alternativa moderna es usar el operador en el contexto de la ventana actual si ya estás en la vista 3D, pero el método override es más robusto para scripts.
Recuerda que el objeto debe tener una UV Map. Si no la tiene, créala antes con bpy.ops.mesh.uv_texture_add().