Transformation

Start with the project you created in Vector Load and Save.

Take the following steps to add scale, rotation and translation to the sample program:

1.

Add this local variable under L_INT nRet; in the WndProc function:

VECTORPOINT Point;

2.

Add these lines right after the return 0L; of case WM_PAINT:

case WM_CHAR:
   switch( wParam )
   {
      case 'x':
      case 'X':
      case 'y':
      case 'Y':
      case 'z':
      case 'Z':
         // get current rotation value
         L_VecGetRotation ( &Vector, &Point );
         Point.x += ( wParam == 'x' || wParam == 'X' ) ? 5.0 : 0;
         Point.y += ( wParam == 'y' || wParam == 'Y' ) ? 5.0 : 0;
         Point.z += ( wParam == 'z' || wParam == 'Z' ) ? 5.0 : 0;
         // set new rotation value
         L_VecSetRotation ( &Vector, &Point, NULL, NULL, 0 );
         InvalidateRect( hWnd, NULL, FALSE );
         break;

      case '+':
      case '-':
         // get current scale value
         L_VecGetScale ( &Vector, &Point );
         Point.x += ( wParam == '+' ) ? 0.1 : -0.1;
         Point.y += ( wParam == '+' ) ? 0.1 : -0.1;
         Point.z += ( wParam == '+' ) ? 0.1 : -0.1;
         // set new scale value
         L_VecSetScale ( &Vector, &Point, NULL, NULL, 0 );
         InvalidateRect( hWnd, NULL, FALSE );
         break;
   }
   return 0L;

case WM_KEYDOWN:
   switch( wParam )
   {
      case VK_UP:
      case VK_DOWN:
      case VK_LEFT:
      case VK_RIGHT:
         // get current translation
         L_VecGetTranslation ( &Vector, &Point );
         if( wParam == VK_LEFT ) Point.x -= 1.0;
         if( wParam == VK_RIGHT ) Point.x += 1.0;
         if( wParam == VK_UP ) Point.y += 1.0;
         if( wParam == VK_DOWN ) Point.y -= 1.0;
         // set new translation value
         L_VecSetTranslation ( &Vector, &Point, NULL, 0 );
         InvalidateRect( hWnd, NULL, FALSE );
         break;
   }
   return 0L;

3.

Compile and run the demo.

4.

Select File/Open… from the program menu. Browse to c:\lead\images\random.dxf and click OK.

5.

Now you should be able to rotate the vector drawing around any axis using the x, y and z keys on your keyboard and scale up and down using the + and – keys.