maya的重命名物体和材质工具(带ai过程)

news2024/11/15 17:03:03

对材质同样也有效

被AI干失业的卖衣服的小姐姐,开的士的小哥哥都可以再就业的易上手教程,

先看效果!

对物体命名也是,相当的美观

先提出需求我想在maya中批量重命名物体怎么办?AI给你弄个短代码 ,放进AI进化一下。。

import maya.cmds as cmds
allMat = cmds.ls(mat=True)
for mat in allMat:
    cmds.rename("Name")

长代码,再次进化。。

import maya.cmds as cmds

class MayaRenameDialog:
    def __init__(self):
        self.char_input = ""
        self.num_input = 0

        
    def create_layout(self):
        self.window = cmds.window(title="Maya 重命名工具")
        layout = cmds.columnLayout()
        cmds.text(label="阿拉丁的重命名工具", align='center')
        cmds.text(label="前缀")
        self.prefix_field = cmds.textField()
        cmds.text(label="位数")
        self.digit_field = cmds.intField(value=4)
        cmds.button(label="重命名物体", command=self.rename_objects)
        cmds.button(label="重命名材质", command=self.rename_materials)
        return True

    def rename_objects(self, *args):
        self.char_input = cmds.textField(self.prefix_field, query=True, text=True)
        self.num_input = cmds.intField(self.digit_field, query=True, value=True)
        selection = cmds.ls(selection=True)
        i = 1
        for obj in selection:
            new_name = self.char_input+str(i).zfill(self.num_input)
            cmds.rename(obj, new_name)
            i += 1

    def rename_materials(self, *args):
        self.char_input = cmds.textField(self.prefix_field, query=True, text=True)
        self.num_input = cmds.intField(self.digit_field, query=True, value=True)
        materials = cmds.ls(mat=True)
        i = 1
        for mat in materials:
            new_name = self.char_input + str(i).zfill(self.num_input)
            cmds.rename(new_name)
            i += 1

if __name__ == '__main__':
    dialog = MayaRenameDialog()
    dialog.create_layout()
    cmds.showWindow(dialog.window)

这代码不是太完美,继续问豆包AI。:

我发现它命名都是从3开始,而材质编辑器里有三个默认的材质球,这个我不想影响它们。

回答一

如果你不想影响 Maya 材质编辑器中的三个默认材质球,可以在重命名材质的代码中添加一个条件判断,排除这三个默认材质球。在这个版本中,定义了一个default_materials列表,列出了三个默认材质球的名称。在重命名循环中,检查当前材质球是否在这个列表中,如果不在才进行重命名操作。这样就可以避免影响默认材质球。

以下是修改后的代码:

import maya.cmds as cmds
import time

class MayaRenameDialog:
    def __init__(self):
        self.char_input = ""
        self.num_input = 0

    def create_layout(self):
        self.window = cmds.window(title="Maya 重命名工具")
        layout = cmds.columnLayout()
        cmds.text(label="阿拉丁的重命名工具", align='center')
        cmds.text(label="前缀")
        self.prefix_field = cmds.textField()
        cmds.text(label="位数")
        self.digit_field = cmds.intField(value=4)
        cmds.button(label="重命名物体", command=self.rename_objects)
        cmds.button(label="重命名材质", command=self.rename_materials)
        return True

    def rename_objects(self, *args):
        self.char_input = cmds.textField(self.prefix_field, query=True, text=True)
        self.num_input = cmds.intField(self.digit_field, query=True, value=True)
        selection = cmds.ls(selection=True)
        i = 1
        for obj in selection:
            new_name = self.char_input+str(i).zfill(self.num_input)
            cmds.rename(obj, new_name)
            i += 1

    def rename_materials(self, *args):
        self.char_input = cmds.textField(self.prefix_field, query=True, text=True)
        self.num_input = cmds.intField(self.digit_field, query=True, value=True)
        materials = cmds.ls(mat=True)
        default_materials = ['lambert1', 'particleCloud1', 'shaderGlow1']  # 这里列出默认的三个材质球名称
        i = 1
        for mat in materials:
            if mat not in default_materials:
                print("Before rename: {mat}")
                if cmds.lockNode(mat, query=True, lock=True):
                    cmds.lockNode(mat, lock=False)
                    print("解锁材质{mat}.")
                new_name = self.char_input + str(i).zfill(self.num_input)
                try:
                    cmds.rename(mat, new_name)
                    time.sleep(0.1)  # 添加短暂的延迟
                except RuntimeError as e:
                    if "Cannot rename a read only node." in str(e):
                        print("错误重命名{mat}. 它可能被锁定或者是只读状态.")
                i += 1

if __name__ == '__main__':
    dialog = MayaRenameDialog()
    dialog.create_layout()
    cmds.showWindow(dialog.window)

回答二

以下是对这个问题的分析和解决方案:

分析

Maya 材质编辑器中默认有三个材质球(lambert1、particleCloud1、shaderGlow1),你代码中的循环从第一个材质开始处理,所以会对默认材质球进行操作。如果不想影响这三个默认材质球,可以在循环中跳过它们。

解决方案

rename_materials方法的循环中添加条件判断来跳过这三个默认材质球的处理,以下是修改后的代码:

代码中,在rename_materials方法中,当材质球是默认的三个材质球时,使用continue语句跳过当前循环,直接进入下一个材质球的处理,从而避免对默认材质球的重命名操作。

import maya.cmds as cmds
import time


class MayaRenameDialog:
    def __init__(self):
        self.char_input = ""
        self.num_input = 0

    def create_layout(self):
        self.window = cmds.window(title="Maya 重命名工具")
        layout = cmds.columnLayout()
        cmds.text(label="阿拉丁的重命名工具", align='center')
        cmds.text(label="前缀")
        self.prefix_field = cmds.textField()
        cmds.text(label="位数")
        self.digit_field = cmds.intField(value=4)
        cmds.button(label="重命名物体", command=self.rename_objects)
        cmds.button(label="重命名材质", command=self.rename_materials)
        return True

    def rename_objects(self, *args):
        self.char_input = cmds.textField(self.prefix_field, query=True, text=True)
        self.num_input = cmds.intField(self.digit_field, query=True, value=True)
        selection = cmds.ls(selection=True)
        i = 1
        for obj in selection:
            new_name = self.char_input + str(i).zfill(self.num_input)
            cmds.rename(obj, new_name)
            i += 1

    def rename_materials(self, *args):
        self.char_input = cmds.textField(self.prefix_field, query=True, text=True)
        self.num_input = cmds.intField(self.digit_field, query=True, value=True)
        materials = cmds.ls(mat=True)
        i = 1
        for mat in materials:
            if mat in ["lambert1", "particleCloud1", "shaderGlow1"]:
                continue
            print("Before rename: {mat}")
            if cmds.lockNode(mat, query=True, lock=True):
                cmds.lockNode(mat, lock=False)
                print("解锁材质{mat}.")
            new_name = self.char_input + str(i).zfill(self.num_input)
            try:
                cmds.rename(mat, new_name)
                time.sleep(0.1)
            except RuntimeError as e:
                if "Cannot rename a read only node." in str(e):
                    print("错误重命名{mat}. 它可能被锁定或者是只读状态.")
            i += 1


if __name__ == '__main__':
    dialog = MayaRenameDialog()
    dialog.create_layout()
    cmds.showWindow(dialog.window)

然而,还是不太完美!然后我想在代码中加入一个查找替换功能,并且在UI里面也对应有查找文本输入框替换文本输入框和一个按钮叫查找替换,继续叫AI给我进化。。。

这就更牛逼了!

import maya.cmds as cmds
import time


class MayaRenameDialog:
    def __init__(self):
        self.char_input = ""
        self.num_input = 0
        self.find_text = ""
        self.replace_text = ""

    def create_layout(self):
        self.window = cmds.window(title="Maya 重命名工具")
        layout = cmds.columnLayout()
        cmds.text(label="阿拉丁的重命名工具", align='center')
        cmds.text(label="前缀")
        self.prefix_field = cmds.textField()
        cmds.text(label="位数")
        self.digit_field = cmds.intField(value=4)
        cmds.text(label="查找文本")
        self.find_field = cmds.textField()
        cmds.text(label="替换文本")
        self.replace_field = cmds.textField()
        cmds.button(label="查找替换", command=self.find_replace)
        cmds.button(label="重命名物体", command=self.rename_objects)
        cmds.button(label="重命名材质", command=self.rename_materials)
        return True

    def rename_objects(self, *args):
        self.char_input = cmds.textField(self.prefix_field, query=True, text=True)
        self.num_input = cmds.intField(self.digit_field, query=True, value=True)
        selection = cmds.ls(selection=True)
        i = 1
        for obj in selection:
            new_name = self.char_input + str(i).zfill(self.num_input)
            cmds.rename(obj, new_name)
            i += 1

    def rename_materials(self, *args):
        self.char_input = cmds.textField(self.prefix_field, query=True, text=True)
        self.num_input = cmds.intField(self.digit_field, query=True, value=True)
        materials = cmds.ls(mat=True)
        default_materials = ['lambert1', 'particleCloud1', 'shaderGlow1']
        i = 1
        for mat in materials:
            if mat not in default_materials:
                print("Before rename: {mat}")
                if cmds.lockNode(mat, query=True, lock=True):
                    cmds.lockNode(mat, lock=False)
                    print("解锁材质{mat}.")
                new_name = self.char_input + str(i).zfill(self.num_input)
                try:
                    cmds.rename(mat, new_name)
                    time.sleep(0.1)
                except RuntimeError as e:
                    if "Cannot rename a read only node." in str(e):
                        print("错误重命名{mat}. 它可能被锁定或者是只读状态.")
                i += 1

    def find_replace(self, *args):
        self.find_text = cmds.textField(self.find_field, query=True, text=True)
        self.replace_text = cmds.textField(self.replace_field, query=True, text=True)
        selection = cmds.ls(selection=True)
        for obj in selection:
            current_name = obj
            new_name = current_name.replace(self.find_text, self.replace_text)
            cmds.rename(obj, new_name)


if __name__ == '__main__':
    dialog = MayaRenameDialog()
    dialog.create_layout()
    cmds.showWindow(dialog.window)

剩下的就只排版一下界面美观一下即可了。哦哈哈!

我如何把窗口的尺寸和位置做个定义?xpos=100, ypos=100, defaultw=200, defaulth=200类似这样的

import maya.cmds as cmds
import time


class MayaRenameDialog:
    def __init__(self):
        self.char_input = ""
        self.num_input = 0
        self.find_text = ""
        self.replace_text = ""

    def create_layout(self):
        # 指定窗口位置和尺寸
        self.window = cmds.window(title="Maya 重命名工具", widthHeight=(400, 200), topLeftCorner=(100, 100))
        layout = cmds.columnLayout()
        cmds.text(label="阿拉丁的重命名工具", align='center')
        cmds.text(label="前缀")
        self.prefix_field = cmds.textField()
        cmds.text(label="位数")
        self.digit_field = cmds.intField(value=4)
        cmds.text(label="查找文本")
        self.find_field = cmds.textField()
        cmds.text(label="替换文本")
        self.replace_field = cmds.textField()
        cmds.button(label="查找替换", command=self.find_replace)
        cmds.button(label="重命名物体", command=self.rename_objects)
        cmds.button(label="重命名材质", command=self.rename_materials)
        return True

    def rename_objects(self, *args):
        self.char_input = cmds.textField(self.prefix_field, query=True, text=True)
        self.num_input = cmds.intField(self.digit_field, query=True, value=True)
        selection = cmds.ls(selection=True)
        i = 1
        for obj in selection:
            new_name = self.char_input + str(i).zfill(self.num_input)
            cmds.rename(obj, new_name)
            i += 1

    def rename_materials(self, *args):
        self.char_input = cmds.textField(self.prefix_field, query=True, text=True)
        self.num_input = cmds.intField(self.digit_field, query=True, value=True)
        materials = cmds.ls(mat=True)
        default_materials = ['lambert1', 'particleCloud1', 'shaderGlow1']
        i = 1
        for mat in materials:
            if mat not in default_materials:
                print("Before rename: {mat}")
                if cmds.lockNode(mat, query=True, lock=True):
                    cmds.lockNode(mat, lock=False)
                    print("解锁材质{mat}.")
                new_name = self.char_input + str(i).zfill(self.num_input)
                try:
                    cmds.rename(mat, new_name)
                    time.sleep(0.1)
                except RuntimeError as e:
                    if "Cannot rename a read only node." in str(e):
                        print("错误重命名{mat}. 它可能被锁定或者是只读状态.")
                i += 1

    def find_replace(self, *args):
        self.find_text = cmds.textField(self.find_field, query=True, text=True)
        self.replace_text = cmds.textField(self.replace_field, query=True, text=True)
        selection = cmds.ls(selection=True)
        for obj in selection:
            current_name = obj
            new_name = current_name.replace(self.find_text, self.replace_text)
            cmds.rename(obj, new_name)


if __name__ == '__main__':
    dialog = MayaRenameDialog()
    dialog.create_layout()
    cmds.showWindow(dialog.window)

或者跟c4d里的python一样看齐,

import maya.cmds as cmds
import time


class MayaRenameDialog:
    def __init__(self):
        self.char_input = ""
        self.num_input = 0
        self.find_text = ""
        self.replace_text = ""

    def create_layout(self, xpos, ypos, defaultw, defaulth):
        self.window = cmds.window(title="Maya 重命名工具", widthHeight=(defaultw, defaulth), topLeftCorner=(xpos, ypos))
        layout = cmds.columnLayout()
        cmds.text(label="阿拉丁的重命名工具", align='center')
        cmds.text(label="前缀")
        self.prefix_field = cmds.textField()
        cmds.text(label="位数")
        self.digit_field = cmds.intField(value=4)
        cmds.text(label="查找文本")
        self.find_field = cmds.textField()
        cmds.text(label="替换文本")
        self.replace_field = cmds.textField()
        cmds.button(label="查找替换", command=self.find_replace)
        cmds.button(label="重命名物体", command=self.rename_objects)
        cmds.button(label="重命名材质", command=self.rename_materials)
        return True

    def rename_objects(self, *args):
        self.char_input = cmds.textField(self.prefix_field, query=True, text=True)
        self.num_input = cmds.intField(self.digit_field, query=True, value=True)
        selection = cmds.ls(selection=True)
        i = 1
        for obj in selection:
            new_name = self.char_input + str(i).zfill(self.num_input)
            cmds.rename(obj, new_name)
            i += 1

    def rename_materials(self, *args):
        self.char_input = cmds.textField(self.prefix_field, query=True, text=True)
        self.num_input = cmds.intField(self.digit_field, query=True, value=True)
        materials = cmds.ls(mat=True)
        default_materials = ['lambert1', 'particleCloud1', 'shaderGlow1']
        i = 1
        for mat in materials:
            if mat not in default_materials:
                print("Before rename: {mat}")
                if cmds.lockNode(mat, query=True, lock=True):
                    cmds.lockNode(mat, lock=False)
                    print("解锁材质{mat}.")
                new_name = self.char_input + str(i).zfill(self.num_input)
                try:
                    cmds.rename(mat, new_name)
                    time.sleep(0.1)
                except RuntimeError as e:
                    if "Cannot rename a read only node." in str(e):
                        print("错误重命名{mat}. 它可能被锁定或者是只读状态.")
                i += 1

    def find_replace(self, *args):
        self.find_text = cmds.textField(self.find_field, query=True, text=True)
        self.replace_text = cmds.textField(self.replace_field, query=True, text=True)
        selection = cmds.ls(selection=True)
        for obj in selection:
            current_name = obj
            new_name = current_name.replace(self.find_text, self.replace_text)
            cmds.rename(obj, new_name)


if __name__ == '__main__':
    dialog = MayaRenameDialog()
    dialog.create_layout(xpos=100, ypos=100, defaultw=300, defaulth=200)
    cmds.showWindow(dialog.window)

越来越喜欢编代码了!来来来!继续问AI!现在在ui排布的界面里,查找文本和替换文本以及他们的输入框都是另起一行排布的我想让它们保持在同一行怎么做到? cmds.text(label="查找文本") self.find_field = cmds.textField() cmds.text(label="替换文本") self.replace_field = cmds.textField()

豆包AI:  在 Maya 的 cmds 中可以使用 rowLayout(行布局)来将多个 UI 元素放在同一行。以下是修改后的代码:

import maya.cmds as cmds
import time


class MayaRenameDialog:
    def __init__(self):
        self.char_input = ""
        self.num_input = 0
        self.find_text = ""
        self.replace_text = ""

    def create_layout(self, xpos=100, ypos=100, defaultw=200, defaulth=200):
        self.window = cmds.window(title="Maya 重命名工具", widthHeight=(defaultw, defaulth), topLeftCorner=(xpos, ypos))
        layout = cmds.columnLayout()
        cmds.text(label="阿拉丁的重命名工具", align='center')
        cmds.text(label="前缀")
        self.prefix_field = cmds.textField()
        cmds.text(label="位数")
        self.digit_field = cmds.intField(value=4)

        # 创建行布局用于放置查找和替换相关的元素
        find_replace_row = cmds.rowLayout(numberOfColumns=3)
        cmds.text(label="查找文本")
        self.find_field = cmds.textField()
        cmds.text(label="替换文本")
        self.replace_field = cmds.textField()
        cmds.setParent('..')  # 返回上一级布局

        cmds.button(label="查找替换", command=self.find_replace)
        cmds.button(label="重命名物体", command=self.rename_objects)
        cmds.button(label="重命名材质", command=self.rename_materials)
        return True

    def rename_objects(self, *args):
        self.char_input = cmds.textField(self.prefix_field, query=True, text=True)
        self.num_input = cmds.intField(self.digit_field, query=True, value=True)
        selection = cmds.ls(selection=True)
        i = 1
        for obj in selection:
            new_name = self.char_input + str(i).zfill(self.num_input)
            cmds.rename(obj, new_name)
            i += 1

    def rename_materials(self, *args):
        self.char_input = cmds.textField(self.prefix_field, query=True, text=True)
        self.num_input = cmds.intField(self.digit_field, query=True, value=True)
        materials = cmds.ls(mat=True)
        default_materials = ['lambert1', 'particleCloud1', 'shaderGlow1']
        i = 1
        for mat in materials:
            if mat not in default_materials:
                print("Before rename: {mat}")
                if cmds.lockNode(mat, query=True, lock=True):
                    cmds.lockNode(mat, lock=False)
                    print("解锁材质{mat}.")
                new_name = self.char_input + str(i).zfill(self.num_input)
                try:
                    cmds.rename(mat, new_name)
                    time.sleep(0.1)
                except RuntimeError as e:
                    if "Cannot rename a read only node." in str(e):
                        print("错误重命名{mat}. 它可能被锁定或者是只读状态.")
                i += 1

    def find_replace(self, *args):
        self.find_text = cmds.textField(self.find_field, query=True, text=True)
        self.replace_text = cmds.textField(self.replace_field, query=True, text=True)
        selection = cmds.ls(selection=True)
        for obj in selection:
            current_name = obj
            new_name = current_name.replace(self.find_text, self.replace_text)
            cmds.rename(obj, new_name)


if __name__ == '__main__':
    dialog = MayaRenameDialog()
    dialog.create_layout(xpos=100, ypos=100, defaultw=200, defaulth=200)
    cmds.showWindow(dialog.window)

运行一下,额。。错误 # Error: RuntimeError: file <maya console> line 26: Too many children in layout: rowLayout5 #

直接复制,再提问 豆包AI 。

你可以尝试以下方法来解决这个问题:

  1. 检查rowLayout中的子元素数量,确保没有添加过多的元素。如果可能的话,减少子元素的数量或者使用其他布局方式来组织这些元素。
  2. 确认每个子元素都被正确地添加到布局中,并且没有重复添加。
  3. 检查是否有其他布局嵌套在这个rowLayout中,可能导致子元素数量的混乱。

以下是修改后的代码,确保只在rowLayout中添加必要的元素:额,这里它傻逼了,陷入了死循环的修改状态,手动👀看一下。

最后整理完ui的代码如下:

import maya.cmds as cmds
import time
import re


class MayaRenameDialog:
    def __init__(self):
        self.char_input = ""
        self.num_input = 0
        self.find_text = ""
        self.replace_text = ""
        self.prefix_to_add = ""
        self.suffix_to_add = ""
        self.index_to_add = 0
        self.orderNUM = None
        self.num_input = None
        
    def create_layout(self, xpos=100, ypos=100, defaultw=350, defaulth=100):
        self.window = cmds.window(title="Maya 重命名工具", widthHeight=(defaultw, defaulth), topLeftCorner=(xpos, ypos))
        layout = cmds.columnLayout()
        cmds.text(label="阿拉丁的重命名工具", align='center')

        # 创建行布局用于放置“重命名按钮”相关的元素
        rename_row = cmds.rowLayout(numberOfColumns=4)
        cmds.text(label="重命名", parent=rename_row)
        self.prefix_field = cmds.textField(parent=rename_row)
        cmds.text(label="位数", parent=rename_row)
        self.digit_field = cmds.intField(value=4, parent=rename_row)
        cmds.setParent('..')  # 返回上一级布局

        # 创建行布局用于放置“重命名物体和材质按钮”相关的元素
        renameObjMatBT_row = cmds.rowLayout(numberOfColumns=2)
        cmds.button(label="重命名物体", command=self.rename_objects, parent=renameObjMatBT_row)
        cmds.button(label="重命名材质", command=self.rename_materials, parent=renameObjMatBT_row)
        cmds.setParent('..')  # 返回上一级布局

        # 创建行布局用于放置“查找和替换”相关的元素
        find_replace_row = cmds.rowLayout(numberOfColumns=5)
        cmds.text(label="查找文本", parent=find_replace_row)
        self.find_field = cmds.textField(parent=find_replace_row)
        cmds.text(label="替换文本", parent=find_replace_row)
        self.replace_field = cmds.textField(parent=find_replace_row)
        cmds.button(label="查找替换", command=self.find_replace, parent=find_replace_row)
        cmds.setParent('..')  # 返回上一级布局

        # 创建行布局用于增加前缀的元素
        add_prefix_row = cmds.rowLayout(numberOfColumns=3)
        cmds.text(label="增加前缀", parent=add_prefix_row)
        self.prefix_to_add_field = cmds.textField(parent=add_prefix_row)
        cmds.button(label="应用前缀", command=self.add_prefix, parent=add_prefix_row)
        cmds.setParent('..')  # 返回上一级布局

        # 创建行布局用于增加后缀的元素
        add_suffix_row = cmds.rowLayout(numberOfColumns=3)
        cmds.text(label="增加后缀", parent=add_suffix_row)
        self.suffix_to_add_field = cmds.textField(parent=add_suffix_row)
        cmds.button(label="应用后缀", command=self.add_suffix, parent=add_suffix_row)
        cmds.setParent('..')  # 返回上一级布局
        
        # 创建行布局用于增加序号的元素
        add_index_row = cmds.rowLayout(numberOfColumns=4)
        cmds.text(label="增加序号", parent=add_index_row)
        self.orderNUM = cmds.intField(parent=add_index_row)
        cmds.button(label="应用序号", command=self.add_index, parent=add_index_row)
        cmds.button(label="删除序号", command=self.delete_index, parent=add_index_row)
        cmds.setParent('..')  # 返回上一级布局

        return True

    def rename_objects(self, *args):
        self.char_input = cmds.textField(self.prefix_field, query=True, text=True)
        self.num_input = cmds.intField(self.digit_field, query=True, value=True)
        selection = cmds.ls(selection=True)
        i = 1
        for obj in selection:
            new_name = self.char_input +'_'+ str(i).zfill(self.num_input)
            cmds.rename(obj, new_name)
            i += 1

    def rename_materials(self, *args):
        self.char_input = cmds.textField(self.prefix_field, query=True, text=True)
        self.num_input = cmds.intField(self.digit_field, query=True, value=True)
        materials = cmds.ls(mat=True)
        default_materials = ['lambert1', 'particleCloud1', 'shaderGlow1']
        i = 1
        for mat in materials:
            if mat not in default_materials:
                print("Before rename: {mat}")
                if cmds.lockNode(mat, query=True, lock=True):
                    cmds.lockNode(mat, lock=False)
                    print("解锁材质{mat}.")
                new_name = self.char_input + str(i).zfill(self.num_input)
                try:
                    cmds.rename(mat, new_name)
                    time.sleep(0.1)
                except RuntimeError as e:
                    if "Cannot rename a read only node." in str(e):
                        print("错误重命名{mat}. 它可能被锁定或者是只读状态.")
                i += 1

    def find_replace(self, *args):
        self.find_text = cmds.textField(self.find_field, query=True, text=True)
        self.replace_text = cmds.textField(self.replace_field, query=True, text=True)
        selection = cmds.ls(selection=True)
        for obj in selection:
            current_name = obj
            new_name = current_name.replace(self.find_text, self.replace_text)
            cmds.rename(obj, new_name)

    def add_prefix(self, *args):
        self.prefix_to_add = cmds.textField(self.prefix_to_add_field, query=True, text=True)
        selection = cmds.ls(selection=True)
        for obj in selection:
            current_name = obj
            new_name = self.prefix_to_add + '_'+ current_name
            cmds.rename(obj, new_name)

    def add_suffix(self, *args):
        self.suffix_to_add = cmds.textField(self.suffix_to_add_field, query=True, text=True)
        selection = cmds.ls(selection=True)
        for obj in selection:
            current_name = obj
            last_underscore_index = current_name.rfind('_')
            if last_underscore_index!= -1:
                new_name = current_name[:last_underscore_index] + '_' + self.suffix_to_add + current_name[last_underscore_index:]
            else:
                new_name = current_name + '_' + self.suffix_to_add
            cmds.rename(obj, new_name)
            
    def add_index(self, *args):
        self.num_input = cmds.intField(self.orderNUM, query=True, value=True)
        selection = cmds.ls(selection=True)
        i = 1
        for obj in selection:
            current_name = obj
            new_name = current_name + '_' + str(i).zfill(self.num_input)
            cmds.rename(obj, new_name)
            i += 1
            
    def delete_index(self, *args):
        selection = cmds.ls(selection=True)
        for obj in selection:
            current_name = obj
            last_underscore_index = current_name.rfind('_')
            if last_underscore_index!= -1:
                new_name = current_name[:last_underscore_index]
            else:
                new_name = current_name
            cmds.rename(obj, new_name)
            
if __name__ == '__main__':
    dialog = MayaRenameDialog()
    dialog.create_layout(xpos=100, ypos=100, defaultw=350, defaulth=160)
    cmds.showWindow(dialog.window)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2127010.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Trying to install openai in chaquopy in android studio but getting build failed

题意&#xff1a;“尝试在 Android Studio 的 Chaquopy 中安装 OpenAI&#xff0c;但构建失败。” 问题背景&#xff1a; Pretty much title, tried to import openai in android studio to use their api for my android app but everytime I run the app I get the same bui…

SQL注入+CTF实例

SQL注入的做题步骤 1.判断数字型还是字符型 数字型&#xff1a; select * from table where id$id; 字符型&#xff1a; select * from table where id$id; # 一般是单引号闭合&#xff0c;也有可能是双引号&#xff0c;又或者是)、")、))等等都有可能 可以用and 11和an…

康谋分享 | 汽车仿真与AI的结合应用

在自动驾驶领域&#xff0c;实现高质量的虚拟传感器输出是一项关键的挑战。所有的架构和实现都会涉及来自质量、性能和功能集成等方面的需求。aiSim也不例外&#xff0c;因此我们会更加关注于多个因素的协调&#xff0c;其中&#xff0c;aiSim传感器实现的神经网络渲染仿真方案…

[001-03-007].第07节:Redis中的管道

我的后端学习大纲 我的Redis学习大纲 1、Redis管道的由来&#xff1a; 1.Redis是一种基于客户端-服务端模型以及请求/响应协议的TCP服务。一个请求会遵循以下步骤&#xff1a; 客户端向服务端发送命令分四步(发送命令→命令排队→命令执行→返回结果)&#xff0c;并监听Socket…

C++类和对象 第二级初阶

目录 面向过程和面向对象 类 类是什么&#xff1f; 类的定义 1.声明和定义都放在类中 2.声明和定义分离 类的访问限定符 类的封装 类的作用域 类的实例化 类对象存储 结构体内存对齐规则 面向过程和面向对象 c语言是面向过程的 c是面向对象的 怎么理解&#xff1f…

外包干了三年,快要废了。。。

先说一下自己的情况&#xff0c;普通本科&#xff0c;在外包干了3年多的功能测试&#xff0c;这几年因为大环境不好&#xff0c;我整个人心惊胆战的&#xff0c;怕自己卷铺盖走人了&#xff0c;我感觉自己不能够在这样蹉跎下去了&#xff0c;长时间呆在一个舒适的环境真的会让一…

【智能终端】HBuilder X 与微信开发者工具集成与调试实战

目录 1. 需求和理解库、框架、平台 1.1 需求 1.2 理解 2.3 库、框架、平台 2.3.1 库&#xff08;Library&#xff09; 2.3.2 框架&#xff08;Framework&#xff09; 2.3.3 平台&#xff08;Platform&#xff09; 2.3.4 总结 2. 使用 HBuilder X 创建第一个 uni-app 应…

MATLAB绘图基础7:单变量图形绘制

参考书&#xff1a;《 M A T L A B {\rm MATLAB} MATLAB与学术图表绘制》(关东升)。 7.单变量图形绘制 7.1 直方图 直方图 ( H i s t o g r a m ) ({\rm Histogram}) (Histogram)&#xff1a;一种常用于可视化数据分布的图形类型&#xff0c;用于显示数据集中各数值范围的频率…

STM32G474RE之RTC

STM32G474RE之RTC使用HAL库实现RTC时间配置&#xff0c;以及报警配置&#xff0c;支持双路报警。 1、STM32G474RE的RTC晶振引脚&#xff1a; OSC32_IN为PC14&#xff0c;OSC32_OUT为PC15&#xff1b; 2、Vbat引脚 Vbat引脚是用来给外部晶振LSE和备份寄存器提供电源。当没有“…

9.11 QT ( Day 4)

一、作业 1.Widget.h #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QTimerEvent> //定时器类 #include <QTime> #include <QtTextToSpeech> //文本转语音类QT_BEGIN_NAMESPACE namespace Ui { class Widget; } QT_END_NAMESPACEcl…

Redis——通用命令

目录 Redis通用命令Redis中最核心的两个命令getset Redis全局命令keys语法注意事项 existsdel(delete)expirettlredis的key的过期策略是怎么实现的&#xff1f;**了解拓展** type总结 Redis通用命令 Redis的命令非常非常多&#xff0c;所以 1. 掌握常用命令&#xff08;多操作…

ardunio超声波测距实验

工作原理 模块有2个超声波换能器&#xff08;如图所示&#xff09;&#xff0c;一个发出声波&#xff0c;另一个接收物体反射回来的声波&#xff0c;这中间所经过的时间即声波传播的时间&#xff0c;再结合声速就能计算出&#xff1a; 距离 声速 * 时间 2 如何使用HC-SR04模块…

从OracleCloudWorld和财报看Oracle的转变

2024年9月9-12日Oracle Cloud World在美国拉斯维加斯盛大开幕 押注AI和云 Oracle 创始人Larry Ellison做了对Oracle战略和未来愿景的主旨演讲&#xff0c;在演讲中Larry将AI技术和云战略推到了前所未有的高度&#xff0c;从新的Oracle 23c改名到Oracle23ai&#xff0c;到Oracl…

unity3d入门教程一

unity3d入门教程一 2.1-开发环境2.2 新建项目3.1编辑器页面3.2场景3.3添加资源4.1场景视图4.2游戏对象4.3坐标系4.4游戏对象的操作4.5摄像机 2.1-开发环境 https://unity.com/ https://unity.cn/ 安装时若卡住&#xff0c;打开路径自动安装 C:\Users\zhaocai\AppData\Local\T…

信息安全国内外现状及技术要求示例(R155/R156)

国际政策、 法规的现状与趋势 鉴于对交通安全、社会安全甚至国家安全的重要影响&#xff0c;汽车网络安全、数据安全得到各相关国家和地区的高度重视&#xff0c;纷纷出台相关法规、标准。 信息安全法规 R155 法规适用范围覆盖了乘用车及商用车&#xff0c;适用于 M 类、N 类…

北斗盒子:海上安全的智能守护者——落水报警应用案例

海上环境多变&#xff0c;无论是航行还是作业活动&#xff0c;安全始终是最重要的考量。近年来&#xff0c;我国大力发展海上经济&#xff0c;海上作业的增加也带来了溺水事故的频发&#xff0c;给家庭和社会带来沉重的伤痛。据世界卫生组织统计&#xff0c;溺水是世界各地非故…

SQL(结构性查询语句)

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、SQL是什么&#xff1f;二、DDL三、DML四、DQL五、DCL总结 提示&#xff1a;以下是本篇文章正文内容&#xff0c;下面案例可供参考 一、SQL是什么&#xff…

【R语言】删除数据框中所有行中没有大于200的数值的行

在Perl中还需要循环按行读入文件&#xff0c;而在R中&#xff0c;一行代码解决问题&#xff1a; df <- df[apply(df, 1, function(x) any(x > 200)), ]这是一个使用apply函数对数据框df进行操作的表达式。apply函数用于对数据框、矩阵或数组进行元素级别的操作。 df&am…

虚拟机安装教程

做一期详细的虚拟机安装教程 VM16.12版本下载地址&#xff1a;联想乐云 VM16版本许可证&#xff1a;ZF3R0-FHED2-M80TY-8QYGC-NPKYF 第一步双击打开安装包&#xff1a; 选择安装位置&#xff0c;选择空间充足的磁盘&#xff0c;一般不建议直接装c 取消勾选 等待安装 输入许可…

sqli-labs靶场自动化利用工具——第6关

文章目录 概要整体架构流程技术细节执行效果小结 概要 Sqli-Labs靶场对于网安专业的学生或正在学习网安的朋友来说并不陌生&#xff0c;或者说已经很熟悉。那有没有朋友想过自己开发一个测试脚本能实现自动化化测试sqli-labs呢&#xff1f;可能有些人会说不是有sqlmap&#…