-
Notifications
You must be signed in to change notification settings - Fork 7
Expand file tree
/
Copy pathSetPivot.py
More file actions
50 lines (42 loc) · 1.91 KB
/
SetPivot.py
File metadata and controls
50 lines (42 loc) · 1.91 KB
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
from pxr import Usd, UsdGeom, UsdPhysics, UsdShade, Sdf, Gf, Tf
import omni.usd
import omni.timeline
# Get stage.
stage = omni.usd.get_context().get_stage()
# Get selection.
selection = omni.usd.get_context().get_selection()
paths = selection.get_selected_prim_paths()
# --------------------------------------------------.
# Set pivot.
# --------------------------------------------------.
def _setPivot(prim : Usd.Prim, pV : Gf.Vec3f):
pivot = prim.GetAttribute("xformOp:translate:pivot").Get()
if pivot != None:
# Specify a value for each type.
if type(pivot) == Gf.Vec3f:
prim.GetAttribute("xformOp:translate:pivot").Set(Gf.Vec3f(pV))
elif type(pivot) == Gf.Vec3d:
prim.GetAttribute("xformOp:translate:pivot").Set(Gf.Vec3d(pV))
else:
# xformOpOrder is also updated.
# ["xformOp:translate", "xformOp:translate:pivot", "xformOp:rotateXYZ", "xformOp:scale", "!invert!xformOp:translate:pivot"]
# The following do not work correctly?
#xformAPI = UsdGeom.XformCommonAPI(prim)
#xformAPI.SetPivot(Gf.Vec3f(pV))
prim.CreateAttribute("xformOp:translate:pivot", Sdf.ValueTypeNames.Float3, False).Set(Gf.Vec3f(pV))
# ["xformOp:translate", "xformOp:rotateXYZ", "xformOp:scale", "xformOp:translate:pivot", "!invert!xformOp:translate:pivot"]
transformOrder = prim.GetAttribute("xformOpOrder").Get()
orderList = []
for sV in transformOrder:
orderList.append(sV)
orderList.append("xformOp:translate:pivot")
orderList.append("!invert!xformOp:translate:pivot")
prim.GetAttribute("xformOpOrder").Set(orderList)
# --------------------------------------------------.
for path in paths:
prim = stage.GetPrimAtPath(path)
if prim.IsValid() == True:
# Print prim name.
print(f"[ {prim.GetName()} ]")
pV = Gf.Vec3f(10.0, 20.0, 0.0)
_setPivot(prim, pV)