예제 #1
0
파일: guide.py 프로젝트: mgear-dev/mgear4
def duplicate_guide_ctx(ui):
    global SCALP
    global DESCRIPTION
    if cmds.draggerContext(_DUPLICATE_GUIDE_CTX, exists=True):
        cmds.deleteUI(_DUPLICATE_GUIDE_CTX)

    name = ui.xgen_description_lineEdit.text()
    if not name:
        pm.displayWarning("No Xgen IGS description selected")
        return

    if not pm.selected():
        pm.displayWarning("Nothing selected to duplicate")
        return

    DESCRIPTION = xgen_handler.get_description(name)
    SCALP = xgen_handler.get_scalp(DESCRIPTION)

    cmds.draggerContext(
        _DUPLICATE_GUIDE_CTX,
        pressCommand=partial(duplicate_guide_rig, ui),
        dragCommand=partial(drag_guide_rig, ui, _DUPLICATE_GUIDE_CTX),
        releaseCommand=release_guide_rig,
        name=_DUPLICATE_GUIDE_CTX,
        cursor='crossHair',
        undoMode='step')
    cmds.setToolTo(_DUPLICATE_GUIDE_CTX)
예제 #2
0
파일: guide.py 프로젝트: mgear-dev/mgear4
def duplicate(ui, dup_guide=None):
    name = ui.xgen_description_lineEdit.text()
    description = xgen_handler.get_description(name)
    if not description:
        return
    if not dup_guide:
        dup_guide = pm.selected()
    if dup_guide:
        dup_guide = dup_guide[0]
    else:
        pm.displayWarning("Nothing selected to duplicate")
        return

    if dup_guide in xgen_handler.get_connected_curve_guides(description):
        # duplicate
        new_crv = pm.duplicate(dup_guide)[0]

        # config new crv.
        curve.set_thickness(new_crv, ui.thickness_spinBox.value())
        curve.lock_first_point(new_crv)

        xgen_handler.connect_curve_to_xgen_guide(new_crv, description)

        return new_crv

    else:
        pm.displayWarning(
            "Object {0} is not crv guide for {1} and can't be"
            " duplicated".format(dup_guide.name(), name))
예제 #3
0
def move_guide_rig(ui, crv_guide=None, context=_MOVE_GUIDE_CTX):
    global SCALP
    global DESCRIPTION
    global CRV_GUIDE
    global CRV_GUIDES_LIST

    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)

    if not crv_guide:
        crv_guide = pm.selected()
    if crv_guide:
        crv_guide = crv_guide[0]
    if crv_guide not in crv_guides:
        return

    CRV_GUIDE = crv_guide

    # diconnect curve
    xgen_handler.disconnect_curve_from_xgen_guide(crv_guide)

    # list the curve guides after diconnecting the one that we are moving
    CRV_GUIDES_LIST = xgen_handler.get_connected_curve_guides(DESCRIPTION)

    mpx, mpy, _ = cmds.draggerContext(context, query=True, anchorPoint=True)

    pos = transform.get_raycast_translation_from_mouse_click(
        SCALP.name(), mpx, mpy)
    # if the raycast dont intersect with the scalp don't continue calculation
    if pos:
        refresh_guide_rig_from_ui(pos, ui)
예제 #4
0
파일: guide.py 프로젝트: mgear-dev/mgear4
def lock_length(ui):
    name = ui.xgen_description_lineEdit.text()
    description = xgen_handler.get_description(name)
    lock = ui.lock_length_checkBox.isChecked()
    if description:
        try:
            for crv in xgen_handler.get_connected_curve_guides(description):
                curve.lock_length(crv, lock)
        except TypeError:
            pass
예제 #5
0
파일: guide.py 프로젝트: mgear-dev/mgear4
def draw_guide_ctx(ui):
    global SCALP
    global DESCRIPTION
    if cmds.draggerContext(_DRAW_GUIDE_CTX, exists=True):
        cmds.deleteUI(_DRAW_GUIDE_CTX)

    name = ui.xgen_description_lineEdit.text()
    DESCRIPTION = xgen_handler.get_description(name)
    SCALP = xgen_handler.get_scalp(DESCRIPTION)

    cmds.draggerContext(
        _DRAW_GUIDE_CTX,
        pressCommand=partial(draw_guide_rig, ui),
        dragCommand=partial(drag_guide_rig, ui, _DRAW_GUIDE_CTX),
        releaseCommand=release_guide_rig,
        name=_DRAW_GUIDE_CTX,
        cursor='crossHair',
        undoMode='step')
    cmds.setToolTo(_DRAW_GUIDE_CTX)
예제 #6
0
파일: guide.py 프로젝트: mgear-dev/mgear4
def smooth_deform(ui, crvs=None):
    name = ui.xgen_description_lineEdit.text()
    description = xgen_handler.get_description(name)
    if not description:
        return
    if crvs:
        if not isinstance(crvs, list):
            crvs = [crvs]
    else:
        crvs = pm.selected()

    crv_guides = xgen_handler.get_connected_curve_guides(description)
    def_curv = []
    for crv in crvs:
        if crv in crv_guides:
            def_curv.append(crv)
    factor = 1.0 - (1.0 / ui.smooth_def_perc_spinBox.value())
    print(factor)
    curve.smooth_curve(def_curv, factor)
예제 #7
0
파일: guide.py 프로젝트: mgear-dev/mgear4
def guide_set_color_thickness(ui, color=None, thickness=False, crvs=None):
    global COLOR
    if color:
        COLOR = color
    name = ui.xgen_description_lineEdit.text()
    description = xgen_handler.get_description(name)
    if not description:
        return
    if crvs:
        if not isinstance(crvs, list):
            crvs = [crvs]
    else:
        crvs = pm.selected()

    crvs = xgen_handler.filter_curve_guides(crvs, description)
    for crv in crvs:
        if color:
            curve.set_color(crv, COLOR)
        if thickness:
            curve.set_thickness(crv, ui.thickness_spinBox.value())

    # re-select
    pm.select(crvs)
예제 #8
0
파일: guide.py 프로젝트: mgear-dev/mgear4
def guide_set_sections(ui, crvs=None):
    name = ui.xgen_description_lineEdit.text()
    description = xgen_handler.get_description(name)
    if not description:
        return
    if crvs:
        if not isinstance(crvs, list):
            crvs = [crvs]
    else:
        crvs = pm.selected()
    # filter crvs
    crvs = xgen_handler.filter_curve_guides(crvs, description)
    sections = ui.sections_spinBox.value()
    # disconnect crv from  guide
    xgen_handler.disconnect_curve_from_xgen_guide(crvs)

    # change sections
    curve.rebuild_curve(crvs, sections - 2)

    # connect again
    xgen_handler.connect_curve_to_xgen_guide(crvs, description)

    # re-select
    pm.select(crvs)
예제 #9
0
파일: guide.py 프로젝트: mgear-dev/mgear4
def toggle_scalp_visibility(ui):
    name = ui.xgen_description_lineEdit.text()
    description = xgen_handler.get_description(name)
    if description:
        scalp = xgen_handler.get_scalp(description)
        attribute.toggle_bool_attr(scalp.visibility)
예제 #10
0
파일: guide.py 프로젝트: mgear-dev/mgear4
def toggle_guides_visibility(ui):
    name = ui.xgen_description_lineEdit.text()
    description = xgen_handler.get_description(name)
    if description:
        for crv in xgen_handler.get_connected_curve_guides(description):
            attribute.toggle_bool_attr(crv.visibility)
예제 #11
0
파일: guide.py 프로젝트: mgear-dev/mgear4
def toggle_hair_visibility(ui):
    name = ui.xgen_description_lineEdit.text()
    description = xgen_handler.get_description(name)
    if description:
        attribute.toggle_bool_attr(description.visibility)
예제 #12
0
파일: guide.py 프로젝트: mgear-dev/mgear4
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