unit kgAXForm;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls, ExtCtrls, OleCtrls, KGAXLib_TLB, ksTlb, LDefin2d, LDefin3d;

type
  TForm1 = class(TForm)
    Panel1: TPanel;
    Button1: TButton;
    Button2: TButton;
    RadioGroup1: TRadioGroup;
    KGAX1: TKGAX;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure RadioGroup1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.Button1Click(Sender: TObject);
  var
    iKompas              : KompasObject;
    iDoc                 : ksDocument3D;
    iPart                : ksPart;
    iSketchEntity        : ksEntity;
    iSketchDef           : ksSketchDefinition;
    iPlaneEntity         : ksEntity;
    iSketchDocument2D    : ksDocument2D;
    iBaseExtrusionEntity : ksEntity;
    iBaseExtrusionDef    : ksBaseExtrusionDefinition;
    iSketch2Entity       : ksEntity;
    iSketch2Def          : ksSketchDefinition;
    iSketch2Document2D   : ksDocument2D;
    iBossExtrusion       : ksEntity;
    iBossExtrusionDef    : ksBossExtrusionDefinition;
    iExtrusionProperty   : ksExtrusionParam;
    iThinProperty        : ksThinParam;
begin
  iKompas := KompasObject(KGAX1.GetKompasObject);
	iDoc    := ksDocument3D( iKompas.ActiveDocument3D );
//  iKompas.ksMessage( '  ' );

 iPart := ksPart(iDoc.GetPart( pNew_Part )); //  

  if iPart <> nil then
  begin

    iSketchEntity := ksEntity( iPart.NewEntity( o3d_sketch ));

    if iSketchEntity <> nil then
    begin
      //   
      iSketchDef := ksSketchDefinition(iSketchEntity.GetDefinition);

      if iSketchDef <> nil then
      begin
        //   XOY
        iPlaneEntity := ksEntity(iPart.GetDefaultEntity( o3d_planeXOY ));

        if iPlaneEntity <> nil then
        begin
          iSketchDef.SetPlane( iPlaneEntity ); //   XOY   
  	      iSketchDef.Angle := 45; //   
          iSketchEntity.Create; //  
          //   
          iSketchDocument2D := ksDocument2D(iSketchDef.BeginEdit);

          if iSketchDocument2D <> nil then
          begin
            //    - 
            iSketchDocument2D.ksLineSeg(  50,  50, -50,  50, 1 );
	          iSketchDocument2D.ksLineSeg(  50, -50, -50, -50, 1 );
            iSketchDocument2D.ksLineSeg(  50, -50,  50,  50, 1 );
	          iSketchDocument2D.ksLineSeg( -50, -50, -50,  50, 1 );
	          iSketchDef.EndEdit; //   

	          iBaseExtrusionEntity := ksEntity(iPart.NewEntity( o3d_baseExtrusion ));

            if iBaseExtrusionEntity <> nil then
            begin
              //     
              iBaseExtrusionDef := ksBaseExtrusionDefinition(iBaseExtrusionEntity.GetDefinition);

              if iBaseExtrusionDef <> nil then
              begin
            		iBaseExtrusionDef.DirectionType := dtNormal; //  
            		iBaseExtrusionDef.SetSideParam( true,        // 
                                                etBlind ,    //   
                                                200, 0, false );
	              iBaseExtrusionDef.SetThinParam( true, dtBoth, 10, 10 ); //     
		            iBaseExtrusionDef.SetSketch( iSketchEntity ); //   
		            iBaseExtrusionEntity.Create; //  

//                iKompas.ksMessage( '   ' );

                iBaseExtrusionDef.SetSideParam( false, // 
                                                etBlind, //  
                                                150, 0, false );
		            iBaseExtrusionDef.DirectionType := dtBoth; //   (    )
		            iBaseExtrusionEntity.Update; //  


//                iKompas.ksMessage( '  ' );

              	//   
		            iSketch2Entity := ksEntity(iPart.NewEntity( o3d_sketch ));

                if iSketch2Entity <> nil then
                begin
                  //   
                  iSketch2Def := ksSketchDefinition(iSketch2Entity.GetDefinition);

                  if iSketch2Def <> nil then
                  begin
                    iSketch2Def.SetPlane( iPlaneEntity ); //  
            		    iSketch2Def.Angle := 45; //    45 .
		                iSketch2Entity.Create; //  

                    //   
		                iSketch2Document2D := ksDocument2D(iSketch2Def.BeginEdit);
		                iSketch2Document2D.ksCircle( 0, 0, 150, 1 );
		                iSketch2Def.EndEdit; //   

                    //  
		                iBossExtrusion := ksEntity(iPart.NewEntity( o3d_bossExtrusion ));

                    if iBossExtrusion <> nil then
                    begin
                      iBossExtrusionDef := ksBossExtrusionDefinition(iBossExtrusion.GetDefinition);

		                  if iBossExtrusionDef <> nil then
                      begin
		      	            iExtrusionProperty := ksExtrusionParam(iBossExtrusionDef.ExtrusionParam); //    
		                    iThinProperty := ksThinParam(iBossExtrusionDef.ThinParam); //     

		      	            if (iExtrusionProperty <> nil) and (iThinProperty <> nil ) then
                        begin
   		      	            iBossExtrusionDef.SetSketch( iSketch2Entity ); //   
                          iExtrusionProperty.Direction := dtNormal; //   ()
			                    iExtrusionProperty.TypeNormal := etBlind; //   (    )
			                    iExtrusionProperty.DepthNormal := 100; //  
                          iThinProperty.Thin := false; //   

                          iBossExtrusion.Create; //  
                        end;
                      end;
                    end;
                  end;
                end;
              end;
            end;
          end;
        end;
      end;
    end;
  end;
  KGAX1.ZoomEntireDocument();

end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  KGAX1.ZoomEntireDocument();
end;

procedure TForm1.RadioGroup1Click(Sender: TObject);
begin
  KGAX1.Document3DDrawMode := RadioGroup1.ItemIndex;
end;

end.
