白老师您好,我最近在学习MoBu的Python脚本编写,遇到一个问题想要请教一下。我想实现在选中一根骨骼的时候,拉取被选中骨骼的空间名,并引用它,比如: rh = FBFindModelByLabelName( ‘Xxx:Hips’) rh.Selected = True rh.Selected = False rh.Rotation = FBVector3d(90,0,0) 我想要用当前选中骨骼的空间名来替换这个Xxx,代码应该怎么写呢。 Reply
你好,首先我不是很确定你所说的“空间名”具体含义是指什么,其次 ‘Xxx:Hips’ 应该是一个 rigging 的 hips 控制器名字对吧?其中的 Xxx 是这个 character 的名称,如果要改,就需要该整个 character 的名称,而不能单单在这一个控制器上改而其他的不变 Reply
首先感谢大佬的回复。举个例子,就是在MoBu里面有A/B两套带NameSpace的角色骨骼,我需要分别给这两套骨骼调整到标准的T-Pose来进行重定向。我写了一段代码来调整每根骨骼的旋转值,就是这一段(A指的是它的NameSpace,Hips是它其中的一根骨骼) rh = FBFindModelByLabelName( ‘A:Hips’) rh.Selected = True rh.Selected = False rh.Rotation = FBVector3d(90,0,0) 但是我如果要调整B角色的话,就需要再写一段同样的代码 rh = FBFindModelByLabelName( ‘B:Hips’) rh.Selected = True rh.Selected = False rh.Rotation = FBVector3d(90,0,0) 这样就很繁琐,因为每个项目的角色骨骼的空间名都是不一样的,每次都需要再单独写代码。所以我在想是不是有一段代码可以直接拉取当前场景中选中的骨骼的NameSpace来直接替代这个A/B,这样可以省去很多时间。 不知道这样描述,大佬是否能够明白我的意思。再次感谢大佬花时间来回复我这个小白的问题~~ Reply
我没有做过类似的功能,但简单 google 了一下,看到这个讨论应该是你要的 https://forums.autodesk.com/t5/motionbuilder-forum/finding-a-namespace-from-a-selected-character-from-a-drop-down/td-p/4227707 MB 的 python 似乎没有直接查找 namespace 的功能,只能手动解析物体名称来查找它的 namespace Reply
又来求助大佬了(捂脸)。 获取当前选中物体的空间名代码我在论坛搞到了,执行这段代码(选中物体的空间名是zhenchipeng) from pyfbsdk import * def GetSelModelNameSpace(): lSelModels = [] modelList = FBModelList() FBGetSelectedModels (modelList, None, True) for model in modelList: if model.Selected == True: lSelModels.extend( [ model.LongName.rsplit(‘:’, 1)[0] ] ) return lSelModels[0] myNameSpace = GetSelModelNameSpace() print (myNameSpace + ‘:Hips’) 得到结果 zhenchipeng:Hips 但是我在继续执行下面一段代码的时候并没有什么效果 rh = FBFindModelByLabelName( myNameSpace + ‘:Hips’ ) rh.Selected = True rh.Rotation = FBVector3d(90,0,0) #Lcl 不知道哪里出了问题,是myNameSpace + ‘:Hips’ 这里的语法么?希望可以得到大佬的解答。 Reply
rh = FBFindModelByLabelName( myNameSpace + ‘:Hips’ ) 这之后 print 一下 rh.Name 看是不是真的 get 到了,另外 FBFindModelByLabelName 返回的是个 List,你需要取的应该是其中第一个,所以语句需要改成 rh = FBFindModelByLabelName( myNameSpace + ‘:Hips’ )[0] 但还是要 print 来确认得到你要的东西 Reply
白老师您好,我最近在学习MoBu的Python脚本编写,遇到一个问题想要请教一下。我想实现在选中一根骨骼的时候,拉取被选中骨骼的空间名,并引用它,比如:
rh = FBFindModelByLabelName( ‘Xxx:Hips’)
rh.Selected = True
rh.Selected = False
rh.Rotation = FBVector3d(90,0,0)
我想要用当前选中骨骼的空间名来替换这个Xxx,代码应该怎么写呢。
你好,首先我不是很确定你所说的“空间名”具体含义是指什么,其次 ‘Xxx:Hips’ 应该是一个 rigging 的 hips 控制器名字对吧?其中的 Xxx 是这个 character 的名称,如果要改,就需要该整个 character 的名称,而不能单单在这一个控制器上改而其他的不变
首先感谢大佬的回复。举个例子,就是在MoBu里面有A/B两套带NameSpace的角色骨骼,我需要分别给这两套骨骼调整到标准的T-Pose来进行重定向。我写了一段代码来调整每根骨骼的旋转值,就是这一段(A指的是它的NameSpace,Hips是它其中的一根骨骼)
rh = FBFindModelByLabelName( ‘A:Hips’)
rh.Selected = True
rh.Selected = False
rh.Rotation = FBVector3d(90,0,0)
但是我如果要调整B角色的话,就需要再写一段同样的代码
rh = FBFindModelByLabelName( ‘B:Hips’)
rh.Selected = True
rh.Selected = False
rh.Rotation = FBVector3d(90,0,0)
这样就很繁琐,因为每个项目的角色骨骼的空间名都是不一样的,每次都需要再单独写代码。所以我在想是不是有一段代码可以直接拉取当前场景中选中的骨骼的NameSpace来直接替代这个A/B,这样可以省去很多时间。
不知道这样描述,大佬是否能够明白我的意思。再次感谢大佬花时间来回复我这个小白的问题~~
我没有做过类似的功能,但简单 google 了一下,看到这个讨论应该是你要的
https://forums.autodesk.com/t5/motionbuilder-forum/finding-a-namespace-from-a-selected-character-from-a-drop-down/td-p/4227707
MB 的 python 似乎没有直接查找 namespace 的功能,只能手动解析物体名称来查找它的 namespace
感谢大佬回复,我再找一些文档来研究一下。
又来求助大佬了(捂脸)。
获取当前选中物体的空间名代码我在论坛搞到了,执行这段代码(选中物体的空间名是zhenchipeng)
from pyfbsdk import *
def GetSelModelNameSpace():
lSelModels = []
modelList = FBModelList()
FBGetSelectedModels (modelList, None, True)
for model in modelList:
if model.Selected == True:
lSelModels.extend( [ model.LongName.rsplit(‘:’, 1)[0] ] )
return lSelModels[0]
myNameSpace = GetSelModelNameSpace()
print (myNameSpace + ‘:Hips’)
得到结果 zhenchipeng:Hips
但是我在继续执行下面一段代码的时候并没有什么效果
rh = FBFindModelByLabelName( myNameSpace + ‘:Hips’ )
rh.Selected = True
rh.Rotation = FBVector3d(90,0,0) #Lcl
不知道哪里出了问题,是myNameSpace + ‘:Hips’ 这里的语法么?希望可以得到大佬的解答。
rh = FBFindModelByLabelName( myNameSpace + ‘:Hips’ )
这之后 print 一下 rh.Name 看是不是真的 get 到了,另外 FBFindModelByLabelName 返回的是个 List,你需要取的应该是其中第一个,所以语句需要改成
rh = FBFindModelByLabelName( myNameSpace + ‘:Hips’ )[0]
但还是要 print 来确认得到你要的东西
max的范例在自带的帮助文件里啊,甚至有详细的解释,个人觉得比maya丢一堆代码文件让你自己去熟悉更好
大佬能讲讲飘带的具体实现方法吗?
谢谢大佬
好久不见,一来就有东西学习,白老师太棒了!