"Assertion failed!" error while using CPlusPlus OP in TouchDesigner
はじめに
TouchDesignerのCPlusPlus OPにはsetupParameters
というメンバ関数を用いて,任意の変数をオペレータのプロパティに表示して実行時に変更することができる.
このメンバ関数の名前の指定に関して規則があり,試行錯誤が必要となったのでメモしておく.
変更前
速度の最大値としてFloat型のmaxVel
という名前の変数をプロパティに表示したい.
.cpp
ファイルのsetupParameters
に以下の内容を記載した.
void
CPlusPlusDATExample::setupParameters(OP_ParameterManager* manager, void* reserved1)
{
{
OP_NumericParameter
np.name = "maxVel";
np.label = "maxVel";
np.defaultValues[0] = 1.0;
np.minSliders[0] = -10.0;
np.maxSliders[0] = 10.0;
OP_ParAppendResult res = manager->appendFloat(np);
assert(res == OP_ParAppendResult::Success);
}
}
エラー内容
ビルドは上手くいくものの,デバッグなどのTouchDesigner実行時に以下のようなエラーメッセージがポップアップで表示される.
メッセージの内容としては,Expression: res == OP_ParAppendResult::Success
でAssertion failedが発生したようで,どうやら.cpp
ファイルのOP_ParAppendResult res = manager->appendFloat(np);
が失敗していることが原因の様.
変更後
試行錯誤の結果,op.name
の名づけによってエラーが発生していることが分かった.
規則としては,一文字目のみを大文字のスペースを含まない文字列であればよいらしい.
変更前はC++を意識した変数名にしていたことがまずかったようだ.
また,np.label
にはルールは無いようで,任意の文字列でよいので視認性を重視して変更した.
void
CPlusPlusDATExample::setupParameters(OP_ParameterManager* manager, void* reserved1)
{
// speed
{
OP_NumericParameter np;
np.name = "Maxvel"; // 一文字目のみ大文字
np.label = "Maximum Velocity"; // 表記は自由
np.defaultValues[0] = 1.0;
np.minSliders[0] = -10.0;
np.maxSliders[0] = 10.0;
OP_ParAppendResult res = manager->appendFloat(np);
assert(res == OP_ParAppendResult::Success);
}
}
実行結果
np.name
の変更によって上記のエラーは回避できる.
実行結果として,変数の表示名としてnp.label
が,pythonで呼ぶ際の変数名として小文字のnp.name
が格納される.
Author And Source
この問題について("Assertion failed!" error while using CPlusPlus OP in TouchDesigner), 我々は、より多くの情報をここで見つけました https://qiita.com/syoukera/items/90e3d7c95aaa5593f353著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .