"Assertion failed!"error while using CPlusPlus OP in TouchDesigner

2423 단어 C++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를 저장하고 파이썬에서 호출 할 때 변수 이름으로 소문자 np.name를 저장합니다.

좋은 웹페이지 즐겨찾기