//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

#include <windows.h>

#include <ldefin2d.h>
#include <ksConstants.h>

#ifdef __LIGHT_VERSION__
#include <Kl_TLB.h>
#else
#include <Ks_TLB.h>
#endif
//---------------------------------------------------------------------------
//   Important note about DLL memory management when your DLL uses the
//   static version of the RunTime Library:
//
//   If your DLL exports any functions that pass String objects (or structs/
//   classes containing nested Strings) as parameter or function results,
//   you will need to add the library MEMMGR.LIB to both the DLL project and
//   any other projects that use the DLL.  You will also need to use MEMMGR.LIB
//   if any other projects which use the DLL will be performing new or delete
//   operations on any non-TObject-derived classes which are exported from the
//   DLL. Adding MEMMGR.LIB to your project will change the DLL and its calling
//   EXE's to use the BORLNDMM.DLL as their memory manager.  In these cases,
//   the file BORLNDMM.DLL should be deployed along with your DLL.
//
//   To avoid using BORLNDMM.DLL, pass string information using "char *" or
//   ShortString parameters.
//
//   If your DLL uses the dynamic version of the RTL, you do not need to
//   explicitly add MEMMGR.LIB as this will be done implicitly for you
//---------------------------------------------------------------------------

#pragma argsused
int WINAPI DllEntryPoint(HINSTANCE hinst, unsigned long reason, void* lpReserved)
{
  return 1;
}
//---------------------------------------------------------------------------
//------------------------------------------------------------------------------
//
// ---
extern "C" IDispatch* far __export WINAPI CreateKompasObject();

KompasObject* kompas = NULL;

extern "C" unsigned int far __export __pascal LibraryId(){
	return 100;
}

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 );

char buf[128];

//------------------------------------------------------------------------------
//
// ---
extern "C" void far __export __pascal  LibraryEntry( UINT Comm ) {
  kompas = (KompasObject*)::CreateKompasObject();
  if ( kompas ) {
    ksDocument2D* doc( (ksDocument2D*)kompas->ActiveDocument2D() );
    if ( doc && doc->get_reference() ) {
      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; // /c
        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( StringToOleStr("    \n  /") );
    kompas->Release();
  }
}

//------------------------------------------------------------------------------
//  
// ---
void DrawLinDim( ksDocument2D * doc ) {
  ksLDimParam * param = (ksLDimParam*)kompas->GetParamStruct( ko_LDimParam );
	if ( !param )
		return;

	ksDimDrawingParam * dPar = (ksDimDrawingParam*)param->GetDPar();
	ksLDimSourceParam * sPar = (ksLDimSourceParam*)param->GetSPar();
  ksDimTextParam * tPar = (ksDimTextParam*)param->GetTPar();
  if ( !dPar || !sPar || !tPar )
    return;

  dPar->Init();
  dPar->set_textPos(10);
  dPar->set_textBase(2);
  dPar->set_pt1(2);
  dPar->set_pt2(2);
  dPar->set_ang(-30);
  dPar->set_lenght(20);

  sPar->Init();
  sPar->set_x1(50);
  sPar->set_y1(50);
  sPar->set_x2(70);
  sPar->set_y2(60);
  sPar->set_dx(0);
  sPar->set_dy(-20);
  sPar->set_basePoint(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->set_sign( 0 );

  ksChar255 * str = (ksChar255*)kompas->GetParamStruct(ko_Char255);
  ksDynamicArray * arrText = (ksDynamicArray*)tPar->GetTextArr();
  if ( !str || !arrText )
    return;

  str->set_str( StringToOleStr("prefix") );
  arrText->ksAddArrayItem( -1, str );

  str->set_str( StringToOleStr("+0,5") );
  arrText->ksAddArrayItem( -1, str );

  str->set_str( StringToOleStr("-0,5") );
  arrText->ksAddArrayItem( -1, str );

  str->set_str( StringToOleStr("mm") );
  arrText->ksAddArrayItem( -1, str );

  str->set_str( StringToOleStr("pp&04ww&01oo") );
  arrText->ksAddArrayItem( -1, str );

	long obj = doc->ksLinDimension( param );

	if ( obj ) {
		doc->ksGetObjParam( obj, param, ALLPARAM );
	  sPar->set_x2( 50 );
	  sPar->set_y2( 60 );
  	kompas->ksMessage( StringToOleStr(" ") );
    doc->ksSetObjParam( obj, param, ALLPARAM );
	}
}

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

	if ( !aDim || !textLine || !textItem )
		return;

	textLine->Init();

	textItem->Init();
	textItem->set_s( StringToOleStr(" ") );

	ksTextItemFont * font( (ksTextItemFont*)textItem->GetItemFont() );
	ksDimTextParam * tPar( (ksDimTextParam*)aDim->GetTPar() );
	ksADimSourceParam * sPar( (ksADimSourceParam*)aDim->GetSPar() );
	ksDimDrawingParam * dPar( (ksDimDrawingParam*)aDim->GetDPar() );

	if ( !font || !tPar || !sPar || !dPar )
		return;

  dPar->Init();

	sPar->Init();
	sPar->set_rad( 50 );

	tPar->Init( true );

	font->Init();
  font->set_height( 5 );
	font->set_ksu( 1 );
	font->set_fontName( StringToOleStr("GOST type A") );
	font->set_bitVector( NEW_LINE );

  ksDynamicArray * arr( (ksDynamicArray*)textLine->GetTextItemArr() );
	if ( !arr )
		return;

	arr->ksAddArrayItem( -1, textItem );

  ksDynamicArray * arr1( (ksDynamicArray*)tPar->GetTextArr() );
	if ( !arr1 )
		return;

	arr1->ksAddArrayItem( -1, textLine );

  long obj = doc->ksAngDimension( aDim );
	if ( obj ) {
	  doc->ksGetObjParam( obj, aDim, ALLPARAM );
	  sPar->Init();
	  sPar->set_rad( 100 );
  	kompas->ksMessage( StringToOleStr(" ") );
    doc->ksSetObjParam( obj, aDim, ALLPARAM );
	}
}

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

    //   
		rPar->set_style(0);
    rPar->set_type(0);
		rPar->set_around(0);
		rPar->set_x(50);
		rPar->set_y(50);
		rPar->set_ang(90);
		rPar->set_cText0(2);
		rPar->set_cText1(2);
		rPar->set_cText2(2);
		rPar->set_cText3(1);

    //,      
    ksDynamicArray * ptext( (ksDynamicArray*)rPar->GetpText() );
		if ( !ptext )
			return;

		str->set_str(StringToOleStr("1"));
		ptext->ksAddArrayItem( -1, str );
		str->set_str(StringToOleStr("2"));
		ptext->ksAddArrayItem( -1, str );
		str->set_str(StringToOleStr("3"));
		ptext->ksAddArrayItem( -1, str );
		str->set_str(StringToOleStr("4"));
		ptext->ksAddArrayItem( -1, str );
		str->set_str(StringToOleStr("5"));
		ptext->ksAddArrayItem( -1, str );
		str->set_str(StringToOleStr("6"));
		ptext->ksAddArrayItem( -1, str );
		str->set_str(StringToOleStr("7"));
		ptext->ksAddArrayItem( -1, str );

    //  
    shPar->set_psh(0);     // 
		shPar->set_ang(130);   //  
		shPar->set_length(20); // 

    long obj = doc->ksRough( roughPar );

		if ( obj ) {
		  doc->ksGetObjParam( obj, roughPar, ALLPARAM );
		  rPar->set_ang(100);
    	kompas->ksMessage( StringToOleStr(" ") );
		  doc->ksSetObjParam( obj, roughPar, ALLPARAM );
    }
  }
}

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

    tFont->set_bitVector( NEW_LINE );
		tLinePar->set_style(0);

		ksDynamicArray * pText( (ksDynamicArray*)lead->GetpTextline() );
    ksDynamicArray * TextItemArr( (ksDynamicArray*)tLinePar->GetTextItemArr() );
		if ( !TextItemArr || !pText )
			return;

    ItemPar->set_s( StringToOleStr("1") );
		TextItemArr->ksAddArrayItem( -1, ItemPar );
		pText->ksAddArrayItem( -1, tLinePar );

		TextItemArr->ksClearArray();
    ItemPar->set_s( StringToOleStr("2") );
		TextItemArr->ksAddArrayItem( -1, ItemPar );
		pText->ksAddArrayItem( -1, tLinePar );

		TextItemArr->ksClearArray();
    ItemPar->set_s( StringToOleStr("3") );
		TextItemArr->ksAddArrayItem( -1, ItemPar );
		pText->ksAddArrayItem( -1, tLinePar );

		ksDynamicArray * pPolyLin( (ksDynamicArray*)lead->GetpPolyline() );
		ksDynamicArray * pMathPoint( (ksDynamicArray*)kompas->GetDynamicArray(POINT_ARR) );
    if ( !pPolyLin || !pMathPoint )
			return;

		tMathPoint->set_x(10);
		tMathPoint->set_y(10);

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

		tMathPoint->set_x(30);
		tMathPoint->set_y(10);
    pMathPoint->ksClearArray();
		pMathPoint->ksAddArrayItem( -1, tMathPoint );
		pPolyLin->ksAddArrayItem( -1, pMathPoint );

		lead->SetpPolyline( pPolyLin );

		// 
		lead->set_x(50);//    (   )
		lead->set_y(50);
		lead->set_arrowType(1);//  
		lead->set_dirX(1);//    X (1 - -1-)
    lead->set_signType(0);//  
		lead->set_around(0);//     0- 1- 
		lead->set_cText0(1);//      0-  
		lead->set_cText1(1);//      0-  
		lead->set_cText2(0);//      (  1 )0-  
		lead->set_cText3(1);//      (  1 )0-  

    long obj = doc->ksLeader( lead );
		if ( obj ) {
		  doc->ksGetObjParam( obj, lead, ALLPARAM );
		  lead->set_x(100);
    	kompas->ksMessage( StringToOleStr(" ") );
		  doc->ksSetObjParam( obj, lead, ALLPARAM );
    }
  }
}

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

  	lead->set_style( INDICATIN_TEXT_LINE_ARR );
	  tFont->set_bitVector( NEW_LINE );
		tLinePar->set_style(0);

		ksDynamicArray * pText( (ksDynamicArray*)lead->GetpTextline() );
    ksDynamicArray * TextItemArr( (ksDynamicArray*)tLinePar->GetTextItemArr() );
		if ( !pText || !TextItemArr )
			return;

		ItemPar->set_s( StringToOleStr("1") );
		TextItemArr->ksAddArrayItem( -1, ItemPar );
		pText->ksAddArrayItem( -1, tLinePar );


		TextItemArr->ksClearArray();
	  ItemPar->set_s( StringToOleStr("4") );
		TextItemArr->ksAddArrayItem( -1, ItemPar );
		pText->ksAddArrayItem( -1, tLinePar );


		ksDynamicArray * pPolyLin( (ksDynamicArray*)lead->GetpPolyline() );
		ksDynamicArray * pMathPoint( (ksDynamicArray*)kompas->GetDynamicArray(POINT_ARR) );
		if ( !pPolyLin || !pMathPoint )
			return;

		tMathPoint->set_x(10);
		tMathPoint->set_y(10);

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

		tMathPoint->set_x(30);
		tMathPoint->set_y(10);
    pMathPoint->ksClearArray();
		pMathPoint->ksAddArrayItem( -1, tMathPoint );
		pPolyLin->ksAddArrayItem( -1, pMathPoint );

		lead->SetpPolyline( pPolyLin );

		// 
		lead->set_x(50);//    (   )
		lead->set_y(50);
		lead->set_arrowType(1);
		lead->set_dirX(-1);

    long obj = doc->ksPositionLeader( lead );
		if ( obj ) {
		  doc->ksGetObjParam( obj, lead, ALLPARAM );
		  lead->set_x(100);
    	kompas->ksMessage( StringToOleStr(" ") );
		  doc->ksSetObjParam( obj, lead, ALLPARAM );
    } 
  }
}

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

		ksTextItemFont * tFont( (ksTextItemFont *)ItemPar->GetItemFont() );
    ksDynamicArray * ptext( (ksDynamicArray *)lead->GetpTextline() );
		ksDynamicArray * pPolyLin( (ksDynamicArray *)lead->GetpPolyline() );
		if ( !ptext || !tFont || !pPolyLin )
			return;
		tFont->Init();

		str->set_str(StringToOleStr("1"));
		ptext->ksAddArrayItem( -1, str );
		str->set_str(StringToOleStr("2"));
		ptext->ksAddArrayItem( -1, str );
		str->set_str(StringToOleStr("3"));
		ptext->ksAddArrayItem( -1, str );

		tMathPoint->set_x(10);
		tMathPoint->set_y(10);

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

		tMathPoint->set_x(30);
		tMathPoint->set_y(10);
    pMathPoint->ksClearArray();
		pMathPoint->ksAddArrayItem( -1, tMathPoint );
		pPolyLin->ksAddArrayItem( -1, pMathPoint );

		// 
		lead->set_x(50);//    (   )
		lead->set_y(50);
		lead->set_arrowType(1);
		lead->set_dirX(-1);
		lead->set_cText0(1);
		lead->set_cText1(1);
		lead->set_cText2(1);

    long obj = doc->ksBrandLeader( lead );
		if ( obj ) {
		  doc->ksGetObjParam( obj, lead, ALLPARAM );
		  lead->set_x(100);
    	kompas->ksMessage( StringToOleStr(" ") );
		  doc->ksSetObjParam( obj, lead, ALLPARAM );
    }
  }
}

//------------------------------------------------------------------------------
// 
// ---
void DrawMarkerLeader( ksDocument2D * doc ) {
ksMarkerLeaderParam * lead( (ksMarkerLeaderParam*)kompas->GetParamStruct(ko_MarkerLeaderParam) );
  ksTextLineParam * tLinePar( (ksTextLineParam*)kompas->GetParamStruct(ko_TextLineParam) );
  ksTextItemParam * ItemPar( (ksTextItemParam*)kompas->GetParamStruct(ko_TextItemParam) );
  ksMathPointParam * tMathPoint( (ksMathPointParam*)kompas->GetParamStruct(ko_MathPointParam) );
  ksChar255 * str( (ksChar255*)kompas->GetParamStruct(ko_Char255) );
  ksDynamicArray * pMathPoint( (ksDynamicArray*)kompas->GetDynamicArray(POINT_ARR) );
  if ( lead && tLinePar && ItemPar && tMathPoint && str && pMathPoint ) {
    lead->Init(); tLinePar->Init(); ItemPar->Init(); tMathPoint->Init(); str->Init();

		// 
		lead->set_x(50);//    (   )
		lead->set_y(50);
		lead->set_arrowType(1);
		lead->set_cText0(1);
		lead->set_cText1(1);
		lead->set_cText2(1);                                                                              
		lead->set_style1(0);

    ksTextItemFont * tFont( (ksTextItemFont*)ItemPar->GetItemFont() );
		ksDynamicArray * pCharArr( (ksDynamicArray*)lead->GetpTextline() );
		ksDynamicArray * pPolyLin( (ksDynamicArray*)lead->GetpPolyline() );
		if ( !tFont || !pCharArr || !pPolyLin )
			return;

		tFont->Init();

		str->set_str(StringToOleStr("1"));
		pCharArr->ksAddArrayItem( -1, str );
		str->set_str(StringToOleStr("2"));
		pCharArr->ksAddArrayItem( -1, str );
		str->set_str(StringToOleStr("3"));
		pCharArr->ksAddArrayItem( -1, str );

		tMathPoint->set_x(10);
		tMathPoint->set_y(10);

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

		tMathPoint->set_x(30);
		tMathPoint->set_y(10);
    pMathPoint->ksClearArray();
		pMathPoint->ksAddArrayItem( -1, tMathPoint );
		pPolyLin->ksAddArrayItem( -1, pMathPoint );

    long obj = doc->ksMarkerLeader( lead );
		if ( obj ) {
		  doc->ksGetObjParam( obj, lead, ALLPARAM );
		  lead->set_x(100);
    	kompas->ksMessage( StringToOleStr(" ") );
		  doc->ksSetObjParam( obj, lead, ALLPARAM );
    }
  } 
}

//------------------------------------------------------------------------------
//  
// ---
void DrawBase( ksDocument2D * doc ) {
  ksBaseParam * par( (ksBaseParam*)kompas->GetParamStruct(ko_BaseParam) );
	if ( par ) {
		par->set_style( 0 );
		par->set_type( false ); // 
		par->set_x1( 10 );
		par->set_y1( 10 );
		par->set_x2( 30 );
		par->set_y2( 40 );
		par->set_str( StringToOleStr(" ") );
		reference bas = doc->ksBase( par );
		par->Init();
		if ( bas ) {
		  doc->ksGetObjParam( bas, par, ALLPARAM );
		  par->set_x2( -30 );
    	kompas->ksMessage( StringToOleStr(" ") );
	  	doc->ksSetObjParam( bas, par, ALLPARAM );
		}
	}
}

//------------------------------------------------------------------------------
//  /c
// ---
void DrawCutLine( ksDocument2D * doc ) {
  ksCutLineParam * cut( (ksCutLineParam*)kompas->GetParamStruct(ko_CutLineParam) );
  ksTextLineParam * tLinePar( (ksTextLineParam*)kompas->GetParamStruct(ko_TextLineParam) );
  ksTextItemParam * ItemPar( (ksTextItemParam*)kompas->GetParamStruct(ko_TextItemParam) );
  ksMathPointParam * tMathPoint( (ksMathPointParam*)kompas->GetParamStruct(ko_MathPointParam) );
  if ( cut && tLinePar && ItemPar && tMathPoint ) {
    cut->Init(); tLinePar->Init(); ItemPar->Init(); tMathPoint->Init();

    cut->set_type(0);
		cut->set_x1(30);
		cut->set_y1(65);
		cut->set_x2(95);
		cut->set_y2(15);
		cut->set_right(1);
		cut->set_str(StringToOleStr("A$;1$"));

    ksTextItemFont * tFont( (ksTextItemFont*)ItemPar->GetItemFont() );
		ksDynamicArray * pMathPoint( (ksDynamicArray*)cut->GetpMathPoint() );
    if ( !tFont || !pMathPoint )
			return;
		tFont->Init();

  	tMathPoint->set_x(50);
	  tMathPoint->set_y(50);

	  pMathPoint->ksAddArrayItem( -1, tMathPoint );

 		tMathPoint->set_x(50);
  	tMathPoint->set_y(30);

	  pMathPoint->ksAddArrayItem( -1, tMathPoint );

	  tMathPoint->set_x(80);
	  tMathPoint->set_y(30);

	  pMathPoint->ksAddArrayItem( -1, tMathPoint );

    long obj = doc->ksCutLine( cut );
    if ( obj ) {
		  doc->ksGetObjParam( obj, cut, ALLPARAM );

			pMathPoint->ksClearArray();

  	  tMathPoint->set_x(30);
	    tMathPoint->set_y(50);

	    pMathPoint->ksAddArrayItem( -1, tMathPoint );

 		  tMathPoint->set_x(30);
  	  tMathPoint->set_y(30);

	    pMathPoint->ksAddArrayItem( -1, tMathPoint );

	    tMathPoint->set_x(80);
	    tMathPoint->set_y(30);

	    pMathPoint->ksAddArrayItem( -1, tMathPoint );

			kompas->ksMessage( StringToOleStr(" ") );
	  	doc->ksSetObjParam( obj, cut, ALLPARAM );
    }
	}		
}

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

	textLine->Init();
	textItem->Init();

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

	tPar->Init( true );
  	tPar->SetBitFlagValue( _AUTONOMINAL, true );
	  tPar->set_sign( 1 );

	font->Init();
	font->set_height( 5 );
	font->set_ksu( 1 );
	font->set_fontName( StringToOleStr("GOST type A") );
	font->set_bitVector( NEW_LINE );

	arr->ksAddArrayItem( -1, textItem );

  ksDynamicArray * arr1( (ksDynamicArray*)tPar->GetTextArr() );
	if ( !arr1 )
		return;
	arr1->ksAddArrayItem( -1, textLine );

	sPar->Init();
	sPar->set_xc(100);
	sPar->set_yc(100);
	sPar->set_rad(50);

  dPar->Init();

  long obj = doc->ksDiamDimension( aDim );
	if ( obj ) {
	  doc->ksGetObjParam( obj, aDim, ALLPARAM );
	  sPar->set_rad( 100 );
  	kompas->ksMessage( StringToOleStr(" ") );
		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( (ksRDimParam*)kompas->GetParamStruct(ko_RDimParam) );
  ksTextLineParam * textLine( (ksTextLineParam*)kompas->GetParamStruct( ko_TextLineParam ) );
  ksTextItemParam * textItem( (ksTextItemParam*)kompas->GetParamStruct(ko_TextItemParam) );
  if ( !aDim || !textLine || !textItem  )
		return;

	textLine->Init();
	textItem->Init();

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

	tPar->Init( true );
  	tPar->SetBitFlagValue( _AUTONOMINAL, true );
	  tPar->set_sign( 1 );


	font->Init();
	font->set_height( 5 );
	font->set_ksu( 1 );
	font->set_fontName( StringToOleStr("GOST type A") );
	font->set_bitVector( NEW_LINE );

	arr->ksAddArrayItem( -1, textItem );

  ksDynamicArray * arr1( (ksDynamicArray*)tPar->GetTextArr() );
	if ( !arr1 )
		return;

	arr1->ksAddArrayItem( -1, textLine );

	sPar->Init();
	sPar->set_xc(100);
	sPar->set_yc(100);
	sPar->set_rad(50);

  dPar->Init();

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

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

  	tPar->SetBitFlagValue( _AUTONOMINAL, true );
		tPar->set_sign( 1 );

		font->set_height( 5 );
		font->set_ksu( 1 );
		font->set_fontName( StringToOleStr("GOST type A") );
		font->set_bitVector( NEW_LINE );

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

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

			sPar->set_xc(100);
			sPar->set_yc(100);
			sPar->set_rad(50);

			dPar->set_ang(0);
			dPar->set_pb(30);
			dPar->set_pt(1);

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

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

			viewPoint->set_x1(55);
			viewPoint->set_y1(50);
			viewPoint->set_x2(40);
			viewPoint->set_y2(50);
			viewPoint->set_xt(40);
			viewPoint->set_yt(52);
			viewPoint->set_type(0);
			viewPoint->set_str(StringToOleStr(""));

			long p = doc->ksViewPointer( viewPoint );
			if ( p ) {
				doc->ksGetObjParam( p, viewPoint, ALLPARAM);
   			viewPoint->set_type(0);
				viewPoint->set_str( StringToOleStr(" ") );
    		kompas->ksMessage( StringToOleStr(" ") );
				doc->ksSetObjParam( p, viewPoint, ALLPARAM );
			} 
		}
	}
}

