選択したオブジェクトパラメータを変更する
説明
選択した要素ののパラメータを更新するサンプルコードです。
- GDLオブジェクトのパラメータを変更する際には次のコマンドを使用します
- APIAny_OpenParametersID
- APIAny_GetActParametersID
- APIAny_ChangeAParameterID
- APIAny_CloseParametersID
- これらを実行することで正しく変更を行うことができます(パラメータスクリプトが実行される)
GSErrCode ChangeAParameter(const GS::UniString& paramName, const double& newValue)
{
API_SelectionInfo selectionInfo;
GS::Array<API_Neig> selNeigs;
GSErrCode err = ACAPI_Selection_Get(&selectionInfo, &selNeigs, true);
BMKillHandle((GSHandle *)&selectionInfo.marquee.coords);
if (err != NoError)
return err;
ACAPI_CallUndoableCommand("Change A Parameter", [&]()->GSErrCode
{
for (API_Neig neig : selNeigs)
{
API_Element elem = {};
elem.header.guid = neig.guid;
err = ACAPI_Element_Get(&elem);
if (err != NoError)
continue;
if (elem.header.typeID != API_DoorID && elem.header.typeID != API_WindowID)
continue;
API_ParamOwnerType paramOwner = {};
API_GetParamsType getParams = {};
paramOwner.typeID = elem.header.typeID;
paramOwner.guid = elem.header.guid;
err = ACAPI_Goodies(APIAny_OpenParametersID, ¶mOwner, NULL);
err |= ACAPI_Goodies(APIAny_GetActParametersID, &getParams);
if (err != NoError) {
ACAPI_DisposeAddParHdl(&getParams.params);
ACAPI_Goodies(APIAny_CloseParametersID);
continue;
}
API_ChangeParamType chgParam = {};
CHCopyC(paramName.ToCStr().Get(), chgParam.name);
chgParam.realValue = newValue;
err = ACAPI_Goodies(APIAny_ChangeAParameterID, &chgParam, NULL);
ACAPI_DisposeAddParHdl(&getParams.params);
err = ACAPI_Goodies(APIAny_GetActParametersID, &getParams, NULL);
if (err != NoError) {
ACAPI_DisposeAddParHdl(&getParams.params);
ACAPI_Goodies(APIAny_CloseParametersID);
continue;
}
API_ElementMemo memo = {};
memo.params = getParams.params;
API_Element mask;
ACAPI_ELEMENT_MASK_CLEAR(mask);
err = ACAPI_Element_Change(&elem, &mask, &memo, APIMemoMask_AddPars, true);
ACAPI_DisposeAddParHdl(&getParams.params);
ACAPI_Goodies(APIAny_CloseParametersID);
}
return err;
});
return err;
}
GSErrCode __ACENV_CALL MenuCommandHandler (const API_MenuParams *menuParams)
{
switch (menuParams->menuItemRef.menuResID) {
case ID_MENU_STRINGS:
switch (menuParams->menuItemRef.itemIndex) {
case 1:
{
ChangeAParameter("p11", 0.1);
}
break;
}
break;
}
return NoError;
}
選択したオブジェクトパラメータを変更する
説明
選択した要素ののパラメータを更新するサンプルコードです。