-
Notifications
You must be signed in to change notification settings - Fork 1
/
bdMirrorCtrl.py
113 lines (87 loc) · 3.85 KB
/
bdMirrorCtrl.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
import maya.OpenMaya as om
import maya.OpenMayaAnim as oma
import sys
import math
import pymel.core as pm
import pymel.core.datatypes as dt
def bdMirrorCtrl():
selection = pm.ls(sl=True)
if selection:
try:
source,target = pm.ls(sl=True)
except:
pm.warning('Select source and target controller')
return
sourceShape = source.getShape()
if sourceShape.type() != 'nurbsCurve':
pm.error('Selected source is not nurbs curve')
return
targetCvsPos = [ (dt.Point(-x.x, x.y, x.z) ) for x in sourceShape.getCVs(space='world')]
targetShape = target.getShape()
if targetShape.type() != 'nurbsCurve':
pm.error('Selected target is not nurbs curve')
return
targetShape.setCVs(targetCvsPos,space='world')
targetShape.updateCurve()
else:
print 'Select source and target controller'
'''
mDagPath = om.MDagPath()
mSelList = om.MSelectionList()
om.MGlobal.getActiveSelectionList(mSelList)
srcCurvePointAray = om.MPointArray()
destCurvePointAray = om.MPointArray()
numSel = mSelList.length()
if numSel == 2:
mSelList.getDagPath(0,mDagPath)
if mDagPath.hasFn(om.MFn.kNurbsCurve):
srcCurveFn = om.MFnNurbsCurve(mDagPath)
srcCurveFn.getCVs(srcCurvePointAray,om.MSpace.kWorld)
mSelList.getDagPath(1,mDagPath)
if mDagPath.hasFn(om.MFn.kNurbsCurve):
destCurveFn = om.MFnNurbsCurve(mDagPath)
print destCurveFn.name()
iterCurveCVs = om.MItCurveCV( mDagPath)
while not iterCurveCVs.isDone():
mPoint = om.MPoint()
index = iterCurveCVs.index()
mPoint.x = -srcCurvePointAray[index][0]
mPoint.y = srcCurvePointAray[index][1]
mPoint.z = srcCurvePointAray[index][2]
#print mPoint.x, mPoint.y, mPoint.z
iterCurveCVs.setPosition(mPoint,om.MSpace.kWorld)
iterCurveCVs.updateCurve()
iterCurveCVs.next()
pm.spaceLocator(p=[mPoint.x ,mPoint.y ,mPoint.z ])
'''
def bdMatchCtrl():
mDagPath = om.MDagPath()
mSelList = om.MSelectionList()
om.MGlobal.getActiveSelectionList(mSelList)
srcCurvePointAray = om.MPointArray()
destCurvePointAray = om.MPointArray()
numSel = mSelList.length()
if numSel == 2:
mSelList.getDagPath(0,mDagPath)
if mDagPath.hasFn(om.MFn.kNurbsCurve):
srcCurveFn = om.MFnNurbsCurve(mDagPath)
srcCurveFn.getCVs(srcCurvePointAray,om.MSpace.kWorld)
mSelList.getDagPath(1,mDagPath)
if mDagPath.hasFn(om.MFn.kNurbsCurve):
destCurveFn = om.MFnNurbsCurve(mDagPath)
print destCurveFn.name()
iterCurveCVs = om.MItCurveCV( mDagPath)
while not iterCurveCVs.isDone():
mPoint = om.MPoint()
index = iterCurveCVs.index()
print index
mPoint.x = srcCurvePointAray[index][0]
mPoint.y = srcCurvePointAray[index][1]
mPoint.z = srcCurvePointAray[index][2]
print mPoint.x, mPoint.y, mPoint.z
try:
iterCurveCVs.setPosition(mPoint,om.MSpace.kWorld )
except:
mc.warning('Could not move')
iterCurveCVs.updateCurve()
iterCurveCVs.next()