Untitled

 avatar
unknown
plain_text
a year ago
1.7 kB
4
Indexable
import maya.cmds as cmds

def get_curve_cvs(curve):
    """Returns a sorted list of the CV positions of the given curve."""
    cvs = cmds.ls(curve + '.cv[*]', fl=True)
    points = [tuple(cmds.pointPosition(cv)) for cv in cvs]  # Convert to tuple for immutability
    return sorted(points)

def find_duplicate_curves_in_selection():
    """Finds and selects duplicate NURBS curves in the current selection."""
    selected_transforms = cmds.ls(selection=True, type='transform')
    selected_curves = cmds.listRelatives(selected_transforms, shapes=True, type='nurbsCurve')
    
    if not selected_curves:
        cmds.warning("No NURBS curves selected.")
        return

    curve_cvs_dict = {}
    duplicate_curves = set()
    duplicate_info = []

    for curve in selected_curves:
        try:
            cvs = get_curve_cvs(curve)
        except Exception as e:
            print("Error processing curve {}: {}".format(curve, str(e)))
            continue
        cvs_tuple = tuple(cvs)  # Ensure cvs is a tuple of tuples
        if cvs_tuple in curve_cvs_dict:
            duplicate_curves.add(curve)
            duplicate_info.append((curve_cvs_dict[cvs_tuple], curve))
        else:
            curve_cvs_dict[cvs_tuple] = curve

    if duplicate_curves:
        cmds.select(list(duplicate_curves), add=True)
        cmds.warning("Duplicate curves found and selected: {}".format(len(duplicate_curves)))
        print("Duplicate pairs:")
        for original, duplicate in duplicate_info:
            print("Original: {}, Duplicate: {}".format(original, duplicate))
    else:
        cmds.warning("No duplicate curves found in the selection.")

find_duplicate_curves_in_selection()
Editor is loading...
Leave a Comment