unit Step99;
//******************************************************************/
//                (c)                     */
//*                -, 1991, 1996                     */
//*                 -   5.x                      */
//******************************************************************/
//*                                              */
//*                      */
//*                                                                */
//******************************************************************/

interface
 procedure  LIBRARYENTRY( comm: WORD  ); Pascal;
 function   LIBRARYID   : Cardinal;      Pascal;
 procedure  ShowDimD(str : PChar; param : pointer; t : integer);
 procedure  DrawLinDim;
 procedure  DrawAngDim;
 procedure  DrawRough;
 procedure  DrawLeader;
 procedure  DrawPosLeader;
 procedure  DrawBrandLeader;
 procedure  DrawMarkerLeader;
 procedure  DrawBase;
 procedure  DrawCutLine;
 procedure  DrawDiamDimt;
 procedure  DrawRadDimt;
 procedure  DrawRadBreakDimt;
 procedure  DrawViewPointer;

 implementation

 uses  Sysutils, LtDefine, LibTool, LDefin2D;

//----------------------------------------------------------------------------------------
//
//---
function   LIBRARYID : Cardinal;  pascal;
begin
  Result:=100;
end;

//----------------------------------------------------------------------------------------
//
//---
procedure  LIBRARYENTRY( comm : Word  );  pascal;
begin
  Case ( Comm ) of
    1: begin// 
       DrawLinDim();
       end;
    2: begin// 
       DrawAngDim();
       end;
    3: begin//
       DrawRough();
       end;
    5: begin// 
       DrawLeader();
       end;
    6: begin//  
       DrawPosLeader();
       end;
    7: begin//
       DrawBrandLeader();
       end;
    8: begin//
       DrawMarkerLeader();
       end;
    9: begin// 
       DrawBase();
       end;
    10:begin //
       DrawCutLine();
       end;
    11:begin // 
       DrawDiamDimt();
       end;
    12:begin // 
       DrawRadDimt();
       end;
    13:begin // 
       DrawRadBreakDimt();
       end;
    14:begin //c 
       DrawViewPointer();
       end;
  end;

end;

//-------------------------------------------------------------------------------------
//  
//---------------------------------------------------------------------------------------
procedure DrawLinDim;
var
  p : reference;
  linPar :LDimParam;
  t      :integer;
  buf    : string;
  ss     : array[0..128] of char;
//--------------------------------------------------------------------------------
//    
//--------------------------------------------------------------------------------
procedure  ShowDimL( str : PChar; param : pointer; t : integer );
var
  pTPar   : PDimText;
  pSPar   : PLDimSource ;
  pDPar   : PDimDrawing ;
  lDimPar : PLDimParam;
  count   : integer ;
  i       : integer;
  s1 : array [0..128] of char;

begin
  pTPar := nil;
  pSPar := nil;
  pDPar := nil;
  case ( t ) of
    ALLPARAM :  begin
      lDimPar :=  PLDimParam (param);
      pTPar := Addr(lDimPar^.tPar);
      pSPar := Addr(lDimPar^.sPar);
      pDPar := Addr(lDimPar^.dPar);
    end;
    DIM_TEXT_PARAM   :  begin
      pTPar := PDimText (param);
      end;
    DIM_SOURSE_PARAM : begin
      pSPar := PLDimSource(param);
      end;
    DIM_DRAW_PARAM   : begin
      pDPar :=  PDimDrawing(param);
      end;
  end;
  if ( pSPar <> nil ) then
  Begin
//       1
    buf := Format( '%s    x1=%3.2f y1=%3.2f x2=%3.2f y2=%3.2f',
                    [str,pSPar^.x1,pSPar^.y1,pSPar^.x2,pSPar^.y2]);
    ksMessage( PChar(buf) );
    buf := Format( 'dx= %3.2f dy= %3.2f  basePoint = %d ps=%d',
                   [ pSPar^.dx,pSPar^.dy, pSPar^.basePoint,pSPar^.ps ] );
    ksMessage( PChar(buf) );
  end;
  if( pDPar <> nil ) then
  Begin
//             2
    buf :=Format( '%s   pl1=%d pl2=%d t1=%d  t2=%d',
                   [str,pDPar^.pl1, pDPar^.pl2, pDPar^.pt1, pDPar^.pt2] );
    ksMessage( PChar(buf) );
    buf :=Format( 'textPos=%d textBase=%d \n psh =%d ang=%3.2f length = %d',
             [pDPar^.textPos,pDPar^.textBase,
             pDPar^.shelfDir, pDPar^.ang, pDPar^.length] );
    ksMessage( PChar(buf) );
  end;
  if( pTPar<>nil ) then
  begin
//                        3
    buf :='  ';
    if( pTPar^.pText <> 0 ) then
    begin
      count:=GetArrayCount( pTPar^.pText );
      for  i:=0 to count-1 do
      begin
        GetArrayItem( pTPar^.pText, i, Addr(s1), 128);   //   
        buf := buf + s1;
        buf := buf + ' ';
      end;
    end;

    ksMessage( PChar(buf) );
    buf := Format( '%s    sign=%d  bitFlag = %d ',
             [str, pTPar^.sign, pTPar^.bitFlag] );
    ksMessage( PChar(buf) );
  end;
end;
//------------------------------------------------------------------------------
begin
  FillChar( linPar, SizeOf(linPar), 0 );
// 
  linPar.dPar.textPos    := 10; // 
  linPar.dPar.textBase   := 2; //   
  //   PREFIX,   auto-  ,TOLERANCE,
  //  auto-  ,UNIT,SUFFIX  - 4 
  linPar.tPar.bitFlag := _AUTONOMINAL or _PREFIX or _DEVIATION or _UNIT or _SUFFIX;
//  linPar.tPar.bitFlag = _AUTONOMINAL;
  linPar.tPar.sign := 0;
  linPar.tPar.pText := CreateArray(CHAR_STR_ARR ,nil);

  StrCopy( ss, 'prefix');
  AddArrayItem( linPar.tPar.pText, -1, Addr(ss), 8);
  StrCopy( ss, '+0,5');
  AddArrayItem( linPar.tPar.pText, -1, Addr(ss), 5);
  StrCopy( ss, '-0,5');
  AddArrayItem( linPar.tPar.pText, -1, Addr(ss), 5);
  StrCopy( ss, 'mm');
  AddArrayItem( linPar.tPar.pText, -1, Addr(ss), 5);
  StrCopy( ss, 'pp&04ww&01');
  AddArrayItem( linPar.tPar.pText, -1, Addr(ss), 13);

  //   
  linPar.sPar.ps := 0;            //  0-, 1- 2-  
  linPar.sPar.x1 := 50; linPar.sPar.y1 := 50; //   1 -  
  linPar.sPar.x2 := 70; linPar.sPar.y2 := 60; //   2 -  
  linPar.sPar.dy := -20;
  linPar.sPar.dx := 0;
  linPar.sPar.basePoint := 1;

//     
  linPar.dPar.pl1 := 0;                      // ./.   1    0/1
  linPar.dPar.pl2 := 0;                      // ./.   2    0/1
  linPar.dPar.pt1 := 2;            //    1-   0-  1-  2  3 - 4 - 
  linPar.dPar.pt2 := 2;            //    2-  

//  
  linPar.dPar.shelfDir   := 0; // 
  linPar.dPar.ang   := -30;     //  
  linPar.dPar.length:= 20;      // 

  p := LinDimension( Addr(linPar) ); //  

 ShowDimL(' ', Addr(linPar), ALLPARAM  );

 // 
  linPar.dPar.textPos   := 1; //   
  //   PREFIX,   auto-  ,TOLERANCE,
  //  auto-  ,UNIT,SUFFIX  - 4 
  linPar.tPar.bitFlag := _AUTONOMINAL;
  linPar.tPar.sign := 0;
  linPar.tPar.pText := 0;

//   
  linPar.sPar.ps := 1;            //  0-, 1- 2-  
  linPar.sPar.x1 := 50; linPar.sPar.y1 := 50; //   1 -  
  linPar.sPar.x2 := 50; linPar.sPar.y2 := 60; //   2 -  
  linPar.sPar.dx := -20;
  linPar.sPar.dy := 0;

//     
  linPar.dPar.pl1 := 1;                      // ./.   1    0/1
  linPar.dPar.pl2 := 1;                      // ./.   2    0/1
  linPar.dPar.pt1 := 1;            //    1-   0-  1-  2  3 - 4 - 
  linPar.dPar.pt2 := 1;            //    2-  

//  
  linPar.dPar.shelfDir   := 0; // 
  linPar.dPar.ang   := -30; //  
  linPar.dPar.length:= 20; // 

//  DIM_SOURSE_PARAM DIM_DRAW_PARAM DIM_TEXT_PARAM
//////////////////////////////////////////////////
 ShowDimL(' ' ,Addr(linPar.dPar), DIM_DRAW_PARAM );

   SetObjParam(  p,   //   
                 Addr(linPar.dPar),  //   
                 SizeOf(linPar.dPar),   //  
                 DIM_DRAW_PARAM ); //  



 if( ExistObj(p)>0 ) then
 begin
   FillChar( linPar, SizeOf(linPar), 0 );
   t := GetObjParam(  p,   //   
                      Addr(linPar),  //   
                      sizeof(LDimParam),   //  
                      SHEET_ALLPARAM ); //  
   buf := Format('  tip= %d',[t] );

   ShowDimL(' ', Addr(linPar), ALLPARAM );

 end;
end;

//-----------------------------------------------------------------------------
//
//-----------------------------------------------------------------------------
procedure DrawAngDim;
var
  p      : reference;
  angPar : ADimParam ;
  ss     : array[0..128] of char;
  t      : integer;
  buf : string;
//--------------------------------------------------------------------------------
procedure  ShowDimA( str : PChar; param : pointer; t : integer);
var
  pTPar : PDimText;
  pSPar : PADimSource ;
  pDPar : PDimDrawing ;
  aDimPar : PADimParam;
  count,i : Cardinal;
  s1 : array [0..128] of char;

begin
  pTPar := nil;
  pSPar := nil;
  pDPar := nil;
  case  ( t ) of
    ALLPARAM :  begin
      aDimPar :=  PADimParam(param);
      pTPar := Addr(aDimPar^.tPar);
      pSPar := Addr(aDimPar^.sPar);
      pDPar := Addr(aDimPar^.dPar);
      end;
    DIM_TEXT_PARAM : begin
      pTPar := PDimText(param);
      end;
    DIM_SOURSE_PARAM : begin
      pSPar := PADimSource (param);
      end;
    DIM_DRAW_PARAM : begin
      pDPar :=  PDimDrawing(param);
      end;
  end;
  if ( pSPar <> nil ) then
  begin
  //       1
    buf := Format('%s   x=%3.2f y=%3.2f rad =%3.2f',
                   [str,pSPar^.xc,pSPar^.yc,pSPar^.rad] );
    ksMessage( PChar(buf) );
    buf := Format('x1=%3.2f y1=%3.2f\nx2=%3.2f y2=%3.2f dir =%d',
                  [pSPar^.x1,pSPar^.y1,pSPar^.x2,pSPar^.y2, pSPar^.dir] );
    ksMessage( PChar(buf) );

  end;
  if( pDPar<>nil ) then
  begin
//             2
    buf := Format('%s    pl1=%d pl2=%d t1=%d  t2=%d',
             [str,pDPar^.pl1, pDPar^.pl2, pDPar^.pt1, pDPar^.pt2] );
    ksMessage( PChar(buf) );
    buf := Format('textPos=%d textBase=%d \n psh =%d ang=%3.2f length = %d',
             [pDPar^.textPos,pDPar^.textBase,
             pDPar^.shelfDir, pDPar^.ang, pDPar^.length] );
    ksMessage( PChar(buf) );
  end;
  if( pTPar<>nil ) then
  begin
//                        3
    buf :='  ';
    if( pTPar^.pText <> 0 ) then
    begin
      count:=GetArrayCount( pTPar^.pText );
      for  i:=0 to count-1 do
      begin
        GetArrayItem( pTPar^.pText, i, Addr(s1), 128);   //   
        buf := buf + s1;
        buf := buf + ' ';
      end;
    end;

    ksMessage( PChar(buf) );
    buf := Format( '%s    sign=%d  bitFlag = %d ',
             [str, pTPar^.sign, pTPar^.bitFlag] );
    ksMessage( PChar(buf) );
  end;
end;

begin
  FillChar( angPar, sizeof(angPar), 0 );

 LineSeg( 40, 0, 40, 40, 1 );
 LineSeg( 40, 0, 60, 20, 1 );
// 
  angPar.dPar.textPos   := -10; // 
  angPar.dPar.textBase  := 0; //   
  //   PREFIX,   auto-  ,
  //  auto-  ,UNIT,SUFFIX  - 4 
  angPar.tPar.bitFlag := _AUTONOMINAL or _PREFIX or _DEVIATION or _UNIT or _SUFFIX;
//  angPar.tPar.bitFlag = _AUTONOMINAL;
  angPar.tPar.sign := 0;

  angPar.tPar.pText := CreateArray(CHAR_STR_ARR ,nil);

  StrCopy( ss, 'prefix');
  AddArrayItem( angPar.tPar.pText, -1, Addr(ss), 7);
  StrCopy( ss, '+0.3');
  AddArrayItem( angPar.tPar.pText, -1, Addr(ss), 5);
  StrCopy( ss, '-0.3');
  AddArrayItem( angPar.tPar.pText, -1, Addr(ss), 5);
  StrCopy( ss, '');
  AddArrayItem( angPar.tPar.pText, -1, Addr(ss), 3);
  StrCopy( ss, 'suffics');
  AddArrayItem( angPar.tPar.pText, -1, Addr(ss), 8);

//  
  angPar.sPar.xc := 40; angPar.sPar.yc := 0;       // 
  angPar.sPar.x1 := 40; angPar.sPar.y1 := 40;      // 1 -    
  angPar.sPar.x2 := 60; angPar.sPar.y2 := 20;      // 2 -    

  angPar.sPar.rad := 50;          //  
  angPar.sPar.dir := -1;          // 1 -     ; -1 -   

//    
  angPar.dPar.pl1 := 0;       // ./.   1    1/0
  angPar.dPar.pl2 := 0;       // ./.   2    1/0
  angPar.dPar.pt1 := 1;       //    1-   0-  1-  2  3 - 4 - 
  angPar.dPar.pt2 := 1;       //    2-  

  //  
  angPar.dPar.shelfDir     := 0; // 
  angPar.dPar.ang   := 30; //  
  angPar.dPar.length:= 20; // 

 p := AngDimension( Addr(angPar) );//  
 ShowDimA(' ', Addr(angPar), ALLPARAM );
///////////////////////////////////////////////////////////////////////////////

// 
  angPar.dPar.textPos   := 0; // 
  angPar.dPar.textBase  := 0; //   
  //   PREFIX,   auto-  ,
  //  auto-  ,UNIT,SUFFIX  - 4 
  angPar.tPar.bitFlag := _AUTONOMINAL or _PREFIX or _DEVIATION or _UNIT or _SUFFIX;
//  angPar.tPar.bitFlag = _AUTONOMINAL;
  angPar.tPar.sign := 0;

  angPar.tPar.pText := 0;//CreateArray(CHAR_STR_ARR ,0);

//  

  angPar.sPar.xc := 40; angPar.sPar.yc := 60;       // 
  angPar.sPar.x1 := 10; angPar.sPar.y1 := 60;      // 1 -    
  angPar.sPar.x2 := 20; angPar.sPar.y2 := 80;      // 2 -    

  angPar.sPar.rad := 50;          //  
  angPar.sPar.dir := -1;          // 1 -     ; -1 -   


//    
  angPar.dPar.pl1 := 0;       // ./.   1    1/0
  angPar.dPar.pl2 := 0;       // ./.   2    1/0
  angPar.dPar.pt1 := 1;       //    1-   0-  1-  2  3 - 4 - 
  angPar.dPar.pt2 := 1;       //    2-  

  //  
  angPar.dPar.shelfDir     := 1; // 
  angPar.dPar.ang   := 30; //  
  angPar.dPar.length:= 20; // 

// DIM_SOURSE_PARAM DIM_DRAW_PARAM DIM_TEXT_PARAM SHEET_ALLPARAM ALLPARAM
///////////////////////////////////////////////////////////////////////////////
 ShowDimA(' ' ,Addr(angPar.dPar), DIM_DRAW_PARAM );

  SetObjParam(  p,   //   
                Addr(angPar.dPar),  //   
                SizeOf(angPar),   //  
                DIM_DRAW_PARAM ); //  

  FillChar( angPar, sizeof(angPar), 0 );
  if( ExistObj(p)>0 ) then
  begin
    t := GetObjParam(  p,   //   
                       Addr( angPar),  //   
                       SizeOf(ADimParam),   //  
                       SHEET_ALLPARAM ); //  
   buf := Format('  tip= %d',[t] );
   ksmessage(PChar(buf));
   ShowDimA('', Addr(angPar), ALLPARAM );
  end;
end;
//--------------------------------------------------------------------------------
//
//--------------------------------------------------------------------------------
procedure DrawRough;
var
 p        : reference;
 roughPar : RoughParam ;
 tLinePar : TextLineParam ;
 tFont    : TextItemFont  ;      //     
 ItemPar  : TextItemParam  ;    //    
  ss      : array[0..128] of char;

begin
FillChar( roughPar, SizeOf(roughPar),0 );

//  
  roughPar.rPar._type:=0;                 //    0- -  - 1- -   
                                   // 2 --    
  roughPar.rPar.around:=0;              // =1 -  " "
  roughPar.rPar.x:=50; roughPar.rPar.y:= 50;          //         1 
  roughPar.rPar.ang:=90;           //        X
  roughPar.rPar.cText0:=2; //       ( -   2789-73)
  roughPar.rPar.cText1:=2; //       ( -  ,)
  roughPar.rPar.cText2:=2; //       (    2789-73)
                        //   2 
  roughPar.rPar.cText3:=1; //       (.. )
                        //   1 
//  roughPar.rPar.style = INDICATIN_TEXT_LINE_ARR;
  roughPar.rPar.style := 0;
  //    
  if ( roughPar.rPar.style = INDICATIN_TEXT_LINE_ARR ) then
  begin
    //,       

    tLinePar.style:=0;    //   
    tLinePar.pTextItem := CreateArray( TEXT_ITEM_ARR, nil );   //       


    FillChar( tFont, sizeof( tFont ), 0 );

    ItemPar.tip:=0;            // tip = SPECIAL_SYMBOL , FONT_SYMBOL, FRACTION_TYPE, SUM_TYPE   0
    ItemPar.font := tFont;     //     
    ItemPar.iSNumb:=0;        //  ,               0


    roughPar.rPar.pText := CreateArray(TEXT_LINE_ARR,nil);     // TEXT_LINE_ARR -     
                          //  4    ;
                          //      
                          // -   ( -   2789-73) - cText0=0 -  
                          // -   ( -  ,)        - cText1=0 -  
                          // -   (    2789-73)    - cText2=0 -  
                          // -   (.. )- cText3=0 -  

    StrCopy(ItemPar.s,'00_1');   //      
    AddArrayItem( tLinePar.pTextItem, -1, Addr(ItemPar), sizeof(ItemPar));
    AddArrayItem( roughPar.rPar.pText, -1, Addr(tLinePar), sizeof(tLinePar));
    ClearArray(tLinePar.pTextItem);
    StrCopy(ItemPar.s,'00_2');   //      
    AddArrayItem( tLinePar.pTextItem, -1, Addr(ItemPar), sizeof(ItemPar));
    AddArrayItem( roughPar.rPar.pText, -1, Addr(tLinePar), sizeof(tLinePar));
    ClearArray(tLinePar.pTextItem);
    StrCopy(ItemPar.s,'11_1');   //      
    AddArrayItem( tLinePar.pTextItem, -1, Addr(ItemPar), sizeof(ItemPar));
    AddArrayItem( roughPar.rPar.pText, -1, Addr(tLinePar), sizeof(tLinePar));
    ClearArray(tLinePar.pTextItem);
    StrCopy(ItemPar.s,'11_2');   //      
    AddArrayItem( tLinePar.pTextItem, -1, Addr(ItemPar), sizeof(ItemPar));
    AddArrayItem( roughPar.rPar.pText, -1, Addr(tLinePar), sizeof(tLinePar));
    ClearArray(tLinePar.pTextItem);
    StrCopy(ItemPar.s,'22_1');   //      
    AddArrayItem( tLinePar.pTextItem, -1, Addr(ItemPar), sizeof(ItemPar));
    AddArrayItem( roughPar.rPar.pText, -1, Addr(tLinePar), sizeof(tLinePar));
    ClearArray(tLinePar.pTextItem);
    StrCopy(ItemPar.s,'22_2');   //      
    AddArrayItem( tLinePar.pTextItem, -1, Addr(ItemPar), sizeof(ItemPar));
    AddArrayItem( roughPar.rPar.pText, -1, Addr(tLinePar), sizeof(tLinePar));
    ClearArray(tLinePar.pTextItem);
    StrCopy(ItemPar.s,'33_1');   //      
    AddArrayItem( tLinePar.pTextItem, -1, Addr(ItemPar), sizeof(ItemPar));
    AddArrayItem( roughPar.rPar.pText, -1, Addr(tLinePar), sizeof(tLinePar));
  end
  else  begin
    //,      
    roughPar.rPar.pText :=CreateArray(CHAR_STR_ARR ,nil);     //       
                          //  4    ;
                          //      
                          // -   ( -   2789-73) - cText0=0 -  
                          // -   ( -  ,)        - cText1=0 -  
                          // -   (    2789-73)    - cText2=0 -  
                          // -   (.. )- cText3=0 -  

    StrCopy( ss, '00_1');
    AddArrayItem( roughPar.rPar.pText, -1, Addr(ss), 5);
    StrCopy( ss, '00_2');
    AddArrayItem( roughPar.rPar.pText, -1, Addr(ss), 5);
    StrCopy( ss, '11_1');
    AddArrayItem( roughPar.rPar.pText, -1, Addr(ss), 5);
    StrCopy( ss, '11_2');
    AddArrayItem( roughPar.rPar.pText, -1, Addr(ss), 5);
    StrCopy( ss, '22_1');
    AddArrayItem( roughPar.rPar.pText, -1, Addr(ss), 5);
    StrCopy( ss, '22_2');
    AddArrayItem( roughPar.rPar.pText, -1, Addr(ss), 5);
    StrCopy( ss, '33_1');
    AddArrayItem( roughPar.rPar.pText, -1, Addr(ss), 5);
  end;
  //  
  roughPar.shPar.psh   := 0; // 
  roughPar.shPar.ang   := 130; //  
  roughPar.shPar.length:= 20; // 


 p := Rough( Addr(roughPar) );    // 

 ksMessage( '');
 LightObj(p,1);

end;

//----------------------------------------------------------------------------------------
//   
//---
procedure DrawLeader;
var
 p        : reference ;
 tLinePar : TextLineParam ;
 tFont    : TextItemFont  ;      //     
 ItemPar  : TextItemParam  ;    //    
 leaderPar: LeaderParam ;
 mPar     : MathPointParam ;
 pPoly    : reference;
begin
  tLinePar.style:=0;    //   
  tLinePar.pTextItem := CreateArray( TEXT_ITEM_ARR, nil );   //       

  FillChar( tFont, SizeOf( tFont ), 0 );


  ItemPar.tip    :=0;            // tip = SPECIAL_SYMBOL , FONT_SYMBOL, FRACTION_TYPE, SUM_TYPE   0
  ItemPar.font   := tFont;     //     
  ItemPar.iSNumb :=0;        //  ,               0


  FillChar( leaderPar,  sizeof(leaderPar), 0 );
  leaderPar.x:=50; leaderPar.y:=50;             //    (   )
  leaderPar.arrowType := 1; //  
  leaderPar.dirX      :=1;      //    X (1 - -1-)
  leaderPar.signType  :=0;  //  
  leaderPar.around    :=0;    //     0- 1- 
  leaderPar.cText0    :=1;    //      0-  
  leaderPar.cText1    :=1;    //      0-  
  leaderPar.cText2    :=1;    //      (  1 )0-  
  leaderPar.cText3    :=1;    //      (  1 )0-  

  leaderPar.pTextline := CreateArray( TEXT_LINE_ARR, nil );     // TEXT_LINE_ARR -     
  StrCopy(ItemPar.s,'00_1');   //      
  AddArrayItem( tLinePar.pTextItem, -1, Addr(ItemPar), sizeof(ItemPar));
  AddArrayItem( leaderPar.pTextline, -1, Addr(tLinePar), sizeof(tLinePar));
  ClearArray(tLinePar.pTextItem);
  StrCopy(ItemPar.s,'11_1');   //      
  AddArrayItem( tLinePar.pTextItem, -1, Addr(ItemPar), sizeof(ItemPar));
  AddArrayItem( leaderPar.pTextline, -1, Addr(tLinePar), sizeof(tLinePar));
  ClearArray(tLinePar.pTextItem);
  StrCopy(ItemPar.s,'22_1');   //      
  AddArrayItem( tLinePar.pTextItem, -1, Addr(ItemPar), sizeof(ItemPar));
  AddArrayItem( leaderPar.pTextline, -1, Addr(tLinePar), sizeof(tLinePar));
  StrCopy(ItemPar.s,'33_1');   //      
  AddArrayItem( tLinePar.pTextItem, -1, Addr(ItemPar), sizeof(ItemPar));
  AddArrayItem( leaderPar.pTextline, -1, Addr(tLinePar), sizeof(tLinePar));
  ClearArray(tLinePar.pTextItem);


  leaderPar.pPolyline  := CreateArray( POLYLINE_ARR, nil ); // POLYLINE_ARR -      
  pPoly                := CreateArray( POINT_ARR , nil );

  mPar.x := 10;
  mPar.y := 10;
  AddArrayItem( pPoly , -1, Addr(mPar), sizeof(mPar));
  AddArrayItem( leaderPar.pPolyline , -1, Addr(pPoly), sizeof(pPoly));

  mPar.x := 30;
  mPar.y := 10;
  ClearArray(pPoly);
  AddArrayItem( pPoly , -1, Addr(mPar), sizeof(mPar));
  AddArrayItem( leaderPar.pPolyline , -1, Addr(pPoly), sizeof(pPoly));


  p := Leader( Addr(leaderPar) );
  ksMessage( ' ' );
  LightObj(p,1);
end;

//--------------------------------------------------------------------------------
//   
//--------------------------------------------------------------------------------
procedure DrawPosLeader;
var
  p : reference ;
  leaderPar : PosLeaderParam  ;
  tLinePar  : TextLineParam ;
  tFont     : TextItemFont;        //     
  ItemPar   : TextItemParam  ;    //    
  ss        : array[0..128] of char;
  pPoly     : reference;
  mPar      : MathPointParam ;

begin
  FillChar( leaderPar, sizeof(leaderPar), 0 );

  leaderPar.x:=50; leaderPar.y:=50;             //    (   )
  leaderPar.arrowType := 1; //  
  leaderPar.dirX:=-1;      //    X (1 - -1-)
  leaderPar.style := INDICATIN_TEXT_LINE_ARR;//     
//  leaderPar.style := 1;                    //     
  //    

  if ( leaderPar.style = INDICATIN_TEXT_LINE_ARR ) then
  begin
    tLinePar.style :=0;    //   
    tLinePar.pTextItem := CreateArray( TEXT_ITEM_ARR, nil );   //       

    FillChar( tFont, sizeof( tFont ),0 );

    ItemPar.tip   := 0;            // tip = SPECIAL_SYMBOL , FONT_SYMBOL, FRACTION_TYPE, SUM_TYPE   0
    ItemPar.font  := tFont;     //     
    ItemPar.iSNumb:= 0;        //  ,               0

    leaderPar.pText := CreateArray( TEXT_LINE_ARR, nil );     // TEXT_LINE_ARR -     

    StrCopy(ItemPar.s, '1');   //      
    AddArrayItem( tLinePar.pTextItem, -1, Addr(ItemPar), sizeof(ItemPar));
    AddArrayItem( leaderPar.pText, -1, Addr(tLinePar), sizeof(tLinePar));
    ClearArray(tLinePar.pTextItem);

    StrCopy(ItemPar.s, '2');   //      
    AddArrayItem( tLinePar.pTextItem, -1, Addr(ItemPar), sizeof(ItemPar));
    AddArrayItem( leaderPar.pText, -1, Addr(tLinePar), sizeof(tLinePar));

  end  else
  begin
    leaderPar.pText := CreateArray( CHAR_STR_ARR, nil );     // TEXT_LINE_ARR -     

    StrCopy( ss, '00_1');
    AddArrayItem( leaderPar.pText, -1, Addr(ss), 5);
    StrCopy( ss, '00_2');
    AddArrayItem( leaderPar.pText, -1, Addr(ss), 5);
  end;

  leaderPar.pPolyline  :=CreateArray(POLYLINE_ARR,nil); // POLYLINE_ARR -      
  pPoly := CreateArray( POINT_ARR , nil);

  mPar.x := 10;
  mPar.y := 10;
  AddArrayItem( pPoly , -1, Addr(mPar), sizeof(mPar));
  AddArrayItem( leaderPar.pPolyline , -1, Addr(pPoly), sizeof(pPoly));

  mPar.x := 30;
  mPar.y := 10;
  ClearArray(pPoly);
  AddArrayItem( pPoly , -1, Addr(mPar), sizeof(mPar));
  AddArrayItem( leaderPar.pPolyline , -1, Addr(pPoly), sizeof(pPoly));


  p := PositionLeader( Addr(leaderPar) );
  ksMessage( '   ' );
  LightObj(p,1);
end;

//--------------------------------------------------------------------------------
//
//--------------------------------------------------------------------------------
procedure DrawBrandLeader;
var
  p: reference;
  leaderPar :BrandLeaderParam  ;
  tLinePar  : TextLineParam ;
  tFont     : TextItemFont;        //     
  ItemPar   : TextItemParam  ;    //    
  ss        : array[0..128] of char;
  pPoly     : reference;
  mPar      : MathPointParam ;

begin
  FillChar( leaderPar,  sizeof(leaderPar),0 );
  leaderPar.cText0:=1;    //      (  1 )0-  
  leaderPar.cText1:=1;    //      (  1 )0-  
  leaderPar.cText2:=1;    //      (  1 )0-  

  leaderPar.x:=50; leaderPar.y:=50;             //    (   )
  leaderPar.arrowType := 1; //  
  leaderPar.dirX:=-1;      //    X (1 - -1-)
  leaderPar.style1 := INDICATIN_TEXT_LINE_ARR;//     
//  leaderPar.style1 := 0;                    //     

  if ( leaderPar.style1 = INDICATIN_TEXT_LINE_ARR ) then
  begin
    tLinePar.style:=0;    //   
    tLinePar.pTextItem := CreateArray( TEXT_ITEM_ARR, nil );   //       

    FillChar( tFont, sizeof( tFont ),0 );

    ItemPar.tip   := 0;            // tip = SPECIAL_SYMBOL , FONT_SYMBOL, FRACTION_TYPE, SUM_TYPE   0
    ItemPar.font  := tFont;     //     
    ItemPar.iSNumb:= 0;        //  ,               0

    leaderPar.pText := CreateArray( TEXT_LINE_ARR, nil );     // TEXT_LINE_ARR -     

    StrCopy(ItemPar.s, '.11');   //      
    AddArrayItem( tLinePar.pTextItem, -1, Addr(ItemPar), sizeof(ItemPar));
    AddArrayItem( leaderPar.pText, -1, Addr(tLinePar), sizeof(tLinePar));
    ClearArray(tLinePar.pTextItem);

    StrCopy(ItemPar.s, '');   //      
    AddArrayItem( tLinePar.pTextItem, -1, Addr(ItemPar), sizeof(ItemPar));
    AddArrayItem( leaderPar.pText, -1, Addr(tLinePar), sizeof(tLinePar));
    ClearArray(tLinePar.pTextItem);

    StrCopy(ItemPar.s, '');   //      
    AddArrayItem( tLinePar.pTextItem, -1, Addr(ItemPar), sizeof(ItemPar));
    AddArrayItem( leaderPar.pText, -1, Addr(tLinePar), sizeof(tLinePar));

  end
  else begin
    leaderPar.pText := CreateArray(CHAR_STR_ARR, nil );     // TEXT_LINE_ARR -     

    StrCopy( ss, '.11');
    AddArrayItem( leaderPar.pText, -1, Addr(ss), 5);
    StrCopy( ss, '');
    AddArrayItem( leaderPar.pText, -1, Addr(ss), 3);
    StrCopy( ss, '');
    AddArrayItem( leaderPar.pText, -1, Addr(ss), 3);
  end;

  leaderPar.pPolyline  :=CreateArray(POLYLINE_ARR, nil); // POLYLINE_ARR -      
  pPoly := CreateArray( POINT_ARR , nil);

  leaderPar.pPolyline  :=CreateArray(POLYLINE_ARR,nil); // POLYLINE_ARR -      
  pPoly := CreateArray( POINT_ARR , nil);

  mPar.x := 10;
  mPar.y := 10;
  AddArrayItem( pPoly , -1, Addr(mPar), sizeof(mPar));
  AddArrayItem( leaderPar.pPolyline , -1, Addr(pPoly), sizeof(pPoly));

  mPar.x := 30;
  mPar.y := 10;
  ClearArray(pPoly);
  AddArrayItem( pPoly , -1, Addr(mPar), sizeof(mPar));
  AddArrayItem( leaderPar.pPolyline , -1, Addr(pPoly), sizeof(pPoly));



  p := BrandLeader( Addr(leaderPar) );
  ksMessage( '' );
  LightObj(p,1);
end;

//--------------------------------------------------------------------------------
//
//--------------------------------------------------------------------------------
procedure DrawMarkerLeader;
var
  p         : reference ;
  leaderPar : MarkerLeaderParam  ;
  tLinePar  : TextLineParam ;
  tFont     : TextItemFont  ;      //     
  ItemPar   : TextItemParam  ;    //    
  ss        : array[0..128] of char;
  pPoly     : reference ;
  mPar      : MathPointParam ;
begin

  FillChar(leaderPar,  sizeof(leaderPar), 0 );
  leaderPar.cText0:=1;    //      (  1 )0-  
  leaderPar.cText1:=1;    //      (  1 )0-  
  leaderPar.cText2:=1;    //      (  1 )0-  

  leaderPar.x:=50; leaderPar.y:=50;             //    (   )
  leaderPar.arrowType := 2; //  
//  leaderPar.style1 := INDICATIN_TEXT_LINE_ARR;//     
  leaderPar.style1 := 0;                    //     
  if ( leaderPar.style1 = INDICATIN_TEXT_LINE_ARR ) then
  begin
    tLinePar.style:=0;    //   
    tLinePar.pTextItem := CreateArray( TEXT_ITEM_ARR, nil );   //       

    FillChar( tFont, sizeof( tFont ), 0 );

    ItemPar.tip    :=0;        // tip = SPECIAL_SYMBOL , FONT_SYMBOL, FRACTION_TYPE, SUM_TYPE   0
    ItemPar.font   := tFont;   //     
    ItemPar.iSNumb :=0;        //  ,               0


    leaderPar.pText := CreateArray( TEXT_LINE_ARR, nil );     // TEXT_LINE_ARR -     

    StrCopy(ItemPar.s, '.11');   //      
    AddArrayItem( tLinePar.pTextItem, -1, Addr(ItemPar), sizeof(ItemPar));
    AddArrayItem( leaderPar.pText, -1, Addr(tLinePar), sizeof(tLinePar));
    ClearArray(tLinePar.pTextItem);

    StrCopy(ItemPar.s, '');   //      
    AddArrayItem( tLinePar.pTextItem, -1, Addr(ItemPar), sizeof(ItemPar));
    AddArrayItem( leaderPar.pText, -1, Addr(tLinePar), sizeof(tLinePar));
    ClearArray(tLinePar.pTextItem);

    StrCopy(ItemPar.s, '');   //      
    AddArrayItem( tLinePar.pTextItem, -1, Addr(ItemPar), sizeof(ItemPar));
    AddArrayItem( leaderPar.pText, -1, Addr(tLinePar), sizeof(tLinePar));

  end
  else begin
    leaderPar.pText := CreateArray(CHAR_STR_ARR, nil );     // TEXT_LINE_ARR -     

    StrCopy( ss, '.11');
    AddArrayItem( leaderPar.pText, -1, Addr(ss), 5);
    StrCopy( ss, '');
    AddArrayItem( leaderPar.pText, -1, Addr(ss), 3);
    StrCopy( ss, '');
    AddArrayItem( leaderPar.pText, -1, Addr(ss), 3);
  end;

  leaderPar.pPolyline  :=CreateArray(POLYLINE_ARR, nil); // POLYLINE_ARR -      
  pPoly := CreateArray( POINT_ARR , nil);

  leaderPar.pPolyline  :=CreateArray(POLYLINE_ARR,nil); // POLYLINE_ARR -      
  pPoly := CreateArray( POINT_ARR , nil);

  mPar.x := 10;
  mPar.y := 10;
  AddArrayItem( pPoly , -1, Addr(mPar), sizeof(mPar));
  AddArrayItem( leaderPar.pPolyline , -1, Addr(pPoly), sizeof(pPoly));

  mPar.x := 30;
  mPar.y := 10;
  ClearArray(pPoly);
  AddArrayItem( pPoly , -1, Addr(mPar), sizeof(mPar));
  AddArrayItem( leaderPar.pPolyline , -1, Addr(pPoly), sizeof(pPoly));


  p := MarkerLeader( Addr(leaderPar) );
  ksMessage( '' );
  LightObj(p,1);
end;

//--------------------------------------------------------------------------------
//
//---------------------------------------------------------------------------------
procedure DrawBase;
var
  p : reference;
  basePar : BaseParam;//   
begin
  FillChar( basePar, sizeof(basePar), 0 );
  basePar.x1 := 50; basePar.y1 :=50;        //    (   )
  basePar.x2 := 50; basePar.y2 :=30;        //    
  StrCopy( basePar.str, 'ABC');             // 

  p := Base( Addr(basePar) );
  ksMessage( ' ' );
  LightObj(p,1);
end;

//--------------------------------------------------------------------------------
//
//---------------------------------------------------------------------------------
procedure DrawCutLine;
var
 p      : reference;
 cutPar :CutLineParam;//   
 par    : MathPointParam ;

begin

  FillChar( cutPar, sizeof(cutPar), 0 );
  cutPar.right :=1;       //   0 / 1    
  StrCopy (cutPar.str, 'A$;1$' );             // 
  cutPar.x1 := 30;
  cutPar.y1 := 65;
  cutPar.x2 := 95;
  cutPar.y2 := 15;
  cutPar.pMathPoint := CreateArray(POINT_ARR, nil );      // POINT_ARR    .,  , .
  //  
  par.x:=50; par.y:=50;
  AddArrayItem( cutPar.pMathPoint, -1, Addr(par), sizeof(par));

  //   
  par.x:=50; par.y:=30;
  AddArrayItem( cutPar.pMathPoint, -1, Addr(par), sizeof(par));

  //  
  par.x:=80; par.y:=30;
  AddArrayItem( cutPar.pMathPoint, -1, Addr(par), sizeof(par));


  p := CutLine( Addr(cutPar) );
  LightObj(p,1);
  ksMessage( ' \' );
  LightObj(p,0);
end;

//------------------------------------------------------------------------------
//
// ---
procedure ShowDimD(str : PChar; param : pointer; t : integer);
var
  pTPar   : PDimText     ;
  pSPar   : PRDimSource  ;
  pDPar   : PRDimDrawing ;
  lDimPar : PRDimParam   ;
  buf     : string;
  count,i : Cardinal;
  s1 : array [0..128] of char;

begin
  pTPar := nil;
  pSPar := nil;
  pDPar := nil;

  case ( t ) of
    ALLPARAM : begin
      lDimPar :=  PRDimParam (param);
      pTPar := Addr(lDimPar^.tPar);
      pSPar := Addr(lDimPar^.sPar);
      pDPar := Addr(lDimPar^.dPar);
      end;
    DIM_TEXT_PARAM  : begin
      pTPar := PDimText(param);
      end;
    DIM_SOURSE_PARAM : begin
      pSPar := PRDimSource (param);
      end;
    DIM_DRAW_PARAM   : begin
      pDPar :=  PRDimDrawing (param);
      end;
  end;
  if ( pSPar <> nil) then
  begin
//       1
    buf := Format( '%s   xc=%3.2f yc=%3.2f\n rad=%3.2f',
                  [str, pSPar^.xc, pSPar^.yc, pSPar^.rad] );
    ksMessage( PChar(buf) );
  end;
  if( pDPar <> nil ) then
  begin
//             2
    buf := Format( '%s   pt1=%d pt2=%d textPos=%d psh =%d ang=%3.2f',
             [str, pDPar^.pt1, pDPar^.pt2, pDPar^.textPos, pDPar^.shelfDir, pDPar^.ang] );
    ksMessage( PChar(buf) );
  end;

  if( pTPar<>nil ) then
  begin
//                        3
    buf :='  ';
    if( pTPar^.pText <> 0 ) then
    begin
      count:=GetArrayCount( pTPar^.pText );
      for  i:=0 to count-1 do
      begin
        GetArrayItem( pTPar^.pText, i, Addr(s1), 128);   //   
        buf := buf + s1;
        buf := buf + ' ';
      end;
    end;

    ksMessage( PChar(buf) );
    buf := Format( '%s    sign=%d  bitFlag = %d ',
             [str, pTPar^.sign, pTPar^.bitFlag] );
    ksMessage( PChar(buf) );
  end;
end;

//-------------------------------------------------------------------------------
//
//-------------------------------------------------------------------------------
procedure DrawDiamDimt;
var
 p      : reference;
 linPar : RDimParam ;
 s      : array[0..128] of char;
 t      : integer;
 buf    : string;

begin
  Circle(50,50,70,1);
  Circle(30,30,20,1);

  FillChar( linPar, sizeof(linPar), 0 );
// 
  linPar.dPar.textPos   := 75; //   
  //   PREFIX,   auto-  ,TOLERANCE,
  //  auto-  ,UNIT,SUFFIX  - 4 
  linPar.tPar.bitFlag := _AUTONOMINAL or _PREFIX or _TOLERANCE or _DEVIATION or _UNIT or _SUFFIX;
//  linPar.tPar.bitFlag = _AUTONOMINAL;

  linPar.tPar.pText := CreateArray( CHAR_STR_ARR , nil);
  StrCopy( s, 'prefix' );
  AddArrayItem( linPar.tPar.pText, -1, Addr(s), 8);
  StrCopy( s, 'h12' );
  AddArrayItem( linPar.tPar.pText, -1, Addr(s), 8);
  StrCopy( s, 'mm' );
  AddArrayItem( linPar.tPar.pText, -1, Addr(s), 5);
  StrCopy( s, 'sufix' );
  AddArrayItem( linPar.tPar.pText, -1, Addr(s), 6);
  linPar.tPar.sign := 0;

//   
  linPar.sPar.xc := 50; linPar.sPar.yc := 50; //
  linPar.sPar.rad := 70;

//     
  linPar.dPar.pt1 := 2;            //    1-   0-  1-  2  3 - 4 - 
  linPar.dPar.pt2 := 2;            //    2-  

//  
  linPar.dPar.shelfDir   := 1; // 
  linPar.dPar.ang        := -30; //  

 p := DiamDimension( Addr(linPar) );//  
 ShowDimD(' ', Addr(linPar), ALLPARAM );

 // 
  linPar.dPar.textPos   := 0; //   
  //   PREFIX,   auto-  ,TOLERANCE,
  //  auto-  ,UNIT,SUFFIX  - 4 
  linPar.tPar.bitFlag := _AUTONOMINAL or _PREFIX or _TOLERANCE or _UNIT or _SUFFIX;
//  linPar.tPar.bitFlag := _AUTONOMINAL;

  linPar.tPar.pText := CreateArray( CHAR_STR_ARR , nil);
  StrCopy( s, 'prefix' );
  AddArrayItem( linPar.tPar.pText, -1, Addr(s), 8);
  StrCopy( s, 'h12' );
  AddArrayItem( linPar.tPar.pText, -1, Addr(s), 8);
  StrCopy( s, 'mm' );
  AddArrayItem( linPar.tPar.pText, -1, Addr(s), 5);
  StrCopy( s, 'sufix' );
  AddArrayItem( linPar.tPar.pText, -1, Addr(s), 6);
  linPar.tPar.sign := 0;

//   
  linPar.sPar.xc := 30; linPar.sPar.yc := 30; //
  linPar.sPar.rad := 20;

//     
  linPar.dPar.pt1 := 1;            //    1-   0-  1-  2  3 - 4 - 
  linPar.dPar.pt2 := 1;            //    2-  

//  
  linPar.dPar.shelfDir   := 0; // 
  linPar.dPar.ang        := 30; //  


 //////////////////////////////////////////////////
  ShowDimD(' ' ,Addr(linPar), ALLPARAM );

  SetObjParam(  p,   //   
                Addr(linPar),  //   
                sizeof(linPar),   //  
                ALLPARAM ); //  



 FillChar( linPar, sizeof(linPar), 0 );
 if( ExistObj(p)>0 ) then
 begin
   t := GetObjParam(  p,   //   
                      Addr(linPar),  //   
                      sizeof(RDimParam),   //  
                      SHEET_ALLPARAM ); //  
   buf := Format('  tip= %d',[t] );
   ksMessage( PChar(buf) );
   ShowDimD('', Addr(linPar), ALLPARAM );
 end;
end;

//-------------------------------------------------------------------------------
//
//-------------------------------------------------------------------------------
procedure			DrawRadDimt;
var
  p      : reference ;
  linPar : RDimParam ;
  s      : array[0..128] of char;
  t      : integer;
  buf    : string;

begin
  Circle(50,50,70,1);
  Circle(30,30,30,1);

  FillChar(linPar, sizeof(linPar), 0 );
  // 
  //   PREFIX,   auto-  ,TOLERANCE,
  //  auto-  ,UNIT,SUFFIX  - 4 
  linPar.tPar.bitFlag := _AUTONOMINAL or _PREFIX or _TOLERANCE or _DEVIATION or _UNIT or _SUFFIX;
//  linPar.tPar.bitFlag = _AUTONOMINAL;

  linPar.tPar.pText := CreateArray( CHAR_STR_ARR , nil);
  StrCopy( s, 'prefix' );
  AddArrayItem( linPar.tPar.pText, -1, Addr(s), 8);
  StrCopy( s, 'h12' );
  AddArrayItem( linPar.tPar.pText, -1, Addr(s), 8);
  StrCopy( s, 'mm' );
  AddArrayItem( linPar.tPar.pText, -1, Addr(s), 5);
  StrCopy( s, 'sufix' );
  AddArrayItem( linPar.tPar.pText, -1, Addr(s), 6);
  linPar.tPar.sign := 0;

//    
  linPar.sPar.xc := 50; linPar.sPar.yc := 50; //
  linPar.sPar.rad := 70;
//    
  linPar.dPar.textPos   := 75; //   
  linPar.dPar.pt1       := 2;            //    0-  1-  2  3 - 4 - 
  linPar.dPar.pt2       := 1;            //     0- 

  linPar.dPar.shelfDir  := 1;  //  
  linPar.dPar.ang       := 30; //  

  p := RadDimension( Addr(linPar) );//  
  ShowDimD(' ', Addr(linPar), ALLPARAM );
///////////////////////////////////////////////////////////////////////////////

// 
  linPar.dPar.textPos   := 0; //   
  //   PREFIX,   auto-  ,TOLERANCE,
  //  auto-  ,UNIT,SUFFIX  - 4 
  linPar.tPar.bitFlag := _AUTONOMINAL;

  linPar.tPar.pText := 0;//CreateArray(CHAR_STR_ARR ,0);
  linPar.tPar.sign  := 0;

//   
  linPar.sPar.xc  := 30; linPar.sPar.yc := 30; //   1 -  
  linPar.sPar.rad := 30;
//     
  linPar.dPar.pt1 := 1;            //    1-   0-  1-  2  3 - 4 - 
  linPar.dPar.pt2 := 0;            //     0- 

//  
  linPar.dPar.shelfDir   := 0;  // 
  linPar.dPar.ang   := 30; //  
//ALLPARAM  DIM_SOURSE_PARAM  DIM_DRAW_PARAM  DIM_TEXT_PARAM
//////////////////////////////////////////////////
 ShowDimD(' ' ,Addr(linPar.sPar), DIM_SOURSE_PARAM );

   SetObjParam(  p,   //   
                Addr(linPar.sPar),  //   
                sizeof(linPar.sPar),   //  
                DIM_SOURSE_PARAM  ); //  


  FillChar( linPar, sizeof(linPar), 0 );
  if( ExistObj(p)>0 ) then
  begin
    t := GetObjParam(  p,   //   
                       Addr(linPar),  //   
                       sizeof(RDimParam),   //  
                       SHEET_ALLPARAM ); //  
    buf := Format('  tip= %d',[t] );
    ksMessage( PChar(buf) );
    ShowDimD('', Addr(linPar), ALLPARAM );
  end;
end;


//-------------------------------------------------------------------------------
//
//-------------------------------------------------------------------------------
procedure	DrawRadBreakDimt;
var
  p      : reference ;
  linPar : RBreakDimParam ;
  s      : array[0..128] of char;
  t      : integer;
  buf    : string;
//------------------------------------------------------------------------------
procedure  ShowDimRBreak( str : PChar; param : pointer; t : integer);
var
  pTPar   : PDimText        ;
  pSPar   : PRDimSource     ;
  pDPar   : PRBreakDrawing  ;
  lDimPar : PRBreakDimParam;
  buf     : string;
  count,i : Cardinal;
  s1      : array [0..128] of char;

begin

  pTPar := nil;
  pSPar := nil;
  pDPar := nil;

  case ( t ) of
    ALLPARAM : begin
      lDimPar :=  PRBreakDimParam (param);
      pTPar := Addr(lDimPar^.tPar);
      pSPar := Addr(lDimPar^.sPar);
      pDPar := Addr(lDimPar^.dPar);
    end;
    DIM_TEXT_PARAM : begin
      pTPar := PDimText (param);
      end;
    DIM_SOURSE_PARAM : begin
      pSPar := PRDimSource (param);
      end;
    DIM_DRAW_PARAM  : begin
      pDPar :=  PRBreakDrawing (param);
      end;
  end;
  if ( pSPar <> nil ) then
  begin
//       1
    buf := Format( '%s   xc=%3.2f yc=%3.2f rad=%3.2f',
                   [str, pSPar^.xc, pSPar^.yc, pSPar^.rad] );
    ksMessage( PChar(buf) );
  end;
  if( pDPar <> nil ) then
  begin
//             2
    buf := Format( '%s    pt=%d pb=%d ang=%3.2f',
                   [str, pDPar^.pt, pDPar^.pb, pDPar^.ang] );
    ksMessage( PChar(buf) );
  end;
  if( pTPar<>nil ) then
  begin
//                        3
    buf :='  ';
    if( pTPar^.pText <> 0 ) then
    begin
      count:=GetArrayCount( pTPar^.pText );
      for  i:=0 to count-1 do
      begin
        GetArrayItem( pTPar^.pText, i, Addr(s1), 128);   //   
        buf := buf + s1;
        buf := buf + ' ';
      end;
    end;

    ksMessage( PChar(buf) );
    buf := Format( '%s    sign=%d  bitFlag = %d ',
             [str, pTPar^.sign, pTPar^.bitFlag] );
    ksMessage( PChar(buf) );
  end;
end;

begin
  Circle(50,50,70,1);
  Circle(30,30,30,1);

  FillChar( linPar, sizeof(linPar), 0 );
  // 
  //   PREFIX,   auto-  ,TOLERANCE,
  //  auto-  ,UNIT,SUFFIX  - 4 
  linPar.tPar.bitFlag := _AUTONOMINAL or _PREFIX or _TOLERANCE or _DEVIATION or _UNIT or _SUFFIX;
//  linPar.tPar.bitFlag = _AUTONOMINAL;

  linPar.tPar.pText := CreateArray( CHAR_STR_ARR , nil);
  StrCopy( s, 'prefix' );
  AddArrayItem( linPar.tPar.pText, -1, Addr(s), 8);
  StrCopy( s, 'h12' );
  AddArrayItem( linPar.tPar.pText, -1, Addr(s), 8);
  StrCopy( s, 'mm' );
  AddArrayItem( linPar.tPar.pText, -1, Addr(s), 5);
  StrCopy( s, 'sufix' );
  AddArrayItem( linPar.tPar.pText, -1, Addr(s), 6);
  linPar.tPar.sign := 0;


// 
  linPar.sPar.xc := 50; linPar.sPar.yc := 50; //
  linPar.sPar.rad := 70;

// 
  linPar.dPar.pt  := 2;          //    0-  1-  2  3 - 4 - 
  linPar.dPar.ang := 30;         // 
  linPar.dPar.pb := 20;          //  

  p := RadBreakDimension( Addr(linPar) );//  
  ShowDimRBreak(' ', Addr(linPar), ALLPARAM );
//////////////////////////////////////////////////////////////////////////////
// 
  //   PREFIX,   auto-  ,TOLERANCE,
  //  auto-  ,UNIT,SUFFIX  - 4 
  linPar.tPar.bitFlag := _AUTONOMINAL;

  linPar.tPar.pText := 0;//CreateArray(CHAR_STR_ARR ,0);
  linPar.tPar.sign := 0;

//   
  linPar.sPar.xc  := 30; linPar.sPar.yc := 30; //   1 -  
  linPar.sPar.rad := 30;
//     
  linPar.dPar.pt  := 1;         //    1-   0-  1-  2  3 - 4 - 
  linPar.dPar.ang := 30;        // 
  linPar.dPar.pb  := 10;        //  
// ALLPARAM DIM_SOURSE_PARAM DIM_DRAW_PARAM DIM_TEXT_PARAM
//////////////////////////////////////////////////////////////////////////////
  ShowDimRBreak(' ' ,Addr(linPar.dPar), DIM_DRAW_PARAM);

  SetObjParam(  p,   //   
                Addr(linPar.dPar),  //   
                sizeof(linPar.dPar),   //  
                DIM_DRAW_PARAM ); //  


  FillChar( linPar, sizeof(linPar), 0 );
  if( ExistObj(p)>0 ) then
  begin
    t := GetObjParam(  p,   //   
                       Addr(linPar),  //   
                       sizeof(RDimParam),   //  
                       SHEET_ALLPARAM ); //  
    buf := Format('  tip= %d',[t] );
    ksMessage( PChar(buf) );
    ShowDimD('', Addr(linPar), ALLPARAM );
  end;


end;

//-------------------------------------------------------------------------------
//
//-------------------------------------------------------------------------------
procedure		DrawViewPointer;
var
  p       : reference;
  vpParam : ViewPointerParam;
  ItemPar : TextItemParam  ;    //    

begin

  FillChar( vpParam, sizeof(vpParam), 0 );
  vpParam.x1 := 50; vpParam.y1 := 50;             //  ( ) 
  vpParam.x2 := 20; vpParam.y2 := 50;             //    
  vpParam.xt := 25; vpParam.yt := 55;             //  
  vpParam._type := 1;
  if ( vpParam._type = 0 ) then
//  vpParam.type = 0
    StrCopy( vpParam.str,'AAA')                    // 
  else begin
//  vpParam.type = 1
    vpParam.pTextItem := CreateArray( TEXT_ITEM_ARR, nil );
    FillChar( ItemPar,  sizeof( ItemPar ), 0 );
    StrCopy(ItemPar.s,'AAA');   //      
    AddArrayItem( vpParam.pTextItem, -1, Addr(ItemPar), sizeof(ItemPar));
  end;
  p := ViewPointer( Addr(vpParam) );//  
  ksMessage( ' ' );
  LightObj(p,1);
end;

end.
