返回列表
mayaAPI

QRB

class TestWindow(MayaQWidgetBaseMixin, QDialog):
def __init__(self, parent=None):
super().__init__(parent)
self.setWindowTitle("ID显示工具")
self.setFixedSize(320, 130)

定义一个类,设定宽高

QRadioButton单选,缩写QRB
QCheckBox复选,缩写QCB
main_layout = QVBoxLayout(self)
tip = QLabel("选择模型 → 勾选显示项 → 点击应用")
main_layout.addWidget(tip)

定义了一个主虚拟盒子

# 单选框(圆点样式)
row_radio = QHBoxLayout()
self.radio_cube = QRadioButton("方体")
self.radio_sphere = QRadioButton("球体")
self.radio_clear = QRadioButton("清除")
row_radio.addWidget(self.radio_cube)
row_radio.addWidget(self.radio_sphere)
row_radio.addWidget(self.radio_clear)
main_layout.addLayout(row_radio)
 定义了一个横排的虚拟盒子,又定义了三个QRB单选框
self.radio_cube.clicked.connect(self.create_cube)
self.radio_sphere.clicked.connect(self.create_sphere)
self.radio_clear.clicked.connect(self.clear_poly)

 通过click发送信号,触发函数

    def create_cube(self):
        cmds.select(clear=True)
      cmds.polyCube()

清除选择,创建cube几何体

   def clear_poly(self):
        # 1. 获取所有变换节点
        all_transforms = cmds.ls(transforms=True, long=True)
        # 2. 定义白名单
        notDelList = ["persp", "top", "front", "side"]
        # 3. 筛选删除列表
        delList = []
        for i in all_transforms:
            name = i.split("|")[-1]
            if name not in notDelList:
                delList.append(i)
        # 4. 删除并清空选择
        if delList:
            cmds.delete(delList)
      cmds.select(clear=True)

获取所有的变换节点,定义白名单并加入几个视角的摄像机,筛选删除列表再删除并且清空选择的

       # 复选框(打勾样式)
        row_check = QHBoxLayout()
        self.VID = QCheckBox("顶点ID")
        self.EID = QCheckBox("边ID")
        self.FID = QCheckBox("面ID")
        row_check.addWidget(self.VID)
        row_check.addWidget(self.EID)
        row_check.addWidget(self.FID)
      main_layout.addLayout(row_check)

 定义复选框并命名,将三个ID放入row这个虚拟盒子里面,再把第三层的虚拟盒子放入主虚拟盒子里面

  def refresh_ids(self):
        """点击按钮才生效,不再实时刷新"""
        sel = cmds.ls(selection=True, long=True)
        if not sel:
            cmds.warning("请先选择模型!")
          return

点击按钮的时候没有获取到这个列表,就打印warning报警告

# 布局
main_layout = QVBoxLayout(self)

# 局部坐标轴 复选框
self.local_axis = QCheckBox("局部坐标轴")
# 实时刷新绑定
self.local_axis.stateChanged.connect(self.refresh_axis)
main_layout.addWidget(self.local_axis)

布局了一个主盒子,写复选框,给了一个桥