Graphisoft®

API Development KitVersion: 18

ACAPI_Selection_Get

선택 및 선택된 요소들에 대한 정보를 리턴합니다.

    GSErrCode  ACAPI_Selection_Get (
        API_SelectionInfo*     selectionInfo,
        API_Neig***            selNeigs,
        bool                   onlyEditable,
        bool                   ignorePartialSelection = true,
        API_SelRelativePosID   relativePosToMarquee = API_InsidePartially
    );

 

파라미터

selectionInfo
[out] 현재 선택의 파라미터들입니다. selectionInfotypeID 필드는 선택 타입을 제공합니다.
selNeigs
[out] 선택된 요소들을 포함하는 핸들입니다. 만약 당신이 선택 정보에만 관심이 있다면 NULL이 될 수 있습니다. 작업을 마친 후엔 이 핸들을 폐기하는 것을 잊지 마십시오.
onlyEditable
[in] 당신이 편집가능한 요소들에만 관심이 있다고 알려줍니다.
ignorePartialSelection API 18
[in] 전체로서 선택된 요소 자체만 가져오거나 부분적인 요소 선택 정보도 가져옵니다. (레거시 호환성 때문에 이 파라미터의 기본값은 true입니다. 이것은 부분적인 선택을 무시했음을 의미합니다) 이 파라미터는 marquee 기반 선택의 경우 무시합니다.
relativePosToMarquee API 18
[in] Marquee에 대한 요소들을 가져옵니다. (레거시 호환성 때문에 이 파라미터의 기본값은 API_InsidePartially입니다. 이것은 Marquee 영역과 교차하는 요소들만 리턴된다는 것을 의미합니다) 개별적으로 선택된 요소들의 경우 이 파라미터는 무시합니다.

 

리턴 값

NoError
함수가 성공적으로 완료되었습니다.
APIERR_NOPLAN
열린 프로젝트가 없습니다.
APIERR_NOSEL
선택된 것이 없습니다. 이것은 실제 오류가 아니라는 것을 참고하십시오!

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

 

설명

이 함수는 현재 선택에 대한 정보를 얻고 선택된 요소들을 가져오는 데 사용됩니다. 정보는 selectionInfo 파라미터에 리턴됩니다.

만약 개별 요소들이 선택되면 API_SelElems 식별자가 리턴됩니다. 선택 개수, 선택된 요소들, 편집가능한 요소들 역시 리턴됩니다. Marquee 기반 선택의 경우, 함수는 API_SelectionInfo structure 안의 현재 선택의 실제 폴리곤을 돌려줍니다; 이 핸들을 폐기하는 것을 잊지 마십시오.

selectionInfo 파라미터의 typeID 필드 안에 있는 API_SelEmpty 식별자는 ArchiCAD에서 실제로 사용되는 선택이 없음을 의미합니다.

개별적으로 선택된 요소들의 경우, ArchiCAD는 선택된 모든 요소들을 리턴합니다. Marquee 기반 선택의 경우, relativePosToMarquee에 의해 정의된 위치 기준에 일치하는 요소들만 리턴될 것입니다.

 

예제

//------------------------------------------------------------
// 함께 작동하는 치수들의 guid들을 inds 변수 안에 수집함
//------------------------------------------------------------
static GSErrCode SelectDimensions (GS::Array<API_Guid>& inds)

{
    GSErrCode            err;
    API_SelectionInfo    selectionInfo;
    API_Element          tElem;
    API_Neig             **selNeigs;

    err = ACAPI_Selection_Get (&selectionInfo, &selNeigs, true);
    BMKillHandle ((GSHandle *) &selectionInfo.marquee.coords);
    if (err == APIERR_NOSEL)
        err = NoError;

    if (err != NoError) {
        BMKillHandle ((GSHandle *) &selNeigs);
        return err;
    }

    if (selectionInfo.typeID != API_SelEmpty) {
        // 선택된 치수들의 인덱스들을 수집함
        UInt32 nSel = BMGetHandleSize ((GSHandle) selNeigs) / sizeof (API_Neig);
        for (UInt32 ii = 0; ii < nSel && err == NoError; ++ii) {
            tElem.header.typeID = Neig_To_ElemID ((*selNeigs)[ii].neigID);
            if (tElem.header.typeID != API_DimensionID)
                continue;

            if (!ACAPI_Element_Filter ((*selNeigs)[ii].guid, APIFilt_IsEditable))
                continue;

            tElem.header.guid = (*selNeigs)[ii].guid;
            if (ACAPI_Element_Get (&tElem) != NoError)
                continue;

            // 배열에 치수를 추가함
            inds.Push (tElem.header.guid);
        }
    }
    BMKillHandle ((GSHandle *) &selNeigs);

    return err;
}   // SelectDimensions

 

요구사항

버전: API 4.1 또는 이후
헤더: ACAPinc.h

 

참고사항

API_Neig, API_SelectionInfo, API_SelRelativePosID,
ACAPI_Element_Select,
선택 관리자, API 함수