Draws graphical feedback during an input process.

    GSErrCode ACAPI_Interface (
        API_RubberArcType*     rubberArc



[in] Definition of the arc (circle or elliptic) to be drawn.


Return Values

The function has completed with success.
no rubber line callback function has been defined
rubberArc->arcType is neither APIRubberArc_OrigoAngles nor APIRubberArc_ThreePoint

For other common API errors see the API Errors document.



This function is used to draw rubber arcs while a user input. The function can be called only from the RubberLineInfoProc passed to the given input function; APIIo_GetPointID or APIIo_GetLineID or APIIo_GetArcID or APIIo_GetPolyID.

The arc is defined with the coordinate of the center point, the radius (or ‘a’ if ellipse), the beginning angle of the arc and the ending angle of the arc or with the coordinate of the center point, the beginning point of the arc, the ending point of the arc and the sign of the arc’s angle (see API_RubberArcType).


#define         PI                      3.141592653589793

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

    API_RubberArcType  rubberArc;

    BNZeroMemory (&rubberArc, sizeof (API_RubberArcType));

    rubberArc.lineThick = APIRubberLine_Simple;
    /* draws a unit circle around the actual cursor position */

    rubberArc.arcType = APIRubberArc_OrigoAngles;
    rubberArc.arc2D.r = crossWidth;
    rubberArc.arc2D.angle = 0.0;
    rubberArc.arc2D.ratio = 1.0;
    rubberArc.arc2D.begAng = 0;
    rubberArc.arc2D.endAng = 2 * PI;
    rubberArc.origC = info->actCoord;
    ACAPI_Interface (APIIo_DrawRubberArcID, &rubberArc, nullptr);

** 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);
            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.type = API_ColumnID;
            err = ACAPI_Element_GetDefaults (&elem, nullptr);
            if (err == NoError) {
                elem.column.origoPos.x = pointInfo.pos.x;
                elem.column.origoPos.y = pointInfo.pos.y;
                err = ACAPI_Element_Create (&elem, nullptr);




Version: API 4.1 or later
Header: APIdefs_Interface.h


See Also

APIIo_GetPointID, APIIo_GetLineID, APIIo_GetArcID, APIIo_GetPolyID,
APIIo_DrawRubberLineID, RubberLineInfoProc,
ACAPI_Interface, API Functions