Речь пойдет о создании свойств перечисления FBPropertyEnum и выполнения действия  FBPropertyAction у наследников от FBComponent. Это бывает зачастую необходимо при регистрации переменных для использования в таблицах свойств (визуальный компонент BrowsingProperty) и для взаимодействия с интерфейсом MotionBuilder.

1) Свойство перечисление FBPropertyEnum
Получилось сделать свойство в виде перечисления — FBPropertyEnum
Для этого вводим следующие переменные
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
enum kMyEnum {
kDefaultItemClassic,
kDefaultItemRANSAC
};
const char * FBPropertyBaseEnum ::mStrings[] = {"Classic", "RANSAC"};
static kMyEnum GetEnumValue(HIObject* pObject)
{

SampleComponent *pComponent = FBCast<SampleComponent> (pObject);
//return pComponent->mWindDirection;
return kDefaultItemClassic;
}
static void SetEnumValue(HIObject* pObject, kMyEnum pValue)
{

SampleComponent *pComponent = FBCast<SampleComponent> (pObject);
//pComponent->mWindDirection = pValue;

}

Указанные выше функции необходимы чтобы задать значения перечеслений и обработчик на ввод/вывод значения.

Далее вводим новое свойство — FBPropertyBaseEnum mEnum;
Теперь можно создать его как внутреннее и добавить в список свойств. Это все выполняется внутри вашего класса, наследника от FBComponent:
1
2
mEnum.CreateInternal( this, "Algorithm", (fbExternalGetSetHandler) GetEnumValue, (fbExternalGetSetHandler) SetEnumValue );
PropertyAdd( &mEnum );

2) Свойство действие FBPropertyAction

Следует определить функции обработки

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
static bool GetActionValue(void* pComponent)

{

//return pComponent->mWindDirection;

return true;

}

static void SetActionValue(HIObject* pObject, bool pValue)

{

SampleComponent *pComponent = FBCast<SampleComponent> (pObject);

pValue = true;

//pComponent->mWindDirection = pValue;

}

SetActionValue будет вызвано при нажатии кнопки два раза, true и false в параметре pValue

Событие работает с булевским типом данных.

Теперь создание самого свойства

1
2
3
4
5
6
7
FBPropertyAction  mAction;

...

mAction.CreateInternal( this, "Action", (fbExternalGetSetHandler) GetActionValue, (fbExternalGetSetHandler) SetActionValue );

PropertyAdd( &mAction );
OR SDK — создание свойств перечисления и действия
Метки:        

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *