MayaScripts_AttachTransform : TransformのAttach
Maya2023からですかね?ようやく任意のTransformノード同士の位置合わせが標準で出来るようになったっぽいですね。 ・・・いや、遅いだろて!
もう作ってるて!
AttachTransform
# encoding=utf8 import pymel.core as pm VERSION = "0.1" print("\n*import {0}.{1}".format(__name__,VERSION)) def getTranslate (target): # type(pm.PyNode) -> list[float, float, float] return pm.xform(target, q = True, ws = True, t = True) def getRotate (target): # type(pm.PyNode) -> list[float, float, float] return pm.xform(target, q = True, ws = True, ro = True) def setTranslate (target, vector): # type(pm.PyNode, list[float, float, float]) -> None pm.xform(target, ws = True, t = vector) def setRotate (target, angle): # type(pm.PyNode, list[float, float, float]) -> None pm.xform(target, ws = True, ro = angle) def attachTranslate (master, slave): # type(pm.PyNode, pm.PyNode) -> None vector = getTranslate(master) setTranslate(slave, vector) def attachRotate (master, slave): # type(pm.PyNode, pm.PyNode) -> None angle = getRotate(master) setRotate(slave, angle) def attachTransform (master, slave): # type(pm.PyNode, pm.PyNode) -> None attachTranslate(master, slave) attachRotate(master, slave) def getMasterAndSlavesFromSelected (): # type() -> list[pm.PyNode] target = pm.selected() if len(target) < 2: return None return target def main (): target = getMasterAndSlavesFromSelected() if not target : return master = target[-1] modifier = pm.getModifiers() attachFuncs = { 0:attachTransform,#none 4:attachTranslate,#ctrl 8:attachRotate#alt } for i in target[:-1]: attachFuncs[modifier](master,i) pm.headsUpMessage("*{0}* AttachTransform done *{0}*".format("-"*50))
使い方
Attachしたいノードを選択し、実行すると、最後に選択されたノードをターゲットとして、位置と回転を合わせます。
Ctrl
を押しながら実行すると、位置のみをAttachします。
Alt
を押しながら実行すると、回転のみをAttachします。
以上。