APIIo_GetPolyID
폴리곤 입력을 수행합니다.
GSErrCode ACAPI_Interface ( APIIo_GetPolyID, API_GetPolyType* polyInfo, API_RubberPolyCallbacks* rubberPolyCallbacks );
파라미터
- polyInfo
- [in/out] 폴리곤 입력 동작의 파라미터들입니다.
- rubberPolyCallbacks
- [in] 커스텀 피드백 드로잉에 대한 콜백 함수들입니다. 선택사항이며
NULL
이 될 수 있습니다.
리턴 값
NoError
- 함수가 성공적으로 완료되었습니다.
APIERR_BADPARS
polyInfo
가NULL
입니다. 또는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
을 이용하여 coords
와 parcs
핸들을 폐기하는 것을 잊지 마십시오.
만약 입력을 위해
changePlane
이 세트되지 않았다면,
API_GetPolyType의 getZCoords
멤버에
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 함수