Graphisoft®

API Development KitVersion: 18

APIIo_PetPaletteID

애드온으로부터 사용자 입력을 수행하기 위한 펫 팔레트를 엽니다.

    GSErrCode ACAPI_Interface (
        APIIo_PetPaletteID,
        API_PetPaletteType*            petPaletteInfo,
        APIPetPaletteCallBackProc*     petPaletteProc
    );

 

파라미터

petPaletteInfo
[in] 펫 팔레트를 식별합니다.
petPaletteProc
[in] 팔레트를 위한 콜백 프로시저입니다.

 

리턴 값

NoError
함수가 성공적으로 완료되었습니다.
APIERR_BADPARS
파라미터들 중 하나 또는 둘이 NULL입니다.
APIERR_NESTING
입력이 이미 시작되었을 때에는 펫 팔레트등를 열 수 없습니다.
APIERR_BADWINDOW
드로잉 창들 위에서만 펫 팔레트들을 열 수 있습니다.
APIERR_BADID
다음 오류들 중 하나가 발생할 수 있습니다:
  • petIconIDsHdl이 NULL입니다.
  • petIconIDsHdl이 nCols * nRows로 표시된 것보다 더 많거나 더 적은 ID들을 포함하고 있습니다.
  • 제공된 petPaletteID가 빌트인 ArchiCAD 펫 팔레트 식별자와 충돌합니다. 식별자를 위한 예전 pictID를 선택하는 것이 좋습니다.
  • 제공된 petPaletteID가 실제 펫 팔레트와 다른 또 다른 펫 팔레트와 충돌합니다: 항목들이 더 많거나 적을 수도 있고, 항목들의 개수가 같을 수도 있지만, 적어도 하나 이상이 서로 다른 아이콘 리소스 식별자를 가지고 있습니다.
  • 애드온이 예전 API_PetPaletteType structure를 사용하고 있습니다.

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

 

설명

펫 팔레트는 개별적인 'GICN' 아이콘 리소스들로 구성되어 있습니다. (펫 항목들) 팔레트 내의 각 펫 항목은 22 픽셀 너비와 22 픽셀 높이로 간주됩니다. 더 큰 아이콘들은 잘려서 나오게 됩니다. iconIDs는 short 수들로 이루어진 GSHandle 안에 전달되어야 합니다. ArchiCAD는 이 아이콘들로 팔레트를 만들어냅니다. 이외에도 서로 다른 각각의 펫 팔레트는 유일한 식별자를 갖고 있어야 합니다. 식별자를 위해 예전 pictID를 선택하는 것이 좋습니다.

10  펫 팔레트는 툴팁(노란 바) 문자열들과 도움말 앵커들(도움말 메커니즘이 함께 로드됨)을 가질 수 있습니다. 문자열들은 'DHLP' 리소스 안에 쌍들로 배치되어야 합니다. 'DHLP' 리소스에서 모든 툴팁과 도움말 앵커 쌍은 팔레트의 해당 펫 항목에 속합니다. 이 리소스는 API 리소스 모듈로 컴파일되어야 하며, 그것들의 식별자는 API_PetPaletteType structure로 전달될 수 있습니다.

API는 이 리소스만 검색하게 됩니다. 그리고 도움말 객체를 얻고 액션을 취하기 위해 펫 팔레트의 상대적인 인덱스로 이것을 인덱싱합니다: 이것은 툴팁 문자열을 표시하거나 앵커를 애드온에 의해 구성된 도움말 엔진에 대한 파라미터들로서 전달하게 될 것입니다.
만약 애드온이 이러한 기회들을 얻기를 원한다면, Dialog Manager 모듈의 DGRegisterAdditionalHelpLocation 함수로 자체 도움말 엔진의 위치를 세트해야 합니다. 이것은 Initialize 단계에서 이루어질 수 있으며, FreeData 단계에서 DGUnregisterAdditionalHelpLocation을 호출하여 도움말 위치를 등록 해제해야 합니다. developerId와 localId는 당신의 32500 'MDID' 리소스에 저장된 MDID입니다.

팔레트 콜백 프로시저는 펫 팔레트의 실제 값과 함께 호출됩니다. (APIPetPaletteCallBackProc를 보십시오)

 

예제

static GSErrCode __ACENV_CALL   PetPaletteCallBack (short actValue)
{
    GSErrCode err = NoError;

    short inputMode = actValue + 1;

    switch (inputMode) {
        case 1:     err = Do_InputAPoint ();
                    break;
        case 2:     err = Do_InputALine ();
                    break;
        case 3:     err = Do_InputAnArc ();
                    break;
        default:    err = APIERR_GENERAL;
                    break;
    }

    return err;
}


static GSErrCode   Do_InputWithPetPalette (void)
{
    GSErrCode           err;
    API_PetPaletteType  petPaletteInfo;
    short**             petItemIdsHdl;
    short               petItemIds[5] = { 32201, 32202, 32203, 32204, 32205 };

    BNZeroMemory (&petPaletteInfo, sizeof (API_PetPaletteType));

    // 펫 항목 아이콘들의 리소스 ID들을 퐇마하는 핸들 생성하기
    short nIcons = sizeof (petItemIds) / sizeof (short);
    petItemIdsHdl = (short**) BMhAll (nIcons * sizeof (short));
    for (short i = 0; i < nIcons; i++)
        (*petItemIdsHdl)[i] = petItemIds[i];

    // petPaletteInfo 채우기
    petPaletteInfo.petPaletteID = 32200;
    petPaletteInfo.nCols = 5;
    petPaletteInfo.nRows = 1;
    petPaletteInfo.value = 0;
    petPaletteInfo.grayBits = 0;
    petPaletteInfo.petIconIDsHdl = petItemIdsHdl;
    petPaletteInfo.dhlpResourceID = 32200;

    err = ACAPI_Interface (APIIo_PetPaletteID, &petPaletteInfo, PetPaletteCallBack);

    BMhKill ((GSHandle *) &petItemIdsHdl);

    return;
}


GSErrCode   __ACENV_CALL    Initialize (void)
{
    IO::Location helpLocation;
    ACAPI_GetOwnLocation (&helpLocation);
    helpLocation.DeleteLastLocalName ();
    IO::Path helpPath;
    helpLoc.ToDisplayText (&helpPath);
    DGRegisterAdditionalHelpLocation (developerId, localId, (const char*) helpPath);

    return;
}


GSErrCode   __ACENV_CALL    FreeData (void)
{
    DGUnregisterAdditionalHelpLocation (developerId, localId);

    return;
}

Interface Functions 예제 애드온도 연구해 보시기 바랍니다.

 

요구사항

버전: API 5.1 또는 이후
헤더: APIdefs_Interface.h

 

참고사항

API_PetPaletteType, APIPetPaletteCallBackProc
ACAPI_Interface, API 함수