Example #1
0
    def symmetrize(self):
        """Inverse the transform of each element of the guide."""

        if self.values["comp_side"] not in ["R", "L"]:
            mgear.log("Can't symmetrize central component", mgear.sev_error)
            return False
        for name, paramDef in self.paramDefs.items():
            if paramDef.valueType == "string":
                self.setParamDefValue(name,
                                      string.convertRLName(self.values[name]))
        for name, t in self.tra.items():
            self.tra[name] = transform.getSymmetricalTransform(t)
        for name, blade in self.blades.items():
            self.blades[name] = vector.Blade(
                transform.getSymmetricalTransform(blade.transform))

        return True
Example #2
0
def duplicateSym(*args):
    """Duplicate one dag hierarchy to/from X/-X renaming "L" to "R" """

    oSelection = pm.selected()
    if oSelection:
        oSel = oSelection[0]
        oTarget = pm.duplicate()[0]

        t = oSel.getTransformation()
        t = transform.getSymmetricalTransform(t)
        oTarget.setTransformation(t)

        # Quick rename
        pm.select(oTarget, hi=True)

        for x in pm.selected():
            x.rename(string.convertRLName(x.name().split("|")[-1]))
        oTarget.rename(string.convertRLName(oSel.name()))
    else:
        pm.displayWarning("Select something before duplicate symmetry.")
Example #3
0
def mirrorEmbedNodes(node, target=None, search="left", replace="right"):
    """mirror node position to target. Specifically for embed nodes

    Args:
        node (str): embed nodes
        target (str, optional): if none provided, it will be lft vs right
        search (str, optional): token to search for and replace
        replace (str, optional): replace token with
    """
    node = pm.PyNode(node)
    if target:
        target_node = pm.PyNode(target)
    else:
        target_node = node.name().replace(search, replace)
        try:
            target_node = pm.PyNode(target_node)
        except Exception as e:
            print(e)
            return
    src_mat = node.getTransformation()
    target_mat = transform.getSymmetricalTransform(src_mat)
    target_mat.rotateTo([0, 0, 0])
    target_node.setTransformation(target_mat)
Example #4
0
def duplicate_sym(ui, dup_guides=None, skip_all=False, re_sym_all=False):
    name = ui.xgen_description_lineEdit.text()
    description = xgen_handler.get_description(name)
    if not description:
        return
    crv_guides = xgen_handler.get_connected_curve_guides(description)
    new_guides = []
    if not dup_guides:
        dup_guides = pm.selected()
    for crv in dup_guides:
        if crv in crv_guides:
            if not crv.hasAttr("sym_guide"):
                crv.addAttr("sym_guide", at='message', multi=False)
            else:
                sym_cnx = crv.sym_guide.listConnections()
                if sym_cnx:
                    if skip_all:
                        continue
                    if re_sym_all:
                        pm.displayInfo(
                            "Re symmetry guide {}".format(crv.name()))
                        pm.delete(sym_cnx)
                    else:
                        dup_option = show_dup_sym_options(crv.name())
                        if dup_option == 1:  # skip all
                            skip_all = True
                            continue
                        elif dup_option == 2:  # re sym
                            pm.displayInfo(
                                "Re symmetry guide {}".format(crv.name()))
                            pm.delete(sym_cnx)
                        elif dup_option == 3:  # re sym all
                            re_sym_all = True
                            pm.displayInfo(
                                "Re symmetry guide {}".format(crv.name()))
                            pm.delete(sym_cnx)
                        elif dup_option == 4:  # cancel
                            break
                        else:  # skip. Also if close the menu will skip
                            continue

            # duplicate
            new_crv = pm.duplicate(crv)[0]
            # transform
            t = crv.getTransformation()
            t = transform.getSymmetricalTransform(t)
            new_crv.setTransformation(t)
            # create message connection
            pm.connectAttr(new_crv.sym_guide, crv.sym_guide, f=True)
            pm.connectAttr(crv.sym_guide, new_crv.sym_guide, f=True)
            # config new crv.
            curve.set_thickness(new_crv, ui.thickness_spinBox.value())
            curve.lock_first_point(new_crv)
            # connect
            xgen_handler.connect_curve_to_xgen_guide(new_crv, description)
            new_guides.append(new_crv)
        else:
            pm.displayWarning(
                "Object {0} is not crv guide for {1} and can't be"
                " duplicated".format(crv.name(), name))
    if new_guides:
        pm.select(new_guides)
    return new_guides