Implementing Automation - Implementing Vector Automation.

Start with the project you created in Initializing and loading a vector image

Take the following steps to create and initialize the automation objects:

1.

Add the following after #include "…\l_bitmap.h". Note that you need to change the path to match what is on your system.

#include "c:/Program Files/LEAD Technologies/LEADTOOLS 15/Include/ltpnt.h"
#include "c:/Program Files/LEAD Technologies/LEADTOOLS 15/Include/lttlb.h"
#include "c:/Program Files/LEAD Technologies/LEADTOOLS 15/Include/ltcon.h"
#include "c:/Program Files/LEAD Technologies/LEADTOOLS 15/Include/ltaut.h"

2.

Change the ResetView function to the following:

static L_VOID ResetView( HWND hWnd, pVECTORHANDLE pVector, pAUTOMATIONHANDLE pAutomation )
{
   VECTORPOINT Scale;
   VECTORPOINT Rotation;
   VECTORPOINT Translation;
   POINT       pt;

   L_AutSetUndoEnabled ( pAutomation, FALSE );

   Scale.x = Scale.y = Scale.z = 1.0;
   L_VecSetScale  ( pVector, &Scale, NULL, NULL, 0L );

   Rotation.x = Rotation.y = Rotation.z = 0.0;
   L_VecSetRotation  ( pVector, &Rotation, NULL, NULL, 0L );

   Translation.x = Translation.y = Translation.z = 0.0;
   L_VecSetTranslation  ( pVector, &Translation, NULL, 0L );

   pt.x = 0;
   pt.y = 0;

   L_VecSetPan  ( pVector, &pt );
   L_VecSetParallelogram  ( pVector, NULL, NULL );
   L_VecSetOrigin  ( pVector, NULL );
   L_VecSetCamera  ( pVector, NULL );

   L_AutSetUndoEnabled ( pAutomation, TRUE );

   InvalidateRect( hWnd, NULL, FALSE );
}

3.

Add this new local function before the WndProc function:

static L_INT EXT_CALLBACK ContainerCallback( pCONTAINERHANDLE pContainer, CONTAINEREVENTTYPE nEventType, L_VOID *pEventData, L_VOID *pUserData )
{
   HWND                 hWnd;
   pCONTAINEROBJECTDATA pObjectData;

   switch( nEventType )
   {
      case CONTAINER_EVENT_TYPE_DRAW:
         pObjectData = (pCONTAINEROBJECTDATA) pEventData;
         if( pObjectData->fState == CONTAINER_STATE_END || pObjectData->fState == CONTAINER_STATE_ABORT )
         {
            L_ContainerGetOwner ( pContainer, &hWnd );
            InvalidateRect( hWnd, NULL, FALSE );
         }
         break;
   }

   return SUCCESS;
}

4.

Add the following local variables to the WndProc function, right after the HDC hDC; statement:

static pAUTOMATIONHANDLE pAutomation;
static pCONTAINERHANDLE pContainer;
static pTOOLBARHANDLE pToolbar;
CONTAINERMETRICS ContainerMetrics;

5.

Add the following lines right after the L_VecAttachToWindow function call in WM_CREATE of WndProc:

         // create the automation handle
         L_AutInit( &pAutomation );
         L_AutCreate ( pAutomation, AUTOMATION_MODE_VECTOR, 0L );

         // create the toolbar
         L_TBInit  ( &pToolbar );
         L_TBCreate  ( pToolbar, hWnd, TEXT("Vector"), TOOLBAR_VECTOR );
         L_TBSetVisible  ( pToolbar, TRUE );

         // add it to the automation object
         L_AutSetToolbar ( pAutomation, pToolbar );

         // create the container
         L_ContainerInit ( &pContainer );
         L_ContainerCreate ( pContainer, hWnd );

         // set its callback
         L_ContainerSetCallback ( pContainer, ContainerCallback, NULL );

         // add it to the automation object
         L_AutAddContainer ( pAutomation, pContainer, &Vector );

         // set it as the active container
         L_AutSetActiveContainer ( pAutomation, pContainer );

6.

Change the ResetView function call just before the return 0; statement in WM_CREATE to:

ResetView( hWnd, &Vector, pAutomation ); 

7.

Add the following lines right after the L_VecSetViewport function call in WM_SIZE:

// set container limits to all client area
ContainerMetrics.nSize = sizeof( CONTAINERMETRICS );
ContainerMetrics.dwMask = CMF_LIMITS;
CopyRect( &ContainerMetrics.rcLimits, &Rect );
L_ContainerSetMetrics
 ( pContainer, &ContainerMetrics );

8.

Add these lines to the WM_DESTROY message, before the call to L_VecFree :

         // destroy container
         L_AutRemoveContainer ( pAutomation, pContainer );
         L_ContainerFree ( pContainer );

         // destroy automation
         L_AutFree ( pAutomation );

         // destroy toolbar
         L_TBFree  ( pToolbar ); 

9.

In Imports.cpp add the following #pragma comment lines. Note that you need to change the path to match what is on your system:

 

#if defined(FOR_WIN64) 



   #pragma comment(lib, "C:\\Program Files\\LEAD Technologies\\LEADTOOLS 15\\Lib\\API\\x64\\Lvaut_x.lib")
   #pragma comment(lib, "C:\\Program Files\\LEAD Technologies\\LEADTOOLS 15\\Lib\\API\\x64\\Lvcon_x.lib")
   #pragma comment(lib, "C:\\Program Files\\LEAD Technologies\\LEADTOOLS 15\\Lib\\API\\x64\\Lvtlb_x.lib")



#elif defined(FOR_WIN32) 



   #pragma comment(lib, "C:\\Program Files\\LEAD Technologies\\LEADTOOLS 15\\Lib\\API\\Win32\\Ltaut_u.lib")
   #pragma comment(lib, "C:\\Program Files\\LEAD Technologies\\LEADTOOLS 15\\Lib\\API\\Win32\\Ltcon_u.lib")
   #pragma comment(lib, "C:\\Program Files\\LEAD Technologies\\LEADTOOLS 15\\Lib\\API\\Win32\\Lttlb_u.lib")



#endif // #if defined(FOR_WIN64) 

10.

Compile and run the demo. You should be able to draw new vector objects and rotate in 3D, using your mouse and the pan feature.