Graphisoft®

API Development KitVersion: 18

APIModulDataSaveOldFormatHandlerProc

모듈들을 예전 포맷으로 변환하기 위한 사용자 지원 콜백 프로시저입니다.

    typedef GSErrCode  APIModulDataSaveOldFormatHandlerProc (
        API_FTypeID                                     planFileType,
        GS::HashTable<GS::UniString, API_ModulData*>&   modulesToSave
    );

 

파라미터

planFileType
[in] 저장되는 프로젝트의 예전 포맷 도면 버전입니다. ArchiCAD 13에서 이것은 APIFType_PlanFile1200만 될 수 있습니다.
modulesToSave
[out] 변환된 모듈 데이터를 가져올 해시(hash) 테이블입니다.

 

리턴 값

NoError
함수가 성공적으로 완료되었습니다.

다른 공통 API 오류들에 대해서는 API 오류 문서를 보십시오.

 

설명

애드온의 moduldata를 예전 버전 프로젝트 파일에 적절한 포맷으로 저장하려면, 이 콜백 함수를 구현하고 Initialize 단계에서 ACAPI_Install_ModulDataSaveOldFormatHandler로 ArchiCAD에 그것을 전달할 필요가 있습니다. 또한 RegisterInterface 함수로부터 ACAPI_Register_ModulDataHandler를 호출하여 애드온의 이 기능에 대하여 ArchiCAD에게 알릴 필요가 있습니다.

사용자가 프로젝트를 예전 포맷으로 저장할 때마다 이 핸들러 함수가 호출되며, 애드온은 현재 프로젝트에 저장된 아무 moduldata를 갖고 있습니다. 데이터는 요구되는 버전에 따라 동적으로 할당된 API_ModulData structure로 생성되어야 하며, 이 structure의 포인터는 modulesToSave 테이블로 집어넣어야 합니다.
더 많은 모듈들이 추가될 수 있으며 서로 다른 이름들로 식별되어야 한다는 것을 참고하십시오. ArchiCAD 버전 13 이전에서는 애드온 당 하나의 moduldata만 저장할 수 있었습니다. 이 moduldata는 빈 문자열 식별자("")로 저장되어야 합니다.

애드온의 핸들러 함수에 의해 변환된 moduldata에 대하여 할당된 메모리는 호출자 애플리케이션에 의해 해제될 것입니다.

알림 프로젝트의 더 자세한 것은 ModulData 관리자 섹션을 참조하십시오.

 

예제

콜백 등록 및 설치하기:

GSErrCode __ACENV_CALL  RegisterInterface (void)
{
    ACAPI_Register_ModulDataHandler ();
    return NoError;
}

GSErrCode __ACENV_CALL  Initialize (void)
{
    GSErrCode err = ACAPI_Install_ModulDataSaveOldFormatHandler (APIModulDataSaveAsOldFormat);
    return err;
}

핸들러 함수의 구현:

GSErrCode __ACENV_CALL  APIModulDataSaveAsOldFormat (API_FTypeID                                    planFileType,
                                                     GS::HashTable<GS::UniString, API_ModulData*>&  modulesToSave)
{
    GSErrCode err = NoError;

    if (planFileType == APIFType_PlanFile1200) {
        GS::Array<GS::UniString> modulNameList;
        ACAPI_ModulData_GetList (&modulNameList);

        USize nObjects = modulNameList.GetSize ();
        if (nObjects > 0) {
            API_ModulData* oldFormatModulData = new API_ModulData;  // must be allocated on the heap
            if (oldFormatModulData != NULL) {
                BNZeroMemory (oldFormatModulData, sizeof (API_ModulData));
                oldFormatModulData->dataVersion = 0;
                oldFormatModulData->platformSign = GS::Act_Platform_Sign;
                oldFormatModulData->dataHdl = BMAllocateHandle (nObjects * sizeof (Int32), 0, 0);
                if (oldFormatModulData->dataHdl != NULL) {
                    Int32* dataPtr = reinterpret_cast<Int32*> (*oldFormatModulData->dataHdl);
                    for (GS::Array<GS::UniString>::ConstIterator it = modulNameList.Enumerate (); it != NULL; ++it) {
                        API_ModulData modulData;
                        BNZeroMemory (&modulData, sizeof (API_ModulData));
                        if (ACAPI_ModulData_Get (&modulData, *it) == NoError) {
                            *dataPtr = *(reinterpret_cast<Int32*> (*modulData.dataHdl));
                            dataPtr++;
                        }
                        BMKillHandle (&modulData.dataHdl);
                    }

                    modulesToSave.Put ("", oldFormatModulData);
                } else {
                    err = APIERR_MEMFULL;
                }
            }
        } else {
            err = APIERR_NOMODULEDATA;
        }
    }

    return err;
}

더 많은 힌트에 대해서는 ModulData 관리자 예제 애드온을 참조하십시오.

 

요구사항

버전: API 13 또는 이후
헤더: APIdefs_Callback.h

 

참고사항

API_ModulData
ACAPI_Install_ModulDataSaveOldFormatHandler
ACAPI_Register_ModulDataHandler
ModulData 관리자
API 함수