def createController(object): # object = pma.ls(sl=True) pivotObj = pma.xform(object, query=True, t=True, worldSpace=True) edges = pma.filterExpand(pma.polyListComponentConversion(te=1), sm=32, ex=1) # convert edges to curve ancd create one object for edge in edges: vtx = pma.ls(pma.polyListComponentConversion(edge, fe=1, tv=1), fl=1) p1 = pma.pointPosition(vtx[0]) p2 = pma.pointPosition(vtx[1]) curves = pma.curve(n="line_ctrl_curve", d=1, p=(p1, p2)) ctrl = pma.curve(n="bool_ctrl", d=1, ws=True, p=pivotObj) pma.xform(centerPivots=True) for curveEdge in pma.ls("line_ctrl*"): pma.parent(curveEdge, ctrl, s=1, r=1) pma.rename(curveEdge, "shapeunused") transforms = pma.ls(type='transform') deleteList = [] for tran in transforms: if pma.nodeType(tran) == 'transform': children = pma.listRelatives(tran, c=True) if children is None: # print '%s, has no childred' %(tran) deleteList.append(tran) if not deleteList: pma.delete(deleteList) return ctrl
def volumeSelect(cls, faces=False ): sel = pm.ls(sl=1) if len(sel) < 2: print( "You must have at least two objects selected" ) return [] checkInsideObj = sel.pop() #checkInsideObj = sel[1] allIn = [] for container in sel: allVtx = pm.ls(str(checkInsideObj)+'.vtx[*]',fl=1) start = pm.timerX() for eachVtx in allVtx: location = pm.pointPosition(eachVtx,w=1) test = cls.pyRayIntersect(container,location,(0,1,0)) if(test): allIn.append(eachVtx) elapsedTime = pm.timerX(startTime = start) print "time :",elapsedTime pm.select(allIn,replace=1) if faces==True: pm.mel.eval( 'ConvertSelectionToContainedFaces;' ) return pm.ls(selection=True)
def jnt_at_mid_vertex_orient(**kwargs): sel = pm.ls(orderedSelection=True, flatten=True) if not sel: pm.displayInfo("Please select vertex") return None obj_pos_map = {} for comp in sel: if not isinstance(comp, pm.MeshVertex): pm.displayInfo("Please select only vertex") return None mid_pos = 0 for comp in sel: comp.node() transform_node = pm.listTransforms(comp.node())[0] if transform_node not in obj_pos_map.keys(): vrts = CustomScripts.get_vrts(sel_obj=[transform_node])[0] pos = CustomScripts.midPos(selected_items=vrts) obj_pos_map[transform_node] = pos mid_pos = pos else: mid_pos = obj_pos_map[transform_node] comp_pos = pm.pointPosition(comp, world=True) pm.select(clear=True) jnt1 = pm.joint(position=mid_pos) jnt2 = pm.joint(position=comp_pos) pm.joint(jnt1, edit=True, orientJoint='xyz', secondaryAxisOrient='yup', zeroScaleOrient=True) pm.select([jnt1, jnt2]) CustomScripts.CopyJntOri() return None
def jnt_at_mid_vertex_orient(**kwargs): sel = pm.ls(orderedSelection=True, flatten=True) if not sel: pm.displayInfo("Please select vertex") return None obj_pos_map = {} for comp in sel: if not isinstance(comp, pm.MeshVertex): pm.displayInfo("Please select only vertex") return None mid_pos = 0 for comp in sel: #vertex_position = pm.pointPosition(comp, world=True) #component_pos.append(vertex_position) shape_node = comp.node() transform_node = pm.listTransforms(comp.node())[0] if transform_node not in obj_pos_map.keys(): vrts = CustomScripts.get_vrts(sel_obj=[transform_node])[0] print vrts pos = CustomScripts.midPos(selected_items=vrts) obj_pos_map[transform_node] = pos mid_pos = pos else: mid_pos = obj_pos_map[transform_node] print obj_pos_map comp_pos = pm.pointPosition(comp, world=True) pm.select(clear=True) jnt1 = pm.joint(position=mid_pos) jnt2 = pm.joint(position=comp_pos) pm.joint(jnt1, edit=True, orientJoint='xyz', secondaryAxisOrient='yup', zeroScaleOrient=True) pm.select([jnt1, jnt2]) CustomScripts.CopyJntOri() #obj_list[comp] = transform_node #if transform_node not in obj_list: # obj_list.append(transform_node) #vrts = CustomScripts.get_vrts(sel_obj = obj_list) #pos = [] #for vrt in vrts: # pos.append(CustomScripts.midPos(selected_items = vrt)) #for p in component_pos: # pm.select(clear=True) # jnt1 = pm.joint(position=p) # jnt2 = pm.joint(position = component_pos[pos.index(p)]) # pm.joint(jnt1, edit=True, orientJoint='xyz', # secondaryAxisOrient='yup', zeroScaleOrient=True) # pm.select(clear=True) # pm.select([jnt1, jnt2]) # CustomScripts.CopyJntOri() # pm.select(clear=True) return None
def deleteNegativeSide( self, selectionToFilter = None ): if selectionToFilter == None: selectionToFilter = pm.ls(selection=True) ## Bail early if we have no selected things to operate on! if len(selectionToFilter) == 0: return pm.mel.eval( 'PolySelectConvert 3;') verts = pm.ls(selection=True, flatten=True) vertsToDelete= [] for vert in verts: x,y,z = pm.pointPosition( vert ) if x < -0.0000000001: print( "For vert at:"+str(x) ) vertsToDelete.append( vert ) try: ## fv and tf mean fromVertex, toFace facesToDelete = pm.polyListComponentConversion( vertsToDelete, fv=True, tf=True) faceToDelete = pm.ls(facesToDelete, flatten=True) pm.delete( facesToDelete ) pm.select( selectionToFilter ) except: print("Minor exception. No faces are on negative side to delete.")