ACAPI_3D_GetComponent
ArchiCAD의 3D 모델로부터 구성요소를 가져옵니다.
GSErrCode ACAPI_3D_GetComponent ( API_Component3D* component );
파라미터
- component
- [in/out] 구성요소 헤더의
typeID
와index
필드는 반드시 전달되어야 합니다. union의 적합한 부분에서 원하는 구성요소 데이터를 가져옵니다.
리턴 값
NoError
- 함수가 성공적으로 완료되었습니다.
APIERR_BADPARS
- 전달된 파라미터가
NULL입니다; component
APIERR_REFUSEDCMD
- 3D 모델을 현재 컨텍스트에서 이용할 수 없습니다, 또는
- 구성요소 타입이 직접 쿼리를 받을 수 없습니다; 활성 바디 없음
APIERR_BADID
- 구성요소 타입이 유효하지 않습니다.
APIERR_BADINDEX
- 구성요소 인덱스가 범위 밖입니다.
APIERR_DELETED
typeID
가 API_BodyID인 경우, 당신은 이 오류 코드를 받게 됩니다. 이것은 3D 모델에서 바디가 제거되었음을 의미합니다. 모델 하나 대신 그림자 바디를 지웠거나, 모델 생성 도중 제거한 경우입니다.
다른 공통 API 오류들에 대해서는 API 오류 문서를 보십시오.
설명
이 함수는 3D 데이터 structure로부터 한 구성요소를 가져오는 데 사용합니다.
이 구성요소는 component
파라미터의 헤더에서 typeID
와 index
필드로 정의됩니다.
만약 typeID
가 API_BodyID이면, 당신은 오류 코드 APIERR_DELETED
를 받을 수도 있습니다. 이는 바디가 3D 모델로부터 제거되었음을 의미합니다.
다음 이유로 인해 구성요소 API_BodyID를 기반으로 한 루프에서 당신의 알고리즘을 구성하는 것이 매우 중요합니다. (아래 예제를 보십시오):
- 바디 인덱스들은 모든 경우에서 연속적입니다. 그 외의 경우는 없습니다.
- 3D 모델은 제거된 평면도 요소들로부터 데이터를 가질 수도 있습니다. 이것들은 제거된 바디들을 통해서만 식별될 수 있습니다.
- 동일한 기하 정보를 가진 평면도 요소들은 3D 표현 데이터의 프리미티브들을 공유할 수도 있지만 바디는 공유하지 않습니다. 모든 바디들은 참조된 공유 정점들과 법선 벡터들을 올바른 위치와 방향으로 변환해 주는 변환 행렬을 포함하고 있습니다.
일단 바디의 정의를 갖게 되면, 관심 있는 프리미티브들을 살펴보기 위한 서브 루프들을 설정할 수 있습니다. 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 함수