unit Step3D11;

interface



  procedure  LIBRARYENTRY( command: WORD  ); Pascal;
  function   LIBRARYID   : Cardinal;         Pascal;
  function   LIBRARYNAME : PChar; pascal;
implementation
uses
  Windows,
  SysUtils,
  LDefin2D,
  LDefin3D,
  ksConstTLB,
  ksAuto,
{$IFDEF __LIGHT_VERSION__}
  klTLB;
{$ELSE}
  ksTLB;
{$ENDIF}

var
  iKompasObject: KompasObject;
  iDocument3D: ksDocument3D;

//------------------------------------------------------------------------------
//      
//-
procedure ClearCurrentSketch( value: ksDocument2D );
var
  iIterator: ksIterator;
  obj: Reference;

begin
  //         
  iIterator := ksIterator(iKompasObject.GetIterator);

  if iIterator <> nil then
  begin
    if iIterator.ksCreateIterator(ALL_OBJ, 0) then
    begin
      obj := iIterator.ksMoveIterator( 'F' ); //     

      while BOOL(value.ksExistObj(obj)) do
      begin
      	value.ksDeleteObj( obj ); //     
        obj := iIterator.ksMoveIterator( 'N' ); //       
      end;

      iIterator.ksDeleteIterator; //  
    end;
  end;
end;

//------------------------------------------------------------------------------
//  
//-
procedure OperationExtrusion();
var
  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;
  iSketch3Entity: ksEntity;
  iSketch3Def: ksSketchDefinition;
  iSketch3Document2D: ksDocument2D;
  iCutExtrusion: ksEntity;
  iCutExtrusionDef: ksCutExtrusionDefinition;

begin
  iKompasObject.ksMessage( '  ' );

  iPart := ksPart(iDocument3D.GetPart( pTop_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; //  

                iKompasObject.ksMessage( '   ' );

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

                iKompasObject.ksMessage( ' ' );

                iSketchDocument2D := nil;
                iSketchDocument2D := ksDocument2D(iSketchDef.BeginEdit);
                //      
                ClearCurrentSketch( iSketchDocument2D );
                //    
                iSketchDocument2D.ksCircle( 0, 0, 100, 1 );
                iSketchDef.EndEdit; //   
                iSketchEntity.Update; //   
                iBaseExtrusionEntity.Update; //    

                iKompasObject.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;

               iKompasObject.ksMessage( '  ' );
                //   
                iSketch3Entity := ksEntity(iPart.NewEntity( o3d_sketch ));

                if iSketch3Entity <> nil then
                begin
                  //   
                  iSketch3Def := ksSketchDefinition(iSketch3Entity.GetDefinition);

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

                    //   
                    iSketch3Document2D := ksDocument2D( iSketch3Def.BeginEdit );
                    //    - 
                    iSketch3Document2D.ksLineSeg(  50,  50, -50,  50, 1 );
                    iSketch3Document2D.ksLineSeg(  50, -50, -50, -50, 1 );
                    iSketch3Document2D.ksLineSeg(  50, -50,  50,  50, 1 );
                    iSketch3Document2D.ksLineSeg( -50, -50, -50,  50, 1 );
                    iSketch3Def.EndEdit; //   

                    //  
                    iCutExtrusion := ksEntity(iPart.NewEntity( o3d_cutExtrusion ));

                    if iCutExtrusion <> nil then
                    begin
                      iCutExtrusionDef := ksCutExtrusionDefinition(iCutExtrusion.GetDefinition);

                      if iCutExtrusionDef <> nil then
                      begin
		                    iCutExtrusionDef.SetSketch( iSketch3Entity ); //   
                        iCutExtrusionDef.DirectionType := dtReverse;
                        iCutExtrusionDef.SetSideParam( false, etBlind, 50, 0, false );
                        iCutExtrusionDef.SetThinParam( false, 0, 0, 0 );
                      end;

                    iCutExtrusion.Create; //    
                    end;
                  end;
                end;
              end;
            end;
          end;
        end;
      end;
    end;
  end;
end;

//------------------------------------------------------------------------------
//  
//-
procedure OperationRotated;
var
  iPart: ksPart;
  iSketchEntity: ksEntity;
  iSketchDef: ksSketchDefinition;
  iPlaneEntity: ksEntity;
  iSketchDocument2D: ksDocument2D;
  iBaseRotatedEntity: ksEntity;
  iBaseRotatedDef: ksBaseRotatedDefinition;
  iRotatedProperty: ksRotatedParam;
  iSketch2Entity: ksEntity;
  iSketch2Def: ksSketchDefinition;
  iSketch2Document2D: ksDocument2D;
  iBossRotatedEntity: ksEntity;
  iBossRotatedDef: ksBossRotatedDefinition;
  iSketch3Entity: ksEntity;
  iSketch3Def: ksSketchDefinition;
  iSketch3Document2D: ksDocument2D;
  iCutRotatedEntity: ksEntity;
  iCutRotatedDef: ksCutRotatedDefinition;

begin
  iKompasObject.ksMessage( '  ' );

  iPart := ksPart(iDocument3D.GetPart( pTop_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   
          iSketchEntity.Create; //  
          //   
          iSketchDocument2D := ksDocument2D(iSketchDef.BeginEdit);

          if iSketchDocument2D <> nil then
          begin
            //   
            iSketchDocument2D.ksArcByAngle( 0, 0, 20, -90, 90, 1, 1 );
	    iSketchDocument2D.ksLineSeg( 0, -20, 0, 20, 3 );
	    iSketchDef.EndEdit; //   
          end;

          iBaseRotatedEntity := ksEntity(iPart.NewEntity( o3d_baseRotated ));

          if iBaseRotatedEntity <> nil then
          begin
            iBaseRotatedDef := ksBaseRotatedDefinition(iBaseRotatedEntity.GetDefinition); //    

	    if iBaseRotatedDef <> nil then
            begin
     	      iRotatedProperty := ksRotatedParam(iBaseRotatedDef.RotatedParam);

	      if iRotatedProperty <> nil then
              begin
	      	iRotatedProperty.Direction := dtBoth;
	      	iRotatedProperty.ToroidShape := false;
	      end;

              //iBaseRotatedDef.SetTorShapeType(false);
              //iBaseRotatedDef.SetDirectionType( dtNormal ); //  
	      iBaseRotatedDef.SetThinParam( true, dtBoth, 1, 1 ); //     
	      iBaseRotatedDef.SetSideParam( true, 180 );
	      iBaseRotatedDef.SetSketch( iSketchEntity ); //   
	      iBaseRotatedEntity.Create; //  
            end;
	  end;
        end;
      end;
    end;

    iKompasObject.ksMessage( '  ' );

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

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

      if iSketch2Def <> nil then
      begin
        iSketch2Def.SetPlane( iPlaneEntity ); //   XOY   
        iSketch2Entity.Create; //  
        //   
        iSketch2Document2D := ksDocument2D(iSketch2Def.BeginEdit);

        if iSketch2Document2D <> nil then
        begin
          //   
          iSketch2Document2D.ksArcByAngle( 15, 0, 10, -90, 90, 1, 1 );
          iSketch2Document2D.ksLineSeg( 15, -10, 15, 10, 3 );
          iSketch2Def.EndEdit; //   
        end;

        iBossRotatedEntity := ksEntity(iPart.NewEntity( o3d_bossRotated ));

        if iBossRotatedEntity <> nil then
        begin
          iBossRotatedDef := ksBossRotatedDefinition(iBossRotatedEntity.GetDefinition); //    

 	  if iBossRotatedDef <> nil then
          begin
            iBossRotatedDef.DirectionType := dtNormal;
	    iBossRotatedDef.SetSideParam( true, 360 );
	    iBossRotatedDef.SetSketch( iSketch2Entity ); //   
	    iBossRotatedEntity.Create; //  
	  end;
	end;
      end;
    end;

    iKompasObject.ksMessage( '  ' );

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

    if iSketch3Entity <> nil then
    begin
      //   
      iSketch3Def := ksSketchDefinition(iSketch3Entity.GetDefinition);

      if iSketch3Def <> nil then
      begin
        iSketch3Def.SetPlane( iPlaneEntity ); //   XOY   
        iSketch3Entity.Create; //  
        //   
        iSketch3Document2D := ksDocument2D(iSketch3Def.BeginEdit);

        if iSketch3Document2D <> nil then
        begin
          //   
	  iSketch3Document2D.ksArcByAngle( 20, 0, 20, 90, 270, 1, 1 );
	  iSketch3Document2D.ksLineSeg( 20, -20, 20, 20, 3 );
          iSketch3Def.EndEdit; //   
        end;

        iCutRotatedEntity := ksEntity(iPart.NewEntity( o3d_cutRotated ));

        if iCutRotatedEntity <> nil then
        begin
          iCutRotatedDef := ksCutRotatedDefinition(iCutRotatedEntity.GetDefinition); //    

 	  if iCutRotatedDef <> nil then
          begin
            iCutRotatedDef.DirectionType := dtNormal;
            iCutRotatedDef.SetSideParam( true, 90 );
            iCutRotatedDef.SetThinParam( true, dtBoth, 5, 7 ); //     
            iCutRotatedDef.SetSketch( iSketch3Entity ); //   
            iCutRotatedEntity.Create; //  
	  end;
	end;
      end;
    end;
  end;
end;

//------------------------------------------------------------------------------
//  
//-
procedure OperationLoft;
var
  iPart: ksPart;
  iPlaneEntity: ksEntity;
  iEntityCollection: ksEntityCollection;
  iRectangleParam: ksRectangleParam;
  iOffsetPlaneEntity: ksEntity;
  iOffsetPlaneDef: ksPlaneOffsetDefinition;
  iBaseLoftEntry: ksEntity;
  iBaseLoftDef: ksBaseLoftDefinition;
  iBossLoftEntity: ksEntity;
  iBossLoftDef: ksBossLoftDefinition;
  iCutLoftEntity: ksEntity;
  iCutLoftDef: ksCutLoftDefinition;
  iSketchDef: ksSketchDefinition;
  iSketchDocument2D: ksDocument2D;
  iSketch1Entity: ksEntity;
  iSketch2Entity: ksEntity;
  iSketch3Entity: ksEntity;
  iSketch4Entity: ksEntity;
  iSketch5Entity: ksEntity;
  iSketch6Entity: ksEntity;

begin
  iKompasObject.ksMessage( '  ' );

  iPart := ksPart(iDocument3D.GetPart( pTop_Part )); //  

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

    if iPlaneEntity <> nil then
    begin
      iSketch1Entity := ksEntity( iPart.NewEntity( o3d_sketch ));

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

        if iSketchDef <> nil then
        begin
          iSketchDef.SetPlane( iPlaneEntity ); //   XOY   
          iSketch1Entity.Create; //  

          //   
          iSketchDocument2D := ksDocument2D(iSketchDef.BeginEdit);

          if iSketchDocument2D <> nil then
          begin
            //   
            iSketchDocument2D.ksCircle( 0, 0, 4.5, 1 );
 	    iSketchDef.EndEdit; //   
          end;
        end;
      end;

      //   ,    
      iOffsetPlaneEntity := ksEntity(iPart.NewEntity( o3d_planeOffset ));

      if iOffsetPlaneEntity <> nil then
      begin
        //    
        iOffsetPlaneDef := ksPlaneOffsetDefinition(iOffsetPlaneEntity.GetDefinition);

        if iOffsetPlaneDef <> nil then
        begin
          iOffsetPlaneDef.Offset := 30; //    
          iOffsetPlaneDef.SetPlane( iPlaneEntity ); //  
          iOffsetPlaneEntity.Name := '  1'; //    
          iOffsetPlaneEntity.Hidden := true;
          iOffsetPlaneEntity.Create; //   

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

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

            if iSketchDef <> nil then
            begin
              iSketchDef.SetPlane( iOffsetPlaneEntity ); //   XOY   
              iSketch2Entity.Create; //  

              //   
              iSketchDocument2D := ksDocument2D(iSketchDef.BeginEdit);

              if iSketchDocument2D <> nil then
              begin
                //   
                iSketchDocument2D.ksCircle( 0, 0, 8, 1 );
                iSketchDef.EndEdit; //   
              end;
            end;
          end;
        end;
      end;

      //   ,    
      iOffsetPlaneEntity := ksEntity(iPart.NewEntity( o3d_planeOffset ));

      if iOffsetPlaneEntity <> nil then
      begin
        //    
        iOffsetPlaneDef := ksPlaneOffsetDefinition(iOffsetPlaneEntity.GetDefinition);

        if iOffsetPlaneDef <> nil then
        begin
          iOffsetPlaneDef.Offset := 60; //    
          iOffsetPlaneDef.SetPlane( iPlaneEntity ); //  
          iOffsetPlaneEntity.Name := '  2'; //    
          iOffsetPlaneEntity.Hidden := true;
          iOffsetPlaneEntity.Create; //   

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

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

            if iSketchDef <> nil then
            begin
              iSketchDef.SetPlane( iOffsetPlaneEntity ); //   XOY   
              iSketch3Entity.Create; //  

              //   
              iSketchDocument2D := ksDocument2D(iSketchDef.BeginEdit);

              if iSketchDocument2D <> nil then
              begin
                //   
                iSketchDocument2D.ksCircle( 0, 0, 1.8, 1 );
                iSketchDef.EndEdit; //   
              end;
            end;
          end;
        end;
      end;

      //   ,    
      iOffsetPlaneEntity := ksEntity(iPart.NewEntity( o3d_planeOffset ));

      if iOffsetPlaneEntity <> nil then
      begin
        //    
        iOffsetPlaneDef := ksPlaneOffsetDefinition(iOffsetPlaneEntity.GetDefinition);

        if iOffsetPlaneDef <> nil then
        begin
          iOffsetPlaneDef.Offset := 120; //    
          iOffsetPlaneDef.SetPlane( iPlaneEntity ); //  
          iOffsetPlaneEntity.Name := '  3'; //    
          iOffsetPlaneEntity.Hidden := true;
          iOffsetPlaneEntity.Create; //   

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

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

            if iSketchDef <> nil then
            begin
              iSketchDef.SetPlane( iOffsetPlaneEntity ); //   XOY   
              iSketch4Entity.Create; //  

              //   
              iSketchDocument2D := ksDocument2D(iSketchDef.BeginEdit);

              if iSketchDocument2D <> nil then
              begin
                //   
                iSketchDocument2D.ksCircle( 0, 0, 1.8, 1 );
                iSketchDef.EndEdit; //   
              end;
            end;
          end;

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

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

            if iSketchDef <> nil then
            begin
              iSketchDef.SetPlane( iOffsetPlaneEntity ); //   XOY   
              iSketch5Entity.Create; //  

              //   
              iSketchDocument2D := ksDocument2D(iSketchDef.BeginEdit);

              if iSketchDocument2D <> nil then
              begin
                //   
                iRectangleParam := ksRectangleParam(iKompasObject.GetParamStruct(ko_RectangleParam));
                iRectangleParam.Init;
                iRectangleParam.X := -1.8;
                iRectangleParam.Y := -0.4;
                iRectangleParam.Height := 0.8;
                iRectangleParam.Width := 3.6;
                iRectangleParam.Style := 1;

                iSketchDocument2D.ksRectangle( iRectangleParam, 0 );

                iSketchDef.EndEdit; //   
              end;  
            end;
          end;
        end;
      end;

      //   ,    
      iOffsetPlaneEntity := ksEntity(iPart.NewEntity( o3d_planeOffset ));

      if iOffsetPlaneEntity <> nil then
      begin
        //    
        iOffsetPlaneDef := ksPlaneOffsetDefinition(iOffsetPlaneEntity.GetDefinition);

        if iOffsetPlaneDef <> nil then
        begin
          iOffsetPlaneDef.Offset := 110; //    
          iOffsetPlaneDef.SetPlane( iPlaneEntity ); //  
          iOffsetPlaneEntity.Name := '  4'; //    
          iOffsetPlaneEntity.Hidden := true;
          iOffsetPlaneEntity.Create; //   

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

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

            if iSketchDef <> nil then
            begin
              iSketchDef.SetPlane( iOffsetPlaneEntity ); //   XOY   
              iSketch6Entity.Create; //  

              //   
              iSketchDocument2D := ksDocument2D(iSketchDef.BeginEdit);

              if iSketchDocument2D <> nil then
              begin
                //   
                iRectangleParam := ksRectangleParam(iKompasObject.GetParamStruct(ko_RectangleParam));
                iRectangleParam.Init;
                iRectangleParam.X := -1.8;
                iRectangleParam.Y := -1.8;
                iRectangleParam.Height := 3.6;
                iRectangleParam.Width := 3.6;
                iRectangleParam.Style := 1;

                iSketchDocument2D.ksRectangle( iRectangleParam, 0 );

                iSketchDef.EndEdit; //   
              end;
            end;
          end;
        end;
      end;

      iKompasObject.ksMessage( '   ' );

      if (iSketch1Entity <> nil) and (iSketch2Entity <> nil) and (iSketch3Entity <> nil) then
      begin
        //     
        iBaseLoftEntry := ksEntity(iPart.NewEntity( o3d_baseLoft ));

        if iBaseLoftEntry <> nil then
        begin
          iBaseLoftDef := ksBaseLoftDefinition(iBaseLoftEntry.GetDefinition);

          if iBaseLoftDef <> nil then
          begin
            iEntityCollection := ksEntityCollection( iBaseLoftDef.Sketchs );

            if iEntityCollection <> nil then
            begin
              iEntityCollection.Add( iSketch1Entity );
              iEntityCollection.Add( iSketch2Entity );
              iEntityCollection.Add( iSketch3Entity );
            end;

            iBaseLoftEntry.Name := '' ;
            iBaseLoftEntry.SetAdvancedColor( 12345678, 0.8, 0.8, 0.8, 0.8, 1, 0.8 );
            iBaseLoftEntry.Create; //  
          end;
        end;
      end;

      iKompasObject.ksMessage( '   ' );

      if (iSketch3Entity <> nil) and (iSketch4Entity <> nil) then
      begin
        //     
        iBossLoftEntity := ksEntity(iPart.NewEntity( o3d_bossLoft ));

        if iBossLoftEntity <> nil then
        begin
          iBossLoftDef := ksBossLoftDefinition( iBossLoftEntity.GetDefinition );

          if iBossLoftDef <> nil then
          begin
            iEntityCollection := ksEntityCollection( iBossLoftDef.Sketchs );

            if iEntityCollection <> nil then
            begin
               iEntityCollection.Add( iSketch3Entity );
               iEntityCollection.Add( iSketch4Entity );
            end;

            iBossLoftEntity.Name := 'e';
            iBossLoftEntity.Create; //  
          end;
        end;
      end;

      iKompasObject.ksMessage( '   ' );

      if (iSketch5Entity <> nil) and (iSketch6Entity <> nil) then
      begin
        //     
        iCutLoftEntity := ksEntity(iPart.NewEntity( o3d_cutLoft ));

        if iCutLoftEntity <> nil then
        begin
          iCutLoftDef := ksCutLoftDefinition( iCutLoftEntity.GetDefinition );

          if iCutLoftDef <> nil then
          begin
            iEntityCollection := ksEntityCollection( iCutLoftDef.Sketchs );

            if iEntityCollection <> nil then
            begin
              iEntityCollection.Add( iSketch5Entity );
              iEntityCollection.Add( iSketch6Entity );
            end;

            iCutLoftDef.SetThinParam( true, dtNormal, 3, 0 );
            iCutLoftEntity.Name := ' ';
            iCutLoftEntity.Create; //  
          end;
        end;
      end;

    end;
  end;
end;

//------------------------------------------------------------------------------
//    
//-
procedure CreateFilletAndChamfer;
var
  iPart: ksPart;
  iSketchEntity: ksEntity;
  iSketchDef: ksSketchDefinition;
  iPlaneEntity: ksEntity;
  iSketchDocument2D: ksDocument2D;
  iBaseExtrusionEntity: ksEntity;
  iBaseExtrusionDef: ksBaseExtrusionDefinition;
  iEntityCollection: ksEntityCollection;
  iFilletEntity: ksEntity;
  iFilletDef: ksFilletDefinition;
  iEntityArray: ksEntityCollection;
  iEntityCollection2: ksEntityCollection;
  i, count: Integer;
  iChamferEntity: ksEntity;
  iChamferDef: ksChamferDefinition;

begin
  iPart := ksPart(iDocument3D.GetPart( pTop_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; //   
          end;

          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{  }, 100, 0, false );
              iBaseExtrusionDef.SetThinParam( false, 0, 0, 0 ); //   
              iBaseExtrusionDef.SetSketch( iSketchEntity ); //   
              iBaseExtrusionEntity.Create; //  

              iEntityCollection := ksEntityCollection(iPart.EntityCollection( o3d_face ));

              if (iEntityCollection <> nil) and
                 (iEntityCollection.SelectByPoint(0, 0, 0)) and
                 (iEntityCollection.GetCount > 0 ) then
              begin
                iKompasObject.ksMessage( ' ' );

                iFilletEntity := ksEntity(iPart.NewEntity( o3d_fillet ));

                if iFilletEntity <> nil then
                begin
                  iFilletDef := ksFilletDefinition(iFilletEntity.GetDefinition);

                  if iFilletDef <> nil then
                  begin
                    iFilletDef.Radius := 10; //  
                    iFilletDef.Tangent := false; //   

                    iEntityArray := ksEntityCollection( iFilletDef.Array_ ); //   

                    if iEntityArray <> nil then
                    begin
                      count := iEntityCollection.GetCount;
                      for i := 0 to count - 1 do
                        iEntityArray.Add( iEntityCollection.GetByIndex(i) );

                      iFilletEntity.Create;
                    end;
                  end;
                end;
              end;

              iEntityCollection2 := ksEntityCollection(iPart.EntityCollection( o3d_face ));

              if (iEntityCollection2 <> nil) and
                 (iEntityCollection2.SelectByPoint(0, 0, 100)) and
                 (iEntityCollection2.GetCount > 0 ) then
              begin
                iKompasObject.ksMessage( ' ' );

                iChamferEntity := ksEntity(iPart.NewEntity( o3d_chamfer ));

                if iChamferEntity <> nil then
                begin
                  iChamferDef := ksChamferDefinition(iChamferEntity.GetDefinition);

                  if iFilletDef <> nil then
                  begin
                    iChamferDef.Tangent := false;
                    iChamferDef.SetChamferParam( true, 10, 10 );

                    iEntityArray.Clear;
                    iEntityArray := ksEntityCollection( iChamferDef.Array_ ); //   

                    if iEntityArray <> nil then
                    begin
                      count := iEntityCollection2.GetCount;
                      for i := 0 to count - 1 do
                        iEntityArray.Add( iEntityCollection2.GetByIndex(i) );

                      iChamferEntity.Create;
                    end;
                  end;
                end;
              end;

            end;
          end;
        end;
      end;
    end;
  end;
end;

//------------------------------------------------------------------------------
// LibraryName
//---
function LIBRARYNAME: PChar; pascal;
begin
  Result := '  3D';
end;

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

//------------------------------------------------------------------------------
// LibraryEntry
//---
procedure LIBRARYENTRY( command: WORD ); pascal;
begin
  iKompasObject := KompasObject(CreateKompasObject);

  if iKompasObject <> nil then
  begin
    iDocument3D := ksDocument3D(iKompasObject.ActiveDocument3D);

    if ( ( iDocument3D <> nil ) and ( iDocument3D.IsDetail ) ) then
    begin
      case command of
        1: OperationExtrusion;     //  
        2: OperationRotated;       //  
        3: OperationLoft;          // o 
        4: CreateFilletAndChamfer; //    
      end;

      iKompasObject.ksMessageBoxResult;

      iDocument3D := nil;
    end;

    iKompasObject := nil;
  end;
end;


end.
