Graphisoft®

API Development KitVersion: 18

APIIo_GetPolyID

폴리곤 입력을 수행합니다.

    GSErrCode ACAPI_Interface (
        APIIo_GetPolyID,
        API_GetPolyType*             polyInfo,
        API_RubberPolyCallbacks*     rubberPolyCallbacks
    );

 

파라미터

polyInfo
[in/out] 폴리곤 입력 동작의 파라미터들입니다.
rubberPolyCallbacks
[in] 커스텀 피드백 드로잉에 대한 콜백 함수들입니다. 선택사항이며 NULL이 될 수 있습니다.

 

리턴 값

NoError
함수가 성공적으로 완료되었습니다.
APIERR_BADPARS
polyInfoNULL입니다. 또는 rubberProcs 안의 rubber 콜백 함수 포인터들 중 하나가 NULL입니다.
APIERR_BADPLANE
polyInfo 안에 유효하지 않은 평면 정의가 있습니다.
APIERR_BADWINDOW
애플리케이션의 현재 전면 창에서 동작을 수행할 수 없습니다.
APIERR_CANCEL
사용자가 입력을 취소했습니다.

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

 

설명

이 함수는 사용자에게 폴리곤을 그래픽으로 입력하도록 시키는 데 사용합니다.

만약 입력 프로세스가 실패하면, 이 함수는 APIERR_CANCEL을 리턴합니다. 그 외에는 결과가 polyInfo의 필드들 안에 리턴됩니다; coords, parcs, nCoords, nArcs 그리고 polylineWas. 리턴된 폴리곤은 2개 이상의 점들로 구성되어 있습니다. 폴리곤들의 좌표는 1부터 시작합니다. 만약 polyInfo->polylineWas가 false이면, 폴리곤이 닫혀 있습니다. 이것은 마지막 점과 시작 점이 같다는 것을 의미합니다. BMKillHandle을 이용하여 coordsparcs 핸들을 폐기하는 것을 잊지 마십시오.

6.1  만약 입력을 위해 changePlane이 세트되지 않았다면, API_GetPolyTypegetZCoords 멤버에 true를 전달함으로써 zCoords 핸들에 폴리곤 노드들의 z 좌표들도 가져올 수 있습니다. 이 경우, 애드온은 더 이상 필요하지 않으면 이 핸들을 폐기해야 합니다.

폴리라인의 시작 점을 직접 정의할 수 있습니다. 또는 APIIo_GetPointID 인터페이스 함수를 이용하여 그래픽으로 입력할 수 있습니다.

컨트롤 박스에 표시되는 프롬프트 문자열은 액션에 대한 지시사항들을 포함할 수 있습니다. 당신은 커서 모양을 제어하고, 입력 평면을 세트하고, 폴리곤 입력 방법을 지정할 수 있습니다. API v3.1부터는 입력하는 도중 당신만의 그래픽 피드백을 그리는 것이 가능합니다. 이는 APIIo_GetPointID, APIIo_GetLineID, APIIo_GetArcID 함수들에서도 가능합니다. 활용에 대한 더 자세한 것들은 API_GetPolyType structure의 문서를 참조하십시오.

모달 다이얼로그들이 열려 있는 동안 입력 동작을 호출하지 마십시오.

 

예제

API_GetPointType    pointInfo;
API_GetPolyType     polyInfo;
Int32               ind;
char                buffer [256];
GSErrCode           err;

BNZeroMemory (&pointInfo, sizeof (API_GetPointType));
BNZeroMemory (&polyInfo, sizeof (API_GetPolyType));

CHCopyC ("Click the first node of the polygon", pointInfo.prompt);

err = ACAPI_Interface (APIIo_GetPointID, &pointInfo, NULL);

if (err == NoError) {
    CHCopyC ("Enter the polygon nodes", polyInfo.prompt);
    polyInfo.startCoord = pointInfo.pos;                  /* polygon starts with the clicked point */
    polyInfo.method = APIPolyGetMethod_General;

    err = ACAPI_Interface (APIIo_GetPolyID, &polyInfo, NULL);
}

if (err == NoError) {
    ACAPI_WriteReport ("Polygon Coordinates:", false);
    for (ind = 1; ind <= polyInfo.nCoords; ind++) {
        sprintf (buffer, "[%2d]  (%Lf, %Lf)", ind, (*polyInfo.pos) [ind].x, (*polyInfo.pos) [ind].y);
        ACAPI_WriteReport (buffer, false, false);
    }
} else if (err == APIERR_CANCEL)
    ACAPI_WriteReport ("Input was interrupted", true);

 

API 개발 키트의 Interface_Functions 예제 프로젝트도 보십시오.

 

요구사항

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

 

참고사항

API_GetPolyType
API_RubberPolyCallbacks
APIIo_GetPointID
APIIo_GetLineID
APIIo_GetArcID
ACAPI_Interface
API 함수