Пример #1
0
def merge_faces():
    """Removes edges inside of face selection."""
    selected = mampy.complist()
    if not selected:
        raise NothingSelected()

    control_object = next(iter(selected))
    if not control_object.type == MFn.kMeshPolygonComponent or not len(control_object) > 1:
        raise InvalidSelection("Must have at least two connected faces selected.")

    new_faces = ComponentList()
    for face in selected:
        # We must first collect all necessary elements before we operate on them.
        # This is to avoid getting uncertain information due to indices changing
        # when performing the delete function.
        border_vertices = ComponentList()
        internal_edges = ComponentList()
        for connected_face in face.get_connected_components():
            border_vertices.append(connected_face.to_vert(border=True))
            internal_edges.append(connected_face.to_edge(internal=True))

        # We only delete once per object to perserve as much information as
        # possible.
        cmds.polyDelEdge(internal_edges.cmdslist())
        # Collect the most shared face on the border vertices to get new faces
        # from the delete operation.
        for border_vert in border_vertices:
            counter = collections.Counter()
            for idx in border_vert.indices:
                f = border_vert.new().add(idx).to_face()
                counter.update(f.indices)
            new_faces.append(face.new().add(counter.most_common(1).pop()[0]))
    # Select and be happy!
    cmds.select(new_faces.cmdslist())
def cleanupHierarchicalSubdivisionConversion(object):
	"""
	This definition cleans Maya hierarchical polygonal conversion.

	:param object: Object to cleanup. ( String )
	"""

	cmds.select(object)
	cmds.polySelectConstraint(m=3, t=8, sz=3)
	cmds.polySelectConstraint(dis=True)
	nsidesFaces = cmds.ls(sl=True, l=True, fl=True)
	cmds.select(nsidesFaces)
	cmds.polySelectConstraint(m=3, t=1, order=True, orb=(3, 3))
	cmds.polySelectConstraint(dis=True)
	nsideVertices = cmds.ls(sl=True, l=True, fl=True)
	offendingEdges = []
	for vertice in nsideVertices:
		faces = cmds.ls(cmds.polyListComponentConversion(vertice, fv=True, tf=True), fl=True, l=True)
		faces = [face for face in faces if not face in nsidesFaces]
		if len(faces) == 2:
			faceEdgesA = cmds.ls(cmds.polyListComponentConversion(faces[0], ff=True, te=True), fl=True, l=True)
			faceEdgesB = cmds.ls(cmds.polyListComponentConversion(faces[1], ff=True, te=True), fl=True, l=True)
			sharedEdge = list(set(faceEdgesA).intersection(faceEdgesB))
			offendingEdges.append(sharedEdge[0])
	cmds.polySelectSp(offendingEdges, loop=True)
	cmds.polyDelEdge(cmds.ls(sl=True), cv=True, ch=True)
	cmds.select(object)
Пример #3
0
def del_line(set_name, base_list):
    model_list = cmds.sets(set_name, q=True)
    for model_name in model_list:
        tag_list = []
        for key in base_list:
            ele = model_name + '.e[' + str(key) + ']'
            tag_list.append(ele)
        cmds.polyDelEdge(tag_list, cv=True, ch=True)
Пример #4
0
def del_line(group_name,base_list):
    model_list = cmds.listRelatives(group_name,children=True)
    for model_name in model_list:
        tag_list =list()
        for key in base_list:
            ele = model_name+'.e[' + str(key)+']'
            tag_list.append(ele)
        cmds.polyDelEdge(tag_list,cv=True,ch=True)
Пример #5
0
def  hexalate():
    list=cmds.ls(sl=1,fl=1)
    for i in range (len(list)):
        cmds.polyTriangulate(list[i], ch = True)
        edgeCount = cmds.polyEvaluate( e=1)
        cmds.select( (list[i] + '.e[0:' + str(edgeCount) + ']'), r=True)
        hexEdgeSet = cmds.sets(name = 'edgeSetHex')
        cmds.polySubdivideFacet( list[i], dv = 1, m=0, ch=1)
        cmds.select(hexEdgeSet, r=1)
        cmds.polyDelEdge(cv=1, ch=1)
        cmds.select(hexEdgeSet, r = 1, ne = 1)
        cmds.delete()
        cmds.select(list)
Пример #6
0
def hexalate():
    list = cmds.ls(sl=1, fl=1)
    for i in range(len(list)):
        cmds.polyTriangulate(list[i], ch=True)
        edgeCount = cmds.polyEvaluate(e=1)
        cmds.select((list[i] + '.e[0:' + str(edgeCount) + ']'), r=True)
        hexEdgeSet = cmds.sets(name='edgeSetHex')
        cmds.polySubdivideFacet(list[i], dv=1, m=0, ch=1)
        cmds.select(hexEdgeSet, r=1)
        cmds.polyDelEdge(cv=1, ch=1)
        cmds.select(hexEdgeSet, r=1, ne=1)
        cmds.delete()
        cmds.select(list)
Пример #7
0
    def edgeDelete(self , vtxs):
        edgeIds = []
        for v in vtxs:
            for e in self.getNearComponents(v , edgesConnected=1):
                edgeIds.append(e)

        edgeIds = set(edgeIds)

        edgeComponent = Om2.MFnSingleIndexedComponent()
        components = edgeComponent.create(Om2.MFn.kMeshEdgeComponent)
        map(edgeComponent.addElement , edgeIds)

        edgeSel = Om2.MSelectionList()
        edgeSel.add((self.mDag , components))
        Om2.MGlobal.setActiveSelectionList(edgeSel)
        cm.polyDelEdge(cv=True , ch=False)
Пример #8
0
def edge_loop_to_curve(edge_name, delete_edges=False):
    cmds.select(edge_name)
    cmds.pickWalk(edge_name, type="edgeloop", d="right")
    curve_name, shape_name = cmds.polyToCurve(form=2, degree=3)
    cvs = cmds.getAttr("{}.spans".format(curve_name))
    curve_points = []
    for cv_id in range(cvs):
        cv_name = "{}.cv[{}]".format(curve_name, cv_id)
        pos = get_position(cv_name)
        curve_points.append(Component(cv_name, *pos))

    if delete_edges:
        cmds.select(edge_name)
        cmds.pickWalk(edge_name, type="edgeloop", d="right")
        cmds.polyDelEdge(cv=True)

    cmds.select(curve_name)
    cmds.Delete()
    return curve_points
Пример #9
0
def cleanupHierarchicalSubdivisionConversion(object):
    """
	Cleans Maya hierarchical polygonal conversion.

	:param object: Object to cleanup.
	:type object: str
	"""

    cmds.select(object)
    cmds.polySelectConstraint(m=3, t=8, sz=3)
    cmds.polySelectConstraint(dis=True)
    nsidesFaces = cmds.ls(sl=True, l=True, fl=True)
    cmds.select(nsidesFaces)
    cmds.polySelectConstraint(m=3, t=1, order=True, orb=(3, 3))
    cmds.polySelectConstraint(dis=True)
    nsideVertices = cmds.ls(sl=True, l=True, fl=True)
    offendingEdges = []
    for vertice in nsideVertices:
        faces = cmds.ls(cmds.polyListComponentConversion(vertice,
                                                         fv=True,
                                                         tf=True),
                        fl=True,
                        l=True)
        faces = [face for face in faces if not face in nsidesFaces]
        if len(faces) == 2:
            faceEdgesA = cmds.ls(cmds.polyListComponentConversion(faces[0],
                                                                  ff=True,
                                                                  te=True),
                                 fl=True,
                                 l=True)
            faceEdgesB = cmds.ls(cmds.polyListComponentConversion(faces[1],
                                                                  ff=True,
                                                                  te=True),
                                 fl=True,
                                 l=True)
            sharedEdge = list(set(faceEdgesA).intersection(faceEdgesB))
            offendingEdges.append(sharedEdge[0])
    cmds.polySelectSp(offendingEdges, loop=True)
    cmds.polyDelEdge(cmds.ls(sl=True), cv=True, ch=True)
    cmds.select(object)
Пример #10
0
    def main_type2(self):
        theSel = cmds.ls(sl=1)

        polyName = theSel[0]
        if '.' in polyName:
            polyName = polyName.split('.')[0]

        returnVal = functions_falloff_class.main(
            polyName,
            clamp=self.spinBox.value(),
            isfallOffModules=self.checkBox2.isChecked(),
            delLevel=1)

        #for i in returnVal:
        #    functions_falloff_class.selEdgeByIntArray(i, add=1)

        preWholeDelArray = []
        for fa in returnVal:
            for f in fa:
                preWholeDelArray.append('%s.e[%s]' % (polyName, str(f)))

        cmds.polyDelEdge(preWholeDelArray, cv=1)
def ldmt_rebuildSubdiv():
    #Get the selected mesh
    selectedMesh=cmds.ls( selection=True )[0]
    #Get the vertex count i.e. vertex id of last vertex...
    vertexCount=cmds.polyEvaluate( v=1 )
    edgeCount=cmds.polyEvaluate(e=1 )
    vertexId = selectedMesh+'.vtx['+str(vertexCount)+']'
    #Convert selection to edges...
    x=cmds.polyListComponentConversion(vertexId,fv=True,te=True )
    cmds.select(x)

    #get the edges number...
    k=x[0].rfind(']')
    l=x[0].rfind('[')
    start = x[0][l+1:]
    edges = str(start[:-1])
    colon = edges.split(':')

    #Select edge loops and rings...
    mel.eval('SelectEdgeLoopSp;')
    mel.eval('SelectContiguousEdges;')
    mel.eval('polySelectEdgesEveryN "edgeRing" 2;')
    selectedEdges = cmds.ls(sl=1,fl=1)
    count=0
    while len(selectedEdges)<edgeCount*10/21:
        if count >3:
            break
        mel.eval('polySelectEdgesEveryN "edgeRing" 2;')
        mel.eval('SelectContiguousEdges;')
        selectedEdges = cmds.ls(sl=1,fl=1)
        count += 1

    mel.eval('polySelectEdgesEveryN "edgeRing" 2;')
    mel.eval('polySelectEdgesEveryN "edgeRing" 2;')

    #Delete the selected edgeloops
    cmds.polyDelEdge( cv=True )
    cmds.select(selectedMesh)
Пример #12
0
    def main(self, protectloop=True, reducelevel=1):

        theSel = cmds.ls(sl=1)

        polyName = theSel[0]
        if '.' in polyName:
            polyName = polyName.split('.')[0]
        # if user in the edge mode selected.filter the detail tags.just keep model name.

        self.progress = qw.QProgressDialog()
        self.progress.show()

        wholeDelArrayTemp = self.calculateBaseDeleteArray(polyName,
                                                          delLevel=reducelevel)

        filterArray = self.filterCrease(polyName,
                                        wholeDelArrayTemp[1],
                                        isProtectCreaseLoop=protectloop)

        self.progress.setMaximum(5)
        self.progress.setLabelText('struct final data...')
        self.progress.setValue(3)

        preWholeDelArray = [
            '%s.e[%s]' % (polyName, str(fa)) for fa in filterArray
        ]

        self.progress.setLabelText('delete edges...')
        self.progress.setValue(4)
        cmds.polyDelEdge(preWholeDelArray, cv=1)

        self.progress.setValue(5)

        self.progress.close()

        print 'done'
Пример #13
0
def polyDelEdge(*args, **kwargs):
    res = cmds.polyDelEdge(*args, **kwargs)
    if not kwargs.get('query', kwargs.get('q', False)):
        res = _factories.maybeConvert(res, _general.PyNode)
    return res
Пример #14
0
import maya.mel as mel

#Get the selected mesh
selectedMesh=cmds.ls( selection=True )[0]
#Get the vertex count i.e. vertex id of last vertex...
vertexCount=cmds.polyEvaluate( v=True )
vertexId = selectedMesh+'.vtx['+str(vertexCount)+']'
cmds.select(vertexId)
#Convert selection to edges...
x=cmds.polyListComponentConversion( fv=True,te=True )
cmds.select(x)

#get the edges number...
k=x[0].rfind(']')
l=x[0].rfind('[')
start = x[0][l+1:]
edges = str(start[:-1])
colon = edges.split(':')

#Select edge loops and rings...
mel.eval('SelectEdgeLoopSp;')
mel.eval('polySelectEdgesEveryN "edgeRing" 2;')
mel.eval('SelectEdgeLoopSp;')
mel.eval('SelectEdgeLoopSp;')
mel.eval('SelectEdgeLoopSp;')
mel.eval('polySelectEdgesEveryN "edgeRing" 2;')

#Delete the selected edgeloops
cmds.polyDelEdge( cv=True )

cmds.select(selectedMesh)
Пример #15
0
def dlEd(*args):
	cmds.polyDelEdge()
Пример #16
0
def dlEd(*args):
	cmds.polyDelEdge()
Пример #17
0
def weld_all(obj_name,
             source_positions_2D,
             dest_positions_2D,
             maintain_source_shape=False):
    """Welds all the source verticies to the destination verticies by bridging or merging

    Args:
        obj_name (str): name of the object to weld
        source_positions_2D (float[][]): positions of source vertecies
        dest_positions_2D (float[][]): positions of destination vertecies
        maintain_source_shape (bool): maintain the shape of the source object by leaving a bridge between the two borders

    Returns:
        None
    """

    cmds.select(cl=True)

    num_verts = cmds.polyEvaluate(obj_name, v=True)

    # Script encounters float comparison errors if I don't round all of the positions
    source_positions_2D = [[[round(i, 2) for i in pos] for pos in sp]
                           for sp in source_positions_2D]
    dest_positions_2D = [[[round(i, 2) for i in pos] for pos in dp]
                         for dp in dest_positions_2D]

    # Looping through all the vertices of the object to find the verts that match the stored positions
    source_verts = []
    dest_verts = []
    for i in range(num_verts):
        vert = "{}.vtx[{}]".format(obj_name, i)
        pos = get_position(vert)
        pos = [round(i, 2) for i in pos]

        idx = 0
        for sp, dp in zip(source_positions_2D, dest_positions_2D):
            if pos in sp:
                source_verts.append((idx, vert))
            elif pos in dp:
                dest_verts.append((idx, vert))
            idx += 1

    # Splitting the vertices into chunks based on the vert count of the border edges
    source_verts = [j for i, j in sorted(source_verts, key=lambda x: x[0])]
    dest_verts = [j for i, j in sorted(dest_verts, key=lambda x: x[0])]
    chunk_length = len(dest_positions_2D[0])
    sv_split = [
        source_verts[i:i + chunk_length]
        for i in range(0, len(source_verts), chunk_length)
    ]
    dv_split = [
        dest_verts[i:i + chunk_length]
        for i in range(0, len(dest_verts), chunk_length)
    ]

    # Bridging each pair of border edges together
    edges_to_delete = []
    for s_verts, d_verts in zip(sv_split, dv_split):
        source_edge_ring = cmds.polyListComponentConversion(s_verts,
                                                            te=True,
                                                            internal=True)
        dest_edge_ring = cmds.polyListComponentConversion(d_verts,
                                                          te=True,
                                                          internal=True)
        cmds.select(source_edge_ring, dest_edge_ring)
        try:
            cmds.polyBridgeEdge(divisions=0,
                                twist=0,
                                taper=1,
                                curveType=0,
                                smoothingAngle=30,
                                direction=0,
                                sourceDirection=0,
                                targetDirection=0)
            edges_to_delete.append(source_edge_ring)
        except RuntimeError:
            raise Exception(
                "Precision too low, lower current working units to mm")

    if not maintain_source_shape:
        # Deleting the leftover edge loop from bridge
        cmds.select(cl=True)
        for edge_loop in edges_to_delete:
            cmds.select(edge_loop, add=True)
        cmds.polyDelEdge(cv=True)
Пример #18
0
import maya.mel as mel

#Get the selected mesh
selectedMesh=cmds.ls( selection=True )[0]
#Get the vertex count i.e. vertex id of last vertex...
vertexCount=cmds.polyEvaluate( v=True )
vertexId = selectedMesh+'.vtx['+str(vertexCount)+']'
cmds.select(vertexId)
#Convert selection to edges...
x=cmds.polyListComponentConversion( fv=True,te=True )
cmds.select(x)

#get the edges number...
k=x[0].rfind(']')
l=x[0].rfind('[')
start = x[0][l+1:]
edges = str(start[:-1])
colon = edges.split(':')

#Select edge loops and rings...
mel.eval('SelectEdgeLoopSp;')
mel.eval('polySelectEdgesEveryN "edgeRing" 2;')
mel.eval('SelectEdgeLoopSp;')
mel.eval('SelectEdgeLoopSp;')
mel.eval('SelectEdgeLoopSp;')
mel.eval('polySelectEdgesEveryN "edgeRing" 2;')

#Delete the selected edgeloops
cmds.polyDelEdge( cv=True )

cmds.select(selectedMesh)
Пример #19
0
    creaseProtectArray = []
    if isProtectCreaseLoop:
        for i in creaseArray:
            edgeLoop = cmds.polySelect(polyName, edgeLoop=int(i), ass=0, q=1)
            for el in edgeLoop:
                creaseProtectArray.append(int(el))

        for i in noneCreaseArray:
            if i not in creaseProtectArray:
                arrayWithoutCrease.append(i)
    else:
        arrayWithoutCrease = list(noneCreaseArray)

    return arrayWithoutCrease


theSel = cmds.ls(sl=1)

polyName = theSel[0]

wholeDelArrayTemp = calculateBaseDeleteArray(polyName)

filterArray = filterCrease(polyName, wholeDelArrayTemp[1])

preWholeDelArray = ['%s.e[%s]' % (polyName, str(fa)) for fa in filterArray]

cmds.polyDelEdge(preWholeDelArray, cv=1)

print 'done'