Graphisoft®

API Development KitVersion: 18

ACAPI_Body_AddPolygon

바디 데이터 객체에 폴리곤을 추가합니다.

    GSErrCode  ACAPI_Body_AddPolygon (
        void*                     bodyData,
        Int32*                    edges,
        Int32                     nEdges,
        Int32                     polyNormal,
        API_MaterialOverrideType  material,
        UInt32&                   index
    );

 

파라미터

bodyData
[in] 폴리곤을 추가할 바디 데이터 객체입니다.
edges
[in] 폴리곤의 모서리들의 리스트입니다.
nEdges
[in] edges 배열의 크기입니다.
polyNormal
[in] 법선 벡터의 부호화된 인덱스입니다.
material Featuring API 17
[in] 폴리곤의 재질 오버라이드 structure입니다.
index
[out] 생성된 폴리곤의 인덱스입니다.

 

리턴 값

NoError
함수가 성공적으로 완료되었습니다.
APIERR_BADPARS
전달된 파라미터가 NULL입니다; bodyData
3개 미만의 모서리들이 전달되었습니다; edges, nEdges

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

 

설명

이 함수는 바디 데이터 객체에 폴리곤을 추가하는 데 사용합니다.

edges 리스트는 ACAPI_Body_AddEdge 함수가 리턴한 모서리 인덱스들을 포함하고 있습니다. 이 리스트는 다음과 같은 형태를 갖고 있어야 합니다:

nEdgesedges 배열의 크기입니다. (그래서 이 숫자는 구멍 모서리들 전에 나오는 0들도 포함하고 있음)

polyNormalACAPI_Body_AddPolyNormal 함수가 리턴한 법선 벡터의 인덱스입니다.

 

예제


// 새로운 모프 요소 설정
API_Element element;
BNZeroMemory (&element, sizeof (API_Element));
element.header.typeID = API_MorphID;
GSErrCode err = ACAPI_Element_GetDefaults (&element, NULL);

// 새로운 메모 설정
API_ElementMemo memo;
BNZeroMemory (&memo, sizeof (API_ElementMemo));

// 새로운 바디 데이터 객체를 생성함
void* bodyData = NULL;
err = ACAPI_Body_Create(NULL, NULL, &bodyData);

API_Coord3D coord;
UInt32  vertices[8];
Int32   edges[8];
Int32   polyNormals[1];
UInt32  polygons[1];

// 정사각형 외곽의 정점들을 추가
coord.x = -2.0; coord.y = -2.0; coord.z = 0.0;
err = ACAPI_Body_AddVertex(bodyData, coord, vertices[0]);
coord.x = 2.0; coord.y = -2.0; coord.z = 0.0;
err = ACAPI_Body_AddVertex(bodyData, coord, vertices[1]);
coord.x = 2.0; coord.y = 2.0; coord.z = 0.0;
err = ACAPI_Body_AddVertex(bodyData, coord, vertices[2]);
coord.x = -2.0; coord.y = 2.0; coord.z = 0.0;
err = ACAPI_Body_AddVertex(bodyData, coord, vertices[3]);

// 정사각형 구멍의 정점들을 추가
coord.x = -1.0; coord.y = -1.0; coord.z = 0.0;
err = ACAPI_Body_AddVertex(bodyData, coord, vertices[4]);
coord.x = 1.0; coord.y = -1.0; coord.z = 0.0;
err = ACAPI_Body_AddVertex(bodyData, coord, vertices[5]);
coord.x = 1.0; coord.y = 1.0; coord.z = 0.0;
err = ACAPI_Body_AddVertex(bodyData, coord, vertices[6]);
coord.x = -1.0; coord.y = 1.0; coord.z = 0.0;
err = ACAPI_Body_AddVertex(bodyData, coord, vertices[7]);
        
// 정사각형 외곽의 모서리들을 추가
err = ACAPI_Body_AddEdge(bodyData, vertices[0], vertices[1], edges[0]);
err = ACAPI_Body_AddEdge(bodyData, vertices[1], vertices[2], edges[1]);
err = ACAPI_Body_AddEdge(bodyData, vertices[2], vertices[3], edges[2]);
err = ACAPI_Body_AddEdge(bodyData, vertices[3], vertices[1], edges[3]);

// 정사각형 구멍의 모서리들을 추가
err = ACAPI_Body_AddEdge(bodyData, vertices[4], vertices[5], edges[4]);
err = ACAPI_Body_AddEdge(bodyData, vertices[5], vertices[6], edges[5]);
err = ACAPI_Body_AddEdge(bodyData, vertices[6], vertices[7], edges[6]);
err = ACAPI_Body_AddEdge(bodyData, vertices[7], vertices[4], edges[7]);

// 법선 벡터 추가
API_Vector3D normal;
normal.x = normal.y = 0.0; normal.z = 1.0;
err = ACAPI_Body_AddPolyNormal(bodyData, normal, polyNormals[0]);

// add square polygon with square hole (with surface material override enabled)
Int32 polyEdges[] = {
        edges[0],
        edges[1],
        edges[2],
        edges[3],
        0,
        -edges[7],
        -edges[6],
        -edges[5],
        -edges[4]
};
API_MaterialOverrideType material;
material.material         = 1;
material.overrideMaterial = true;

err = ACAPI_Body_AddPolygon(bodyData, polyEdges, 9, polyNormals[0], material, polygons[0]);

// 결과로 나온 바디와 재질들을 메모에 삽입
err = ACAPI_Body_Finish(bodyData, &memo.morphBody, &memo.morphMaterialMapTable);

// 모프 요소를 생성함
err = ACAPI_Element_Create (&element, &memo);

// 바디 데이터 객체 & 메모를 폐기함
err = ACAPI_Body_Dispose(&bodyData);
err = ACAPI_DisposeElemMemoHdls (&memo);

 

요구사항

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

 

참고사항

ACAPI_Body_AddVertex, ACAPI_Body_AddEdge, ACAPI_Body_AddPolyNormal,
ACAPI_Body_Create, ACAPI_Body_Finish, ACAPI_Body_Dispose,
바디 관리자, API 함수