Advertisement
cwisbg

#VectorTester

Aug 17th, 2018
397
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 3.32 KB | None | 0 0
  1. #VectorTester
  2. from pymel.core import *
  3. import maya.api.OpenMaya as om
  4. import math
  5. import time
  6. import pymel.core.datatypes as dt
  7. import maya.cmds as cmds
  8.  
  9. class thing():
  10.     def __init__(self, thingObject):
  11.         self.thingObj = thingObject
  12.         self.pos = om.MVector(thingObject.getTranslation())
  13.         self.dir = []
  14.        
  15. def grpr(name):
  16.     g = ls(name)
  17.     if g:
  18.         delete(g)
  19.     g = group(n=name,em=1)
  20.     return g    
  21. def getDist(p1,p2):
  22.     dist = math.sqrt((p1[0] - p2[0])**2 + (p1[1] - p2[1])**2 + (p1[2] - p2[2])**2)
  23.     return dist  
  24. def getCenter(p1,p2, offset):
  25.     center = (p1 + -p1*offset) + p2*offset
  26.     return center
  27. def getCenter(p1,p2, offset):
  28.     return (p1 + -p1*offset) + p2*offset    
  29. def adder(testPF, t):
  30.     return (testPF[0]+t[0] , testPF[1]+t[1] ,testPF[2]+t[2])  
  31. def subber(testPF, t):
  32.     return (testPF[0]-t[0] , testPF[1]-t[1] ,testPF[2]-t[2])    
  33. def setMag(testP, amnt):
  34.     return (testP[0]*amnt , testP[1]*amnt ,testP[2]*amnt) # scaler
  35. def getMag(testP):
  36.     return math.sqrt(testP[0]**2 + testP[1]**2 + testP[2]**2) #magnitude
  37. def makeNormal(vector, mag):
  38.     return (vector[0]/mag ,vector[1]/mag,vector[2]/mag) #normalize
  39. def scaler(testP, amnt):
  40.     return (testP[0]*amnt , testP[1]*amnt ,testP[2]*amnt) # scaler  
  41. def scalerD(testP, amnt):
  42.     return (testP[0]/amnt , testP[1]/amnt ,testP[2]/amnt) # scaler  
  43. def rVec(randAmnt):
  44.     rV = om.MVector(r.uniform(-randAmnt,randAmnt),r.uniform(-randAmnt,randAmnt),r.uniform(-randAmnt,randAmnt))
  45.     return rV
  46.  
  47.  
  48. def angleBtw(a, b):
  49.     return math.sqrt(((a.x-b.x)**2)+((a.y-b.y)**2)+((a.z-b.z)**2))
  50.  
  51.  
  52. cleanGrp = grpr("lineGrp")
  53.  
  54. origin = om.MVector(0,0,0)
  55.  
  56. # Working objects
  57. p1 = thing(ls("p1")[0])
  58. p2 = thing(ls("p2")[0])
  59. p3 = thing(ls("p3")[0])
  60. target = thing(ls("target")[0])
  61. goalObj = thing(ls("goalObj")[0])
  62.  
  63. rotatorObj = thing(ls("Rotator")[0])
  64. rotatorObj2 = thing(ls("Rotator2")[0])
  65.  
  66.  
  67. center = (p1.pos + p2.pos) /2
  68. offsetAmnt = (target.pos - center)
  69.  
  70.  
  71. # Vector displays
  72. p1Vector = curve(p=[origin, p1.pos],d=1,n = "p1Vector")
  73. p2Vector = curve(p=[origin, p2.pos],d=1,n = "p2Vector")
  74. targetVector = curve(p=[origin, target.pos],d=1,n = "targetVector")
  75. centerVector = curve(p=[origin, center],d=1,n = "centerVector")
  76. offsetAmntVector = curve(p=[center+origin, center+offsetAmnt],d=1,n = "offsetAmntVector")
  77. parent([p1Vector,p2Vector,targetVector, centerVector, offsetAmntVector], cleanGrp)
  78. move(goalObj.thingObj ,center+offsetAmnt)
  79. select(cl=1)
  80.  
  81. p1N = om.MVector(p1.pos)
  82. p2N = om.MVector(p2.pos)
  83. p1N.normalize()
  84. p2N.normalize()
  85.  
  86. #rotTest = math.cos(p1.pos)
  87. dot =  p1N*p2N
  88. rotAmnt = math.acos(dot)* 180/math.pi
  89. rotAmntS = math.acos(dot)* 180/math.pi
  90.  
  91.  
  92.  
  93. hypotenuse = getDist(p1.pos ,p2.pos)
  94. opposite = getDist(p1.pos, p3.pos)
  95. adjacent = getDist(p2.pos, p3.pos)
  96. angleInRadians = acos((adjacent**2 + opposite**2 - hypotenuse**2)/(2 * opposite * hypotenuse))
  97.  
  98. print "hypotenuse ", hypotenuse
  99. print "opposite ", opposite
  100. print "adjacent ", adjacent
  101. print "angleInRadians ", angleInRadians
  102. print degrees(angleInRadians)
  103.  
  104. print "Dot: ", dot
  105. print "acos: ",math.acos(dot)
  106. print "sin: ",rotAmntS
  107. print p1.pos.x
  108. print "angle between ", angleBtw(p1.pos, p2.pos)
  109.  
  110. setAttr(rotatorObj.thingObj.rotateX, rotAmnt)
  111. setAttr(rotatorObj2.thingObj.rotateX ,degrees(angleInRadians))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement