オブジェクトパラメータを変更する

 

選択したオブジェクトパラメータを変更する

説明

選択した要素ののパラメータを更新するサンプルコードです。

  • 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, &paramOwner, 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;
}


// -----------------------------------------------------------------------------
// Handles menu commands
// -----------------------------------------------------------------------------

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;
}		// MenuCommandHandler