Graphisoft®

API Development KitVersion: 18

ACAPI_3D_GetComponent

ArchiCAD의 3D 모델로부터 구성요소를 가져옵니다.

    GSErrCode  ACAPI_3D_GetComponent (
        API_Component3D*     component
    );

 

파라미터

component
[in/out] 구성요소 헤더의 typeIDindex 필드는 반드시 전달되어야 합니다. union의 적합한 부분에서 원하는 구성요소 데이터를 가져옵니다.

 

리턴 값

NoError
함수가 성공적으로 완료되었습니다.
APIERR_BADPARS
전달된 파라미터가 NULL입니다; component
APIERR_REFUSEDCMD
3D 모델을 현재 컨텍스트에서 이용할 수 없습니다, 또는
구성요소 타입이 직접 쿼리를 받을 수 없습니다; 활성 바디 없음
APIERR_BADID
구성요소 타입이 유효하지 않습니다.
APIERR_BADINDEX
구성요소 인덱스가 범위 밖입니다.
APIERR_DELETED
typeIDAPI_BodyID인 경우, 당신은 이 오류 코드를 받게 됩니다. 이것은 3D 모델에서 바디가 제거되었음을 의미합니다. 모델 하나 대신 그림자 바디를 지웠거나, 모델 생성 도중 제거한 경우입니다.

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

 

설명

이 함수는 3D 데이터 structure로부터 한 구성요소를 가져오는 데 사용합니다.

이 구성요소는 component 파라미터의 헤더에서 typeIDindex 필드로 정의됩니다. 만약 typeIDAPI_BodyID이면, 당신은 오류 코드 APIERR_DELETED를 받을 수도 있습니다. 이는 바디가 3D 모델로부터 제거되었음을 의미합니다.

다음 이유로 인해 구성요소 API_BodyID를 기반으로 한 루프에서 당신의 알고리즘을 구성하는 것이 매우 중요합니다. (아래 예제를 보십시오):

일단 바디의 정의를 갖게 되면, 관심 있는 프리미티브들을 살펴보기 위한 서브 루프들을 설정할 수 있습니다. API_BodyType 레코드에서 모든 내부 구성요소들의 개수를 가져올 수 있습니다. 인덱스는 1부터 시작해야 합니다.

광원 및 재질 구성요소들은 자체 루프에서 얻을 수 있습니다. 왜냐하면 이것들은 3D 모델의 글로벌 구성요소들이기 때문입니다. (상대적인 바디가 아님)

실제로 존재하는 ArchiCAD의 3D 모델의 데이터를 가져온다는 사실은 매우 중요합니다. 이 데이터가 평면도 요소들과 일치하지 않는 경우가 자주 있습니다. 3D 창의 업데이트 메커니즘은 많은 것들을 의존합니다. 가령 preferences 다이얼로그의 스위치들이 있습니다. 일반적으로 위의 템플릿을 사용하는 경우 3D 창에서 볼 수 있는 모델을 얻게 됩니다.

 

예제

API_Component3D         comp3D;
Int32                   nBody, i;

err = ACAPI_3D_GetNum (API_BodyID, &nBody);
BNZeroMemory (&comp3D, sizeof (API_Component3D));
comp3D.header.typeID = API_BodyID;
for (i = 1; i <= nBody && err == NoError; i++) {
    comp3D.header.index = i;
    err = ACAPI_3D_GetComponent (&comp3D);
    if (err == NoError) {
        /* body를 pgon, vert 등으로 분해함... */
    }
    if (err == APIERR_DELETED)
        err = NoError;
}

 

요구사항

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

 

참고사항

API_Component3D, API_BodyType, API_3DTypeID,
ACAPI_3D_GetNum,
3D 관리자, API 함수