// step9.cpp : Defines the initialization routines for the DLL.
//

#include "stdafx.h"
#include "step9.h"
#include <ldefin2d.h>

#ifdef __LIGHT_VERSION__
#include <klAPI5.h>
#else
#include <kAPI5.h>
#endif

#include <ksConstants.h>

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

//
//	Note!
//
//		If this DLL is dynamically linked against the MFC
//		DLLs, any functions exported from this DLL which
//		call into MFC must have the AFX_MANAGE_STATE macro
//		added at the very beginning of the function.
//
//		For example:
//
//		extern "C" BOOL PASCAL EXPORT ExportedFunction()
//		{
//			AFX_MANAGE_STATE(AfxGetStaticModuleState());
//			// normal function body here
//		}
//
//		It is very important that this macro appear in each
//		function, prior to any calls into MFC.  This means that
//		it must appear as the first statement within the 
//		function, even before any object variable declarations
//		as their constructors may generate calls into the MFC
//		DLL.
//
//		Please see MFC Technical Notes 33 and 58 for additional
//		details.
//

/////////////////////////////////////////////////////////////////////////////
// CStep9App

BEGIN_MESSAGE_MAP(CStep9App, CWinApp)
	//{{AFX_MSG_MAP(CStep9App)
		// NOTE - the ClassWizard will add and remove mapping macros here.
		//    DO NOT EDIT what you see in these blocks of generated code!
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CStep9App construction

CStep9App::CStep9App()
{
}

/////////////////////////////////////////////////////////////////////////////
// The one and only CStep9App object

CStep9App theApp;

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

void DrawLinDim( ksDocument2D& doc );
void DrawAngDim( ksDocument2D& doc );
void DrawRough( ksDocument2D& doc );
void DrawLeader( ksDocument2D& doc );
void DrawPosLeader( ksDocument2D& doc );
void DrawBrandLeader( ksDocument2D& doc );
void DrawMarkerLeader( ksDocument2D& doc );
void DrawBase( ksDocument2D& doc );
void DrawCutLine( ksDocument2D& doc );
void DrawDiamDim( ksDocument2D& doc );
void DrawRadDimt( ksDocument2D& doc );
void DrawRadBreakDimt( ksDocument2D& doc );
void DrawViewPointer( ksDocument2D& doc );

KompasObject kompas( NULL );

//-------------------------------------------------------------------------------
//
// ---
void GetKompas() {
	if ( !kompas.m_lpDispatch ) {
		CString filename;
		if( ::GetModuleFileName(NULL, filename.GetBuffer(255), 255) ) {
			filename.ReleaseBuffer( 255 );
			CString libname;

      #ifdef __LIGHT_VERSION__
        libname.LoadString( IDS_STRING5 );  //klAPI5.dll
      #else
        libname.LoadString( IDS_STRING4 );  //kAPI5.dll
      #endif

			filename.Replace( filename.Right(filename.GetLength() - (filename.ReverseFind('\\') + 1)), 
												libname );

			HINSTANCE hAppAuto = LoadLibrary( filename ); //  kAPI5.dll
			if(  hAppAuto ) {
				typedef LPDISPATCH ( WINAPI *FCreateKompasObject )(); 
				FCreateKompasObject pCreateKompasObject = 
					(FCreateKompasObject)GetProcAddress( hAppAuto, "CreateKompasObject" );	
				if ( pCreateKompasObject ) 
					kompas = pCreateKompasObject();
				FreeLibrary( hAppAuto );
			}
		}
	}
}

//-------------------------------------------------------------------------------
//
// ---
void WINAPI LIBRARYENTRY( unsigned int comm ) {
	//      .exe ,     
	//   dll   define
	AFX_MANAGE_STATE(AfxGetStaticModuleState());

	GetKompas();
	if ( kompas.m_lpDispatch ) {
		ksDocument2D doc( kompas.ActiveDocument2D() );
		if ( doc.m_lpDispatch && doc.GetReference() ) {
			switch ( comm ) {
			case 1  : ::DrawLinDim( doc );       break; // 
			case 2  : ::DrawAngDim( doc );       break; // 
			case 3  : ::DrawRough( doc );        break; //
			case 4  : ::DrawLeader( doc );       break; // 
			case 5  : ::DrawPosLeader( doc );    break; //  
			case 6  : ::DrawBrandLeader( doc );  break; //
			case 7  : ::DrawMarkerLeader( doc ); break; //
			case 8  : ::DrawBase( doc );         break; // 
			case 9  : ::DrawCutLine( doc );      break; //
			case 10 : ::DrawDiamDim( doc );     break; // 
			case 11 : ::DrawRadDimt( doc );      break; // 
			case 12 : ::DrawRadBreakDimt( doc ); break; //  c 
			case 13 : ::DrawViewPointer( doc );  break; //c 
			}
		}
		else
			kompas.ksError( "    \n  /" );
	}
}

/*
//-------------------------------------------------------------------------------
//
// ---
void DrawLinDim( ksDocument2D& doc ) {
  ksLDimParam param( kompas.GetParamStruct( ko_LDimParam ) );
	if ( !param.m_lpDispatch )
		return;

	ksDimDrawingParam dPar( param.GetDPar() );
	ksLDimSourceParam sPar( param.GetSPar() );
  ksDimTextParam tPar( param.GetTPar() );

	if ( !dPar.m_lpDispatch || !sPar.m_lpDispatch || !tPar.m_lpDispatch )
		return;

	dPar.Init();
	dPar.SetTextPos(10);
	dPar.SetTextBase(2);
	dPar.SetPt1(2);
	dPar.SetPt2(2);
	dPar.SetAng(-30);
	dPar.SetLenght(20);

 	sPar.Init();
	sPar.SetX1(50);
  sPar.SetY1(50);
  sPar.SetX2(70 );
  sPar.SetY2(60 );
 	sPar.SetDx(0);
  sPar.SetDy(-20);
	sPar.SetBasePoint(1);

 	tPar.Init(0);
  tPar.SetBitFlagValue( _AUTONOMINAL, true );
  tPar.SetBitFlagValue( _PREFIX, true );
  tPar.SetBitFlagValue( _DEVIATION, true );
  tPar.SetBitFlagValue( _UNIT, true );
  tPar.SetBitFlagValue( _SUFFIX, true );
	tPar.SetSign( 0 );

  ksChar255 str( kompas.GetParamStruct(ko_Char255) );
  ksDynamicArray arrText( tPar.GetTextArr() );//kompas.GetDynamicArray(CHAR_STR_ARR) );

	if ( !str.m_lpDispatch || !arrText.m_lpDispatch )
    return;

  str.SetStr( "prefix" );
 	arrText.ksAddArrayItem( -1, str );

	str.SetStr( "+0,5" );
 	arrText.ksAddArrayItem( -1, str );

	str.SetStr( "-0,5" );
 	arrText.ksAddArrayItem( -1, str );

  str.SetStr( "mm" );
 	arrText.ksAddArrayItem( -1, str );

  str.SetStr( "pp&04ww&01oo" );
 	arrText.ksAddArrayItem( -1, str );

	long obj = doc.ksLinDimension( param );

	if ( obj ) {
		doc.ksGetObjParam( obj, param, ALLPARAM );
	  sPar.SetX2( 50 );
	  sPar.SetY2( 60 );
    kompas.ksMessage( dPar.GetPl1() ? "" : "" ); 
  	kompas.ksMessage( " " );
    doc.ksSetObjParam( obj, param, ALLPARAM );
	}
}
*/


//-------------------------------------------------------------------------------
//
// ---
void DrawLinDim( ksDocument2D& doc ) {
  ksLDimParam param( kompas.GetParamStruct( ko_LDimParam ) );
	if ( !param.m_lpDispatch )
		return;

	ksDimDrawingParam dPar( param.GetDPar() );
	ksLDimSourceParam sPar( param.GetSPar() );
  ksDimTextParam tPar( param.GetTPar() );

	if ( !dPar.m_lpDispatch || !sPar.m_lpDispatch || !tPar.m_lpDispatch )
		return;

	dPar.Init();
	dPar.SetTextPos(10);
	dPar.SetTextBase(2);
	dPar.SetPt1(2);
	dPar.SetPt2(2);
	dPar.SetAng(-30);
	dPar.SetLenght(20);

 	sPar.Init();
	sPar.SetX1(50);
  sPar.SetY1(50);
  sPar.SetX2(70 );
  sPar.SetY2(60 );
 	sPar.SetDx(0);
  sPar.SetDy(-20);
	sPar.SetBasePoint(1);

 	tPar.Init(0);
  tPar.SetBitFlagValue( _AUTONOMINAL, false );
  tPar.SetBitFlagValue( _PREFIX, true );
  tPar.SetBitFlagValue( _NOMINALOFF, true );
  tPar.SetBitFlagValue( _DEVIATION, false );
  tPar.SetBitFlagValue( _UNIT, false );
  tPar.SetBitFlagValue( _SUFFIX, false );
	tPar.SetSign( 0 );

  ksChar255 str( kompas.GetParamStruct(ko_Char255) );
  ksDynamicArray arrText( tPar.GetTextArr() );//kompas.GetDynamicArray(CHAR_STR_ARR) );

	if ( !str.m_lpDispatch || !arrText.m_lpDispatch )
    return;

//  K8   str.SetStr( "prefix" );
//  K8  	arrText.ksAddArrayItem( -1, str );
//  K8 
//  K8 	str.SetStr( "+0,5" );
//  K8  	arrText.ksAddArrayItem( -1, str );
//  K8 
//  K8 	str.SetStr( "-0,5" );
//  K8  	arrText.ksAddArrayItem( -1, str );
//  K8 
//  K8   str.SetStr( "mm" );
//  K8  	arrText.ksAddArrayItem( -1, str );
//  K8 
  str.SetStr( "12&0111\'10\"" );
 	arrText.ksAddArrayItem( -1, str );

	long obj = doc.ksLinDimension( param );

//  K8 	if ( obj ) {
//  K8 		doc.ksGetObjParam( obj, param, ALLPARAM );
//  K8 	  sPar.SetX2( 50 );
//  K8 	  sPar.SetY2( 60 );
//  K8     kompas.ksMessage( dPar.GetPl1() ? "" : "" ); 
//  K8   	kompas.ksMessage( " " );
//  K8     doc.ksSetObjParam( obj, param, ALLPARAM );
//  K8 	}
}


//-------------------------------------------------------------------------------
//
// ---
void DrawAngDim( ksDocument2D& doc ) {
  ksADimParam aDim( kompas.GetParamStruct(ko_ADimParam) );  
  ksTextLineParam textLine( kompas.GetParamStruct( ko_TextLineParam ) );
  ksTextItemParam textItem( kompas.GetParamStruct(ko_TextItemParam) );

	if ( !aDim.m_lpDispatch || !textLine.m_lpDispatch || !textItem.m_lpDispatch )
		return;
    
	textLine.Init();
		
	textItem.Init();
	textItem.SetS( CString(" ") );

	ksTextItemFont font( textItem.GetItemFont() );
	ksDimTextParam tPar( aDim.GetTPar() ); 
	ksADimSourceParam sPar( aDim.GetSPar() ); 
	ksDimDrawingParam dPar( aDim.GetDPar() );
	
	if ( !font.m_lpDispatch || !tPar.m_lpDispatch || !sPar.m_lpDispatch || !dPar.m_lpDispatch )
		return;

  dPar.Init();

	sPar.Init();
	sPar.SetRad( 50 );

	tPar.Init( true );
	
	font.Init();
  font.SetHeight( 5 );
	font.SetKsu( 1 );
	font.SetFontName( CString("GOST type A") );
	font.SetBitVectorValue( NEW_LINE, true );

  ksDynamicArray arr( textLine.GetTextItemArr() );
	if ( !arr.m_lpDispatch )
		return;

	arr.ksAddArrayItem( -1, textItem );

  ksDynamicArray arr1( tPar.GetTextArr() );
	if ( !arr1.m_lpDispatch )
		return;

	arr1.ksAddArrayItem( -1, textLine );
		
  long obj = doc.ksAngDimension( aDim );
	if ( obj ) {
	  doc.ksGetObjParam( obj, aDim, ALLPARAM );
	  sPar.Init();
	  sPar.SetRad( 100 );
  	kompas.ksMessage( " " );
    doc.ksSetObjParam( obj, aDim, ALLPARAM );
	}
}

//-------------------------------------------------------------------------------
//
// ---
void DrawRough( ksDocument2D& doc ) {
  ksRoughParam roughPar( kompas.GetParamStruct(ko_RoughParam) );  // 
  ksRoughPar rPar( roughPar.GetrPar() );   // 
  ksShelfPar shPar( roughPar.GetshPar() );   // 
  ksChar255 str( kompas.GetParamStruct(ko_Char255) );
  if ( roughPar.m_lpDispatch && rPar.m_lpDispatch && shPar.m_lpDispatch && str.m_lpDispatch ) {
    rPar.Init();
		shPar.Init();
		str.Init();

    //   
		rPar.SetStyle(0);
    rPar.SetType(0);
		rPar.SetAround(0);
		rPar.SetX(50);
		rPar.SetY(50);
		rPar.SetAng(90);
		rPar.SetCText0(2);
		rPar.SetCText1(2);
		rPar.SetCText2(2);
		rPar.SetCText3(1);

    //,      
    ksDynamicArray ptext( rPar.GetpText() );
		if ( !ptext.m_lpDispatch )
			return;
		str.SetStr("1");
		ptext.ksAddArrayItem( -1, str );
		str.SetStr("2");
		ptext.ksAddArrayItem( -1, str );
		str.SetStr("3");
		ptext.ksAddArrayItem( -1, str );
		str.SetStr("4");
		ptext.ksAddArrayItem( -1, str );
		str.SetStr("5");
		ptext.ksAddArrayItem( -1, str );
		str.SetStr("6");
		ptext.ksAddArrayItem( -1, str );
		str.SetStr("7");
		ptext.ksAddArrayItem( -1, str );

    //  
    shPar.SetPsh(0);     // 
		shPar.SetAng(130);   //  
		shPar.SetLength(20); // 

    long obj = doc.ksRough( roughPar );    

		if ( obj ) {
		  doc.ksGetObjParam( obj, roughPar, ALLPARAM );
		  rPar.SetAng(100);
    	kompas.ksMessage( " " );
		  doc.ksSetObjParam( obj, roughPar, ALLPARAM );
    } 
  }
}

//-------------------------------------------------------------------------------
//
// ---
void DrawLeader( ksDocument2D& doc ) {
  ksLeaderParam lead( kompas.GetParamStruct(ko_LeaderParam) );
  ksTextLineParam tLinePar( kompas.GetParamStruct(ko_TextLineParam) );
  ksTextItemParam  ItemPar( kompas.GetParamStruct(ko_TextItemParam) );
  ksTextItemFont  tFont( ItemPar.GetItemFont() );
  ksMathPointParam tMathPoint( kompas.GetParamStruct(ko_MathPointParam) );
  if ( lead.m_lpDispatch && tLinePar.m_lpDispatch && ItemPar.m_lpDispatch && tFont.m_lpDispatch && tMathPoint.m_lpDispatch ) {//&& ref.m_lpDispatch ) {
    lead.Init(); tLinePar.Init(); ItemPar.Init(); tFont.Init(); tMathPoint.Init();

    tFont.SetBitVectorValue( NEW_LINE, true );
		tLinePar.SetStyle(0);

		ksDynamicArray pText( lead.GetpTextline() );
    ksDynamicArray TextItemArr( tLinePar.GetTextItemArr() );
		if ( !TextItemArr.m_lpDispatch || !pText.m_lpDispatch )
			return;

    ItemPar.SetS( CString("1") );
		TextItemArr.ksAddArrayItem( -1, ItemPar );
		pText.ksAddArrayItem( -1, tLinePar );

		TextItemArr.ksClearArray();
    ItemPar.SetS( CString("2") );
		TextItemArr.ksAddArrayItem( -1, ItemPar );
		pText.ksAddArrayItem( -1, tLinePar );

		TextItemArr.ksClearArray();
    ItemPar.SetS( CString("3") );
		TextItemArr.ksAddArrayItem( -1, ItemPar );
		pText.ksAddArrayItem( -1, tLinePar );
        
		ksDynamicArray pPolyLin( lead.GetpPolyline() );
		ksDynamicArray pMathPoint( kompas.GetDynamicArray(POINT_ARR) );
    if ( !pPolyLin.m_lpDispatch || !pMathPoint.m_lpDispatch )
			return;

		tMathPoint.SetX(10);
		tMathPoint.SetY(10);

		pMathPoint.ksAddArrayItem( -1, tMathPoint );
		pPolyLin.ksAddArrayItem( -1, pMathPoint );

		tMathPoint.SetX(30);
		tMathPoint.SetY(10);
    pMathPoint.ksClearArray();
		pMathPoint.ksAddArrayItem( -1, tMathPoint );
		pPolyLin.ksAddArrayItem( -1, pMathPoint );

		lead.SetpPolyline( pPolyLin );
        
		//  
		lead.SetX(50);//    (   )
		lead.SetY(50);
		lead.SetArrowType(1);//  
		lead.SetDirX(1);//    X (1 - -1-)
    lead.SetSignType(0);//  
		lead.SetAround(0);//     0- 1- 
		lead.SetCText0(1);//      0-  
		lead.SetCText1(1);//      0-  
		lead.SetCText2(0);//      (  1 )0-  
		lead.SetCText3(1);//      (  1 )0-  

    long obj = doc.ksLeader( lead );
		if ( obj ) {
		  doc.ksGetObjParam( obj, lead, ALLPARAM );
		  lead.SetX(100);
    	kompas.ksMessage( " " );
		  doc.ksSetObjParam( obj, lead, ALLPARAM );
    } 
  }
}

//-------------------------------------------------------------------------------
//
// ---
void DrawPosLeader( ksDocument2D& doc ) {
  ksPosLeaderParam lead( kompas.GetParamStruct(ko_PosLeaderParam) );
  ksTextLineParam tLinePar( kompas.GetParamStruct(ko_TextLineParam) );
  ksTextItemParam  ItemPar( kompas.GetParamStruct(ko_TextItemParam) );
  ksTextItemFont  tFont( ItemPar.GetItemFont() );
  ksMathPointParam tMathPoint( kompas.GetParamStruct(ko_MathPointParam) );
  if ( lead.m_lpDispatch && tLinePar.m_lpDispatch && ItemPar.m_lpDispatch && tFont.m_lpDispatch && tMathPoint.m_lpDispatch ) {//&& ref.m_lpDispatch ) {
    lead.Init(); tLinePar.Init(); ItemPar.Init(); tFont.Init(); tMathPoint.Init();

  	lead.SetStyle( INDICATIN_TEXT_LINE_ARR );
	  tFont.SetBitVectorValue( NEW_LINE, true );
		tLinePar.SetStyle(0);

		ksDynamicArray pText( lead.GetpTextline() );
    ksDynamicArray TextItemArr( tLinePar.GetTextItemArr() );
		if ( !pText.m_lpDispatch || !TextItemArr.m_lpDispatch )
			return;
	  
		ItemPar.SetS( CString("1") );
		TextItemArr.ksAddArrayItem( -1, ItemPar );
		pText.ksAddArrayItem( -1, tLinePar );


		TextItemArr.ksClearArray();
	  ItemPar.SetS( CString("4") );
		TextItemArr.ksAddArrayItem( -1, ItemPar );
		pText.ksAddArrayItem( -1, tLinePar );

        
		ksDynamicArray pPolyLin( lead.GetpPolyline() );
		ksDynamicArray pMathPoint( kompas.GetDynamicArray(POINT_ARR) );
		if ( !pPolyLin.m_lpDispatch || !pMathPoint.m_lpDispatch )
			return;

		tMathPoint.SetX(10);
		tMathPoint.SetY(10);

		pMathPoint.ksAddArrayItem( -1, tMathPoint );
		pPolyLin.ksAddArrayItem( -1, pMathPoint );

		tMathPoint.SetX(30);
		tMathPoint.SetY(10);
    pMathPoint.ksClearArray();
		pMathPoint.ksAddArrayItem( -1, tMathPoint );
		pPolyLin.ksAddArrayItem( -1, pMathPoint );

		lead.SetpPolyline( pPolyLin );
        
		//  
		lead.SetX(50);//    (   )
		lead.SetY(50);
		lead.SetArrowType(1);
		lead.SetDirX(-1);

    long obj = doc.ksPositionLeader( lead );
		if ( obj ) {
		  doc.ksGetObjParam( obj, lead, ALLPARAM );
		  lead.SetX(100);
    	kompas.ksMessage( " " );
		  doc.ksSetObjParam( obj, lead, ALLPARAM );
    } 
  }
}

//-------------------------------------------------------------------------------
//
// ---
void DrawBrandLeader( ksDocument2D& doc ) {
  ksBrandLeaderParam lead( kompas.GetParamStruct(ko_BrandLeaderParam) );
  ksTextLineParam tLinePar( kompas.GetParamStruct(ko_TextLineParam) );
  ksTextItemParam  ItemPar( kompas.GetParamStruct(ko_TextItemParam) );
  ksChar255 str( kompas.GetParamStruct(ko_Char255) );
  ksMathPointParam tMathPoint( kompas.GetParamStruct(ko_MathPointParam) );
  ksDynamicArray pMathPoint( kompas.GetDynamicArray(POINT_ARR) );
  if ( lead.m_lpDispatch && tLinePar.m_lpDispatch && ItemPar.m_lpDispatch && tMathPoint.m_lpDispatch && str.m_lpDispatch && pMathPoint.m_lpDispatch ) {
    lead.Init(); tLinePar.Init(); ItemPar.Init(); str.Init(); tMathPoint.Init();

		ksTextItemFont tFont( ItemPar.GetItemFont() );
    ksDynamicArray ptext( lead.GetpTextline() );
		ksDynamicArray pPolyLin( lead.GetpPolyline() );
		if ( !ptext.m_lpDispatch || !tFont.m_lpDispatch || !pPolyLin.m_lpDispatch )
			return;
		tFont.Init(); 

		lead.SetCText0(1);
  
		str.SetStr("1");
		ptext.ksAddArrayItem( -1, str );
		str.SetStr("2");
		ptext.ksAddArrayItem( -1, str );
		str.SetStr("3");
		ptext.ksAddArrayItem( -1, str );

		tMathPoint.SetX(10);
		tMathPoint.SetY(10);

		pMathPoint.ksAddArrayItem( -1, tMathPoint );
		pPolyLin.ksAddArrayItem( -1, pMathPoint );

		tMathPoint.SetX(30);
		tMathPoint.SetY(10);
    pMathPoint.ksClearArray();
		pMathPoint.ksAddArrayItem( -1, tMathPoint );
		pPolyLin.ksAddArrayItem( -1, pMathPoint );

		//  
		lead.SetX(50);//    (   )
		lead.SetY(50);
		lead.SetArrowType(1);
		lead.SetDirX(-1);
		lead.SetCText0(1);
		lead.SetCText1(1);
		lead.SetCText2(1);
        
    long obj = doc.ksBrandLeader( lead );
		if ( obj ) {
		  doc.ksGetObjParam( obj, lead, ALLPARAM );
		  lead.SetX(100);
    	kompas.ksMessage( " " );
		  doc.ksSetObjParam( obj, lead, ALLPARAM );
    } 
  }
}

//-------------------------------------------------------------------------------
//
// ---
void DrawMarkerLeader( ksDocument2D& doc ) {
  ksMarkerLeaderParam lead( kompas.GetParamStruct(ko_MarkerLeaderParam) );
  ksTextLineParam     tLinePar( kompas.GetParamStruct(ko_TextLineParam) );
  ksTextItemParam     ItemPar( kompas.GetParamStruct(ko_TextItemParam) );
  ksMathPointParam    tMathPoint( kompas.GetParamStruct(ko_MathPointParam) );
  ksChar255           str( kompas.GetParamStruct(ko_Char255) );
  if ( lead.m_lpDispatch && tLinePar.m_lpDispatch && ItemPar.m_lpDispatch && tMathPoint.m_lpDispatch && str.m_lpDispatch ) {
    lead.Init(); tLinePar.Init(); ItemPar.Init(); tMathPoint.Init(); str.Init();

		//  
		lead.SetX(50);//    (   )
		lead.SetY(50);
		lead.SetArrowType(1);
		lead.SetCText0(1);
//  K6 		lead.SetCText1(1);
//  K6 		lead.SetCText2(1);
		lead.SetStyle1( 0 );

		ksDynamicArray pCharArr( lead.GetpTextline() );
		ksDynamicArray pPolyLin( lead.GetpPolyline() );
		ksDynamicArray pMathPoint( kompas.GetDynamicArray(POINT_ARR) );
    ksTextItemFont  tFont( ItemPar.GetItemFont() );
		if ( !tFont.m_lpDispatch || !pCharArr.m_lpDispatch || !pPolyLin.m_lpDispatch )
			return;
		tFont.Init(); 

		str.SetStr("1");
		pCharArr.ksAddArrayItem( -1, str );
//  K6 		str.SetStr("2");
//  K6 		pCharArr.ksAddArrayItem( -1, str );
//  K6 		str.SetStr("3");
//  K6 		pCharArr.ksAddArrayItem( -1, str );
        
		tMathPoint.SetX(10);
		tMathPoint.SetY(10);

		pMathPoint.ksAddArrayItem( -1, tMathPoint );
		pPolyLin.ksAddArrayItem( -1, pMathPoint );

		tMathPoint.SetX(30);
		tMathPoint.SetY(10);
    pMathPoint.ksClearArray();
		pMathPoint.ksAddArrayItem( -1, tMathPoint );
		pPolyLin.ksAddArrayItem( -1, pMathPoint );

    long obj = doc.ksMarkerLeader( lead );
		if ( obj ) {
		  doc.ksGetObjParam( obj, lead, ALLPARAM );
		  lead.SetX(100);
    	kompas.ksMessage( " " );
		  doc.ksSetObjParam( obj, lead, ALLPARAM );
    } 
  }
/*  ksMarkerLeaderParam lead( kompas.GetParamStruct(ko_MarkerLeaderParam) );
  ksTextLineParam tLinePar( kompas.GetParamStruct(ko_TextLineParam) );
  ksTextItemParam  ItemPar( kompas.GetParamStruct(ko_TextItemParam) );
  ksMathPointParam tMathPoint( kompas.GetParamStruct(ko_MathPointParam) );
  ksChar255 str( kompas.GetParamStruct(ko_Char255) );
  ksDynamicArray pMathPoint( kompas.GetDynamicArray(POINT_ARR) );
  if ( lead.m_lpDispatch && tLinePar.m_lpDispatch && ItemPar.m_lpDispatch && tMathPoint.m_lpDispatch && str.m_lpDispatch && pMathPoint.m_lpDispatch ) {
    lead.Init(); tLinePar.Init(); ItemPar.Init(); tMathPoint.Init(); str.Init();

    ksTextItemFont  tFont( ItemPar.GetItemFont() );
		ksDynamicArray pCharArr( lead.GetpTextline() );
		ksDynamicArray pPolyLin( lead.GetpPolyline() );
		if ( !tFont.m_lpDispatch || !pCharArr.m_lpDispatch || !pPolyLin.m_lpDispatch )
			return;

		tFont.Init(); 

		lead.SetCText0(1);
		lead.SetStyle1( 0 );

		str.SetStr("1");
		pCharArr.ksAddArrayItem( -1, str );
		str.SetStr("2");
		pCharArr.ksAddArrayItem( -1, str );
		str.SetStr("3");
		pCharArr.ksAddArrayItem( -1, str );
        
		tMathPoint.SetX(10);
		tMathPoint.SetY(10);

		pMathPoint.ksAddArrayItem( -1, tMathPoint );
		pPolyLin.ksAddArrayItem( -1, pMathPoint );

		tMathPoint.SetX(30);
		tMathPoint.SetY(10);
    pMathPoint.ksClearArray();
		pMathPoint.ksAddArrayItem( -1, tMathPoint );
		pPolyLin.ksAddArrayItem( -1, pMathPoint );

		//  
		lead.SetX(50);//    (   )
		lead.SetY(50);
		lead.SetArrowType(1);
		lead.SetCText0(1);
		lead.SetCText1(1);
		lead.SetCText2(1);

    long obj = doc.ksMarkerLeader( lead );
		if ( obj ) {
		  doc.ksGetObjParam( obj, lead, ALLPARAM );
		  lead.SetX(100);
    	kompas.ksMessage( " " );
		  doc.ksSetObjParam( obj, lead, ALLPARAM );
    } 
  }
	*/
}

//-------------------------------------------------------------------------------
//
// ---
void DrawBase( ksDocument2D& doc ) {
  ksBaseParam par( kompas.GetParamStruct(ko_BaseParam) );
	if ( par.m_lpDispatch ) {
		par.SetStyle( 0 );
		par.SetType( false ); // 
		par.SetX1( 10 );
		par.SetY1( 10 );
		par.SetX2( 30 );
		par.SetY2( 40 );
		par.SetStr( CString(" ") );
		reference bas = doc.ksBase( par );
		par.Init();
		if ( bas ) {
		  doc.ksGetObjParam( bas, par, ALLPARAM );
		  par.SetX2( -30 );
    	kompas.ksMessage( " " );
	  	doc.ksSetObjParam( bas, par, ALLPARAM );
		}
	}
}

//-------------------------------------------------------------------------------
//
// ---
void DrawCutLine( ksDocument2D& doc ) {
  ksCutLineParam cut( kompas.GetParamStruct(ko_CutLineParam) );
  ksTextLineParam tLinePar( kompas.GetParamStruct(ko_TextLineParam) );
  ksTextItemParam  ItemPar( kompas.GetParamStruct(ko_TextItemParam) );
  ksTextItemFont  tFont( ItemPar.GetItemFont() );
  ksMathPointParam tMathPoint( kompas.GetParamStruct(ko_MathPointParam) );
  if ( cut.m_lpDispatch && tLinePar.m_lpDispatch && ItemPar.m_lpDispatch && tFont.m_lpDispatch && tMathPoint.m_lpDispatch ) {//&& ref.m_lpDispatch ) {
    cut.Init(); tLinePar.Init(); ItemPar.Init(); tFont.Init(); tMathPoint.Init();

    cut.SetType(0);
		cut.SetX1(30);
		cut.SetY1(65);
		cut.SetX2(95);
		cut.SetY2(15);
		cut.SetRight(1);
		cut.SetStr("A$;1$");//A$;1$");
 		ksDynamicArray pMathPoint( cut.GetpMathPoint() );

  	tMathPoint.SetX(50);
	  tMathPoint.SetY(50);

	  pMathPoint.ksAddArrayItem( -1, tMathPoint );

 		tMathPoint.SetX(50);
  	tMathPoint.SetY(30);

	  pMathPoint.ksAddArrayItem( -1, tMathPoint );

	  tMathPoint.SetX(80);
	  tMathPoint.SetY(30);

	  pMathPoint.ksAddArrayItem( -1, tMathPoint );
        
    long obj = doc.ksCutLine( cut );
    if ( obj ) {
		  doc.ksGetObjParam( obj, cut, ALLPARAM );
 		  
			pMathPoint.ksClearArray();

  	  tMathPoint.SetX(30);
	    tMathPoint.SetY(50);

	    pMathPoint.ksAddArrayItem( -1, tMathPoint );

 		  tMathPoint.SetX(30);
  	  tMathPoint.SetY(30);

	    pMathPoint.ksAddArrayItem( -1, tMathPoint );

	    tMathPoint.SetX(80);
	    tMathPoint.SetY(30);

	    pMathPoint.ksAddArrayItem( -1, tMathPoint );

			kompas.ksMessage( " " );
	  	doc.ksSetObjParam( obj, cut, ALLPARAM );
    }
	}		
}

//-------------------------------------------------------------------------------
//
// ---
void DrawDiamDim( ksDocument2D& doc ) {
	long cir = doc.ksCircle( 100, 100, 50, 1 ); 
  ksRDimParam aDim( kompas.GetParamStruct(ko_RDimParam) );  
  ksTextLineParam textLine( kompas.GetParamStruct( ko_TextLineParam ) );
  ksTextItemParam textItem( kompas.GetParamStruct(ko_TextItemParam) );
  if ( !aDim.m_lpDispatch || !textLine.m_lpDispatch || !textItem.m_lpDispatch  ) 
		return;

	textLine.Init();
	textItem.Init();

	ksDimTextParam tPar( aDim.GetTPar() ); 
	ksTextItemFont font( textItem.GetItemFont() );
  ksDynamicArray arr( textLine.GetTextItemArr() );
	ksRDimSourceParam sPar( aDim.GetSPar() ); 
	ksRDimDrawingParam dPar( aDim.GetDPar() );
	if ( !tPar.m_lpDispatch || !font.m_lpDispatch || !sPar.m_lpDispatch || !dPar.m_lpDispatch )
		return;

	tPar.Init( true );
  	tPar.SetBitFlagValue( _AUTONOMINAL, true );
	  tPar.SetSign( 1 );

	font.Init();
	font.SetHeight( 5 );
	font.SetKsu( 1 );
	font.SetFontName( CString("GOST type A") );
	font.SetBitVectorValue( NEW_LINE, true );

	arr.ksAddArrayItem( -1, textItem );

  ksDynamicArray arr1( tPar.GetTextArr() );
	if ( !arr1.m_lpDispatch ) 
		return;
	arr1.ksAddArrayItem( -1, textLine );

	sPar.Init();
	sPar.SetXc(100);
	sPar.SetYc(100);
	sPar.SetRad(50);
		
  dPar.Init();
	dPar.SetTextPos( 75 );
	dPar.SetPt1( 2 );
	dPar.SetPt2( 2 );
	dPar.SetShelfDir( 1 );
	dPar.SetAng( -30 );

  long obj = doc.ksDiamDimension( aDim );
	if ( obj ) {
	  doc.ksGetObjParam( obj, aDim, ALLPARAM );
	  sPar.SetRad( 100 );
  	kompas.ksMessage( " " );
		doc.ksDeleteObj( cir );
 	  doc.ksCircle( 100, 100, 100, 1 ); 
    doc.ksSetObjParam( obj, aDim, ALLPARAM );
	}
}

//-------------------------------------------------------------------------------
//
// ---
void DrawRadDimt( ksDocument2D& doc ) {
	long cir = doc.ksCircle( 100, 100, 50, 1 ); 
  ksRDimParam aDim( kompas.GetParamStruct(ko_RDimParam) );  
  ksTextLineParam textLine( kompas.GetParamStruct( ko_TextLineParam ) );
  ksTextItemParam textItem( kompas.GetParamStruct(ko_TextItemParam) );
  if ( !aDim.m_lpDispatch || !textLine.m_lpDispatch || !textItem.m_lpDispatch  ) 
		return;
    
	textLine.Init();
	textItem.Init();

	ksDimTextParam tPar( aDim.GetTPar() ); 
	ksTextItemFont font( textItem.GetItemFont() );
  ksDynamicArray arr( textLine.GetTextItemArr() );
	ksRDimSourceParam sPar( aDim.GetSPar() ); 
	ksRDimDrawingParam dPar( aDim.GetDPar() );
	if ( !tPar.m_lpDispatch || !font.m_lpDispatch || !sPar.m_lpDispatch || !dPar.m_lpDispatch )
		return;

	tPar.Init( true );
  	tPar.SetBitFlagValue( _AUTONOMINAL, true );
	  tPar.SetSign( 1 );
		

	font.Init();
	font.SetHeight( 5 );
	font.SetKsu( 1 );
	font.SetFontName( CString("GOST type A") );
	font.SetBitVectorValue( NEW_LINE, true );

	arr.ksAddArrayItem( -1, textItem );

  ksDynamicArray arr1( tPar.GetTextArr() );
	if ( !arr1.m_lpDispatch )
		return;

	arr1.ksAddArrayItem( -1, textLine );

	sPar.Init();
	sPar.SetXc(100);
	sPar.SetYc(100);
	sPar.SetRad(50);
		
  dPar.Init();
	dPar.SetTextPos( 75 );
	dPar.SetPt1( 2 );
	dPar.SetPt2( 1 );
	dPar.SetShelfDir( 1 );
	dPar.SetAng( 30 );

	long obj = doc.ksRadDimension( aDim );  
	if ( obj ) {
	  doc.ksGetObjParam( obj, aDim, ALLPARAM );
	  sPar.SetRad( 100 );
  	kompas.ksMessage( " " );
		doc.ksDeleteObj( cir );
 	  doc.ksCircle( 100, 100, 100, 1 ); 
    doc.ksSetObjParam( obj, aDim, ALLPARAM );
	}
}

//-------------------------------------------------------------------------------
//
// ---
void DrawRadBreakDimt( ksDocument2D& doc ) {
	long cir = doc.ksCircle( 100, 100, 50, 1 ); 
  ksRBreakDimParam aDim( kompas.GetParamStruct(ko_RBreakDimParam) );  
	ksDimTextParam tPar( aDim.GetTPar() ); 
  ksTextLineParam textLine( kompas.GetParamStruct( ko_TextLineParam ) );
  ksTextItemParam textItem( kompas.GetParamStruct(ko_TextItemParam) );
	ksTextItemFont font( textItem.GetItemFont() );
	if ( aDim.m_lpDispatch && tPar.m_lpDispatch && textLine.m_lpDispatch && textItem.m_lpDispatch && font.m_lpDispatch ) {
		tPar.Init( true );
		textLine.Init();
		textItem.Init();
		font.Init();

  	tPar.SetBitFlagValue( _AUTONOMINAL, true );
		tPar.SetSign( 1 );

		font.SetHeight( 5 );
		font.SetKsu( 1 );
		font.SetFontName( CString("GOST type A") );
		font.SetBitVectorValue( NEW_LINE, true );

		ksDynamicArray arr( textLine.GetTextItemArr() );
		ksDynamicArray arr1( tPar.GetTextArr() );
		ksRDimSourceParam sPar( aDim.GetSPar() ); 
		ksRBreakDrawingParam dPar( aDim.GetDPar() );
    if ( sPar.m_lpDispatch && dPar.m_lpDispatch && arr.m_lpDispatch && arr1.m_lpDispatch ) {
			sPar.Init();
			dPar.Init();

			arr.ksAddArrayItem( -1, textItem );
			arr1.ksAddArrayItem( -1, textLine );

			sPar.SetXc(100);
			sPar.SetYc(100);
			sPar.SetRad(50);
				
			dPar.SetAng(0);
			dPar.SetPb(30);
			dPar.SetPt(1);

			long obj = doc.ksRadBreakDimension( aDim );  
			if ( obj ) {
				doc.ksGetObjParam( obj, aDim, ALLPARAM );
				sPar.SetRad( 100 );
  			kompas.ksMessage( " " );
				doc.ksDeleteObj( cir );
 				doc.ksCircle( 100, 100, 100, 1 ); 
				doc.ksSetObjParam( obj, aDim, ALLPARAM );
			}
		}
	}
}

//-------------------------------------------------------------------------------
//
// ---
void DrawViewPointer( ksDocument2D& doc ) {
  ksViewPointerParam viewPoint( kompas.GetParamStruct(ko_ViewPointerParam) );
  ksTextItemParam  ItemPar( kompas.GetParamStruct(ko_TextItemParam) );
  if ( viewPoint.m_lpDispatch && ItemPar.m_lpDispatch ) {
		ItemPar.Init();
	  viewPoint.Init(); 
		ksTextItemFont  tFont( ItemPar.GetItemFont() );
		if ( tFont.m_lpDispatch ) {
			tFont.Init();

			viewPoint.SetX1(55);
			viewPoint.SetY1(50);
			viewPoint.SetX2(40);
			viewPoint.SetY2(50);
			viewPoint.SetXt(40);
			viewPoint.SetYt(52);
			viewPoint.SetType(0);
			viewPoint.SetStr("");

			long p = doc.ksViewPointer( viewPoint );
			if ( p ) {
				doc.ksGetObjParam( p, viewPoint, ALLPARAM);
   			viewPoint.SetType(0);
				viewPoint.SetStr( " " );
    		kompas.ksMessage( " " );
				doc.ksSetObjParam( p, viewPoint, ALLPARAM );
			} 
		}
	}
}
