//////////////////////////////////////////////////////////////////////////////// 
// 
// step10.cpp -    
// 
// 1. C                - TypeAttrBolt
// 2. C         - CreateDet
// 3. C                - CreateStandart
// 4.     - DecomposeSpc
// 5.                  - ShowSpc
// 
//////////////////////////////////////////////////////////////////////////////// 
#include "stdafx.h"
#include <afxdllx.h> 
#include "resource.h"

#ifndef __LIBTOOL_H
#include <libtool.h>
#endif

#ifndef __LDEFIN2D_H
#include <ldefin2d.h>
#endif

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif


//-------------------------------------------------------------------------------
//       DLL
// ---
static AFX_EXTENSION_MODULE StepDLL = { NULL, NULL };


//-------------------------------------------------------------------------------
//   
//    DLL
// ---
extern "C" int APIENTRY
DllMain( HINSTANCE hInstance, DWORD dwReason, LPVOID lpReserved )
{
  UNREFERENCED_PARAMETER( lpReserved );

  if ( dwReason == DLL_PROCESS_ATTACH )
  {
    TRACE0( "DLL Initializing!" );
 
    if ( !AfxInitExtensionModule( StepDLL, hInstance ) )
      return 0;

    new CDynLinkLibrary( StepDLL );
  }
  else if ( dwReason == DLL_PROCESS_DETACH )
  {
    TRACE0( "DLL Terminating!" );
    AfxTermExtensionModule( StepDLL );
  }
  return 1;
}


//-------------------------------------------------------------------------------
//   
// ---
unsigned int WINAPI LIBRARYID()
{
  return IDR_LIBID;
}


//-------------------------------------------------------------------------------
//   
// ---
void TypeAttrBolt();
void CreateDet();
void CreateStandart();
void DecomposeSpc();
void ShowSpc();


//-------------------------------------------------------------------------------
//   
// ---
void WINAPI LIBRARYENTRY( unsigned int comm )
{
  if ( comm == 2 || comm == 3 )
  {
    if ( ksGetCurrentDocument( 1 ) ) //      
    {
      switch ( comm )
      {
        case 2 : CreateDet();      break; // C   
        case 3 : CreateStandart(); break; // C  
      }
    }
    else
      ErrorT( _T("   \n  /") );
  }
  else
  {
    switch ( comm )
    {
      case 1 : TypeAttrBolt(); break; // C   
      case 4 : DecomposeSpc(); break; //    
      case 5 : ShowSpc();      break; //  
    }
  }
}


//-------------------------------------------------------------------------------
//        ""
//      ,   
//   .      , 
//        ,      
//     .
//      apptool  .

//    :
//    1 12  1.25 -6g x 60.58.35X.16  7808 - 70

//       :

//  |   |   |      |  
//       |                |                        |         |
// 1     |  .      |                    |   | 1
// 2     |      | 1                      | uint    | 3
// 3     |          |                       |   | 0       (   )
// 4     |         | 12                     | uint    | 4  3 (   )
// 5     |     |                       |   | 0       (   )
// 6     |             | 1.25                   | float   | 5  3 (   )
// 7     |     | -6g                    |   | 6  3 (   )
// 8     |     |                       |   | 0       (   )
// 9     |           | 60                     | uint    | 7  3 (   )
// 10    | .   | .58                    |   | 0       (   )
// 11    |        | .35                   |   | 0       (   )
// 12    |        | .16                    |   | 0       (   )
// 13    |            |                    |   | 0       (   )
// 14    |           | 7808                   | uint    | 2
// 15    |     | -                      |   | 0       (   )
// 16    |             | 70                     |   | 0       (   )


//-------------------------------------------------------------------------------
//      
// ---
struct BOLT
{
  float          dr;    //  
  float          p;     //   
  float          s;     //   
  float          h;     //   
  float          D;     //   
  float          d3;    //    
  float          h2;    //  
  float          L;     //  
  float          l1;    //     
  float          b;     //   
  float          d2;    //   
  float          z4;    //   
  short          k;     //   ( 1 -    (    b ), 2 -   (       ) )
  unsigned short f;     //  
  short          klass; //  
  unsigned short gost;  //  
};


//-------------------------------------------------------------------------
//     
// ---
#define ST_KEY1                 100       //    
#define ST_KEY2_GOST            5         
#define ST_KEY3                 1
#define ATTR_TYPE_LIB_NAME_KEY3 _T("spc.lat") //    
#define SPC_NAME                5         // 

#define ISPOLN                  0x80      //  1 ( > 0 ),  2
#define PITCH                   0x2       //   ( > 0 ),  


//-------------------------------------------------------------------------
// C   
// ---
void TypeAttrBolt()
{
  //     
    
  ksAttributeTypeT parAttributeType; //     

  //      
  _tcscpy( parAttributeType.header, _T("") );   // o- 
  _tcscpy( parAttributeType.password, _T("") );     // ,     -     
  parAttributeType.rowsCount   = 1;            //    
  parAttributeType.flagVisible = 1;            //      ( ,    )
  parAttributeType.columns     = CreateArray( ATTR_COLUMN_ARR, 0 ); //    
  parAttributeType.key1        = ST_KEY1;      //    
  parAttributeType.key2        = ST_KEY2_GOST; //    
  parAttributeType.key3        = ST_KEY3;      //    
  parAttributeType.key4        = 0;            //   
  
  ColumnInfoT parColumnInfo; //      

  //   
  //  1 " ."
  _tcscpy( parColumnInfo.header, _T(" .") ); // o- 
  _tcscpy( parColumnInfo.def, _T("") );         //   
  parColumnInfo.type      = STRING_ATTR_TYPE;  //     - <ltdefine.h>
  parColumnInfo.key       = 1;                 //  ,  
  parColumnInfo.flagEnum  = 0;                 //   ,    
                                               //       1  0 
  parColumnInfo.fieldEnum = 0;                 //     (  )
  parColumnInfo.columns   = 0;                 //        

  //     
  AddArrayItem( parAttributeType.columns, -1, &parColumnInfo, sizeof( parColumnInfo ) );

  //  2 ""
  _tcscpy( parColumnInfo.header, _T("") ); // o- 
  parColumnInfo.type = UINT_ATTR_TYPE;          //     - <ltdefine.h>
  parColumnInfo.key = 3;                        //  ,   
  _tcscpy( parColumnInfo.def, _T("1") );             //   

  //     
  AddArrayItem( parAttributeType.columns, -1, &parColumnInfo, sizeof( parColumnInfo ) );

  //  3 ""
  _tcscpy( parColumnInfo.header, _T("") ); // o- 
  parColumnInfo.type = STRING_ATTR_TYPE;    //     - <ltdefine.h>
  parColumnInfo.key = 0;                    //  
  _tcscpy( parColumnInfo.def, _T("") );         //   

  //     
  AddArrayItem( parAttributeType.columns, -1, &parColumnInfo, sizeof( parColumnInfo ) );

  //  4 ""
  _tcscpy( parColumnInfo.header, _T("") ); // o- 
  parColumnInfo.type = UINT_ATTR_TYPE;       //     - <ltdefine.h>
  parColumnInfo.key = 3;                     //  
  _tcscpy( parColumnInfo.def, _T("12") );         //   

  //     
  AddArrayItem( parAttributeType.columns, -1, &parColumnInfo, sizeof( parColumnInfo ) );

  //  5 ""
  _tcscpy( parColumnInfo.header, _T("") );    // o- 
  parColumnInfo.type = STRING_ATTR_TYPE; //     - <ltdefine.h>
  parColumnInfo.key = 0;                 //  
  _tcscpy( parColumnInfo.def, _T("") );      //   

  //     
  AddArrayItem( parAttributeType.columns, -1, &parColumnInfo, sizeof( parColumnInfo ) );

  //  6 ""
  _tcscpy( parColumnInfo.header, _T("") ); // o- 
  parColumnInfo.type = FLOAT_ATTR_TYPE;  //     - <ltdefine.h>
  parColumnInfo.key = 3;                 //  
  _tcscpy( parColumnInfo.def, _T("1.25") );   //   

  //     
  AddArrayItem( parAttributeType.columns, -1, &parColumnInfo, sizeof( parColumnInfo ) );

  //  7 " "
  _tcscpy( parColumnInfo.header, _T(" ") ); // o- 
  parColumnInfo.type = STRING_ATTR_TYPE;          //     - <ltdefine.h>
  parColumnInfo.key = 3;                          //  
  _tcscpy( parColumnInfo.def, _T("-6g") );             //   

  //     
  AddArrayItem( parAttributeType.columns, -1, &parColumnInfo, sizeof( parColumnInfo ) );

  //  8 ""
  _tcscpy( parColumnInfo.header, _T("") );    // o- 
  parColumnInfo.type = STRING_ATTR_TYPE; //     - <ltdefine.h>
  parColumnInfo.key = 0;                 //  
  _tcscpy( parColumnInfo.def, _T("") );      //   

  //     
  AddArrayItem( parAttributeType.columns, -1, &parColumnInfo, sizeof( parColumnInfo ) );

  //  9 ""
  _tcscpy( parColumnInfo.header, _T("") ); // o- 
  parColumnInfo.type = UINT_ATTR_TYPE;     //     - <ltdefine.h>
  parColumnInfo.key = 3;                   //  
  _tcscpy( parColumnInfo.def, _T("60") );       //   

  //     
  AddArrayItem( parAttributeType.columns, -1, &parColumnInfo, sizeof( parColumnInfo ) );

  //  10 ". "
  _tcscpy( parColumnInfo.header, _T(". ") ); // o- 
  parColumnInfo.type = STRING_ATTR_TYPE;           //     - <ltdefine.h>
  parColumnInfo.key = 0;                           //  
  _tcscpy( parColumnInfo.def, _T(".58") );              //   

  //     
  AddArrayItem( parAttributeType.columns, -1, &parColumnInfo, sizeof( parColumnInfo ) );

  //  11 ""
  _tcscpy( parColumnInfo.header, _T("") ); // o- 
  parColumnInfo.type = STRING_ATTR_TYPE;      //     - <ltdefine.h>
  parColumnInfo.key = 0;                      //  
  _tcscpy( parColumnInfo.def, _T(".35") );        //   

  //     
  AddArrayItem( parAttributeType.columns, -1, &parColumnInfo, sizeof( parColumnInfo ) );

  //  12 ""
  _tcscpy( parColumnInfo.header, _T("") ); // o- 
  parColumnInfo.type = STRING_ATTR_TYPE;      //     - <ltdefine.h>
  parColumnInfo.key = 0;                      //  
  _tcscpy( parColumnInfo.def, _T(".16") );         //   

  //     
  AddArrayItem( parAttributeType.columns, -1, &parColumnInfo, sizeof( parColumnInfo ) );

  //  13 ""
  _tcscpy( parColumnInfo.header, _T("") ); // o- 
  parColumnInfo.type = STRING_ATTR_TYPE;  //     - <ltdefine.h>
  parColumnInfo.key = 0;                  //  
  _tcscpy( parColumnInfo.def, _T("") );    //   

  //     
  AddArrayItem( parAttributeType.columns, -1, &parColumnInfo, sizeof( parColumnInfo ) );

  //  14 ""
  _tcscpy( parColumnInfo.header, _T("") ); // o- 
  parColumnInfo.type = UINT_ATTR_TYPE;     //     - <ltdefine.h>
  parColumnInfo.key = 2;                   //  
  _tcscpy( parColumnInfo.def, _T("7808") );     //   

  //     
  AddArrayItem( parAttributeType.columns, -1, &parColumnInfo, sizeof( parColumnInfo ) );

  //  15 ""
  _tcscpy( parColumnInfo.header, _T("") );    // o- 
  parColumnInfo.type = STRING_ATTR_TYPE; //     - <ltdefine.h>
  parColumnInfo.key = 0;                 //  
  _tcscpy( parColumnInfo.def, _T("-") );      //   

  //     
  AddArrayItem( parAttributeType.columns, -1, &parColumnInfo, sizeof( parColumnInfo ) );

  //  16 ""
  _tcscpy( parColumnInfo.header, _T("") ); // o- 
  parColumnInfo.type = STRING_ATTR_TYPE; //     - <ltdefine.h>
  parColumnInfo.key = 0;                 //  
  _tcscpy( parColumnInfo.def, _T("70") );     //   

  //     
  AddArrayItem( parAttributeType.columns, -1, &parColumnInfo, sizeof( parColumnInfo ) );

  //   
  ksCreateAttrTypeT( &parAttributeType,         //    
                     ATTR_TYPE_LIB_NAME_KEY3 ); //    

  //   
  DeleteArray( parAttributeType.columns );
}


//-----------------------------------------------------------------------------------------------
// C     ""
// ---
reference EditSpcObjDet( reference rGeom )
{
  reference rSpcObject = 0;
  
  //    ,      
  if ( EditMacroMode() ) 
  {
    //            
    rSpcObject = ksGetSpcObjForGeomWithLimitT( _T("graphic.lyt"), //   
                                               1,                 //   
                                               0,                 //    -   ,  0 -   
                                               1,                 // 1 -      , 0 -    
                                               1, 0, 0 );         // 1 -  , 0 -  
    //    
    if ( !ksSpcObjectEdit( rSpcObject ) )
      rSpcObject  = 0;
  }

  //   ,      
  if ( rSpcObject || ksSpcObjectCreateT( _T("graphic.lyt"), //   
                                         1,             //   
                                         20,            //  
                                         0,             //  
                                         0,             //    -  ,      0, 
                                                        //    -     0
                                         0 ) )          //    
  {
    //    - 
    ksSpcChangeValueT( SPC_NAME,            //  ,   
                       1,                   //  ,   
                       _T(""),        //   
                       STRING_ATTR_TYPE  ); //    - <ltdefine.h>

    //  
    if ( rGeom )
      ksSpcIncludeReference( rGeom, 1 );

    rSpcObject = ksSpcObjectEnd(); //   
    
    //           
    //      Cursor  Placement
    if ( rSpcObject )
      if ( ksEditWindowSpcObject( rSpcObject ) ) //   ,   
                                                 //   ,    
        return rSpcObject;
  }
  return 0;
}


//----------------------------------------------------------------------------------------------
//    
//  ,    
//     Cursor  Placement
// ---
void DrawPosLeader( reference rSpcObject )
{
  //     
  RequestInfoT info;
    
  //   
  double x, y;

  //   
  reference rPosLeater = 0;

  //    
  bool repeat;
  
  do
  {
    repeat = false;    
    memset( &info, 0, sizeof( info ) );
    //       
    info.commands = ( LPTSTR )MENU_POS_LEADER;
    // C   
    info.prompt = _T("   ");
    //     
    int comm = CursorExT( &info, &x, &y, NULL, NULL );
    switch ( comm ) 
    {
      case 1: //    
        rPosLeater = ksCreateViewObject( POSLEADER_OBJ );
        break;
      case 2: //  
        memset( &info, 0, sizeof( info ) );
        //       
        info.prompt = _T("  ");
        //     
        if ( CursorExT( &info, &x, &y, NULL, NULL ) )
        {
          //       
          rPosLeater = FindObj( x, y,  //  
                                100 ); //   -     x,y
          //     
          if ( !( rPosLeater && GetObjParam( rPosLeater, 0, 0, 0 ) == POSLEADER_OBJ ) ) 
          {
            ErrorT( _T("    !") );
            rPosLeater = 0;
            repeat = true;
          }
        }
        break;
      case -1:
        //       
        rPosLeater = FindObj( x, y,  //  
                              100 ); //   -     x,y
        //     
        if ( !( rPosLeater && GetObjParam( rPosLeater, 0, 0, 0 ) == POSLEADER_OBJ ) ) 
        {
          ErrorT( _T("    !") );
          rPosLeater = 0;
          repeat = true;
        }
        break;
    }
  }  while ( repeat );
 
  //   ,     
  if ( rPosLeater ) 
  {
    //          
    if ( ksSpcObjectEdit( rSpcObject ) ) //     
    {
      //      -   
      ksSpcIncludeReference( rPosLeater, //      
                             true );     // 1 -   , 0 -         
      ksSpcObjectEnd(); //   
    }
  }
}


//-------------------------------------------------------------------------------
// C     
// ---
void CreateDet()
{
  //   , type -   ( 0 -  , 1 -  )
  reference rGroup = NewGroup( 0 );
    LineSeg ( 20, 30, 70, 30, 2 );
    LineSeg ( 70, 30, 70, 80, 2 );
    LineSeg ( 70, 80, 20, 80, 2 );
    LineSeg ( 20, 80, 20, 30, 2 );
  EndGroup(); //    
 
  //   
  reference rSpcObject = EditSpcObjDet( rGroup ); // C     ""
  if ( rSpcObject )
    DrawPosLeader( rSpcObject ); //    
}


//-----------------------------------------------------------------------------------------------
// C     " "
// ---
reference EditStandartSpcObj( BOLT &bolt, reference rGeom )
{
  reference rSpcObject = 0;
  
  //    ,      
  if ( EditMacroMode() ) 
  {
    //            
    rSpcObject = ksGetSpcObjForGeomWithLimitT( _T("graphic.lyt"), //   
                                               1,             //   
                                               0,             //    -   ,  0 -   
                                               1,             // 1 -      , 0 -    
                                               1, 0, 0 );           // 1 -  , 0 -  
    //    
    if ( !ksSpcObjectEdit( rSpcObject ) )
      rSpcObject  = 0;
  }

  //   ,      
  if ( rSpcObject || ksSpcObjectCreateT( _T("graphic.lyt"),  //   
                                         1,              //   
                                         25,             //  
                                         0,              //  
                                         313277777065.0, //    -  ,      0, 
                                                        //    -     0,
                                                        //      spc.lat
                                         0 ) )           //    
  {
    unsigned int uBuf;
   
    // 
    if ( !( bolt.f & ISPOLN ) )       //   
      ksSpcVisible( SPC_NAME, 2, 0 ); //  
    else 
    {
      uBuf = ( unsigned int ) 2;
      ksSpcVisible( SPC_NAME, 2, 1 ); //  
      //    - 
      ksSpcChangeValueT( SPC_NAME,          //  ,   
                         2,                 //  ,   
                         &uBuf,             //   
                         UINT_ATTR_TYPE  ); //    - <ltdefine.h>
    }  

    //    - 
    ksSpcChangeValueT( SPC_NAME, 4, &bolt.dr, FLOAT_ATTR_TYPE  );

    //  
    if ( !( bolt.f & PITCH ) ) //    
    {
      //     
      ksSpcVisible( SPC_NAME, 5, 0 ); 
      ksSpcVisible( SPC_NAME, 6, 0 ); //  
    }
    else 
    {
      //     
      ksSpcVisible( SPC_NAME, 5, 1 ); 
      ksSpcVisible( SPC_NAME, 6, 1 ); // 
      //    - 
      ksSpcChangeValueT( SPC_NAME, 6, &bolt.p, FLOAT_ATTR_TYPE );
    }

    //   
    ksSpcVisible( SPC_NAME, 7, 0 );

    //  
    uBuf = ( unsigned int ) bolt.L;
    //    - 
    ksSpcChangeValueT( SPC_NAME, 9, &uBuf, UINT_ATTR_TYPE  );

    //   
    ksSpcVisible( SPC_NAME, 10, 0 );

    //  
    ksSpcVisible( SPC_NAME, 11, 0 );

    //  
    ksSpcVisible( SPC_NAME, 12, 0 );

    //  
    uBuf = ( unsigned int ) bolt.gost;
    //    - 
    ksSpcChangeValueT( SPC_NAME, 14, &uBuf, UINT_ATTR_TYPE  );

    //  
    if ( rGeom )
      ksSpcIncludeReference( rGeom, 1 );

    rSpcObject = ksSpcObjectEnd(); //   
    
    //           
    //      Cursor  Placement
    if ( rSpcObject )
      if ( ksEditWindowSpcObject( rSpcObject ) ) //   ,   
                                                 //   ,    
         return rSpcObject;
  }
  return 0;
}


//-------------------------------------------------------------------------------
// C  
// ---
void  CreateStandart()
{
  BOLT bolt; //      
  memset( &bolt, 0, sizeof( bolt ) );
 
  bolt.gost  = 7808;  //   
  bolt.s     = 27;    //   
  bolt.h     = 11;    //   
  bolt.D     = 30.1f; //   
  bolt.L     = 55;    //  
  bolt.l1    = 49;    //     
  bolt.b     = 46;    //   
  bolt.h2    = 10;    //  
  bolt.klass = 1;     //   ( klass = B )
  bolt.d2    = 22.5;  //   
  bolt.k     = 2;     //   ( 1 -    (    b ), 2 -   (       ) )
  bolt.dr    = 20;    //  

  //   
  reference rSpcObject = EditStandartSpcObj( bolt, 0 ); // C     " "
  if ( rSpcObject )
    DrawPosLeader( rSpcObject  ); //    
}

//-----------------------------------------------------------------------------------------------
//    
// ---
void DecomposeSpc()
{
  //    
  reference rDocument = ksGetCurrentDocument( 2 );
  if ( rDocument ) 
  {
    //    
    int pageCount = ksGetSpcDocumentPagesCount( rDocument );
    
    //     
    RectParam parRect; //      
    GetObjGabaritRect( rDocument, &parRect );

    //  
    DocumentParamT parDocument; //   
    memset( &parDocument, 0, sizeof( parDocument ) );
    
    parDocument.regim = 0;
    parDocument.type = 3;
    CreateDocumentT( &parDocument ); //  
    
    for ( int i = 0; i < pageCount; i++ ) 
    {
      //  
      //       
      reference rGroup = DecomposeObj( rDocument,                    //   
                                       0,                            //   ( 0 - , , , , 
                                                                     // 1 - , , , 2 - , , ,
                                                                     // 4 - , ,  )
                                       0.4,                          //  
                                       ( unsigned char )( i + 1 ) ); //     ( 0 - 
                                                                     //    , 1 -      ) 
      if ( rGroup ) 
      {
        //  
        int column = i % 3;
        double x = ( parRect.pTop.x - parRect.pBot.x + 5 ) * column;
        int row = i / 3;
        double y = ( parRect.pTop.y - parRect.pBot.y + 5 ) * row;
        
        // C 
        MoveObj( rGroup, x, -y );
        
        //     
        StoreTmpGroup( rGroup ); 
        //    
        ClearGroup( rGroup );
      }
    }
    TCHAR buf[255];
    _stprintf( buf, _T(" %d  "), pageCount );
    MessageT( buf );
  }
  else
    ErrorT( _T("   ") );
}

//-----------------------------------------------------------------------------------------------
//   
// ---
void ShowSpc()
{
  //       
  //      ,     ,   ,
  //        .
  //  -  nameLib  styleNumb   ( ..      
  //  ,     )
  reference rIterator = CreateSpcIterator( 0,   //     
                                           0,   //       
                                           0 ); //   ( 0 -  , 1 -  ,
                                                // 2 -       , 
                                                // 3 -   ,     ,   .. )
  
  if ( rIterator ) 
  {
    //     
    reference rSpcObject = MoveIterator( rIterator, 'F' );

    TCHAR buf[255];
    TCHAR buf1[255];
    while( ExistObj( rSpcObject ) ) //   
    {
      //       
      int columnCount = ksGetSpcTableColumnT( NULL,  //     
                                              0,     //       
                                              0 );   //   ( 0 -   , 1 -   )
      //    
      for ( int i = 1; i <= columnCount; i++ ) 
      {
        //      ,    
        SpcColumnParamT parSpcColumn; //    
        
        //          ,    ,  .
        if ( ksGetSpcColumnTypeT( rSpcObject,       //  
                                 i,                //  ,   1
                                 &parSpcColumn ) ) //  
        {
          
          //       
          ksGetSpcObjectColumnTextT( rSpcObject,              //  
                                     parSpcColumn.columnType, //   ( SPC_CLM_FORMAT - , SPC_CLM_ZONE - , SPC_CLM_POS - ,
                                                             // SPC_CLM_MARK - , SPC_CLM_NAME - , SPC_CLM_COUNT - ,
                                                             // SPC_CLM_NOTE - , SPC_CLM_MASSA - , SPC_CLM_MATERIAL - ,
                                                             // SPC_CLM_USER - , SPC_CLM_KOD - ,
                                                             // SPC_CLM_FACTORY - - )
                                     parSpcColumn.ispoln,     //    
                                     parSpcColumn.block,      //  ,   0
                                     buf,                     //   ,       
                                     255 );                   //  
          
          _stprintf( buf1, _T(",\ncolumnType = %d, ispoln = %d, block = %d"), 
                   parSpcColumn.columnType, parSpcColumn.ispoln, parSpcColumn.block );
          _tcscat( buf, buf1 );

          //             
          int colNumb = ksGetSpcColumnNumb( rSpcObject,              //  
                                            parSpcColumn.columnType, //  
                                            parSpcColumn.ispoln,     //    
                                            parSpcColumn.block );    //  
          _stprintf( buf1, _T(",\ni = %d, colNumb = %d"), i, colNumb );
          _tcscat( buf, buf1 );
          MessageT( buf );
        }
      }
      //     
      rSpcObject = MoveIterator( rIterator, 'N' );
    }
    
    DeleteIterator( rIterator ); //      
  }
}