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도 이하
현재 좌표(1 번째), 2 번째 및 3 번째를 지나 중심점으로부터 해당 각도 만큼
원호 보간 이송이 수행됩니다.
단 각도가 2 번째 또는 3 번째 점을 지나기에 모자라는 경우는 해당 각도
까지만 그려지고 2 번째 및 3 번째 점은 지나지 않게 됩니다.
  • 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;