Example #1
0
def drawOnUnevenSurface(tri, ground):
    """Plot the triangle on the polygon surface 
    
    This function is depreciated, please see *plotTri*
    
    """
    cmds.polyProjectCurve(ground, tri, direction=(0, 1, 0))
Example #2
0
def motionPathRandom():
    # project
    sel = cmds.ls(sl=1)  # select poly and curve to project
    cmds.polyProjectCurve(sel[0], sel[1], ch=True, direction=(0, 1, 0))

    # attach truck
    sel = cmds.ls(sl=1)  # select: control attached to path and new curve
    moP = cmds.listConnections(sel[0], source=True, destination=False, type='motionPath')[0]
    cmds.select(sel[1])
    shape = cmds.pickWalk(d='down')[0]
    cmds.connectAttr(shape + '.worldSpace[0]', moP + '.geometryPath', force=True)
Example #3
0
def cut_curve():
    """
    先选所有曲线,最后选mesh
    :return:
    """
    sels = mc.ls(sl=True)
    mesh = sels[-1]
    for sel in sels[:-1]:
        try:
            cur = mc.polyProjectCurve(sel,mesh, ch=0,pointsOnEdges=1,curveSamples=50,automatic=1)[0]
            cur_chr = mc.listRelatives(cur,c=True)[0]
            mc.arclen(cur_chr,ch=True)
            mc.select([sel,cur])
            mm.eval('cutCurvePreset(1,1,0.01,6,0,1,0,2,2)')
            mc.delete(cur)
        except:
            pass
Example #4
0
def plotTri(vertex, isFlat=True, ground=None):
    """Plot the triangles
    
    When the ground is uneven, the triangle is plotted as a group of three line segments and projected onto the polygon surface.
    
    """
    if isFlat == True:
        cmds.curve(d=1, p=[vertex[0], vertex[1], vertex[2], vertex[0]])
        cmds.rename('triangle')
        return vertex
    else:
        triShape = []
        triVtx = []
        for indLine in range(3):
            lineVtx = [vertex[indLine%3], vertex[(indLine+1)%3]]
            line = cmds.curve(d=1, p=[lineVtx[0], lineVtx[1]])
            lineProj = cmds.polyProjectCurve(ground, line, direction=(0, -1, 0))
            startPoint = startOrEnd(lineProj[0], vertex[indLine]) 
            cmds.delete(line)
            triShape.append(lineProj)
            triVtx.append(startPoint)
        cmds.group(triShape[0], triShape[1], triShape[2], name="triangle")
        return triVtx
Example #5
0
def Projection_Curve(Center_Pos_in,
                     Geometry,
                     Align_to_Surface,
                     Expand=0.1,
                     Axis="Y",
                     PositiveAxis=True):
    # if Align_to_Surface:
    if True:
        Curve_init_list = []
        # print ( Center_Pos_in )
        Center_Pos = Center_Pos_in
        if Axis == "Y":
            Axis_1 = 0
            Axis_2 = 2
        elif Axis == "X":
            Axis_1 = 1
            Axis_2 = 2
        elif Axis == "Z":
            Axis_1 = 0
            Axis_2 = 1
        Poslist_Start = [
            Center_Pos[:], Center_Pos[:], Center_Pos[:], Center_Pos[:],
            Center_Pos[:]
        ]

        Poslist_Start[1][Axis_1] = Poslist_Start[1][Axis_1] + Expand
        Poslist_Start[2][Axis_1] = Poslist_Start[2][Axis_1] - Expand
        Poslist_Start[3][Axis_2] = Poslist_Start[3][Axis_2] + Expand
        Poslist_Start[4][Axis_2] = Poslist_Start[4][Axis_2] - Expand

        offset_endpos = 30.0
        Poslist_End = []
        for indpos in Poslist_Start:
            Poslist_End.append([
                indpos[0] + offset_endpos, indpos[1] + offset_endpos,
                indpos[2] + offset_endpos
            ])

        for indpos_index in range(0, 5):
            Curve_init_list.append(
                cmds.curve(
                    p=[Poslist_Start[indpos_index], Poslist_End[indpos_index]],
                    k=[0, 1],
                    d=1))

        # print (Poslist_Start)
        # print (Poslist_End)
        ProjectResultGRP_list = []
        # ProjectResult_list = []
        # print ( "=================--------------=============")

        # if PositiveAxis :
        #     Pointing = -1.0
        # else:
        #     Pointing = 1.0
        Pointing = 1.0
        direction = (0.0, Pointing, 0.0)
        if Axis == "X":
            direction = (Pointing, 0.0, 0.0)
        elif Axis == "Z":
            direction = (0.0, 0.0, Pointing)
        #---------------------------------------------

        try:
            Result_Pos_list = []
            for indCurve in Curve_init_list:
                ProjectResultGRP = cmds.polyProjectCurve(indCurve,
                                                         Geometry,
                                                         direction=direction,
                                                         ch=0,
                                                         automatic=1,
                                                         curveSamples=50,
                                                         tolerance=0.001,
                                                         pointsOnEdges=0)[0]
                ProjectResultGRP_list.append(ProjectResultGRP)
                ProjectResult_list = cmds.listRelatives(ProjectResultGRP, c=1)
                if len(ProjectResult_list) == 1:
                    ProjectResult = ProjectResult_list[0]
                else:
                    # try find the shortest curve from multiple Result
                    ProjectResult = ProjectResult_list[0]
                    for indProjectResult_index in range(
                            len(ProjectResult_list)):
                        indbb = cmds.xform(
                            ProjectResult_list[indProjectResult_index],
                            query=1,
                            worldSpace=1,
                            bb=1)
                        indCP = [(indbb[3] - indbb[0]) / 2.0 + indbb[0],
                                 (indbb[4] - indbb[1]) / 2.0 + indbb[1],
                                 (indbb[5] - indbb[2]) / 2.0 + indbb[2]]
                        disX = Center_Pos[0] - indCP[0]
                        disY = Center_Pos[1] - indCP[1]
                        disZ = Center_Pos[2] - indCP[2]
                        distance = pow(
                            (disX * disX + disY * disY + disZ * disZ),
                            1.0 / 3.0)
                        # print  ProjectResult_list[indProjectResult_index]
                        # print distance

                        if indProjectResult_index == 0:
                            initdist = distance
                        else:
                            if distance < initdist:
                                initdist = distance
                                ProjectResult = ProjectResult_list[
                                    indProjectResult_index]
                    # addable: try to get the curve base on Axis?

                # print ( ProjectResult )
                # print ( "AAAAAAAAAAAAAAAAAAAAAAAAAAAAA")
                cmds.select(cl=1)
                # cmds.duplicate(ProjectResultGRP)
                cmds.select(ProjectResult + ".cv[:]", add=1)
                cv = cmds.ls(selection=True, flatten=True)
                # print ( cv )
                cvpos = []

                for indcv in cv:
                    cvpos.append(
                        cmds.xform(indcv, query=1, worldSpace=1,
                                   translation=1))

                initpos = cvpos[0]
                found_orginal = ""
                for indcvnum in range(len(cvpos)):
                    if Axis == "X":
                        if cvpos[indcvnum][1] <= initpos[1] or cvpos[indcvnum][
                                2] <= initpos[2]:
                            initpos[1] = cvpos[indcvnum][1]
                            initpos[2] = cvpos[indcvnum][2]
                            found_orginal = cv[indcvnum]
                    if Axis == "Y":
                        if cvpos[indcvnum][0] <= initpos[0] or cvpos[indcvnum][
                                2] <= initpos[2]:
                            initpos[0] = cvpos[indcvnum][0]
                            initpos[2] = cvpos[indcvnum][2]
                            found_orginal = cv[indcvnum]
                    if Axis == "Z":
                        if cvpos[indcvnum][0] <= initpos[0] or cvpos[indcvnum][
                                1] <= initpos[1]:
                            initpos[0] = cvpos[indcvnum][0]
                            initpos[1] = cvpos[indcvnum][1]
                            found_orginal = cv[indcvnum]
                Result_Pos = cmds.xform(found_orginal,
                                        query=1,
                                        worldSpace=1,
                                        translation=1)
                Result_Pos_list.append(Result_Pos)
                # print (indCurve)
                # print (found_orginal)
                # print (Result_Pos)
            cmds.delete(ProjectResultGRP_list)
            cmds.delete(Curve_init_list)

            # print ( "Projection_Curve ------------- Success" )
            # print (Result_Pos_list)
            # print ( "result  ====================" )
            return Result_Pos_list

        except:
            pass
            cmds.delete(Curve_init_list)
            try:
                cmds.delete(ProjectResultGRP_list)
                return False
            except:
                pass
                return False
Example #6
0
def polyProjectCurve(*args, **kwargs):
    res = cmds.polyProjectCurve(*args, **kwargs)
    if not kwargs.get('query', kwargs.get('q', False)):
        res = _factories.maybeConvert(res, _general.PyNode)
    return res