Python pymel.core.duplicate() Examples
The following are 25
code examples of pymel.core.duplicate().
You can vote up the ones you like or vote down the ones you don't like,
and go to the original project or source file by following the links above each example.
You may also want to check out all available functions/classes of the module
pymel.core
, or try the search function
.
Example #1
Source File: splineTwist.py From fossil with BSD 3-Clause "New" or "Revised" License | 6 votes |
def readIkKwargs(cls, card, isMirroredSide, sideAlteration=lambda **kwargs: kwargs, kinematicType='ik'): ''' Overriden to handle if a custom curve was given, which then needs to be duplicated, mirrored and fed directly into the splineTwist. ''' kwargs = cls.readKwargs(card, isMirroredSide, sideAlteration, kinematicType='ik') if isMirroredSide: if 'controlCountOrCrv' in kwargs and not isinstance( kwargs['controlCountOrCrv'], int ): crv = kwargs['controlCountOrCrv'] crv = duplicate(crv)[0] kwargs['controlCountOrCrv'] = crv move( crv.sp, [0, 0, 0], a=True ) move( crv.rp, [0, 0, 0], a=True ) crv.sx.set(-1) kwargs['duplicateCurve'] = False return kwargs
Example #2
Source File: rigging.py From anima with MIT License | 6 votes |
def duplicate(self, class_=None, prefix="", suffix=""): """duplicates itself and returns a new joint hierarchy :param class_: The class of the created JointHierarchy. Default value is JointHierarchy :param prefix: Prefix for newly created joints :param suffix: Suffix for newly created joints """ if class_ is None: class_ = self.__class__ new_start_joint = pm.duplicate(self.start_joint)[0] all_hierarchy = list(reversed(new_start_joint.listRelatives(ad=1, type=pm.nt.Joint))) new_end_joint = all_hierarchy[len(self.joints) - 2] # delete anything below pm.delete(new_end_joint.listRelatives(ad=1)) new_hierarchy = class_(start_joint=new_start_joint, end_joint=new_end_joint) for j, nj in zip(self.joints, new_hierarchy.joints): nj.rename("{prefix}{joint}{suffix}".format(prefix=prefix, suffix=suffix, joint=j.name())) return new_hierarchy
Example #3
Source File: sqCopyPasteShapes.py From dpAutoRigSystem with GNU General Public License v2.0 | 6 votes |
def hold_ctrl_shapes(ctrl, parent=None): """ Make a snapshot of all shapes of a specific ctrls. """ shapes = filter(lambda x: isinstance(x, pymel.nodetypes.CurveShape), ctrl.getShapes()) snapshot_transform = pymel.duplicate(ctrl, parentOnly=True, returnRootsOnly=True)[0] for shape in shapes: shape_snapshot = _duplicate_shape(shape) tmp_transform = shape_snapshot.getParent() shape_snapshot.setParent(snapshot_transform, s=True, r=True) pymel.delete(tmp_transform) if parent: snapshot_transform.setParent(parent) else: snapshot_transform.setParent(world=True) snapshot_transform.rename('{0}Snapshot'.format(ctrl.name())) return snapshot_transform
Example #4
Source File: render.py From anima with MIT License | 5 votes |
def duplicate_input_graph(cls): """duplicates the selected nodes with all their inputs """ return pm.duplicate(un=1, rr=1)
Example #5
Source File: modeling.py From SIWeightEditor with MIT License | 5 votes |
def duplicate_with_skin(nodes, parentNode=None): #親子付けがあってもエラーはかないように修正 #print nodes # リストタイプじゃなかったらリストに変換する if not isinstance(nodes, list): nodes = [nodes] dupObjs = [] for node in nodes: #子供のノード退避用ダミーペアレントを用意 dummy = common.TemporaryReparent().main(mode='create') common.TemporaryReparent().main(node,dummyParent=dummy, mode='cut') #複製 dup = cmds.duplicate(node)[0] #ウェイト転送メソッドをSimpleWeightコピペに変更 weight.SimpleWeightCopyPaste().main(node, mode='copy', saveName=__name__, weightFile=node) weight.SimpleWeightCopyPaste().main(dup, mode='paste', saveName=__name__, weightFile=node) #親子付けを戻す common.TemporaryReparent().main(node,dummyParent=dummy, mode='parent') #ダミーペアレントを削除 common.TemporaryReparent().main(dummyParent=dummy, mode='delete') if parentNode is not None: cmds.parent(dup, parentNode) dupObjs.append(dup) return dupObjs #シーン内、もしくは入力メッシュ内にゼロポリゴンオブジェクトがあるかどうか調べる関数
Example #6
Source File: card.py From fossil with BSD 3-Clause "New" or "Revised" License | 5 votes |
def duplicateCard(card): d = duplicate( card )[0] proxy.relink( card, d ) if card.parentCard: d.parentCardLink = card.parentCard return d
Example #7
Source File: rigutils.py From DynRigBuilder with MIT License | 5 votes |
def duplicateJointChain(rootJoint, replace=None, suffix=None): """ Duplicate the given joint chain. :param rootJoint: `PyNode` root joint of the given joint chain :param replace: `tuple` or `list` (old string, new string) rename the duplicated joint chain by replacing string in given joint name :param suffix: `string` rename the duplicated joint chain by adding suffix to the given joint name :return: `list` list of joints in the duplicated joint chain. ordered by hierarchy """ srcJnts = getJointsInChain(rootJoint) dupJnts = [] if not replace and not suffix: raise ValueError("Please rename the duplicated joint chain.") for i, srcJnt in enumerate(srcJnts): newName = srcJnt.name() if replace: newName = newName.replace(replace[0], replace[1]) if suffix: newName = "{0}_{1}".format(newName, suffix) dupJnt = pm.duplicate(srcJnt, n=newName, po=1)[0] dupJnts.append(dupJnt) for attr in ['t', 'r', 's', 'jointOrient']: pm.setAttr("{0}.{1}".format(dupJnt.name(), attr), pm.getAttr("{0}.{1}".format(srcJnt.name(), attr))) if i>0: dupJnt.setParent(dupJnts[i-1]) # # for i, srcJnt in enumerate(srcJnts): # if i==0: continue # srcPar = pm.listRelatives(srcJnt, p=1) # if srcPar: # dupJnts[i].setParent(srcPar[0].name().replace(replace[0], replace[1])) return dupJnts
Example #8
Source File: rigutils.py From DynRigBuilder with MIT License | 5 votes |
def createSurfaceFromJoints(joints, name="surface", ibtCVNum=0, degree=3): """ Create a nurbs surface along the given joints. nurbs CV position is defined by joint position. :param joints: `list` list of joint nodes :param name: `string` name of the built surface :param ibtCVNum: `int` number of cv points added inbetween the joint position :param degree: `int` nurbs surface degree :return: `PyNode` result surface """ # build surface from joints, one span for each joint auxCrv = createCurveFromJoint(joints, name+"_crv", ibtCVNum, degree) startPos = joints[0].getTranslation(space="world") endPos = joints[-1].getTranslation(space="world") offDir = (om.MVector(*(startPos-endPos))^om.MVector(0,1,0)).normal() if offDir.length() == 0: offDir = om.MVector(0,0,-1) print startPos, endPos, offDir[0], offDir[1], offDir[2] buildCrv1 = pm.duplicate(auxCrv) pm.move(offDir.x*0.5, offDir.y*0.5, offDir.z*0.5, buildCrv1, r=1) buildCrv2 = pm.duplicate(auxCrv) pm.move(offDir.x*-0.5, offDir.y*-0.5, offDir.z*-0.5, buildCrv2, r=1) auxSurf = pm.loft(buildCrv1, buildCrv2, n=name, ch=0, u=1, d=degree)[0] pm.rebuildSurface(auxSurf, ch=0, su=1, du=1, dv=degree, sv=0) pm.delete(auxCrv, buildCrv1, buildCrv2) # auxSurf.setParent(0) return auxSurf
Example #9
Source File: utilityFuncs.py From anima with MIT License | 5 votes |
def duplicateObject(object): #duplicate the object dup = pm.duplicate(object) return dup[0]
Example #10
Source File: previs.py From anima with MIT License | 5 votes |
def split_camera(cls): """splits one camera to multiple cameras """ selection = pm.ls(sl=1, type=pm.nt.Transform) if not selection: raise RuntimeError("Please select at least one camera") new_cameras = [] from anima.env.mayaEnv import camera_tools for cam in selection: cut_info = camera_tools.find_cut_info(cam) for cut_in, cut_out in cut_info: print(cut_in, cut_out) # duplicate the original camera with input graph dup_cam = pm.duplicate(cam, un=1)[0] # remove all keyframes out of the cut range # remove befor pm.cutKey(dup_cam, time=(-1000, cut_in - 1)) # # remove after pm.cutKey(dup_cam, time=(cut_out + 1, 100000)) # rename the new cam dup_cam.rename("%s_#" % cam.name()) new_cameras.append(dup_cam) # remove original camera pm.delete(cam) # select all new cameras pm.select(new_cameras)
Example #11
Source File: general.py From anima with MIT License | 5 votes |
def unshape_parent_nodes(cls): """Moves the shape node of a mesh to another transform node as a children if the mesh node has other meshes under it. Essentially cleaning the scene. """ mesh_nodes_with_transform_children = [] all_meshes = pm.ls(dag=1, type='mesh') for node in all_meshes: parent = node.getParent() tra_under_shape = pm.ls( parent.listRelatives(), type='transform' ) if len(tra_under_shape): mesh_nodes_with_transform_children.append(parent) for node in mesh_nodes_with_transform_children: # duplicate the node dup = pm.duplicate(node)[0] # remove all descendents all_descendents = dup.listRelatives(ad=1) # remove the shape from the list all_descendents.remove(dup.getShape()) pm.delete(all_descendents) # parent under the original node pm.parent(dup, node) # remove the shape of the original node pm.delete(node.getShape())
Example #12
Source File: render.py From anima with MIT License | 5 votes |
def duplicate_with_connections(cls): """duplicates the selected nodes with connections to the network """ return pm.duplicate(ic=1, rr=1)
Example #13
Source File: rigging.py From anima with MIT License | 5 votes |
def create_ik_hierarchy(self): """Creates the ik hierarchy """ self.ik_hierarchy = self.base_hierarchy.duplicate(class_=IKLimbJointHierarchy, suffix="_ik") # set joint radius base_radius = self.base_hierarchy.joints[0].radius.get() for j in self.ik_hierarchy.joints: j.radius.set(base_radius * 2) assert isinstance(self.ik_hierarchy, IKLimbJointHierarchy) self.ik_hierarchy.create_ik_setup()
Example #14
Source File: rigging.py From anima with MIT License | 5 votes |
def create_fk_hierarchy(self): """Creates the fk hierarchy """ self.fk_hierarchy = self.base_hierarchy.duplicate(class_=JointHierarchy, suffix="_fk")
Example #15
Source File: rigging.py From anima with MIT License | 5 votes |
def create_ik_hierarchy(self): """Creates the ik hierarchy """ self.ik_hierarchy = self.base_hierarchy.duplicate(class_=JointHierarchy, suffix="_ik")
Example #16
Source File: hierarchy_instancer.py From anima with MIT License | 5 votes |
def instance(self, source_transform_node): """instances the given nodes hierarchy """ # duplicate the given node # then replace the instanceable nodes with instances # find instanceable nodes in the node and dupNode source_hierarchy = self.walk_hierarchy(source_transform_node) # if there is no node in the sourceHierarchy just return # the instance of the given node if len(source_hierarchy) < 1: dup_node = pm.duplicate(source_transform_node, ilf=1, rc=True)[0] pm.select(dup_node) return dup_node = pm.duplicate(source_transform_node, rc=True)[0] dup_hierarchy = self.walk_hierarchy(dup_node) for i, node in enumerate(dup_hierarchy): shape = node.getShape() if shape is not None and isinstance(shape, tuple(self._instanceables)): # instance the corresponding sourceNode source_node = source_hierarchy[i] new_instance_node = pm.duplicate(source_node, ilf=True)[0] pm.parent(new_instance_node, node.getParent(), r=False) pm.delete(node) pm.select(dup_node) return dup_node
Example #17
Source File: modeling.py From SISideBar with MIT License | 5 votes |
def duplicate_with_skin(nodes, parentNode=None): #親子付けがあってもエラーはかないように修正 print nodes # リストタイプじゃなかったらリストに変換する if not isinstance(nodes, list): nodes = [nodes] dupObjs = [] for node in nodes: #子供のノード退避用ダミーペアレントを用意 dummy = common.TemporaryReparent().main(mode='create') common.TemporaryReparent().main(node,dummyParent=dummy, mode='cut') #複製 dup = cmds.duplicate(node)[0] #ウェイト転送メソッドをSimpleWeightコピペに変更 weight.SimpleWeightCopyPaste().main(node, mode='copy', saveName=__name__, weightFile=node) weight.SimpleWeightCopyPaste().main(dup, mode='paste', saveName=__name__, weightFile=node) #親子付けを戻す common.TemporaryReparent().main(node,dummyParent=dummy, mode='parent') #ダミーペアレントを削除 common.TemporaryReparent().main(dummyParent=dummy, mode='delete') if parentNode is not None: cmds.parent(dup, parentNode) dupObjs.append(dup) return dupObjs #シーン内、もしくは入力メッシュ内にゼロポリゴンオブジェクトがあるかどうか調べる関数
Example #18
Source File: fix_bound_joint.py From anima with MIT License | 4 votes |
def freeze_joint(joint): """Freezes the given joint by duplicating it and applying the freeze to the duplicate and then copy the joint orientation values to the original joint. :param joint: The joint which wanted to be frozen """ dup_joint = pm.duplicate(joint, rc=1)[0] # if the duplicate has any children delete them pm.delete(dup_joint.getChildren()) # unlock rotate channels dup_joint.rotateX.unlock() dup_joint.rotateY.unlock() dup_joint.rotateZ.unlock() # freeze the joint pm.makeIdentity(dup_joint, apply=1, r=1) # set rotation to zero if not joint.rotateX.isLocked(): joint.rotateX.set(0) else: # unlock and lock it again joint.rotateX.unlock() joint.rotateX.set(0) joint.rotateX.lock() if not joint.rotateY.isLocked(): joint.rotateY.set(0) else: # unlock and lock it again joint.rotateY.unlock() joint.rotateY.set(0) joint.rotateY.lock() if not joint.rotateZ.isLocked(): joint.rotateZ.set(0) else: # unlock and lock it again joint.rotateZ.unlock() joint.rotateZ.set(0) joint.rotateZ.lock() # get the joint orient joint.jointOrient.set(dup_joint.jointOrient.get()) # delete the duplicate joint pm.delete(dup_joint)
Example #19
Source File: card.py From fossil with BSD 3-Clause "New" or "Revised" License | 4 votes |
def cardIk(card): #ctrl = mel.eval( 'curve -d 1 -p -0.5 1 -0.866026 -p -0.5 1 0.866025 -p 1 1 0 -p -0.5 1 -0.866026 -p 0 0 0 -p -0.5 -1 -0.866026 -p -0.5 -1 0.866025 -p 0 0 0 -p -0.5 1 0.866025 -p 1 1 0 -p 0 0 0 -p 1 -1 0 -p -0.5 -1 -0.866026 -p -0.5 -1 0.866025 -p 1 -1 0 -k 0 -k 1 -k 2 -k 3 -k 4 -k 5 -k 6 -k 7 -k 8 -k 9 -k 10 -k 11 -k 12 -k 13 -k 14 ;' ) ctrl = PyNode(mel.eval('curve -d 1 -p 0 4 0 -p -2.828427 2.828427 -2.47269e-007 -p -4 0 -3.49691e-007 -p -2.828427 -2.828427 -2.47269e-007 -p 0 -4 0 -p 2.828427 -2.828427 0 -p 4 0 0 -p 2.828427 2.828427 0 -p 0 4 0 -p -1.23634e-007 2.828427 2.828427 -p -1.74846e-007 0 4 -p -1.23634e-007 -2.828427 2.828427 -p 0 -4 0 -p 3.70903e-007 -2.828427 -2.828427 -p 5.24537e-007 0 -4 -p 3.70903e-007 2.828427 -2.828427 -p 0 4 0 -p 0 0 0 -p 0 -4 0 -p 0 0 0 -p -4 0 0 -p 4 0 0 -p 0 0 -4 -p 0 0 4 -k 0 -k 1 -k 2 -k 3 -k 4 -k 5 -k 6 -k 7 -k 8 -k 9 -k 10 -k 11 -k 12 -k 13 -k 14 -k 15 -k 16 -k 17 -k 18 -k 19 -k 20 -k 21 -k 22 -k 23 ;')) ctrl.rename( card.name() + "_target" ) upCtrl = duplicate(ctrl)[0] upCtrl.rename( card.name() + "_up" ) aim = spaceLocator() aim.setParent(ctrl) aim.t.set(0, 0, 0) hide(aim) up = spaceLocator() up.setParent( upCtrl ) hide(up) base = spaceLocator() base.rename( 'cardIkBase' ) hide(base) pointConstraint( card, base ) core.dagObj.moveTo( ctrl, card.joints[-1] ) #core.dagObj.moveTo( upCtrl, card.vtx[1] ) core.dagObj.moveTo( upCtrl, card.cv[1][0] ) aimConstraint( aim, card, wut='object', wuo=up, aim=[0, -1, 0], u=[0, 0, -1]) dist = distanceDimension( base, aim ) dist.getParent().setParent(ctrl) hide(dist) core.math.divide( dist.distance, dist.distance.get() / card.sy.get() ) >> card.sy follower = spaceLocator() follower.rename( 'cardIkFollower' ) follower.setParent( card ) follower.t.set(0, 0, 0) hide(follower) pointConstraint( up, follower, skip=['x', 'z'] ) sideDist = distanceDimension( follower, up ) sideDist.getParent().setParent(ctrl) hide(sideDist) core.math.divide( sideDist.distance, sideDist.distance.get() / card.sz.get() ) >> card.sz # Orient controls with the card so moving in local space initially preserves orientation. upCtrl.setRotation( card.getRotation(space='world'), space='world' ) ctrl.setRotation( card.getRotation(space='world'), space='world' ) distBetweenCtrls = (ctrl.getTranslation(space='world') - upCtrl.getTranslation(space='world') ).length() if distBetweenCtrls < 8.0: upCtrl.s.set( [distBetweenCtrls / 8.0] * 3 ) ctrl.s.set( [distBetweenCtrls / 8.0] * 3 ) select(ctrl)
Example #20
Source File: tpose.py From fossil with BSD 3-Clause "New" or "Revised" License | 4 votes |
def generateReposer(): rJoints = [] rCards = [] # Build all the cards and joints cards = core.findNode.allCards() for card in cards: rCard = duplicate(card, po=0)[0] rCard.deleteAttr('fossilRigData') for child in rCard.listRelatives(): if not child.type() == 'nurbsSurface': delete(child) rCards.append(rCard) makeIdentity(rCard, t=False, r=False, s=True, apply=True) core.dagObj.lockScale( rCard ) for jnt in card.joints: j = joint(None) j.rename( simpleName(jnt, '{}_repose') ) core.dagObj.matchTo(j, jnt) assert jnt.info.get('options', {}).get('mirroredSide', False) is False, 'parent to mirrored joints not supported yet' j.addAttr('bpj', at='message') jnt.message >> j.bpj rJoints.append(j) # Set their parents for j in rJoints: parent = j.bpj.listConnections()[0].parent if parent: j.setParent( getRJoint(parent) ) # Put under cards, card pivot to lead joint for rCard, card in zip(rCards, cards): bpj = card.parentCardJoint if bpj: start = card.start() if card.joints else bpj rCard.setParent( getRJoint(bpj) ) core.dagObj.unlock(rCard) xform(rCard, ws=True, piv=xform(start, q=True, t=True, ws=True) ) core.dagObj.lockTrans(rCard) start = getRJoint(card.start()) start.setParent( rCard ) core.dagObj.lockTrans( core.dagObj.lockScale( start ) ) for j in rJoints: lockRYZ(j)
Example #21
Source File: modeling.py From SIWeightEditor with MIT License | 4 votes |
def marge_run(self): objects = common.search_polygon_mesh(self.objects, serchChildeNode=True, fullPath=True) #print 'marge target :', objects if len(objects) < 2: self.marged_mesh = objects return True skined_list = [] no_skin_list = [] parent_list = [cmds.listRelatives(obj, p=True, f=True) for obj in objects] for obj in objects: skin = cmds.ls(cmds.listHistory(obj), type='skinCluster') if skin: skined_list.append(obj) else: no_skin_list.append(obj) if no_skin_list and skined_list: skined_mesh = skined_list[0] for no_skin_mesh in no_skin_list: weight.transfer_weight(skined_mesh, no_skin_mesh, transferWeight=False, returnInfluences=False, logTransfer=False) if skined_list: marged_mesh = pm.polyUniteSkinned(objects)[0] pm.polyMergeVertex(marged_mesh, d=0.001) target_mesh = pm.duplicate(marged_mesh)[0] weight.transfer_weight(str(marged_mesh), str(target_mesh), transferWeight=True, returnInfluences=False, logTransfer=False) else: marged_mesh = pm.polyUnite(objects, o=True)[0] pm.polyMergeVertex(marged_mesh, d=0.001) target_mesh = pm.duplicate(marged_mesh)[0] #pm.delete(objects) for obj in objects: if pm.ls(obj): pm.delete(obj) pm.delete(marged_mesh) all_attr_list = [['.sx', '.sy', '.sz'], ['.rx', '.ry', '.rz'], ['.tx', '.ty', '.tz']] for p_node in parent_list: if cmds.ls(p_node, l=True): all_lock_list = [] for attr_list in all_attr_list: lock_list = [] for attr in attr_list: lock_list.append(pm.getAttr(target_mesh+attr, lock=True)) pm.setAttr(target_mesh+attr, lock=False) all_lock_list.append(lock_list) pm.parent(target_mesh, p_node[0]) for lock_list, attr_list in zip(all_lock_list, all_attr_list): for lock, attr in zip(lock_list, attr_list): #continue #print 'lock attr :', lock, target_mesh, attr pm.setAttr(target_mesh+attr, lock=lock) break pm.rename(target_mesh, objects[0]) pm.select(target_mesh) self.marged_mesh = str(target_mesh) return True
Example #22
Source File: modeling.py From SIWeightEditor with MIT License | 4 votes |
def face_extraction(faces=None, deleteOrg=True, selectDuplicated=True, transferWeight=True): ''' メッシュを選択したフェイスで切り分ける deleteOrg 切り分け元のフェイスを削除するかどうかを指定デフォルトTrue faces → 外部ツールからフェイスのリストを渡して実行したい場合の引数 ''' if faces is None: selection = cmds.ls(sl=True) else: selection = faces selObjects = [] for sel in selection: objNameTemp = sel.split('.') if not objNameTemp[0] in selObjects: selObjects.append(objNameTemp[0]) cmds.select(cl=True) duplicated = [] # 最後の選択格納用 # ハイライトされているオブジェクト毎に処理 for selObj in selObjects: compTemp = [] # バラバラのコンポーネントをオブジェクト毎に格納するリスト # 選択されているコンポーネントを整理 for sel in selection: objNameTemp = sel.split('.') objName = objNameTemp[0] # コンポーネントのオブジェクト名 # オブジェクト名が一致且つフェイス選択ならリスト入り if selObj == objName and '.f[' in sel: compTemp.append(sel) # print 'compTemp ALL : '+str(compTemp) if len(compTemp) != 0: dupObj = cmds.duplicate(selObj, rr=True) # 子供のオブジェクト取得関数呼び出し children = cmds.listRelatives(dupObj[0], type='transform', ad=True) # 子供のオブジェクトがある場合は重複を避けるため削除 if children: cmds.delete(children) duplicated.append(dupObj[0]) if transferWeight: # ウェイト転送フラグが有効だったら weight.transfer_weight(selObj, dupObj, logTransfer=False) # ウェイトを転送 faces = ",".join(compTemp) # リストを括弧のない文字列に faces = faces.replace(selObj, dupObj[0]) # 名前置き換え delface = faces.split(',') cmds.selectMode(co=True) cmds.hilite(dupObj) cmds.select(delface, r=True) #print 'del face :',delface for obj in dupObj: face_count = str(len(common.conv_comp(obj, mode='face'))) cmds.select(obj+'.f[0:'+face_count+']', tgl=True) #mel.eval('InvertSelection;') # 選択の反転 deleter = cmds.ls(sl=True) cmds.delete(deleter) # 最初に選択されていなかったフェース部分のみ削除 # 削除フラグが立っていたら古いフェイス削除 if deleteOrg is True: cmds.delete(compTemp) if selectDuplicated: cmds.select(duplicated) return duplicated #クラスタデフォーマの書き戻し
Example #23
Source File: symmetrize.py From SIWeightEditor with MIT License | 4 votes |
def duplycateSymmetry(object): meshNode = cmds.listRelatives(object, s=True, pa=True, type='mesh', fullPath=True) if meshNode is not None: #エラー吐くことがあるのでノンデフォーマヒストリを削除 cmds.bakePartialHistory(object,ppt=True) #ネームスペースから分割 nemeSplit = object.split('|') newName = nemeSplit[-1] #左右リネーム関数呼び出し newName = renameLR(newName) #複製して反転 duplicated = pm.duplicate(object, name=newName) try: parentNode = duplicated[0].firstParent()#Pymelの機能で親の階層を取得しておく。listRelativesと同じような。 parentNode = str(parentNode)#cmdsで使えるように文字列に変換 #左右リネーム関数呼び出し newParent = renameLR(parentNode) except: parentNode = None newParent = None duplicated = str(duplicated[0])#cmdsで使えるように文字列に変換 #子供のオブジェクト取得関数呼び出し children = pm.listRelatives(duplicated, ad=True, type='transform', f=True) #子供のオブジェクトがある場合は重複を避けるため削除 if len(children) != 0: cmds.delete(children) #アトリビュートのロック解除 #全部のロック解除しないと親が変わったときのロカール値が変わらず、ズレることがある。 attr = ['.translate', '.rotate', '.scale'] axis = ['X', 'Y', 'Z'] for varA in range(0, 3): for varB in range(0, 3): cmds.setAttr(duplicated + attr[varA] + axis[varB], lock=False) #ワールドスケール用ダミーロケータ作成 dummy = common.TemporaryReparent().main(mode='create') cmds.parent(duplicated, dummy) #X方向に-1スケーリングしてからスケールフリーズ cmds.scale(-1, 1, 1, dummy, relative=True, pivot=(0,0,0)) #杏仁生成を防ぐためにダミーロケータのスケールをフリーズ、負の値が親に入ってると杏仁が生成されるような。 if cmds.nodeType(duplicated) == 'joint': #ジョイントを正しい回転、位置に修正するため、スケールフリーズ前のグローバル値を取得しておく pos = cmds.xform(duplicated, q=True, t=True, ws=True) rot = cmds.xform(duplicated, q=True, ro=True, ws=True) cmds.makeIdentity(dummy, apply=True, translate=False, rotate=False, scale=True, preserveNormals=True) #元の親名と違い、かつ新しい親名のオブジェクトが存在する場合は付け替え if parentNode is None: cmds.parent(duplicated, w=True) else: if parentNode != newParent and cmds.ls(newParent): cmds.parent(duplicated, newParent) else: cmds.parent(duplicated, parentNode) #ダミーペアレントを削除 common.TemporaryReparent().main(dummyParent=dummy, mode='delete') cmds.makeIdentity(duplicated, apply=True, translate=False, rotate=False, scale=True, preserveNormals=True) if cmds.nodeType(duplicated) == 'joint': cmds.xform(duplicated , t=pos, ro=rot, ws=True) return duplicated
Example #24
Source File: modeling.py From SISideBar with MIT License | 4 votes |
def marge_run(self): objects = common.search_polygon_mesh(self.objects, serchChildeNode=True, fullPath=True) print objects #print objects if len(objects) < 2: self.marged_mesh = objects return True skined_list = [] no_skin_list = [] parent_list = [cmds.listRelatives(obj, p=True, f=True) for obj in objects] for obj in objects: skin = cmds.ls(cmds.listHistory(obj), type='skinCluster') if skin: skined_list.append(obj) else: no_skin_list.append(obj) if no_skin_list and skined_list: skined_mesh = skined_list[0] for no_skin_mesh in no_skin_list: weight.transfer_weight(skined_mesh, no_skin_mesh, transferWeight=False, returnInfluences=False, logTransfer=False) if skined_list: marged_mesh = pm.polyUniteSkinned(objects)[0] pm.polyMergeVertex(marged_mesh, d=0.001) target_mesh = pm.duplicate(marged_mesh)[0] weight.transfer_weight(str(marged_mesh), str(target_mesh), transferWeight=True, returnInfluences=False, logTransfer=False) else: marged_mesh = pm.polyUnite(objects, o=True)[0] pm.polyMergeVertex(marged_mesh, d=0.001) target_mesh = pm.duplicate(marged_mesh)[0] #pm.delete(objects) for obj in objects: if pm.ls(obj): pm.delete(obj) pm.delete(marged_mesh) all_attr_list = [['.sx', '.sy', '.sz'], ['.rx', '.ry', '.rz'], ['.tx', '.ty', '.tz']] for p_node in parent_list: if cmds.ls(p_node, l=True): all_lock_list = [] for attr_list in all_attr_list: lock_list = [] for attr in attr_list: lock_list.append(pm.getAttr(target_mesh+attr, lock=True)) pm.setAttr(target_mesh+attr, lock=False) all_lock_list.append(lock_list) pm.parent(target_mesh, p_node[0]) for lock_list, attr_list in zip(all_lock_list, all_attr_list): for lock, attr in zip(lock_list, attr_list): continue pm.setAttr(target_mesh[0]+attr, lock=lock) break pm.rename(target_mesh, objects[0]) pm.select(target_mesh) self.marged_mesh = str(target_mesh) return True
Example #25
Source File: modeling.py From SISideBar with MIT License | 4 votes |
def face_extraction(faces=None, deleteOrg=True, selectDuplicated=True, transferWeight=True): ''' メッシュを選択したフェイスで切り分ける deleteOrg 切り分け元のフェイスを削除するかどうかを指定デフォルトTrue faces → 外部ツールからフェイスのリストを渡して実行したい場合の引数 ''' if faces is None: selection = cmds.ls(sl=True) else: selection = faces selObjects = [] for sel in selection: objNameTemp = sel.split('.') if not objNameTemp[0] in selObjects: selObjects.append(objNameTemp[0]) cmds.select(cl=True) duplicated = [] # 最後の選択格納用 # ハイライトされているオブジェクト毎に処理 for selObj in selObjects: # print 'currentObj : ' + str(selObj) compTemp = [] # バラバラのコンポーネントをオブジェクト毎に格納するリスト # 選択されているコンポーネントを整理 for sel in selection: objNameTemp = sel.split('.') objName = objNameTemp[0] # コンポーネントのオブジェクト名 # オブジェクト名が一致且つフェイス選択ならリスト入り if selObj == objName and '.f[' in sel: compTemp.append(sel) # print 'compTemp add : '+str(sel) # print 'compTemp ALL : '+str(compTemp) if len(compTemp) != 0: dupObj = cmds.duplicate(selObj, rr=True) # 子供のオブジェクト取得関数呼び出し children = cmds.listRelatives(dupObj[0], type='transform', ad=True) # 子供のオブジェクトがある場合は重複を避けるため削除 if children: cmds.delete(children) duplicated.append(dupObj[0]) if transferWeight: # ウェイト転送フラグが有効だったら weight.transfer_weight(selObj, dupObj, logTransfer=False) # ウェイトを転送 faces = ",".join(compTemp) # リストを括弧のない文字列に faces = faces.replace(selObj, dupObj[0]) # 名前置き換え delface = faces.split(',') cmds.select(delface, r=True) mel.eval('InvertSelection') # 選択の反転 deleter = cmds.ls(sl=True) cmds.delete(deleter) # 最初に選択されていなかったフェース部分のみ削除 # 削除フラグが立っていたら古いフェイス削除 if deleteOrg is True: cmds.delete(compTemp) if selectDuplicated: cmds.select(duplicated) return duplicated #クラスタデフォーマの書き戻し