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 함수