cmmIxArc3PTo¶
SYNOPSIS¶
VT_I4 cmmIxArc3PTo(
[in] VT_I4 MapIndex, [in] VT_R8 P2X, [in] VT_R8 P2Y, [in] VT_R8 P3X, [in] VT_R8 P3Y,
[in] VT_R8 EndAngle, [in] VT_I4 IsBlocking
)
DESCRIPTION¶
본 함수는 원호의 중심점 및 종점 좌표를 사용하는 cmmIxArcP(상대 좌표) 또는 cmmIxArcPTo (절대 좌표) 함수와는 달리 현재 좌표(1 차)를 포함해서 2 차 및 3 차 좌표의 총 3 개의 (X, Y) 순서쌍 좌표를 사용해서 원호 보간을 수행합니다. 함수 이름에 ‘To’ 가 포함되므로 절대적 위치로 원호 보간 이송이 됩니다. 결과적으로 세 점을 지나게 되므로 중심점은 자동으로 결정됩니다.
PARAMETER¶
MapIndex : 맵번호(Map index), 이 맵번호를 사용하기전에 먼저 cmmIxMapAxes() 함수를 통하여 해당 맵번호에 유효한 축들이 맵핑되어 있어야 합니다.
VT_R8P2X : 원호가 지나는 2 번째 점의 X 좌표 입니다.
VT_R8P2Y : 원호가 지나는 2 번째 점의 Y 좌표 입니다.
VT_R8P3X : 원호가 지나는 3 번째 점의 X 좌표 입니다.
VT_R8P3Y : 원호가 지나는 3 번째 점의 Y 좌표 입니다
EndAngle : 중심점과 출발점을 잇는 선분이 중심점과 종점을 잇는 선분과 이루는 각도를 의미 합니다.
Value |
Meaning |
---|---|
0도 |
3번째 점에서 보간 이송 완료 하도록 설정. 이 경우 종점도 3번째 점이 됩니다. |
0 도 초과 360도 이하
|
|
IsBlocking : 완료될 때까지 기다리는 동안 윈도우 메시지를 블록(Blocking)할 것인지를 결정합니다.
Value |
Meaning |
---|---|
cmFALSE |
블록(Blocking)을 하지 않습니다. 따라서 해당 모션이 완료되는 동안에도 윈도우 이벤트를 처리합니다. |
cmTRUE |
블록(Blocking)을 합니다. 따라서 해당 모션이 완료되는 동안에는 윈도우 이벤트가 처리되지 않습니다. |
RETURN VALUE¶
Value |
Meaning |
---|---|
음수 |
수행 실패 |
cmERR_NONE |
수행 성공 |
REFERENCE¶
Note
이 함수 사용 시 현재 좌표를 포함한 3 개의 점이 거의 직선에 가깝게 설정되는 경우는 사실상 지름이 무한대 거나 상당히 큰 원을 그려야 하는 문제가 발생하며, 이 경우는 함수 수행은 되고 반환값이 cmERR_NONE 이 되더라도 실제로는
제대로 이송이 안되고 원호 보간 이송에 실패할 수 있음에 유의해야 합니다.
EXAMPLE¶
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 | C/C++
/***************************************************************
* OnSetSpeed : 이 함수는 속도설정의 변경이 필요할 때
* 호출되는 가상의 함수 입니다.
* ***************************************************************/
#define MAP0 0 //맵번호 (0)
void OnSetSpeed()
{
cmmIxMapAxes(MAP0, cmX1_MASK | cmY1_MASK, 0 );
//또는 cmmIxMapAxes(MAP0, 0x3, 0x0);
//보간 이동할 축들의 기본속도를 설정합니다.
cmmCfgSetSpeedPattern(cmX1, cmSMODE_T, 1000, 5000, 5000);
cmmCfgSetSpeedPattern(cmY1, cmSMODE_T, 1000, 5000, 5000);
}
/**************************************************************
* OnDoMotion() : 작업명령시에 호출되는 가상의 함수
**************************************************************/
void OnDoMotion()
{
double fPos2x, fPos2y, fPos3x, fPos3y;
//MAP0 를 마스터 속도 모드, Trapezoidal 속도 패턴으로 작업속도의 100%,
//가속도의 70%, 감속도의 70%로 설정 합니다.
cmmIxSetSpeedPattern(MAP0, cmFALSE, cmSMODE_T, 100, 70, 70 );
// 현재 위치를 (0, 0) 이라고 가정, 2 번째 및 3 번째 지나는 점 설정 및 이송 시작
// 끝 각은 270 도로 설정
fPos2x=1000; fPos2y=1000; fPos3x=2000; fPos3y=2000;
cmmIxArc3PTo(MAP0, fPos2x, fPos2y, fPos3x, fPos3y, 270, cmFALSE);
}
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 | Visual Basic
‘ ***************************************************************
‘ OnSetSpeed : 이 함수는 속도설정의 변경이 필요할 때
‘ 호출되는 가상의 함수 입니다.
‘ ***************************************************************
Const MAP0 = 0 ‘맵번호 (0)
Private Sub OnSetSpeed()
Call cmmIxMapAxes(MAP0, cmX1_MASK Or cmY1_MASK, 0 )
‘ 또는 Call cmmIxMapAxes(MAP0, &H3, &H0);
‘ 보간 이동할 축들의 기본속도를 설정합니다.
Call cmmCfgSetSpeedPattern(cmX1, cmSMODE_T, 1000, 5000, 5000)
Call cmmCfgSetSpeedPattern(cmY1, cmSMODE_T, 1000, 5000, 5000)
End Sub
‘ **************************************************************
‘ OnDoMotion() : 작업명령시에 호출되는 가상의 함수
‘ **************************************************************
Private Sub OnDoMotion()
Dim fPos2x As Double
Dim fPos2y As Double
Dim fPos3x As Double
Dim fPos3y As Double
‘ MAP0 를 마스터 속도 모드, Trapezoidal 속도 패턴으로 작업속도의 100%,
‘ 가속도의 70%, 감속도의 70%로 설정 합니다.
Call cmmIxSetSpeedPattern(MAP0, cmFALSE, cmSMODE_T, 100, 70, 70 )
‘ 현재 위치를 (0, 0) 이라고 가정, 2 번째 및 3 번째 지나는 점 설정 및 이송 시작
‘ 끝 각은 270 도로 설정
fPos2x=1000
fPos2y=1000
fPos3x=2000
fPos3y=2000
Call cmmIxArc3PTo(MAP0, fPos2x, fPos2y, fPos3x, fPos3y, 270, cmFALSE)
End Sub
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 | Delphi
//***************************************************************
// OnSetSpeed : 이 함수는 속도설정의 변경이 필요할 때
// 호출되는 가상의 함수 입니다.
//****************************************************************
Const MAP0 = 0; //맵번호 (0)
procedure OnSetSpeed();
begin
cmmIxMapAxes(MAP0, cmX1_MASK or cmY1_MASK, 0 );
//또는 cmmIxMapAxes(MAP0, $3, $0);
//보간 이동할 축들의 기본속도를 설정합니다.
cmmCfgSetSpeedPattern(cmX1, cmSMODE_T, 1000, 5000, 5000);
cmmCfgSetSpeedPattern(cmY1, cmSMODE_T, 1000, 5000, 5000);
end;
//**************************************************************
// OnDoMotion() : 작업명령시에 호출되는 가상의 함수
//**************************************************************
procedure OnDoMotion();
var
fPos2x : Double;
fPos2y : Double;
fPos3x : Double;
fPos3y : Double;
begin
//MAP0 를 마스터 속도 모드, Trapezoidal 속도 패턴으로 작업속도의 100%,
//가속도의 70%, 감속도의 70%로 설정 합니다.
cmmIxSetSpeedPattern(MAP0, cmFALSE, cmSMODE_T, 100, 70, 70 );
// 현재 위치를 (0, 0) 이라고 가정, 2 번째 및 3 번째 지나는 점 설정 및 이송 시작
// 끝 각은 270 도로 설정
fPos2x :=1000;
fPos2y :=1000;
fPos3x :=2000;
fPos3y :=2000;
cmmIxArc3PTo(MAP0, fPos2x, fPos2y, fPos3x, fPos3y, 270, cmFALSE);
end;
|
See also
cmmIxArcP, cmmIxArcPTo, cmmIxArcPStart, cmmIxArcPToStart, cmmIxArc3PToStart