APIIo_DrawRubberArcID
입력 프로세스 도중 그래픽 피드백을 그립니다.
GSErrCode ACAPI_Interface (
APIIo_DrawRubberArcID,
API_RubberArcType* rubberArc
);
파라미터
- rubberArc
- [in] 그려질 호(원 또는 타원)의 정의입니다.
리턴 값
NoError- 함수가 성공적으로 완료되었습니다.
APIERR_GENERAL- rubber line 콜백 함수가 정의되지 않았습니다.
APIERR_BADPARSrubberArc->arcType이APIRubberArc_OrigoAngles또는APIRubberArc_ThreePoint가 아닙니다.
다른 공통 API 오류들에 대해서는 API 오류 문서를 보십시오.
설명
이 함수는 사용자 입력 도중 rubber 호들을 그리는 데 사용합니다. 이 함수는 주어진 입력 함수로 전달된 RubberLineInfoProc로부터만 호출될 수 있습니다; APIIo_GetPointID 또는 APIIo_GetLineID 또는 APIIo_GetArcID 또는 APIIo_GetPolyID.
호는 중심점의 좌표, 반지름 (또는 타원의 경우 'a'), 호의 시작 각도와 호의 끝 각도로 정의되거나, 중심점의 좌표, 호의 시작 점, 호의 끝 점과 호의 각도의 부호로 정의됩니다. (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, 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 4.1 또는 이후
- 헤더: APIdefs_Interface.h
참고사항
API_RubberArcType,
APIIo_GetPointID, APIIo_GetLineID, APIIo_GetArcID, APIIo_GetPolyID,
APIIo_DrawRubberLineID, RubberLineInfoProc,
ACAPI_Interface, API 함수