Resultados 1 al 2 de 2

Duplicar vértices mediante scripts

  1. #1
    Fecha de ingreso
    May 2010
    Mensajes
    31

    Blender Como puedo duplicar vértices mediante scripts?

    ¿Cómo puedo hacer en un script lo mismo que haría al pulsar shitch+d(al duplicar vértices)? No he encontrado ninguna función en el Api.

  2. #2
    Fecha de ingreso
    Dec 2025
    Mensajes
    0
    Para duplicar vértices en Blender usando Python, debes operar en el modo de edición y utilizar el operador bmesh. La función específica del API que necesitas es bmesh.ops.duplicate. No hay un operador directo que imite exactamente Shift+D en la interfaz para vértices seleccionados, ya que ese atajo está pensado para duplicar geometría en general. La clave es duplicar los vértices y luego separarlos en un nuevo elemento.

    Aquí tienes un ejemplo de script que funciona en Blender actual (versiones 3.x y 4.x). Asegúrate de estar en modo de edición y tener vértices seleccionados antes de ejecutarlo.

    Primero, necesitas obtener el contexto de malla activa y crear un objeto bmesh a partir de él. Importa los módulos necesarios.

    import bpy
    import bmesh

    Obtén el objeto activo y entra en modo de edición si no lo está ya. Luego, crea un objeto bmesh desde la malla del objeto.

    obj = bpy.context.active_object
    mesh = obj.data
    bm = bmesh.from_edit_mesh(mesh)

    Ahora, define los vértices que tienes seleccionados. La operación de duplicado en bmesh requiere que le pases la geometría que quieres duplicar.

    verts_selected = [v for v in bm.verts if v.select]
    geom_original = verts_selected[:]
    geom_original.extend([e for e in bm.edges if e.select])
    geom_original.extend([f for f in bm.faces if f.select])

    Realiza la operación de duplicado usando bmesh.ops.duplicate. Esta función devuelve un diccionario con la nueva geometría duplicada.

    ret = bmesh.ops.duplicate(bm, geom=geom_original)
    geom_duplicated = ret["geom"]

    Separa la geometría duplicada del resto. Para esto, usas bmesh.ops.split. Esto crea nuevos elementos separados, similar a lo que hace el duplicado estándar.

    new_verts = [v for v in geom_duplicated if isinstance(v, bmesh.types.BMVert)]
    new_edges = [e for e in geom_duplicated if isinstance(e, bmesh.types.BMEdge)]
    new_faces = [f for f in geom_duplicated if isinstance(f, bmesh.types.BMFace)]
    new_geom = new_verts + new_edges + new_faces

    bmesh.ops.split(bm, geom=new_geom, use_only_faces=False)

    Finalmente, actualiza la malla en modo de edición para ver los cambios y libera el objeto bmesh.

    bmesh.update_edit_mesh(mesh)
    bm.free()

    El script completo hace lo siguiente: toma los vértices, aristas y caras seleccionados, los duplica y luego los separa en elementos independientes. Los vértices duplicados quedarán seleccionados y en la misma ubicación que los originales, listos para ser movidos.

    Recuerda que para ejecutar scripts en el modo de edición, a menudo es mejor usar el espacio de scripting de Blender o un panel de herramientas. Si integras esto en un complemento, considera el contexto de ejecución cuidadosamente. Esta es la forma estándar y actual de lograr la funcionalidad de duplicado mediante el API de Blender.

Temas similares

  1. Hardware Duplicar render
    Por lvaldivia en el foro Hardware
    Respuestas: 5
    : 20-08-2018, 14:45
  2. Duplicar material
    Por Ferrera en el foro Modelado
    Respuestas: 6
    : 22-04-2014, 13:01
  3. Respuestas: 12
    : 08-10-2010, 02:35
  4. Respuestas: 1
    : 16-08-2007, 08:42
  5. Respuestas: 8
    : 30-06-2005, 12:03

Etiquetas para este tema