Resultados 1 al 2 de 2

Script para seleccionar y borrar objetos duplicados

  1. #1
    Fecha de ingreso
    Feb 2008
    Mensajes
    19

    Script para seleccionar y borrar objetos duplicados

    Hola a todos, soy muy nuevo trabajando con Maxscript y me cuesta mucho comprender el lenguaje, encontré este script por internet y me a ayudado mucho, pero quisiera saber cómo poder optimizarlo.

    La idea es eliminar objetos duplicados, por lo que hay que seleccionar y poner en marcha este script:
    -- 1, select your objects end run next line todo collect obj, position.

    Posarray = for i in selection collect i, pos.
    -2, remove dublicated items.

    Posarray = makeuniquearray posarray.
    -3, filter out just 1 obj per pos.

    Cleararray = #().

    For I = 1 todo posarray, count do (tfor obj in selection do (t if (*.obj), pues == posarray[i] do cleararray[i] = obj t)).
    -4, select them.

    Select cleararray.

    Al aplicarlo funciona de maravilla, queda seleccionada la geometría repetida y podemos presionar deleete, pero quisiera optimizar el script, ya que en caso de aplicarlo a mucha geometría, la cual se encuentra parte de ella duplicada y otra no, al borrar la selección, me borra parte de la geometría que no estaba duplicada, ojalá me puedan ayudar a complementar el script y poder agregar alguna función para seleccionar solo las partes duplicadas.

  2. #2
    Fecha de ingreso
    Dec 2025
    Mensajes
    0
    El script original tiene un problema fundamental: está comparando solo por posición, lo que puede eliminar objetos legítimos que comparten la misma coordenada. Para seleccionar solo duplicados reales, necesitas comparar más propiedades, como el nombre, la geometría o el transform completo.

    Aquí tienes un script optimizado y corregido. Este script compara los objetos por su transformación completa (posición, rotación y escala) y por su nombre base, lo que es más seguro. Primero, selecciona todos los objetos que consideras que pueden tener duplicados.

    Este script crea un diccionario. Para cada objeto, genera una clave única basada en su transformación y nombre. Si esa clave ya existe en el diccionario, significa que encontramos un duplicado. El objeto duplicado se añade a un array para su posterior selección.

    Ejecuta este script con los objetos que quieres verificar seleccionados. Seleccionará solo los duplicados, dejando intacto un ejemplar de cada objeto original.

    global dup_array = #()
    fn findDuplicateObjects sel = (
    local keyDict = #()
    local foundKeys = #{} -- Usamos un bitArray para claves únicas
    dup_array = #() -- Reiniciamos el array global

    for obj in sel do (
    -- Creamos una clave más robusta: nombre + transformación
    local objKey = (obj.name + "_" + obj.transform as string)
    -- Buscamos si la clave ya existe
    local keyIndex = findItem keyDict objKey

    if keyIndex == 0 then (
    -- Es la primera vez que vemos esta clave, la añadimos
    append keyDict objKey
    ) else (
    -- La clave ya existe, es un duplicado
    -- Aseguramos que el primer objeto no se marque, solo los siguientes
    if not foundKeys[keyIndex] then (
    foundKeys[keyIndex] = true -- Marcamos que el original existe
    )
    -- Añadimos este objeto (que es un duplicado) al array
    append dup_array obj
    )
    )
    select dup_array -- Selecciona solo los duplicados encontrados
    )
    -- Llama a la función con la selección actual
    findDuplicateObjects selection

    Ahora, para usarlo, simplemente selecciona todos los objetos de la escena o el grupo de objetos donde sospechas que hay duplicados. Luego ejecuta el script completo. El resultado será que solo los objetos duplicados (no los originales) quedarán seleccionados. Luego puedes borrarlos con la tecla Delete.

    Para mayor precisión, si quieres comparar la geometría en sí y no solo el transform, necesitarías un método más complejo que compare el mesh o el snapshot de los vértices. Pero para la mayoría de los casos de duplicados creados con Clone o Copy, comparar el transform y el nombre es suficiente.

    Si tu escena es muy grande y el rendimiento es un problema, considera ejecutar el script por capas o por selecciones manuales más pequeñas en lugar de seleccionar todos los objetos de golpe.

Temas similares

  1. 3ds Max Script universal para seleccionar objetos
    Por 3dpoder en el foro Plugins y Scripts
    Respuestas: 0
    : 13-07-2020, 11:14
  2. 3ds Max Problema al seleccionar y querer borrar objeto
    Por Heberhm en el foro 3DStudio Max
    Respuestas: 0
    : 20-06-2018, 20:50
  3. Texturizar diferente dos objetos duplicados con referencia alt
    Por Mackbay en el foro Materiales y Texturizado
    Respuestas: 3
    : 18-09-2011, 20:17
  4. AutoCAD Problema al seleccionar y borrar elementos en AutoCAD 2010
    Por ser_baigorria en el foro Programas de Diseño 3D y CAD
    Respuestas: 1
    : 24-01-2011, 23:23
  5. Problema con objetos duplicados
    Por yano en el foro Modelado
    Respuestas: 2
    : 29-12-2009, 15:40