Graphisoft®

API Development KitVersion: 18

APIIo_DrawRubberLineID

입력 프로세스 도중 그래픽 피드백을 그립니다.

    GSErrCode ACAPI_Interface (
        APIIo_DrawRubberLineID,
        API_RubberLineType*     rubberLine
    );

 

파라미터

rubberLine
[in] 그려질 라인의 정의입니다.

 

리턴 값

NoError
함수가 성공적으로 완료되었습니다.
APIERR_GENERAL
rubber line 콜백 함수가 정의되지 않았습니다.

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

 

설명

이 함수는 사용자 입력 도중 rubber line들을 그리는 데 사용합니다. 이 함수는 주어진 입력 함수에 전달된 RubberLineInfoProc로부터만 호출될 수 있습니다; APIIo_GetPointID 또는 APIIo_GetLineID 또는 APIIo_GetArcID 또는 APIIo_GetPolyID.

하나의 라인은 2개의 끝점 좌표들로 정의됩니다.

6.1  3D 모델 창에서 입력 도중 피드백을 그리기 위해 z 좌표 역시 사용될 수 있음을 참고하십시오.

 

예제

/*------------------------------------------------------**
** Callback function to draw the rubber lines           **
**------------------------------------------------------*/
static void __ACENV_CALL    RubberLineCallBack (const API_RubberLineInfo *info)

{
    API_RubberLineType  rubberLine;

    BNZeroMemory (&rubberLine, sizeof (API_RubberLineType));

    rubberLine.lineThick = APIRubberLine_Simple;
    /* draws a unit square around the actual cursor position */

    rubberLine.c2.x = info->actCoord.x - 0.5;
    rubberLine.c2.y = info->actCoord.y - 0.5;
    rubberLine.c2.z = info->actCoord.z;
    rubberLine.c1 = rubberLine.c2;
    rubberLine.c2.y += 1.0;
    ACAPI_Interface (APIIo_DrawRubberLineID, &rubberLine, NULL);

    rubberLine.c1 = rubberLine.c2;
    rubberLine.c2.x += 1.0;
    ACAPI_Interface (APIIo_DrawRubberLineID, &rubberLine, NULL);

    rubberLine.c1 = rubberLine.c2;
    rubberLine.c2.y -= 1.0;
    ACAPI_Interface (APIIo_DrawRubberLineID, &rubberLine, NULL);

    rubberLine.c1 = rubberLine.c2;
    rubberLine.c2.x -= 1.0;
    ACAPI_Interface (APIIo_DrawRubberLineID, &rubberLine, NULL);

    return;
}

/*------------------------------------------------------**
** Filtered point input with rubberline feedback        **
**------------------------------------------------------*/
void    PutColumnOnAHotspot (void)

{
    GSErrCode           err;
    API_GetPointType    pointInfo;
    API_Element         elem;

    BNZeroMemory (&pointInfo, sizeof (API_GetPointType));
    CHCopyC ("Click onto a hotspot to create column", pointInfo.prompt);

    pointInfo.changeFilter = true;        /* let the cursor gravitate to hotspot neigs only */
    ACAPI_Interface (APIIo_InitNeigFilterID, pointInfo.filter, (void *) APIInitNeigFilter_Empty);
    ACAPI_Interface (APIIo_SetNeigFilterID, pointInfo.filter, (void *) APINeig_Hot);

    err = ACAPI_Interface (APIIo_GetPointID, &pointInfo, (void *) RubberLineCallBack);

    if (err) {
        if (err == APIERR_CANCEL)
            ACAPI_WriteReport ("Input was interrupted", true);
        else
            ACAPI_WriteReport ("Error in GetPoint", true);
    } else {
        if (pointInfo.neig.neigID != APINeig_Hot) {
            ACAPI_WriteReport ("There is no hotspot at the clicked position", true);
        } else {
            BNZeroMemory (&elem, sizeof (API_Element));
            elem.header.typeID = API_ColumnID;
            err = ACAPI_Element_GetDefaults (&elem, NULL);
            if (err == NoError) {
                elem.column.origoPos.x = pointInfo.pos.x;
                elem.column.origoPos.y = pointInfo.pos.y;
                err = ACAPI_Element_Create (&elem, NULL);
            }
        }
    }

    return;
}

 

요구사항

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

 

참고사항

API_RubberLineType RubberLineInfoProc
APIIo_GetPointID
APIIo_GetLineID
APIIo_GetArcID
APIIo_GetPolyID
APIIo_DrawRubberArcID
ACAPI_Interface
API 함수