示例#1
0
        /// <summary>
        /// Основание ручки
        /// </summary>
        /// <param name="doorParameters"></param>
        /// <param name="doorPart"></param>
        /// <param name="eyePlaneOffset"></param>
        private void HandleBase(DoorParameters doorParameters,
                                ksPart doorPart, ksEntity eyePlaneOffset)
        {
            ksEntity keyPlaneOffset = doorPart.NewEntity((short)
                                                         Obj3dType.o3d_planeOffset);
            ksPlaneOffsetDefinition pod5 =
                keyPlaneOffset.GetDefinition();

            pod5.SetPlane(eyePlaneOffset);
            pod5.offset = 25;
            keyPlaneOffset.Create();
            ksEntity keySketch = doorPart.NewEntity((short)
                                                    Obj3dType.o3d_sketch);
            ksSketchDefinition keySketchDefinition =
                keySketch.GetDefinition();

            keySketchDefinition.SetPlane(keyPlaneOffset);
            keySketch.Create();
            ksDocument2D key = keySketchDefinition.BeginEdit();

            DrawRectangle(key, doorParameters.YKey / 2.0,
                          doorParameters.WidthDoor - 450, 200, 26, -90);
            keySketchDefinition.EndEdit();
            Extrude(doorPart, keySketch, 5,
                    (short)Direction_Type.dtNormal);
        }
示例#2
0
 ///<summary>
 /// Создание отверстия в кадле
 ///</summary>
 private void CreateHoleInKadlo(double kadloHeight, bool circle, bool square, bool triangle, double radiusHole, double squareSide, double triangleSide)
 {
     if (_part != null)
     {
         // интерфейс свойств эскиза
         ksEntity holeInKadlo = (ksEntity)_part.NewEntity((short)Obj3dType.o3d_sketch);
         if (holeInKadlo != null)
         {
             // Получение интерфейса свойств эскиза
             ksSketchDefinition holeSketch = (ksSketchDefinition)holeInKadlo.GetDefinition();
             if (holeSketch != null)
             {
                 ksEntity basePlane;
                 // Получение интерфейса базовой плоскости XOZ
                 basePlane = (ksEntity)_part.GetDefaultEntity((short)Obj3dType.o3d_planeXOZ);
                 // установим плоскость базовой для эскиза
                 holeSketch.SetPlane(basePlane);
                 // создадим эскиз
                 holeInKadlo.Create();
                 // интерфейс редактора эскиза
                 ksDocument2D sketchEdit = (ksDocument2D)holeSketch.BeginEdit();
                 //КРУГ
                 if (circle == true)
                 {
                     sketchEdit.ksCircle(1, -kadloHeight / 2, radiusHole, 1);
                 }
                 if (square == true)
                 {
                     sketchEdit.ksLineSeg(1 - squareSide / 2, -kadloHeight / 2 - squareSide / 2, 1 - squareSide / 2, -kadloHeight / 2 + squareSide / 2, 1);
                     sketchEdit.ksLineSeg(1 - squareSide / 2, -kadloHeight / 2 + squareSide / 2, 1 + squareSide / 2, -kadloHeight / 2 + squareSide / 2, 1);
                     sketchEdit.ksLineSeg(1 + squareSide / 2, -kadloHeight / 2 + squareSide / 2, 1 + squareSide / 2, -kadloHeight / 2 - squareSide / 2, 1);
                     sketchEdit.ksLineSeg(1 + squareSide / 2, -kadloHeight / 2 - squareSide / 2, 1 - squareSide / 2, -kadloHeight / 2 - squareSide / 2, 1);
                 }
                 //ТРЕУГОЛЬНИК
                 if (triangle == true)
                 {
                     var triangleHeight = Math.Sqrt(3) / 2 * triangleSide;
                     sketchEdit.ksLineSeg(1, -kadloHeight / 2, 1 - triangleSide / 2, -kadloHeight / 2 + triangleHeight, 1);
                     sketchEdit.ksLineSeg(1 - triangleSide / 2, -kadloHeight / 2 + triangleHeight, 1 + triangleSide / 2, -kadloHeight / 2 + triangleHeight, 1);
                     sketchEdit.ksLineSeg(1 + triangleSide / 2, -kadloHeight / 2 + triangleHeight, 1, -kadloHeight / 2, 1);
                 }
                 // завершение редактирования эскиза
                 holeSketch.EndEdit();
                 ksEntity entityHoleCutExtr = (ksEntity)_part.NewEntity((short)Obj3dType.o3d_cutExtrusion);
                 if (entityHoleCutExtr != null)
                 {
                     ksCutExtrusionDefinition cutExtrDef = (ksCutExtrusionDefinition)entityHoleCutExtr.GetDefinition();
                     if (cutExtrDef != null)
                     {
                         cutExtrDef.cut           = true;
                         cutExtrDef.directionType = (short)Direction_Type.dtNormal;
                         cutExtrDef.SetSideParam(true, (short)End_Type.etThroughAll);
                         cutExtrDef.SetSketch(holeSketch);
                         entityHoleCutExtr.Create();
                     }
                 }
             }
         }
     }
 }
示例#3
0
        /// <summary>
        /// Создание двери
        /// </summary>
        /// <param name="doorParameters"></param>
        public void BuildDoor(DoorParameters doorParameters)
        {
            ConnectToKompas();

            ksDocument3D doc = Kompas3D.Document3D();

            doc.Create();

            ksPart doorPart = doc.GetPart((short)
                                          Part_Type.pTop_Part);
            ksEntity planeXoY = doorPart.GetDefaultEntity((short)
                                                          Obj3dType.o3d_planeXOY);
            ksEntity sketch = doorPart.NewEntity((short)
                                                 Obj3dType.o3d_sketch);
            ksSketchDefinition sd = sketch.GetDefinition();

            sd.SetPlane(planeXoY);
            sketch.Create();
            ksDocument2D topSketch = sd.BeginEdit();

            DrawRectangle(topSketch,
                          -doorParameters.HeightDoor / 2.0, -doorParameters.WidthDoor / 2.0,
                          doorParameters.HeightDoor, doorParameters.WidthDoor,
                          null);
            sd.EndEdit();
            Extrude(doorPart, sketch, doorParameters.WeigthDoor,
                    (short)Direction_Type.dtNormal);
            DoorModification(doorParameters, doorPart, planeXoY);
        }
示例#4
0
        /// <summary>
        /// Добавление элементов на полотно двери
        /// </summary>
        /// <param name="doorParameters"></param>
        /// <param name="doorPart"></param>
        /// <param name="planeXoY"></param>
        private void DoorModification(DoorParameters doorParameters,
                                      ksPart doorPart, ksEntity planeXoY)
        {
            ksEntity eyePlaneOffset = doorPart.NewEntity((short)
                                                         Obj3dType.o3d_planeOffset);
            ksPlaneOffsetDefinition eyeDefinition =
                eyePlaneOffset.GetDefinition();

            eyeDefinition.SetPlane(planeXoY);
            eyeDefinition.offset = doorParameters.WeigthDoor;
            eyePlaneOffset.Create();
            ksEntity eyeSketch = doorPart.NewEntity((short)
                                                    Obj3dType.o3d_sketch);
            ksSketchDefinition eyeSketchDefinition =
                eyeSketch.GetDefinition();

            eyeSketchDefinition.SetPlane(eyePlaneOffset);
            eyeSketch.Create();
            ksDocument2D eye = eyeSketchDefinition.BeginEdit();

            eye.ksCircle(doorParameters.YEye / 2.0, 0, 15, 1);
            eyeSketchDefinition.EndEdit();
            Cut(doorPart, eyeSketch, doorParameters.WeigthDoor);
            AnimalDoor(doorParameters, doorPart, eyePlaneOffset);
            DoorKnob(doorParameters, doorPart, eyePlaneOffset);
        }
示例#5
0
 /// <summary>
 /// Построение гладкой части
 /// </summary>
 private void CreateConnector(ksPart iPatr)
 {
     if (_modelelParameters.Parameter(ParametersName.ConnectionLength).Value != 0)
     {
         //Получаем интерфейс базовой плоскости ХОY
         ksEntity planeZOY =
             (ksEntity)iPatr.GetDefaultEntity((short)Obj3dType.o3d_planeXOZ);
         //Создаем новый эскиз
         ksEntity iSketch =
             (ksEntity)iPatr.NewEntity((short)Obj3dType.o3d_sketch);
         //Получаем интерфейс свойств эскиза
         ksSketchDefinition iDefinitionSketch = (ksSketchDefinition)iSketch.GetDefinition();
         //Устанавливаем плоскость эскиза
         iDefinitionSketch.SetPlane(planeZOY);
         //Создание эскиза
         iSketch.Create();
         //Создание нового 2Д документа
         ksDocument2D iDocument2D = (ksDocument2D)iDefinitionSketch.BeginEdit();
         //Получение радиуса рукояти
         var rad = _modelelParameters.Parameter(ParametersName.HandleRadius).Value;
         //Построение круга
         iDocument2D.ksCircle(0, 0, rad + 0.1, 1);
         //Создание эскиза
         iDefinitionSketch.EndEdit();
         //Получение глубины выдавливания
         var depth = _modelelParameters.Parameter(ParametersName.ConnectionLength).Value / 2;
         //Выдавливание в обе стороны
         ExctrusionSketch(iPatr, iSketch, depth, false);
         ExctrusionSketch(iPatr, iSketch, depth, true);
     }
 }
示例#6
0
        /// <summary>
        /// Создать эскиз
        /// </summary>
        /// <param name="iSketch">Эскиз</param>
        /// <param name="iDefinitionSketch">Определение эскиза</param>
        /// <param name="offset">Смещение от начальной плоскости</param>
        private void CreateSketch(out ksEntity iSketch, out ksSketchDefinition iDefinitionSketch, double offset = 0)
        {
            #region Создание смещенную плоскость -------------------------
            // интерфейс смещенной плоскости
            ksEntity iPlane = (ksEntity)iPart.NewEntity((short)Obj3dType.o3d_planeOffset);

            // Получаем интрефейс настроек смещенной плоскости
            ksPlaneOffsetDefinition iPlaneDefinition = (ksPlaneOffsetDefinition)iPlane.GetDefinition();

            // Настройки : начальная позиция, направление смещения, расстояние от плоскости, принять все настройки (create)
            iPlaneDefinition.SetPlane(iPart.GetDefaultEntity((short)Obj3dType.o3d_planeXOY));
            iPlaneDefinition.direction = true;
            iPlaneDefinition.offset    = offset;
            iPlane.Create();
            #endregion --------------------------------------------------

            // Создаем обьект эскиза
            iSketch = (ksEntity)iPart.NewEntity((short)Obj3dType.o3d_sketch);

            // Получаем интерфейс настроек эскиза
            iDefinitionSketch = iSketch.GetDefinition();

            // Устанавливаем плоскость эскиза
            iDefinitionSketch.SetPlane(iPlane);

            // Теперь когда св-ва эскиза установлены можно его создать
            iSketch.Create();
        }
示例#7
0
 /// <summary>
 /// Метод создает эскиз правильного шестиугольника
 /// </summary>
 /// <param name="rad">Радиус описанной окружности шестиугольника</param>
 public bool DrawHexagon(double rad)
 {
     try
     {
         SketchCreator      sketch   = new SketchCreator(_app);
         ksSketchDefinition def      = sketch.MakeSketch();
         ksDocument2D       doc      = (ksDocument2D)def.BeginEdit();
         short polyParam             = (short)StructType2DEnum.ko_RegularPolygonParam;
         ksRegularPolygonParam param = (ksRegularPolygonParam)_app.Kompas.GetParamStruct(polyParam);
         param.count    = 6;
         param.xc       = 0;
         param.yc       = 0;
         param.ang      = 0;
         param.radius   = rad;
         param.describe = false;
         param.style    = 1;
         doc.ksRegularPolygon(param, 0);
         def.EndEdit();
         return(true);
     }
     catch
     {
         return(false);
     }
 }
示例#8
0
        /// <summary>
        ///     Создать эскиз.
        /// </summary>
        /// <param name="iSketch">Интерфейс эскиза.</param>
        /// <param name="iDefinitionSketch">Определение эскиза.</param>
        /// <param name="offset">Смещение от начальной плоскости.</param>
        private void CreateSketch(out ksEntity iSketch,
                                  out ksSketchDefinition iDefinitionSketch,
                                  double offset = 0)
        {
            var iPlane =
                (ksEntity)_iPart.NewEntity((short)Obj3dType.o3d_planeOffset);

            var iPlaneDefinition =
                (ksPlaneOffsetDefinition)iPlane.GetDefinition();

            iPlaneDefinition.SetPlane(
                _iPart.GetDefaultEntity((short)Obj3dType.o3d_planeXOZ));

            iPlaneDefinition.direction = true;

            iPlaneDefinition.offset = offset;

            iPlane.Create();

            iSketch = (ksEntity)_iPart.NewEntity((short)Obj3dType.o3d_sketch);

            iDefinitionSketch = iSketch.GetDefinition();

            iDefinitionSketch.SetPlane(iPlane);

            iSketch.Create();
        }
        /// <summary>
        /// Создание головки
        /// </summary>
        /// <param name="diameterHead">Диаметр головки </param>
        /// <param name="lengthHead">Длина головки </param>
        private void BuildHead(double diameterHead, double lengthHead)
        {
            #region Константы для головки
            const int part          = -1;
            const int sketch        = 5;
            const int planeXOY      = 1;
            const int baseExtrusion = 24;
            const int shaded        = 3;
            const int etBlind       = 0;
            #endregion

            //Эскиз головки
            _part   = _doc3D.GetPart(part);
            _entity = _part.NewEntity(sketch);
            ksSketchDefinition SketchDefinition = _entity.GetDefinition();
            ksEntity           EntityPlane      = _part.GetDefaultEntity(planeXOY);
            SketchDefinition.SetPlane(EntityPlane);
            _entity.Create();
            ksDocument2D Document2D = SketchDefinition.BeginEdit();
            Document2D.ksCircle(0, 0, diameterHead / 2, 1);
            SketchDefinition.EndEdit();

            //Выдавливание головки
            ksEntity EntityExtrusion = _part.NewEntity(baseExtrusion);
            ksBaseExtrusionDefinition BaseExtrusionDefinition = EntityExtrusion.GetDefinition();
            BaseExtrusionDefinition.SetSideParam(true, etBlind, lengthHead, 0, true);
            BaseExtrusionDefinition.SetSketch(_entity);
            EntityExtrusion.Create();
            _doc3D.drawMode        = shaded;
            _doc3D.shadedWireframe = true;
        }
示例#10
0
        /// <summary>
        /// Собачья заслонка
        /// </summary>
        /// <param name="doorParameters"></param>
        /// <param name="doorPart"></param>
        /// <param name="eyePlaneOffset"></param>
        private void AnimalDoor(DoorParameters doorParameters,
                                ksPart doorPart, ksEntity eyePlaneOffset)
        {
            var x = -doorParameters.HeightDoor / 2;
            var y = -doorParameters.WidthDoor / 2 + 350;
            var animalHoleHeight = 200;

            if (doorParameters.IsOpen == true)
            {
                ksEntity animalDoorHoleSketch = doorPart.NewEntity((short)
                                                                   Obj3dType.o3d_sketch);
                ksSketchDefinition animalDoorHoleSketchDefinition =
                    animalDoorHoleSketch.GetDefinition();
                animalDoorHoleSketchDefinition.SetPlane(eyePlaneOffset);
                animalDoorHoleSketch.Create();

                ksDocument2D animalDoorHole =
                    animalDoorHoleSketchDefinition.BeginEdit();
                DrawRectangle(animalDoorHole, x, y,
                              animalHoleHeight,
                              animalHoleHeight, null);
                animalDoorHoleSketchDefinition.EndEdit();
                Cut(doorPart, animalDoorHoleSketch,
                    doorParameters.WeigthDoor);

                ksEntity animalDoorSketch = doorPart.NewEntity((short)
                                                               Obj3dType.o3d_sketch);
                ksSketchDefinition animalDoorSketchDefinition =
                    animalDoorSketch.GetDefinition();
                animalDoorSketchDefinition.SetPlane(eyePlaneOffset);
                animalDoorSketch.Create();

                ksDocument2D animalDoor =
                    animalDoorSketchDefinition.BeginEdit();
                DrawRectangle(animalDoor, x + animalHoleHeight, y,
                              animalHoleHeight / 10.0, animalHoleHeight,
                              null);
                animalDoorSketchDefinition.EndEdit();
                Extrude(doorPart, animalDoorSketch, animalHoleHeight,
                        (short)Direction_Type.dtNormal);
            }
            if (doorParameters.IsOpen == false)
            {
                ksEntity animalDoorHoleSketch = doorPart.NewEntity((short)
                                                                   Obj3dType.o3d_sketch);
                ksSketchDefinition animalDoorHoleSketchDefinition =
                    animalDoorHoleSketch.GetDefinition();
                animalDoorHoleSketchDefinition.SetPlane(eyePlaneOffset);
                animalDoorHoleSketch.Create();

                ksDocument2D animalDoorHole =
                    animalDoorHoleSketchDefinition.BeginEdit();
                DrawRectangle(animalDoorHole, x, y, animalHoleHeight,
                              animalHoleHeight, null);
                animalDoorHoleSketchDefinition.EndEdit();
                Cut(doorPart, animalDoorHoleSketch, 0.2);
            }
        }
        /// <summary>
        /// Создание отверстий по концентрической сетке
        /// </summary>
        /// <param name="coordinate">Координата расположения</param>
        /// <param name="radius">Радиус отверстия</param>
        /// <param name="height">Высота вырезания</param>
        /// <param name="count">Количество отверстий</param>
        private void CreateArray(double coordinate, double radius,
                                 double height, int count)
        {
            var       document           = (ksDocument3D)_kompas.ActiveDocument3D();
            var       part               = (ksPart)document.GetPart((short)Part_Type.pTop_Part);
            const int coordinateX        = 0;
            const int coordinateY        = 0;
            const int styleLineBase      = 1;
            const int styleLineAuxiliary = 6;
            const int stepCopy           = 360;

            ksEntity entitySketch = (ksEntity)part.NewEntity((short)
                                                             Obj3dType.o3d_sketch);
            ksSketchDefinition sketchDefinition = (ksSketchDefinition)
                                                  entitySketch.GetDefinition();
            ksEntity basePlane = (ksEntity)part.GetDefaultEntity((short)
                                                                 Obj3dType.o3d_planeXOY);

            sketchDefinition.SetPlane(basePlane);
            entitySketch.Create();
            ksDocument2D sketchEdit = (ksDocument2D)sketchDefinition.
                                      BeginEdit();

            sketchEdit.ksCircle(coordinateX, coordinateY, coordinate,
                                styleLineAuxiliary);
            sketchEdit.ksCircle(coordinate, coordinateY, radius,
                                styleLineBase);
            sketchDefinition.EndEdit();

            ksEntity entityCutExtrusion = (ksEntity)part.NewEntity((short)
                                                                   Obj3dType.o3d_cutExtrusion);
            ksCutExtrusionDefinition cutExtrusionDefinition =
                (ksCutExtrusionDefinition)entityCutExtrusion.GetDefinition();

            cutExtrusionDefinition.directionType =
                (short)Direction_Type.dtNormal;
            cutExtrusionDefinition.SetSideParam(true,
                                                (short)End_Type.etBlind, height);
            cutExtrusionDefinition.SetSketch(entitySketch);
            entityCutExtrusion.Create();

            ksEntity circularCopyEntity = (ksEntity)part.NewEntity((short)
                                                                   Obj3dType.o3d_circularCopy);
            ksCircularCopyDefinition circularCopyDefinition =
                (ksCircularCopyDefinition)circularCopyEntity.GetDefinition();

            circularCopyDefinition.SetCopyParamAlongDir(count, stepCopy,
                                                        true, false);
            ksEntity baseAxisOZ = (ksEntity)part.GetDefaultEntity((short)
                                                                  Obj3dType.o3d_axisOZ);

            circularCopyDefinition.SetAxis(baseAxisOZ);
            ksEntityCollection entityCollection = (ksEntityCollection)
                                                  circularCopyDefinition.GetOperationArray();

            entityCollection.Add(cutExtrusionDefinition);
            circularCopyEntity.Create();
        }
示例#12
0
 ///<summary>
 /// Создание отверситий в нижнем ободе
 ///</summary>
 private void CreateHolesInRim(double kadloHeight, double rimCenter, int numberMounting)
 {
     if (_part != null)
     {
         // интерфейс свойств эскиза
         ksEntity rimHoles = (ksEntity)_part.NewEntity((short)Obj3dType.o3d_sketch);
         if (rimHoles != null)
         {
             // Получение интерфейса свойств эскиза
             ksSketchDefinition rimSketch = (ksSketchDefinition)rimHoles.GetDefinition();
             if (rimSketch != null)
             {
                 ksEntity basePlane;
                 // Получение интерфейса базовой плоскости XOY
                 basePlane = (ksEntity)_part.GetDefaultEntity((short)Obj3dType.o3d_planeXOY);
                 // установим плоскость базовой для эскиза
                 rimSketch.SetPlane(basePlane);
                 // создадим эскиз
                 rimHoles.Create();
                 // интерфейс редактора эскиза
                 ksDocument2D sketchEdit = (ksDocument2D)rimSketch.BeginEdit();
                 int          i          = 1;
                 for (double phi = 0; phi < 2 * Math.PI; phi += 2 * Math.PI / numberMounting)
                 {
                     double x = rimCenter * Math.Cos(phi);
                     double y = rimCenter * Math.Sin(phi);
                     //круглое отверстие
                     sketchEdit.ksCircle(x, y, 2.5, 1);
                     if (i < numberMounting)
                     {
                         i++;
                     }
                     else
                     {
                         break;
                     }
                 }
                 // завершение редактирования эскиза
                 rimSketch.EndEdit();
                 // вырежим выдавливанием
                 ksEntity entityCutExtr = (ksEntity)_part.NewEntity((short)Obj3dType.o3d_cutExtrusion);
                 if (entityCutExtr != null)
                 {
                     ksCutExtrusionDefinition cutExtrDef = (ksCutExtrusionDefinition)entityCutExtr.GetDefinition();
                     if (cutExtrDef != null)
                     {
                         cutExtrDef.cut           = true;
                         cutExtrDef.directionType = (short)Direction_Type.dtNormal;
                         cutExtrDef.SetSideParam(true, (short)End_Type.etThroughAll);
                         cutExtrDef.SetSketch(rimSketch);
                         entityCutExtr.Create();
                     }
                 }
             }
         }
     }
 }
示例#13
0
        /// <summary>
        /// построение среднего цилиндра детали
        /// </summary>
        /// <param name="param"></param>
        public void MiddleCircle(Parameters param)
        {
            double Radios1 = param.Radios1;
            double Lenght1 = param.Lenght1;
            double Angle2  = param.Angle2;
            var    doc     = (ksDocument3D)_kompas.ActiveDocument3D();
            ksPart part1   = (ksPart)doc.GetPart((short)Part_Type.pTop_Part); // новый компонент

            if (part1 != null)
            {
                ksEntity entityOffsetPlane1 = (ksEntity)part1.NewEntity((short)Obj3dType.o3d_planeOffset);
                ksEntity entitySketch1      = (ksEntity)part1.NewEntity((short)Obj3dType.o3d_sketch);
                if (entityOffsetPlane1 != null)
                {
                    // интерфейс свойств смещенной плоскости
                    ksPlaneOffsetDefinition offsetDef1 = (ksPlaneOffsetDefinition)entityOffsetPlane1.GetDefinition();
                    if (offsetDef1 != null)
                    {
                        offsetDef1.offset = Lenght1;                       // расстояние от базовой плоскости
                        ksEntity basePlane1 = (ksEntity)part1.GetDefaultEntity((short)Obj3dType.o3d_planeXOY);
                        basePlane1.name = "Смещенная плоскость";           // название для плоскости

                        offsetDef1.SetPlane(basePlane1);                   // базовая плоскость
                        entityOffsetPlane1.name   = "Смещенная плоскость"; // имя для смещенной плоскости
                        entityOffsetPlane1.hidden = true;
                        entityOffsetPlane1.Create();                       // создать смещенную плоскость

                        if (entitySketch1 != null)
                        {
                            ksSketchDefinition sketchDef1 = (ksSketchDefinition)entitySketch1.GetDefinition();
                            if (sketchDef1 != null)
                            {
                                sketchDef1.SetPlane(entityOffsetPlane1); // установим плоскость XOY базовой для эскиза
                                entitySketch1.Create();                  // создадим эскиз

                                // интерфейс редактора эскиза
                                ksDocument2D sketchEdit1 = (ksDocument2D)sketchDef1.BeginEdit();
                                sketchEdit1.ksCircle(0, 0, Radios1, 1);
                                sketchDef1.EndEdit();                    // завершение редактирования эскиза
                                ksEntity entityExtr1 = (ksEntity)part1.NewEntity((short)Obj3dType.o3d_baseExtrusion);
                                if (entityExtr1 != null)
                                {
                                    ksBaseExtrusionDefinition extrusionDef1 = (ksBaseExtrusionDefinition)entityExtr1.GetDefinition();
                                    if (extrusionDef1 != null)
                                    {
                                        extrusionDef1.directionType = (short)Direction_Type.dtNormal;
                                        extrusionDef1.SetSideParam(true, (short)End_Type.etBlind, 5, Angle2, true);
                                        extrusionDef1.SetSketch(entitySketch1);  // эскиз операции выдавливания
                                        entityExtr1.Create();                    // создать операцию
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
示例#14
0
            /// <summary>
            /// Генерация эскиза основания стакана.
            /// </summary>
            /// <param name="sketchDef">
            ///     Описание эскиза основания стакана.</param>
            private void GenerateBlank2d(ksSketchDefinition sketchDef)
            {
                var draw = (ksDocument2D)sketchDef.BeginEdit();

                draw.ksCircle(_startX, _startY,
                              _glass.DiameterBottom / 2.0, 1);

                sketchDef.EndEdit();
            }
示例#15
0
        /// <summary>
        /// Метод, создающий эскиз.
        /// </summary>
        /// <param name="plane">Плоскость, эскиз которой будет создан.</param>
        private void CreateSketch(short plane)
        {
            var currentPlane = (ksEntity)_part.GetDefaultEntity(plane);

            _entitySketch     = (ksEntity)_part.NewEntity((short)Obj3dType.o3d_sketch);
            _sketchDefinition = (ksSketchDefinition)_entitySketch.GetDefinition();
            _sketchDefinition.SetPlane(currentPlane);
            _entitySketch.Create();
        }
示例#16
0
 /// <summary>
 /// Нарисовать четырехугольник с непрямыми углами с отверстием некруглым
 /// </summary>
 internal void DrawQuadrangleWithNonCircularHole()
 {
     if (kompas != null)
     {
         kompas.Visible = true;
         ksDocument3D iDocument3D = (ksDocument3D)kompas.Document3D();
         if (iDocument3D.Create(false /*видимый*/, true /*деталь*/))
         {
             iDocument3D.fileName = "With Non-Circular Hole";
             ksPart iPart = (ksPart)iDocument3D.GetPart((short)Part_Type.pTop_Part);     // новый компонент (.pNew_Part - был)
             if (iPart != null)
             {
                 //// получим интерфейс базовой плоскости XOY
                 ksEntity planeXOY = (ksEntity)iPart.GetDefaultEntity((short)Obj3dType.o3d_planeXOY);    // 1-интерфейс на плоскость XOY
                 ksEntity iSketch  = (ksEntity)iPart.NewEntity((short)Obj3dType.o3d_sketch);
                 if (iSketch != null)
                 {
                     // интерфейс свойств эскиза
                     ksSketchDefinition iDefinitionSketch = (ksSketchDefinition)iSketch.GetDefinition();
                     if (iDefinitionSketch != null)
                     {
                         iDefinitionSketch.SetPlane(planeXOY);
                         iSketch.Create();
                         ksDocument2D iDocument2D = (ksDocument2D)iDefinitionSketch.BeginEdit();
                         iDocument2D.ksLineSeg(-30.0, -30.0, 30.0, -30.0, 1);
                         iDocument2D.ksLineSeg(30.0, -30.0, 0, 30.0, 1);
                         iDocument2D.ksLineSeg(0, 30.0, -60.0, 30.0, 1);
                         iDocument2D.ksLineSeg(-60.0, 30.0, -30.0, -30.0, 1);
                         iDocument2D.ksLineSeg(-10.0, -18.660254, -28.660254, 13.660254, 1);
                         iDocument2D.ksLineSeg(-20, 18.660254, -1.339746, -13.660254, 1);
                         iDocument2D.ksArcByAngle(-24.330127, 16.160254, 5, 30.0, 210.0, 1, 1);
                         iDocument2D.ksArcByAngle(-5.669873, -16.160254, 5, 210.0, 30.0, 1, 1);
                         iDefinitionSketch.EndEdit();
                         ksEntity entityExtr = (ksEntity)iPart.NewEntity((short)Obj3dType.o3d_bossExtrusion);
                         if (entityExtr != null)
                         {
                             // интерфейс свойств базовой операции выдавливания
                             ksBossExtrusionDefinition extrusionDef = (ksBossExtrusionDefinition)entityExtr.GetDefinition(); // интерфейс базовой операции выдавливания
                             if (extrusionDef != null)
                             {
                                 ksExtrusionParam extrProp = (ksExtrusionParam)extrusionDef.ExtrusionParam(); // интерфейс структуры параметров выдавливания
                                 if (extrProp != null)
                                 {
                                     extrusionDef.SetSketch(iSketch);                       // эскиз операции выдавливания
                                     extrProp.direction   = (short)Direction_Type.dtNormal; // направление выдавливания (прямое)
                                     extrProp.typeNormal  = (short)End_Type.etBlind;        // тип выдавливания (строго на глубину)
                                     extrProp.depthNormal = 10;                             // глубина выдавливания
                                     entityExtr.Create();                                   // создадим операцию
                                 }
                             }
                         }
                     }
                 }
             }
         }
     }
 }
示例#17
0
        /// <summary>
        /// Создать эскиз
        /// </summary>
        /// <param name="part">Компонент сборки</param>
        /// <param name="sketch">Эскиз</param>
        /// <param name="sketchDefinition">Параметры эскиза</param>
        /// <param name="planeid">Плоскость</param>
        private static void CreateSketch(ksPart part, out ksEntity sketch,
                                         out ksSketchDefinition sketchDefinition, short planeid)
        {
            ksEntity plane = part.GetDefaultEntity(planeid);

            sketch           = part.NewEntity((short)Obj3dType.o3d_sketch);
            sketchDefinition = sketch.GetDefinition();
            sketchDefinition.SetPlane(plane);
            sketch.Create();
        }
示例#18
0
            /// <summary>
            /// Генерация эскиза вырезанных внутренностей стакана.
            /// </summary>
            /// <param name="sketchDef">Описание эскиза вырезаемых
            ///     внутренностей стакана.</param>
            private void GenerateCutSide2d(ksSketchDefinition sketchDef)
            {
                var draw =
                    (ksDocument2D)sketchDef.BeginEdit();

                draw.ksCircle(_startX, _startY,
                              _calcParams.DiameterSideCutting / 2, 1);

                sketchDef.EndEdit();
            }
示例#19
0
        /// <summary>
        /// построение верхней части цилиндра
        /// </summary>
        /// <param name="param"></param>
        public void UpCircle(Parameters param)
        {
            double Radios2 = param.Radios2;
            double Lenght1 = param.Lenght1;
            double Lenght2 = param.Lenght2;
            var    doc     = (ksDocument3D)_kompas.ActiveDocument3D();
            ksPart part2   = (ksPart)doc.GetPart((short)Part_Type.pTop_Part); // новый компонент

            if (part2 != null)
            {
                ksEntity entityOffsetPlane2 = (ksEntity)part2.NewEntity((short)Obj3dType.o3d_planeOffset);
                ksEntity entitySketch2      = (ksEntity)part2.NewEntity((short)Obj3dType.o3d_sketch);
                if (entityOffsetPlane2 != null)
                {
                    ksPlaneOffsetDefinition offsetDef2 = (ksPlaneOffsetDefinition)entityOffsetPlane2.GetDefinition();
                    if (offsetDef2 != null)
                    {
                        offsetDef2.offset = Lenght1 + 5;                   // расстояние от базовой плоскости
                        ksEntity basePlane2 = (ksEntity)part2.GetDefaultEntity((short)Obj3dType.o3d_planeXOY);
                        basePlane2.name = "Смещенная плоскость";           // название для плоскости

                        offsetDef2.SetPlane(basePlane2);                   // базовая плоскость
                        entityOffsetPlane2.name   = "Смещенная плоскость"; // имя для смещенной плоскости
                        entityOffsetPlane2.hidden = true;
                        entityOffsetPlane2.Create();                       // создать смещенную плоскость

                        if (entitySketch2 != null)
                        {
                            ksSketchDefinition sketchDef2 = (ksSketchDefinition)entitySketch2.GetDefinition();
                            if (sketchDef2 != null)
                            {
                                sketchDef2.SetPlane(entityOffsetPlane2); // установим плоскость XOY базовой для эскиза
                                entitySketch2.Create();                  // создадим эскиз

                                ksDocument2D sketchEdit2 = (ksDocument2D)sketchDef2.BeginEdit();
                                sketchEdit2.ksCircle(0, 0, Radios2, 1);
                                sketchDef2.EndEdit();                    // завершение редактирования эскиза
                                ksEntity entityExtr2 = (ksEntity)part2.NewEntity((short)Obj3dType.o3d_baseExtrusion);
                                if (entityExtr2 != null)
                                {
                                    ksBaseExtrusionDefinition extrusionDef2 = (ksBaseExtrusionDefinition)entityExtr2.GetDefinition();
                                    if (extrusionDef2 != null)
                                    {
                                        extrusionDef2.directionType = (short)Direction_Type.dtNormal;
                                        extrusionDef2.SetSideParam(true, (short)End_Type.etBlind, Lenght2, 0, false);
                                        extrusionDef2.SetSketch(entitySketch2);  // эскиз операции выдавливания
                                        entityExtr2.Create();                    // создать операцию
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
示例#20
0
            public override ksEntity Execute()
            {
                ksEntity           sketch     = Part.NewEntity((short)Obj3dType.o3d_sketch);
                ksSketchDefinition definition = sketch.GetDefinition();

                definition.SetPlane(GetPlane());
                sketch.Create();
                DrawSketch(definition.BeginEdit());
                definition.EndEdit();
                return(sketch);
            }
            /// <summary>
            /// Создать полоску на эскизе стакана.
            /// </summary>
            /// <param name="sketchDef">Описание эскиза стакана.</param>
            private void GenerateExtrusionCrimp2d(
                ksSketchDefinition sketchDef)
            {
                var draw = (ksDocument2D)sketchDef.BeginEdit();

                var radiusLineCrim = _calcParams.DiameterStripsCrimp / 2;
                var xc             = _calcParams.DiameterFacetedStart * 0.7 / 2;

                draw.ksCircle(xc, xc, radiusLineCrim, 1);

                sketchDef.EndEdit();
            }
        /// <summary>
        /// Создане выреза крепления
        /// </summary>
        /// <param name="diameterBracing">Диаметр крепления</param>
        /// <param name="lengthBracing">Длина крепления</param>
        /// <param name="lengthLeg">Длина ножки</param>
        /// <param name="lengthHead">Длина головки</param>
        private void BuildBracingCut(double diameterBracing, double lengthBracing, double lengthLeg, double lengthHead)
        {
            #region Константы для выреза крепления
            const int part           = -1;
            const int sketch         = 5;
            const int planeXOY       = 1;
            const int planeOffset    = 14;
            const int rectangleParam = 91;
            const int shaded         = 3;
            const int etBlind        = 0;
            const int cutExtrusion   = 26;
            #endregion

            _part = _doc3D.GetPart(part);
            ksEntity EntityPlane = _part.GetDefaultEntity(planeXOY);

            //Смещение плоскости
            ksEntity PlaneOffSet = _part.NewEntity(planeOffset);
            ksPlaneOffsetDefinition planeOffDefinition = PlaneOffSet.GetDefinition();
            planeOffDefinition.direction = true;
            planeOffDefinition.offset    = lengthLeg + lengthHead + lengthBracing;
            planeOffDefinition.SetPlane(EntityPlane);
            PlaneOffSet.Create();

            //Эскиз
            ksEntity           EntityRectangle           = _part.NewEntity(sketch);
            ksSketchDefinition sketchDefinitionRectangle = EntityRectangle.GetDefinition();
            sketchDefinitionRectangle.SetPlane(PlaneOffSet);
            EntityRectangle.Create();
            ksDocument2D     Document2 = sketchDefinitionRectangle.BeginEdit();
            ksRectangleParam _par;
            _par        = _kompas.GetParamStruct(rectangleParam);
            _par.height = diameterBracing / 2;
            _par.width  = diameterBracing;
            _par.x      = -(diameterBracing / 2);
            _par.y      = -(diameterBracing / 4);
            _par.ang    = 0;
            _par.style  = 1;
            Document2.ksRectangle(_par, 0);
            sketchDefinitionRectangle.EndEdit();

            //Вырезание
            ksEntity EntityCutExtrusion = _part.NewEntity(cutExtrusion);
            ksCutExtrusionDefinition CutExtrusionDefinition = EntityCutExtrusion.GetDefinition();
            CutExtrusionDefinition.cut           = true;
            CutExtrusionDefinition.directionType = 0;
            CutExtrusionDefinition.SetSideParam(true, etBlind, lengthBracing / 2, 0, false);
            CutExtrusionDefinition.SetSketch(EntityRectangle);
            EntityCutExtrusion.Create();
            _doc3D.drawMode        = shaded;
            _doc3D.shadedWireframe = true;
        }
示例#23
0
        /// <summary>
        /// Построение выреза прямоугольной конфеты
        /// </summary>
        /// <param name="part">Компонент сборки</param>
        /// <param name="planeFormSurface">Плоскость поверхности формы</param>
        /// <param name="candySettings">Параметры конфетной формы</param>
        /// <param name="formTotalLength">Общая длина конфетной формы</param>
        /// <param name="formTotalWidth">Общая ширина конфетной формы</param>
        public override void Build(ksPart part, ksEntity planeFormSurface,
                                   CandySettings candySettings, double formTotalLength,
                                   double formTotalWidth)
        {
            // Создание и настройка эскиза
            // на поверхности формы (смещенной плоскости)

            ksEntity formSurfaceSketch =
                part.NewEntity((short)Obj3dType.o3d_sketch);
            ksSketchDefinition formSurfaceSketchDefinition =
                formSurfaceSketch.GetDefinition();

            formSurfaceSketchDefinition.SetPlane(planeFormSurface);
            formSurfaceSketch.Create();

            // Входим в режим редактирования эскиза
            ksDocument2D formSurfaceDocument2D =
                formSurfaceSketchDefinition.BeginEdit();

            // Расчитаем положение первой конфеты
            // Положение других конфет расчитаем путем сдвига первой

            double[] rectCandyXPoints = new double[] { 0, 0, 0, 0, 0 };
            double[] rectCandyYPoints = new double[] { 0, 0, 0, 0, 0 };

            InitRectCandyPoints(ref rectCandyXPoints, ref rectCandyYPoints,
                                formTotalLength, formTotalWidth, candySettings);

            // Рисуем  прямоугольные конфеты
            for (int i = 0; i < candySettings.CandyCount / 2; ++i)
            {
                for (int j = 0; j < 2; ++j)
                {
                    DrawRect(rectCandyXPoints, rectCandyYPoints,
                             formSurfaceDocument2D);

                    rectCandyYPoints = GetShiftedArray(rectCandyYPoints,
                                                       Length + candySettings.FormDepthByWidth);
                }
                rectCandyYPoints = GetShiftedArray(rectCandyYPoints,
                                                   -2 * (Length + candySettings.FormDepthByWidth));
                rectCandyXPoints = GetShiftedArray(rectCandyXPoints,
                                                   Width + candySettings.FormDepthByLength);
            }

            // Выходим из режима редактирования эскиза
            formSurfaceSketchDefinition.EndEdit();

            // Вырезаем прямоугольные конфетки ^_^
            CutExtrude(part, formSurfaceSketch, Height);
        }
示例#24
0
        /// <summary>
        /// Построение выреза цилиндрической конфеты
        /// </summary>
        /// <param name="part">Компонент сборки</param>
        /// <param name="planeFormSurface">Плоскость поверхности формы</param>
        /// <param name="candySettings">Параметры конфетной формы</param>
        /// <param name="formTotalLength">Общая длина конфетной формы</param>
        /// <param name="formTotalWidth">Общая ширина конфетной формы</param>
        public override void Build(ksPart part, ksEntity planeFormSurface,
                                   CandySettings candySettings, double formTotalLength,
                                   double formTotalWidth)
        {
            double[] cylinderCandyXPoints = new double[] { 0, 0, 0, 0, 0 };
            double[] cylinderCandyYPoints = new double[] { 0, 0, 0, 0, 0 };

            InitCylinderCandyPoints(ref cylinderCandyXPoints,
                                    ref cylinderCandyYPoints, formTotalLength, formTotalWidth,
                                    candySettings);

            for (int i = 0; i < candySettings.CandyCount / 2; ++i)
            {
                for (int j = 0; j < 2; ++j)
                {
                    // Создание и настройка эскиза на
                    // поверхности формы (смещенной плоскости)

                    ksEntity formSurfaceSketch =
                        part.NewEntity((short)Obj3dType.o3d_sketch);
                    ksSketchDefinition formSurfaceSketchDefinition =
                        formSurfaceSketch.GetDefinition();
                    formSurfaceSketchDefinition.SetPlane(planeFormSurface);
                    formSurfaceSketch.Create();

                    // Входим в режим редактирования эскиза
                    ksDocument2D formSurfaceDocument2D =
                        (ksDocument2D)formSurfaceSketchDefinition.BeginEdit();

                    DrawRect(cylinderCandyXPoints, cylinderCandyYPoints,
                             formSurfaceDocument2D, 0);

                    // Выходим из режима редактирования эскиза
                    formSurfaceSketchDefinition.EndEdit();

                    CutRotated(part, formSurfaceSketch);

                    cylinderCandyYPoints =
                        GetShiftedArray(cylinderCandyYPoints,
                                        Length + candySettings.FormDepthByWidth);
                }
                cylinderCandyYPoints =
                    GetShiftedArray(cylinderCandyYPoints,
                                    -2 * (Length + candySettings.FormDepthByWidth));
                cylinderCandyXPoints =
                    GetShiftedArray(cylinderCandyXPoints,
                                    Width + candySettings.FormDepthByLength);
            }
        }
示例#25
0
 /// <summary>
 /// Метод создает новый эскиз
 /// </summary>
 /// <returns>Возвращает указатель на интерфейс эскиза</returns>
 public ksSketchDefinition MakeSketch()
 {
     try
     {
         ksEntity           entitySketch = (ksEntity)_app.Part.NewEntity((short)Obj3dType.o3d_sketch);
         ksSketchDefinition sketchDef    = (ksSketchDefinition)entitySketch.GetDefinition();
         sketchDef.SetPlane(_app.BasePlane);
         entitySketch.Create();
         return(sketchDef);
     }
     catch
     {
         return(null);
     }
 }
示例#26
0
        /// <summary>
        /// Построение держателя для блинов
        /// </summary>
        /// <param name="iPart">Интерфейс детали</param>
        /// <param name="side">Направление</param>
        private void CreateHolder(ksPart iPart, bool side)
        {
            //Получаем массив граней объекта
            ksEntityCollection entityCollectionPart =
                (ksEntityCollection)iPart.EntityCollection((short)Obj3dType.o3d_face);
            //Получаем длину гладкой части
            var Y = _modelelParameters.Parameter(ParametersName.ConnectionLength).Value / 2;
            //Получаем длину места хвата
            var Y1 = _modelelParameters.Parameter(ParametersName.GripLength).Value / 2;
            var Y2 = 15;

            //Сортируем грани по координатам
            if (side == false)
            {
                entityCollectionPart.SelectByPoint(0, -(Y + Y1 + Y2), 0);
            }
            if (side == true)
            {
                entityCollectionPart.SelectByPoint(0, (Y + Y1 + Y2), 0);
            }
            //Получаем первый элемент массива
            var planeDetal = entityCollectionPart.First();
            //Создаем новый эскиз
            ksEntity iSketch =
                (ksEntity)iPart.NewEntity((short)Obj3dType.o3d_sketch);
            //Получаем интерфейс свойств эскиза
            ksSketchDefinition iDefinitionSketch = (ksSketchDefinition)iSketch.GetDefinition();

            //Устанавливаем плоскость эскиза
            iDefinitionSketch.SetPlane(planeDetal);
            //Создание эскиза
            iSketch.Create();
            //Создание нового 2Д документа
            ksDocument2D iDocument2D = (ksDocument2D)iDefinitionSketch.BeginEdit();
            //Получение радиуса рукоятки
            var rad = _modelelParameters.Parameter(ParametersName.HolderRadius).Value;

            //Создание кругов
            iDocument2D.ksCircle(0, 0, 3, 1);
            iDocument2D.ksCircle(0, 0, rad, 1);
            //Создание эскиза
            iDefinitionSketch.EndEdit();
            //Получение глубины выдавливания
            var depth = _modelelParameters.Parameter(ParametersName.HolderLength).Value;

            //Выполнение выдавливания
            ExctrusionSketch(iPart, iSketch, depth, true);
        }
示例#27
0
 /// <summary>
 /// Метод создает эскиз окружности
 /// </summary>
 /// <param name="coor">Координаты центра окружности</param>
 /// <param name="radius">Радиус окружности</param>
 /// <param name="lineType">Тип линии</param>
 /// <returns></returns>
 public bool DrawCircle(Point coor, double radius, int lineType)
 {
     try
     {
         SketchCreator      sketchCreator = new SketchCreator(_app);
         ksSketchDefinition def           = sketchCreator.MakeSketch();
         ksDocument2D       doc           = (ksDocument2D)def.BeginEdit();
         doc.ksCircle(coor.X, coor.Y, radius, lineType);
         def.EndEdit();
         return(true);
     }
     catch
     {
         return(false);
     }
 }
示例#28
0
        /// <summary>
        /// Создание эскиза для вычитания полости.
        /// </summary>
        /// <param name="part">Указатель на деталь.</param>
        /// <param name="offset">Отстройка плоскости по высоте, равная толщине дна стакана.</param>
        /// <param name="plane">Плоскость.</param>
        public void MakeSketch(ksPart part, double offset, Obj3dType plane = Obj3dType.o3d_planeXOY)
        {
            var entityPlane           = (ksEntity)part.GetDefaultEntity((short)plane);
            var entityOffsetPlane     = (ksEntity)part.NewEntity((short)Obj3dType.o3d_planeOffset);
            var planeOffsetDefinition = (ksPlaneOffsetDefinition)entityOffsetPlane.GetDefinition();

            planeOffsetDefinition.direction = true;
            planeOffsetDefinition.offset    = offset;
            planeOffsetDefinition.SetPlane(entityPlane);
            entityOffsetPlane.Create();

            _entitySketch     = (ksEntity)part.NewEntity((short)Obj3dType.o3d_sketch);
            _sketchDefinition = (ksSketchDefinition)_entitySketch.GetDefinition();

            _sketchDefinition.SetPlane(planeOffsetDefinition);
            _entitySketch.Create();
        }
示例#29
0
        /// <summary>
        ///     Выдавливание конкретной секции
        /// </summary>
        /// <param name="height">Высота</param>
        /// <param name="width">Ширина</param>
        /// <param name="weigth">Толщина</param>
        /// <param name="windowPart">Часть окна</param>
        /// <param name="planeXoy">Плоскость</param>
        /// <param name="xStart">Начало оси Х</param>
        /// <param name="yStart">Начало оси Y</param>
        /// <param name="type"></param>
        private void ExtrudeOdject(double height, double width,
                                   double weigth, ksPart windowPart, ksEntity planeXoy,
                                   double xStart, double yStart, Obj3dType type)
        {
            ksEntity           sketch           = windowPart.NewEntity((short)Obj3dType.o3d_sketch);
            ksSketchDefinition sketchDefinition = sketch.GetDefinition();

            sketchDefinition.SetPlane(planeXoy);
            sketch.Create();

            ksDocument2D document2D = sketchDefinition.BeginEdit();

            DrawRectangle(document2D, xStart, yStart, height, width, null);
            sketchDefinition.EndEdit();

            Extrusion(windowPart, sketch, weigth, type);
        }
        /// <summary>
        /// Создание отверстия крепления
        /// </summary>
        /// <param name="diameterBracing">Диаметр крепления</param>
        /// <param name="lengthBracing">Длина крепления</param>
        /// <param name="lengthLeg">Длина ножки</param>
        /// <param name="lengthHead">Длина головки</param>
        private void BuildBracingHole(double diameterBracing, double lengthBracing, double lengthLeg, double lengthHead)
        {
            #region Константы отверстия крепления
            const int part         = -1;
            const int sketch       = 5;
            const int planeXOY     = 1;
            const int planeOffset  = 14;
            const int shaded       = 3;
            const int etBlind      = 0;
            const int planeXOZ     = 2;
            const int cutExtrusion = 26;
            #endregion

            ksEntity EntityPlane = _part.GetDefaultEntity(planeXOY);
            _part = _doc3D.GetPart(part);
            ksEntity EntityPlane3 = _part.GetDefaultEntity(planeXOZ);

            //Смещение плоскости
            ksEntity PlaneOffHole = _part.NewEntity(planeOffset);
            ksPlaneOffsetDefinition planeOffsetDefinitionHole = PlaneOffHole.GetDefinition();
            planeOffsetDefinitionHole.direction = true;
            planeOffsetDefinitionHole.offset    = diameterBracing / 2;
            planeOffsetDefinitionHole.SetPlane(EntityPlane3);
            PlaneOffHole.Create();

            //Эскиз отверстия крепения
            ksEntity           EntityHole           = _part.NewEntity(sketch);
            ksSketchDefinition sketchDefinitionHole = EntityHole.GetDefinition();
            sketchDefinitionHole.SetPlane(PlaneOffHole);
            EntityHole.Create();
            ksDocument2D DocumentHole = sketchDefinitionHole.BeginEdit();
            DocumentHole.ksCircle(0, -(0.75 * lengthBracing + lengthLeg + lengthHead), diameterBracing / 6, 1);
            sketchDefinitionHole.EndEdit();

            //Выдавливание отверстия крепления
            ksEntity EntityCutExtrusionHole = _part.NewEntity(cutExtrusion);
            ksCutExtrusionDefinition CutExtrusionDefinitionHole = EntityCutExtrusionHole.GetDefinition();
            CutExtrusionDefinitionHole.cut           = true;
            CutExtrusionDefinitionHole.directionType = 0;
            CutExtrusionDefinitionHole.SetSideParam(true, etBlind, diameterBracing, 0, false);
            CutExtrusionDefinitionHole.SetSketch(EntityHole);
            EntityCutExtrusionHole.Create();
            _doc3D.drawMode        = shaded;
            _doc3D.shadedWireframe = true;
        }