Graphisoft®

API Development KitVersion: 18

APIIo_GetArcID

호 입력을 수행합니다.

    GSErrCode ACAPI_Interface (
        APIIo_GetArcID,
        API_GetArcType*         arcInfo,
        RubberLineInfoProc*     rubberLineInfoProc
    );

 

파라미터

arcInfo
[in/out] 호 입력 동작의 파라미터들입니다.
rubberLineInfoProc
[in] 커스텀 피드백 드로잉에 대한 콜백 함수입니다.

 

리턴 값

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

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

 

설명

이 함수는 사용자가 호를 그래픽으로 입력하도록 시키는 데 사용합니다.

만약 입력 프로세스가 실패하면, 이 함수는 APIERR_CANCEL을 리턴합니다. 그 외에는 결과가 arcInfo의 필드들로 리턴됩니다; startCoord (만약 호 입력 전에 시작 좌표가 주어지지 않은 경우), negArc, pos 그리고 neig

호의 중심점과 시작점은 직접 정의할 수 있습니다. 또는 APIIo_GetPointIDAPIIo_GetLineID 인터페이스 함수들을 이용해 그래픽으로 입력할 수 있습니다.

컨트롤 박스에 표시되는 프롬프트 문자열은 액션에 대한 지시사항들을 포함할 수 있습니다. 당신은 neig들 위에서의 커서 중력(gravity)과 커서 형태를 제어하고 입력 평면을 세트할 수 있습니다. 포인터를 당신의 rubber line 콜백 함수에 전달하여 입력하는 도중 고유의 그래픽 피드백을 그릴 수 있는 가능성이 있습니다. 활용에 대한 더 자세한 것들은 API_GetArcType structure의 문서를 참조하십시오.

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

 

예제

API_GetPointType    pointInfo;
API_GetLineType     lineInfo;
API_GetArcType      arcInfo;
char                buffer [256];
GSErrCode           err;

BNZeroMemory (&pointInfo, sizeof (API_GetPointType));
BNZeroMemory (&lineInfo, sizeof (API_GetLineType));
BNZeroMemory (&arcInfo, sizeof (API_GetArcType));

CHCopyC ("Click the arc center point", pointInfo.prompt);
pointInfo.changeCursorSet = true;

/* show cross cursors suggesting the center point */
pointInfo.cursorSet.nothingOnCursor     = APICursor_XPoint;
pointInfo.cursorSet.pointOnCursor       = APICursor_ArrowXPoint;
pointInfo.cursorSet.lineOnCursor        = APICursor_PencilXPoint;
pointInfo.cursorSet.refPointOnCursor    = APICursor_ArrowXPoint;
pointInfo.cursorSet.refLineOnCursor     = APICursor_PencilXPoint;
pointInfo.cursorSet.crossOnCursor       = APICursor_ArrowXPoint;
pointInfo.cursorSet.normalOnCursor      = APICursor_PencilXPoint;
pointInfo.cursorSet.tangentOnCursor     = APICursor_ArrowXPoint;

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

if (!err) {
    CHCopyC ("Enter the arc start point", lineInfo.prompt);
    lineInfo.startCoord = pointInfo.pos;
    lineInfo.changeCursorSet = true;

    /* use hand cursors for drawing the radius of the arc */
    lineInfo.cursorSet.nothingOnCursor  = APICursor_Hand;
    lineInfo.cursorSet.pointOnCursor    = APICursor_MiniHand;
    lineInfo.cursorSet.lineOnCursor     = APICursor_MiniHand;
    lineInfo.cursorSet.refPointOnCursor = APICursor_MiniHand;
    lineInfo.cursorSet.refLineOnCursor  = APICursor_MiniHand;
    lineInfo.cursorSet.crossOnCursor    = APICursor_MiniHand;
    lineInfo.cursorSet.normalOnCursor   = APICursor_MiniHand;
    lineInfo.cursorSet.tangentOnCursor  = APICursor_MiniHand;

    err = ACAPI_Interface (APIIo_GetLineID, &lineInfo, NULL);
}

if (!err) {
    CHCopyC ("Enter the arc end point", arcInfo.prompt);
    arcInfo.origo = lineInfo.startCoord;
    arcInfo.startCoord = lineInfo.pos;
    arcInfo.startCoordGiven = true;
    arcInfo.changeCursorSet = true;

    /* use eye cursors for getting the arc */
    arcInfo.cursorSet.nothingOnCursor   = APICursor_Eye;
    arcInfo.cursorSet.pointOnCursor     = APICursor_DoubleEye;
    arcInfo.cursorSet.lineOnCursor      = APICursor_DoubleEye;
    arcInfo.cursorSet.refPointOnCursor  = APICursor_DoubleEye;
    arcInfo.cursorSet.refLineOnCursor   = APICursor_DoubleEye;
    arcInfo.cursorSet.crossOnCursor     = APICursor_DoubleEye;
    arcInfo.cursorSet.normalOnCursor    = APICursor_DoubleEye;
    arcInfo.cursorSet.tangentOnCursor   = APICursor_DoubleEye;

    err = ACAPI_Interface (APIIo_GetArcID, &arcInfo, NULL);
}

if (!err) {
    sprintf (buffer, "Origo coordinates:  (%Lf, %Lf)", arcInfo.origo.x, arcInfo.origo.y);
    ACAPI_WriteReport (buffer, false);
    if (arcInfo.negArc)
        sprintf (buffer, "Arc begins:  (%Lf, %Lf)\nArc ends:    (%Lf, %Lf)",
                arcInfo.pos.x, arcInfo.pos.y, arcInfo.startCoord.x, arcInfo.startCoord.y);
    else
        sprintf (buffer, "Arc begins:  (%Lf, %Lf)\nArc ends:    (%Lf, %Lf)",
                arcInfo.startCoord.x, arcInfo.startCoord.y, arcInfo.pos.x, arcInfo.pos.y);
    ACAPI_WriteReport (buffer, false);
} else if (err == APIERR_CANCEL)
    ACAPI_WriteReport ("Input was interrupted", true);

 

요구사항

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

 

참고사항

API_GetArcType,
RubberLineInfoProc, APIIo_DrawRubberLineID, APIIo_GetPointID, APIIo_GetLineID, APIIo_GetPolyID,
ACAPI_Interface, API 함수