-
MoBu Snippets: Parent\Child constraint
Posted on 16 August 2009 Neill 21 commentsMotionBuilder, Programming OpenReality, Python, SDK, Snippets, Tips1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21// Create Parent/Child constraint
FBConstraintManager lConstraintManager;
HFBConstraint lConstraint = NULL;
int i, c = lConstraintManager.TypeGetCount();
for( i = 0; i < c; i++ )
{
if( strstr(lConstraintManager.TypeGetName(i), "Parent/Child") )
{
lConstraint = lConstraintManager.TypeCreateConstraint(i);
break;
}
}
if (lConstraint){
lConstraint->ReferenceAdd( 0, lChildModel ); // here you put your constrained model
lConstraint->ReferenceAdd( 1, lParentModel ); // here you put your source model
// Activate constraint
lConstraint->Active = true;
}21 Responses to “MoBu Snippets: Parent\Child constraint”
-
не очень понял к чему это?
этож не Питон.кстати как раз сейчас бьюсь на тем каким образом создавать констрейны и назначать объекты в них… было бы полезно еслибы был пример для питона билдеровского.
-
да это не питон, это OpenReality SDK на с++
на питоне это будет очень похоже:from pyfbsdk import *
lConstraintManager = FBConstraintManager()
for index in range(lConstraintManager.TypeGetCount()):
name = lConstraintManager.TypeGetName(index)
if (name == “Parent/Child”):
lConstraint = lConstraintManager.TypeCreateConstraint(index)
print lConstraint.Name
del( lConstraint )
del( lConstraintManager )данный скрипт создает Parent/Child констрайнт и выводит на консоль его имя
-
почему-то в сцене не появился хотя ошибок вроде не было
возможно здесь не отображаются табулционный отступы, я вот так писал вроде так же
from pyfbsdk import *
lConstraintManager = FBConstraintManager()
for index in range(lConstraintManager.TypeGetCount()):
name = lConstraintManager.TypeGetName(index)
if name == “Parent/Child” :
lConstraint = lConstraintManager.TypeCreateConstraint(index)del( lConstraint )
del( lConstraintManager ) -
да… не отображаются…
-
а даже если создастся, как дальше назначить на него управляющие объекты,
например:
кость управляемая через “Parent/Child” маркером -
да с отступами проблема, можно тогда для Питона новой темой оформить информацию и код пометить тегом соответствующим.
Теперь по поводу назначения объектов. Смотришь какие есть у данного констрейна группы. Наприме, у Parent/Child имеется группа Constrained object(child) и группа Source(Parent). Так вот в каком они порядке находятся на панели Constraint Settings, в таком они и нумеруются (0,1)
Дальше
lConstraint.ReferenceAdd( 0, lBone );
Данный вызов добавит модель lBone в группу 0, следовательно объект будет приконстрейнен
lConstraintюReferenceAdd( 1, pModel );
Данный вызов добавит модель pModel в группу 1, т.е. в качестве парента.
В констрейне Parent/Child может быть только один child и много парентов, следовательно добавление моделей в группу 1 можно делать несколько раз при необходимости.
Затем констрейн включается путем выставления его состояния активности
lConstraint.Active = True -
так у тебя не получилось создать констрейн через питон? а какую версию МоБи используешь?
-
2009-ый
нет, не получилось ( -
да, есть такое дело. Есть маленький нюанс, в функция TypeCreateConstraint создает ограничитель, но не помещает его в список навигатора. Это нужно сделать в ручную
FBSystem().Scene.Constraints.append(lConstraint) -
получилось )
спасибо большое, теперь смогу облегчать себе жизнь ) -
Привет еще раз

а не подскажешь как такую же задачу реализовать для
Relation Constraint’a ?
не очень пока врубаюсь в философию создания в нем Нод
как выделить FBBox – из объекта и туда вставить
ну и вобще как создать Sender и Reciever ы и соеденить их вместе по нужным параметрам?? -
Привет,
тебе для Питона ? -
ага

только стоило мне тебе написать, как сразу че-то получилось )правда еще не до конца разобрался как соединять нодки
-
это хорошо что получается… если не разберешься с нодами, пиши
-
а не подскажешь как залинковать, чтоб мне время не терять?
-
сначала находишь две анимационные ноды, одну на выход, другую на вход. Искать их можно по имени, например
mAdd2A = mAddBox2->AnimationNodeInGet()->Nodes.Find(“a”);
mAdd2B = mAddBox2->AnimationNodeInGet()->Nodes.Find(“b”);
mAdd2R = mAddBox2->AnimationNodeOutGet()->Nodes.Find(“Result”);Затем соединяешь источник с приемником, с помощью функции FBConnect, например вот так
FBConnect( mDamp2R, mAdd2A );
-
а почему связь в констрейне не отображается и если его удалить кстати так связь не разрывается
-
должна отображаться, проверь может какой-то из параметров у тебя не найден ?
Dst = FindAnimationNode(lBox.AnimationNodeInGet(), ‘a’ )
Src = FindAnimationNode(lBox.AnimationNodeOutGet(), ‘Result’ )
if Dst and Src:
FBConnect(Src, Dst)здесь
def FindAnimationNode( pParent, pName ):
lResult = None
for lNode in pParent.Nodes:
if lNode.Name == pName:
lResult = lNode
break
return lResultдовольно удобная функция с Area портала
-
может быть я как-то неправильно нахожу этим ноды
если разложить просто то я примерно так делал
с учетом того что констрейн уже есть и
Marker – посылатель
Marker1 – получательconstr = GetConstrByName(“Relation”) — моя функция выдающая констрейн по имени
Marker = constr.Boxes[0].Box –по идее это боксы
Marker1 = constr.Boxes[1].BoxSendTrs = Marker.AnimationNodeOutGet().Nodes[0] – здесь посылаю только траслейшн
RecTrs = Marker1.AnimationNodeInGet().Nodes[0]FBConnect(SendTrs , RecTrs )
и линкова происходит но независимая от констрейн почему-то
-
вот рабочий скрипт (в сцене два бокса-модели и один relation constraint c source, constrained boxes
from pyfbsdk import *
lConstraint = FBSystem().Scene.Constraints[0]
if lConstraint:
print lConstraint.NamelSrc = lConstraint.Boxes[0]
lDst = lConstraint.Boxes[1]if lSrc and lDst:
print lSrc.Name
print lDst.Name
lSrcNode = lSrc.AnimationNodeOutGet().Nodes[0]
lDstNode = lDst.AnimationNodeInGet().Nodes[0]
FBConnect ( lSrcNode, lDstNode )Только в моем случае если вызывать Nodes[0] соединение будет между вращением и перемещением. У них порядок не одинаковый может быть, лучше по индексу никогда не ссылаться… используй поиск по имени, из функции выше – FindAnimationNode
-
о, кажись получилось
видимо действительно перепутал где-то вход с выходомспасибо большое )
Leave a Reply
You must be logged in to post a comment.
-

English
Russian
Recent Comments