フラグ管理

greenflag.png
フラグ管理のページでせっかく素敵なフラグ管理の方法を知ったけど、AnttweakBarでどんな風にすればいいかな。という話。
void __stdcall SetCB(const void *value, void *clientData)
{
 
    *((unsigned int*)clientData) = *(unsigned int *)value; // copy value to g_AutoRotate
    cout<<"SetCB"<< *((unsigned int*)clientData)<<endl;
 
}
void __stdcall GetCB(void *value, void *clientData)
{
    (void)clientData; // unused
    //int i=0;
    *(unsigned int *)value =  *((unsigned int*)clientData); // copy g_AutoRotate to value
    cout<<"GetCB"<<*((unsigned int*)clientData)<<endl;
}
TwAddVarCB(bar, "TW_TYPE_BOOL16", TW_TYPE_BOOL16, SetCB, GetCB, &val,"true=50 false=0 ");

コールバックにするか?それも面倒くさい。

一つの変数にフラグをまとめたい場合

の、うまいやり方がどうにもない。
今のところこんな面倒なコードを書いている

TwAddVarRW(bar, "printmode", TW_TYPE_BOOLCPP, &_flags2[MY_PRINT], "group=Utility label='mode' true='print' false='display' "); 
    TwAddVarRW(bar,"capture",TW_TYPE_BOOLCPP,&_flags1[MY_CAPTURE],"group=Utility label='capture'");
    TwAddVarRW(bar, "viewmode", TW_TYPE_BOOLCPP,&_flags2[MY_ORTHOGONAL], "group=Utility label='view mode' true='Orthogonal' false='Perspective'"); 
    TwAddVarRW(bar, "map", TW_TYPE_BOOLCPP,&_flags1[MY_LAND], "group=Display"); 
    TwAddVarRW(bar, "sky", TW_TYPE_BOOLCPP,&_flags2[MY_DRAW_BG], "group=Display"); 
    TwAddVarRW(bar, "measure", TW_TYPE_BOOLCPP, &_flags1[MY_MEASURE], "group=Display "); 
    bool miffyflag[CCloudRender::MY_FLAG_NUM]={1,1,0,0,0,0,0,0};
    bool traflag[CTransForm::MY_FLAG_NUM]={1,0,0};
    while(1){//メインループ
    //フラグを渡す
        for(int i=0;i<CCloudRender::MY_FLAG_NUM;i++){//あまりスマートなやり方じゃない。
            myflag[i]=miffyflag[i];
        }
        g_Render->SetFlag(myflag.to_ulong());
        for(int i=0;i<CTransForm::MY_FLAG_NUM;i++){//あまりスマートなやり方じゃない。
            traflagbits[i]=traflag[i];
        }
        }
サポートサイト Wikidot.com flag