Esempio n. 1
0
 /// <summary>
 /// Метод для отрисовки эскиза внешнего обода в КОМПАС-3D
 /// </summary>
 /// <param name="rimsDoc">эскиз</param>
 /// <param name="BearingWidth">Ширина подшипника</param>
 /// <param name="InnerRimDiam">Диаметр внутреннего обода</param>
 /// <param name="OuterRimDiam">Диаметр внешнего обода</param>
 /// <param name="RimsThickness">Толщина подшипника</param>
 /// <param name="BallDiam">Диаметр шарика</param>
 private static void DrawOuterRim(ksDocument2D rimsDoc, double BearingWidth, double InnerRimDiam,
                                  double OuterRimDiam, double RimsThickness, double BallDiam,
                                  RollingElementForm rollingElementForm, double BearingAxis, double GutterDepth, double GutterWidth)
 {
     rimsDoc.ksLineSeg(-BearingWidth / 2, OuterRimDiam / 2, BearingWidth / 2, OuterRimDiam / 2, 1);
     rimsDoc.ksLineSeg(-BearingWidth / 2, OuterRimDiam / 2, -BearingWidth / 2, OuterRimDiam / 2 - RimsThickness, 1);
     rimsDoc.ksLineSeg(BearingWidth / 2, OuterRimDiam / 2, BearingWidth / 2, OuterRimDiam / 2 - RimsThickness, 1);
     if (rollingElementForm is RollingElementForm.Ball)
     {
         rimsDoc.ksLineSeg(-BearingWidth / 2, OuterRimDiam / 2 - RimsThickness,
                           -GutterWidth, OuterRimDiam / 2 - RimsThickness, 1);
         rimsDoc.ksLineSeg(BearingWidth / 2, OuterRimDiam / 2 - RimsThickness,
                           GutterWidth, OuterRimDiam / 2 - RimsThickness, 1);
         rimsDoc.ksArcBy3Points(-GutterWidth, OuterRimDiam / 2 - RimsThickness,
                                0, OuterRimDiam / 2 - RimsThickness + GutterDepth, GutterWidth, OuterRimDiam / 2 - RimsThickness, 1);
     }
     else
     {
         rimsDoc.ksLineSeg(-BearingWidth / 2, OuterRimDiam / 2 - RimsThickness,
                           -GutterWidth, OuterRimDiam / 2 - RimsThickness, 1);
         rimsDoc.ksLineSeg(BearingWidth / 2, OuterRimDiam / 2 - RimsThickness,
                           GutterWidth, OuterRimDiam / 2 - RimsThickness, 1);
         rimsDoc.ksLineSeg(-GutterWidth, OuterRimDiam / 2 - RimsThickness,
                           -GutterWidth, OuterRimDiam / 2 - RimsThickness + GutterDepth, 1);
         rimsDoc.ksLineSeg(GutterWidth, OuterRimDiam / 2 - RimsThickness,
                           GutterWidth, OuterRimDiam / 2 - RimsThickness + GutterDepth, 1);
         rimsDoc.ksLineSeg(-GutterWidth, OuterRimDiam / 2 - RimsThickness + GutterDepth,
                           GutterWidth, OuterRimDiam / 2 - RimsThickness + GutterDepth, 1);
     }
 }
Esempio n. 2
0
 /// <summary>
 /// Функция для рисования эскиза ножек столика
 /// </summary>
 /// <param name="sketchEdit">Объект рисования эскиза</param>
 /// <param name="x">Координата х верхней левой точки квадратной ножки</param>
 /// <param name="y">Координата у верхней левой точки квадратной ножки</param>
 /// <param name="sideLength">Длина стороны квадратной ножки</param>
 private void DrawLeg(ksDocument2D sketchEdit, double x, double y,
                      double sideLength)
 {
     sketchEdit.ksLineSeg(x, y, x + sideLength, y, 1);
     sketchEdit.ksLineSeg(x + sideLength, y,
                          x + sideLength, y - sideLength, 1);
     sketchEdit.ksLineSeg(x + sideLength, y - sideLength,
                          x, y - sideLength, 1);
     sketchEdit.ksLineSeg(x, y - sideLength, x, y, 1);
 }
Esempio n. 3
0
 /// <summary>
 /// Нарисовать четырехугольник с непрямыми углами с круглым отверстием
 /// </summary>
 internal void DrawQuadrangleWithRoundHole()
 {
     if (kompas != null)
     {
         kompas.Visible = true;
         ksDocument3D iDocument3D = (ksDocument3D)kompas.Document3D();
         if (iDocument3D.Create(false /*видимый*/, true /*деталь*/))
         {
             iDocument3D.fileName = "With Round 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.ksCircle(-15, 0, 4, 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();                                   // создадим операцию
                                 }
                             }
                         }
                     }
                 }
             }
         }
     }
 }
Esempio n. 4
0
        /// <summary>
        /// Рисует линию.
        /// </summary>
        /// <param name="sketchEdit">Эскиз для рисования.</param>
        /// <param name="pointsList">Координаты линии.</param>
        private void DrawLine(ksDocument2D sketchEdit, List <PointF> pointsList)
        {
            for (int i = 0; i < pointsList.Count - 1; i++)
            {
                sketchEdit.ksLineSeg(pointsList[i].X, pointsList[i].Y, pointsList[i + 1].X, pointsList[i + 1].Y, 1);
            }

            int index = pointsList.Count - 1;

            sketchEdit.ksLineSeg(pointsList[index].X, pointsList[index].Y, pointsList[0].X, pointsList[0].Y, 1);
        }
Esempio n. 5
0
        /// <summary>
        /// Нарисовать эскиз двух зеркальных блоков для фоторамки.
        /// </summary>
        /// <param name="photoFrame">Шаблон фоторамки.</param>
        /// <param name="draw">Документ эскиза.</param>
        /// <param name="offsetX">Смещение по OX для начальной точки.</param>
        /// <param name="offsetY">Смещение по OY для начальной точки.</param>
        /// <param name="dx">Расстояние между начальными точками по OX
        ///     отрисовки брусков.</param>
        private void DrawSketchBlock(IPhotoFrame photoFrame,
                                     ksDocument2D draw, double offsetX, double offsetY, double dx)
        {
            var h1 = photoFrame.OuterHeight;
            var h2 = photoFrame.InnerHeight;
            var h  = photoFrame.Interval;

            /* Блок для фоторамки представляет собой трапецию,
             *      либо в частном случае квадрат.
             *          B
             *          |\h
             *          | \ C
             *      h1  |  | h2
             *          |  |
             *          | / D
             *          |/h
             *          A
             */

            //координаты для точки А
            var Ax = _startX - offsetX;
            var Ay = _startY - offsetY;
            //координаты для точки B
            var Bx = Ax;
            var By = Ay + h1;

            //
            var h3 = (h1 - h2) / 2;

            //координаты для точки D
            var Dx = Ax + h;
            var Dy = Ay + h3;
            //координаты для точки C
            var Cx = Dx;
            var Cy = Dy + h2;

            var groupRightId = draw.ksNewGroup(0);

            draw.ksLineSeg(Ax, Ay, Bx, By, 1);
            draw.ksLineSeg(Bx, By, Cx, Cy, 1);
            draw.ksLineSeg(Cx, Cy, Dx, Dy, 1);
            draw.ksLineSeg(Dx, Dy, Ax, Ay, 1);

            draw.ksEndObj();
            //координаты для зеркального отображения блока
            Ax += dx / 2;
            Bx  = Ax;

            //симметричное отображение трапеции (блока)
            draw.ksSymmetryObj(groupRightId, Ax, Ay, Bx, By, "1");
        }
Esempio n. 6
0
 /// <summary>
 /// Нарисовать линии на чертеже шайбы
 /// </summary>
 /// <param name="shimSettings">Параметры шайбы</param>
 /// <param name="shimEdit">Чертеж</param>
 private static void DrawShimLines(ShimSettings shimSettings,
                                   ksDocument2D shimEdit)
 {
     shimEdit.ksLineSeg(
         shimSettings.InnerRadius + shimSettings.InnerFillet,
         shimSettings.Height / 2,
         shimSettings.OuterRadius - shimSettings.OuterFillet,
         shimSettings.Height / 2, 1);
     shimEdit.ksLineSeg(
         shimSettings.InnerRadius + shimSettings.InnerFillet,
         -shimSettings.Height / 2,
         shimSettings.OuterRadius - shimSettings.OuterFillet,
         -shimSettings.Height / 2, 1);
 }
Esempio n. 7
0
 /// <summary>
 /// Метод, рисующий эскиз верхней окружности стакана.
 /// </summary>
 /// <param name="radius">Радиус верхней окружности.</param>
 /// <param name="wallwidth">Толщина стенки.</param>
 /// <param name="height">Высота.</param>
 private void DrawEdge(double radius, double wallwidth, double height)
 {
     _sketchEdit = (ksDocument2D)_sketchDefinition.BeginEdit();
     _sketchEdit.ksLineSeg
         (radius, -height, radius - wallwidth, -height, 1);
     _sketchEdit.ksLineSeg
         (radius - wallwidth, -height, radius - wallwidth, throat * height, 1);
     _sketchEdit.ksLineSeg
         (radius - wallwidth, throat * height, radius, throat * height, 1);
     _sketchEdit.ksLineSeg
         (radius, throat * height, radius, -height, 1);
     _sketchEdit.ksLineSeg
         (origin, origin, origin, -50 * 2, 3);
     _sketchDefinition.EndEdit();
     RotateSketch();
 }
Esempio n. 8
0
 /// <summary>
 /// Нарисовать внутреннее скругление шайбы
 /// </summary>
 /// <param name="shimSettings">Параметры шайбы</param>
 /// <param name="shimEdit">Чертеж</param>
 private static void DrawShimInnerFillet(ShimSettings shimSettings,
                                         ksDocument2D shimEdit)
 {
     if (shimSettings.InnerFillet > 0)
     {
         shimEdit.ksArcByPoint(
             shimSettings.InnerRadius + shimSettings.InnerFillet,
             shimSettings.Height / 2 - shimSettings.InnerFillet,
             shimSettings.InnerFillet,
             shimSettings.InnerRadius + shimSettings.InnerFillet,
             shimSettings.Height / 2, shimSettings.InnerRadius,
             shimSettings.Height / 2 - shimSettings.InnerFillet,
             1, 1);
     }
     if (shimSettings.InnerFillet != shimSettings.Height / 2)
     {
         shimEdit.ksLineSeg(shimSettings.InnerRadius,
                            shimSettings.Height / 2 - shimSettings.InnerFillet,
                            shimSettings.InnerRadius,
                            -shimSettings.Height / 2 + shimSettings.InnerFillet, 1);
     }
     if (shimSettings.InnerFillet > 0)
     {
         shimEdit.ksArcByPoint(
             shimSettings.InnerRadius + shimSettings.InnerFillet,
             -shimSettings.Height / 2 + shimSettings.InnerFillet,
             shimSettings.InnerFillet,
             shimSettings.InnerRadius + shimSettings.InnerFillet,
             -shimSettings.Height / 2, shimSettings.InnerRadius,
             -shimSettings.Height / 2 + shimSettings.InnerFillet,
             -1, 1);
     }
 }
Esempio n. 9
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();
                     }
                 }
             }
         }
     }
 }
Esempio n. 10
0
        private void LineDraw(ksDocument2D sketch,
                              KeyboardParametersStorage data, SketchType sketchType)
        {
            switch (sketchType)
            {
            case SketchType.BlackKeyCut:
            {
                sketch.ksLineSeg(-data.BodyHeight + 0.1, 5.5,
                                 -data.BodyHeight + 0.1, 6.5, 1);
                sketch.ksLineSeg(-data.BodyHeight + 0.1, 6.5,
                                 -data.BodyHeight + 1.4, 5.5, 1);
                sketch.ksLineSeg(-data.BodyHeight + 1.4, 5.5,
                                 -data.BodyHeight + 0.1, 5.5, 1);

                sketch.ksLineSeg(-data.BodyHeight + 0.1, 15.5,
                                 -data.BodyHeight + 0.1, 15.0, 1);
                sketch.ksLineSeg(-data.BodyHeight + 0.1, 15.0,
                                 -data.BodyHeight + 1.375, 15.0, 1);
                sketch.ksLineSeg(-data.BodyHeight + 1.375, 15.0,
                                 -data.BodyHeight + 1.375, 15.5, 1);
                sketch.ksLineSeg(-data.BodyHeight + 1.375, 15.5,
                                 -data.BodyHeight + 0.1, 15.5, 1);
                break;
            }

            default:
            {
                break;
            }
            }
        }
Esempio n. 11
0
 /// <summary>
 /// Метод для отрисовки эскиза элемена качения в КОМПАС-3D
 /// </summary>
 /// <param name="ballDoc">эскиз</param>
 /// <param name="BearingWidth">Ширина подшипника</param>
 /// <param name="InnerRimDiam">Диаметр внутреннего обода</param>
 /// <param name="OuterRimDiam">Диаметр внешнего обода</param>
 /// <param name="RimsThickness">Толщина подшипника</param>
 /// <param name="BallDiam">Диаметр шарика</param>
 private static void DrawBalls(ksDocument2D ballDoc, double BearingWidth, double InnerRimDiam,
                               double OuterRimDiam, double RimsThickness, double BallDiam,
                               RollingElementForm rollingElementForm, double BearingAxis, double GutterDepth, double GutterWidth)
 {
     if (rollingElementForm is RollingElementForm.Ball)
     {
         ballDoc.ksArcByAngle(0, BearingAxis, BallDiam / 2, -90, 90, 1, 1);
         ballDoc.ksLineSeg(0, 0, 0, 1, 3);
     }
     else
     {
         ballDoc.ksLineSeg(-GutterWidth, BearingAxis, -GutterWidth, BearingAxis - BallDiam / 2, 1);
         ballDoc.ksLineSeg(-GutterWidth, BearingAxis - BallDiam / 2, GutterWidth,
                           BearingAxis - BallDiam / 2, 1);
         ballDoc.ksLineSeg(GutterWidth, BearingAxis - BallDiam / 2, GutterWidth, BearingAxis, 1);
         ballDoc.ksLineSeg(-GutterWidth, BearingAxis, GutterWidth, BearingAxis, 3);
     }
 }
Esempio n. 12
0
        /// <summary>
        /// Нарисовать шайбу на эскизе
        /// </summary>
        /// <param name="shimSettings">Параметры шайбы</param>
        /// <param name="shimEdit">Чертеж</param>
        private static void DrawShim(ShimSettings shimSettings,
                                     ksDocument2D shimEdit)
        {
            DrawShimLines(shimSettings, shimEdit);
            DrawShimInnerFillet(shimSettings, shimEdit);
            DrawShimOuterFillet(shimSettings, shimEdit);

            // Рисуем осевую линию
            shimEdit.ksLineSeg(0, -5, 0, 5, 3);
        }
Esempio n. 13
0
            protected static void DrawLine(ksDocument2D sketchEdit, params Point[] points)
            {
                if (points.Length < 2)
                {
                    throw new ArgumentException("At least two points required");
                }

                for (var i = 1; i < points.Length; i++)
                {
                    var p1 = points[i - 1];
                    var p2 = points[i];
                    sketchEdit.ksLineSeg(p1.Coordinate1, p1.Coordinate2, p2.Coordinate1, p2.Coordinate2, 1);
                }
            }
Esempio n. 14
0
        /// <summary>
        /// Рисование в компасе квадрата.
        /// axisline = номер линии которую нужно нарисовать осевой
        /// </summary>
        /// <param name="x">Массив x координат точек</param>
        /// <param name="y">Массив y координат точек</param>
        /// <param name="doc2d">Чертеж</param>
        /// <param name="axisline">Номер осевой линии</param>
        public static void DrawRect(double[] x, double[] y,
                                    ksDocument2D doc2d, int axisline = -1)
        {
            int lineStyle = 1;

            for (int k = 0; k < 4; ++k)
            {
                if (k == axisline)
                {
                    // 3 = осевая линия
                    lineStyle = 3;
                }
                doc2d.ksLineSeg(x[k], y[k],
                                x[k + 1], y[k + 1], lineStyle);
                lineStyle = 1;
            }
        }
Esempio n. 15
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 x = -formTotalLength / 2
                       + candySettings.FormDepthByLength + Height;
            double y = -formTotalWidth / 2
                       + candySettings.FormDepthByWidth + Height;

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

                    formSurfaceDocument2D.ksArcByAngle(x, y, Height, 0, 180,
                                                       1, 1);
                    formSurfaceDocument2D.ksLineSeg(-Height + x, 0 + y,
                                                    Height + x, 0 + y, 3);

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

                    CutRotated(part, formSurfaceSketch);

                    y += Length + candySettings.FormDepthByWidth;
                }
                y -= 2 * (Length + candySettings.FormDepthByWidth);
                x += Width + candySettings.FormDepthByLength;
            }
        }
Esempio n. 16
0
        /// <summary>
        /// Метод, рисующий равносторонний многоугольник с заданным расстоянием от центра.
        /// </summary>
        /// <param name="radius">Радиус круга.</param>
        /// <param name="count">Количество углов.</param>
        private void DrawCircle(double radius, int count)
        {
            _sketchEdit = (ksDocument2D)_sketchDefinition.BeginEdit();

            var x1 = radius;
            var y1 = 0.0;
            var x2 = 0.0;
            var y2 = 0.0;

            for (int i = 1; i <= count; i++)
            {
                var koef = 360.0 / (double)count * (double)i;

                x2 = Math.Cos((koef / 180.0) * Math.PI) * radius;
                y2 = Math.Sin((koef / 180.0) * Math.PI) * radius;
                _sketchEdit.ksLineSeg
                    (x1, y1, x2, y2, 1);
                x1 = x2;
                y1 = y2;
            }
            _sketchDefinition.EndEdit();
        }
Esempio n. 17
0
 /// <summary>
 /// Эскиз стакана.
 /// </summary>
 /// <param name="wallWidth">Толщина стенки.</param>
 /// <param name="highDiameter">Диаметр верхней окружности.</param>
 /// <param name="height">Высота.</param>
 /// <param name="bottomThicknes">Толщина дна.</param>
 /// <param name="lowDiameter">Диаметр нижней окружности.</param>
 /// <return>Возвращает выдавленный эскиз.</return>
 private void GlassfulSketch(double wallWidth, double highDiameter, double height,
                             double bottomThicknes, double lowDiameter)
 {
     CreateSketch((short)Obj3dType.o3d_planeXOY);
     _sketchEdit = (ksDocument2D)_sketchDefinition.BeginEdit();
     _sketchEdit.ksLineSeg
         (origin, origin, origin + lowDiameter / 2, origin, 1);
     _sketchEdit.ksLineSeg
         (origin + lowDiameter / 2, origin, highDiameter / 2, height, 1);
     _sketchEdit.ksLineSeg
         (highDiameter / 2, height, highDiameter / 2 - wallWidth, height, 1);
     _sketchEdit.ksLineSeg
         (highDiameter / 2 - wallWidth, height, lowDiameter / 2 - wallWidth, bottomThicknes, 1);
     _sketchEdit.ksLineSeg
         (lowDiameter / 2 - wallWidth, bottomThicknes, origin, bottomThicknes, 1);
     _sketchEdit.ksLineSeg
         (origin, bottomThicknes, origin, origin, 1);
     _sketchEdit.ksLineSeg
         (origin, origin, origin, height * 2, 3);
     _sketchDefinition.EndEdit();
     RotateSketch();
 }
Esempio n. 18
0
        /// <summary>
        /// Метод, создающий осовной эскиз самой ручки
        /// </summary>
        /// <param name="backRadius">Радиус задней части руки</param>
        /// <param name="backLenght">Длина задней части ручки</param>
        /// <param name="frontLenght">Длина передней части ручки</param>
        /// <param name="holeRadius">Радиус тверстия ручки</param>
        private void CreateMainSketch
            (double backRadius, double backLenght, double frontLenght, double holeRadius)
        {
            CreateEntitySketch((short)Obj3dType.o3d_planeYOZ);

            _sketchEdit = (ksDocument2D)_sketchDefinition.BeginEdit();

            _sketchEdit.ksLineSeg
                (-backLenght + 3, -holeRadius, -backLenght, -holeRadius - 4, 1);
            _sketchEdit.ksLineSeg
                (-backLenght, -holeRadius - 4, -backLenght, -backRadius, 1);
            _sketchEdit.ksLineSeg
                (-backLenght, -backRadius, 0, -backRadius, 1);
            _sketchEdit.ksLineSeg
                (0, -backRadius, 0, -20, 1);
            _sketchEdit.ksLineSeg
                (0, -20, 6.5, -30, 1);
            _sketchEdit.ksLineSeg
                (6.5, -30, frontLenght - 6.5, -30, 1);
            _sketchEdit.ksLineSeg
                (frontLenght - 6.5, -30, frontLenght, -20, 1);
            _sketchEdit.ksLineSeg
                (frontLenght, -20, frontLenght, -holeRadius - 4, 1);
            _sketchEdit.ksLineSeg
                (frontLenght, -holeRadius - 4, frontLenght - 3, -holeRadius, 1);
            _sketchEdit.ksLineSeg
                (frontLenght - 3, -holeRadius, -backLenght + 3, -holeRadius, 1);
            _sketchEdit.ksLineSeg
                (-45, 0, 45, 0, 3);
            _sketchDefinition.EndEdit();
        }
Esempio n. 19
0
        /// <summary>
        /// Создание модели шестерни
        /// </summary>
        /// <param name="properties">Передаваемые с формы параметры</param>
        public void CreateModel(Gear properties)
        {
            int teethCount    = properties.TeethCount;
            var angle         = properties.Angle;
            var thickness     = properties.Thickness;
            var shaftDiam     = properties.ShaftDiam;
            var diameterOut   = properties.DiameterOut;
            var diameterIn    = properties.DiameterIn;
            var diameterPitch = (diameterOut + diameterIn) / 2; // делительный диаметр колеса
            var alfa1         = 0.0;
            var alfa2         = 0.0;
            // интерфейсы ортогональных плоскостей
            ksPart iPart = _doc3.GetPart((int)Part_Type.pNew_Part) as ksPart;  //новый компонет

            if (iPart != null)
            {
                // интерфейсы ортогональных плоскостей
                ksEntity planeXoy = iPart.GetDefaultEntity((short)Obj3dType.o3d_planeXOY) as ksEntity;
                ksEntity planeXoz = iPart.GetDefaultEntity((short)Obj3dType.o3d_planeXOZ) as ksEntity;
                ksEntity planeYoz = iPart.GetDefaultEntity((short)Obj3dType.o3d_planeYOZ) as ksEntity;
                // интерфейс эскиза (половина контура сечения колеса)
                ksEntity iSketchEntity = iPart.NewEntity((short)Obj3dType.o3d_sketch) as ksEntity;
                if (iSketchEntity != null)
                {
                    // интерфейс параметров эскиза
                    ksSketchDefinition iSketchDef = iSketchEntity.GetDefinition() as ksSketchDefinition;
                    if (iSketchDef != null)
                    {
                        if (planeXoy != null)
                        {
                            // устанавливаем плоскость,
                            // на которой создается эскиз
                            iSketchDef.SetPlane(planeXoy);

                            iSketchEntity.Create();

                            // запускаем процесс редактирования эскиза
                            // doc – указатель на интерфейс ksDocument2D
                            _doc = iSketchDef.BeginEdit() as ksDocument2D;
                            if (_doc != null)
                            {
                                _doc.ksLineSeg(-thickness / 2, 00, thickness / 2, 0, 3); //3 - осевая линия
                                _doc.ksLineSeg(thickness / 2, shaftDiam / 2, -thickness / 2, shaftDiam / 2, 1);
                                _doc.ksLineSeg(thickness / 2, shaftDiam / 2, thickness / 2, diameterOut / 2, 1);
                                _doc.ksLineSeg(-thickness / 2, diameterOut / 2, -thickness / 2, shaftDiam / 2, 1);
                                _doc.ksLineSeg(-thickness / 2, diameterOut / 2, thickness / 2, diameterOut / 2, 1);
                            }
                            iSketchDef.EndEdit();
                        }
                    }
                }
                // интерфейс базовой операции вращения
                ksEntity iBaseRotatedEntity = iPart.NewEntity((short)Obj3dType.o3d_baseRotated) as ksEntity;
                if (iBaseRotatedEntity != null)
                {
                    // интерфейс параметров вращения
                    ksBaseRotatedDefinition iBaseRotatedDef =
                        iBaseRotatedEntity.GetDefinition() as ksBaseRotatedDefinition;
                    if (iBaseRotatedDef != null)
                    {
                        // настройка параметров вращения
                        iBaseRotatedDef.SetThinParam(false, (short)Direction_Type.dtNormal, 1, 1);
                        iBaseRotatedDef.SetSideParam(true, 360.0);
                        iBaseRotatedDef.toroidShapeType = false;
                        iBaseRotatedDef.SetSketch(iSketchEntity);
                        // создаем операцию вращения
                        // результат – заготовка зубчатого колеса
                        iBaseRotatedEntity.Create();
                    }
                }
                ksEntity iSketch1Entity = iPart.NewEntity((short)Obj3dType.o3d_sketch) as ksEntity;
                if (iSketch1Entity != null)
                {
                    ksSketchDefinition iSketch1Def = iSketch1Entity.GetDefinition() as ksSketchDefinition;
                    if (iSketch1Def != null)
                    {
                        if (planeYoz != null)
                        {
                            // размещаем эскиз на плоскости XOY
                            iSketch1Def.SetPlane(planeXoy);
                            iSketch1Entity.Create();
                            _doc = iSketch1Def.BeginEdit() as ksDocument2D;
                            if (_doc != null)
                            {
                                var width = properties.KeywayWidth;
                                _doc.ksLineSeg(thickness / 2, -width / 2, -thickness / 2, -width / 2, 1);
                                _doc.ksLineSeg(-thickness / 2, width / 2, -thickness / 2, -width / 2, 1);
                                _doc.ksLineSeg(-thickness / 2, width / 2, thickness / 2, width / 2, 1);
                                _doc.ksLineSeg(thickness / 2, width / 2, thickness / 2, -width / 2, 1);
                            }
                            iSketch1Def.EndEdit();
                        }
                    }
                }
                // интерфейс операции Вырезать выдавливанием
                ksEntity iCutExtrusion = iPart.NewEntity((short)Obj3dType.o3d_cutExtrusion) as ksEntity;
                if (iCutExtrusion != null)
                {
                    // интерфейс параметров вырезания
                    ksCutExtrusionDefinition iCutExtrusionDef =
                        iCutExtrusion.GetDefinition() as ksCutExtrusionDefinition;
                    if (iCutExtrusionDef != null)
                    {
                        // настройка параметров
                        iCutExtrusionDef.SetSketch(iSketch1Entity);
                        // направление
                        iCutExtrusionDef.directionType = (short)Direction_Type.dtNormal;
                        // величина вырезания по каждому из направлений
                        iCutExtrusionDef.SetSideParam(true, (short)ksEndTypeEnum.etBlind,
                                                      properties.KeywayDepth + shaftDiam / 2, 0, false);
                        iCutExtrusionDef.SetThinParam(false, 0, 0, 0);
                        iCutExtrusion.Create();
                    }
                }
                // интерфейс смещенной плоскости
                ksEntity iOffsetPlaneEntity = iPart.NewEntity((short)Obj3dType.o3d_planeOffset) as ksEntity;
                if (iOffsetPlaneEntity != null)
                {
                    // интерфейс параметров смещенной плоскости
                    ksPlaneOffsetDefinition iOffsetPlaneDef =
                        iOffsetPlaneEntity.GetDefinition() as ksPlaneOffsetDefinition;
                    if (iOffsetPlaneDef != null)
                    {
                        // величина, базовая плоскость и другие параметры смещения
                        iOffsetPlaneDef.offset = thickness / 2;
                        iOffsetPlaneDef.SetPlane(planeYoz);
                        iOffsetPlaneDef.direction = false;
                        // делаем плоскость скрытой
                        iOffsetPlaneEntity.hidden = true;
                        // создаем вспомогательную плоскость
                        iOffsetPlaneEntity.Create();
                    }
                }
                // эскиз первого выреза между зубьями
                ksEntity iSketch2Entity = iPart.NewEntity((short)Obj3dType.o3d_sketch) as ksEntity;
                if (iSketch2Entity != null)
                {
                    ksSketchDefinition iSketch2Def = iSketch2Entity.GetDefinition() as ksSketchDefinition;
                    if (iSketch2Def != null)
                    {
                        // базовая плоскость – вспомогательная iOffsetPlaneEntity
                        iSketch2Def.SetPlane(iOffsetPlaneEntity);
                        iSketch2Entity.Create();
                        _doc  = iSketch2Def.BeginEdit() as ksDocument2D;
                        alfa1 = 360.0 / teethCount;
                        _doc.ksMtr(0, 0, 90, 1, 1);
                        // вычерчивание изображения эскиза
                        // вместо эвольвент для простоты
                        // берем обычные дуги по трем точкам
                        _doc.ksArcBy3Points(-(diameterOut / 2 + 0.1) * Math.Sin(DegToRad(0)),
                                            -(diameterOut / 2 + 0.1) * Math.Cos(DegToRad(0)),
                                            -diameterPitch / 2 * Math.Sin(DegToRad(alfa1 / 8)),
                                            -diameterPitch / 2 * Math.Cos(DegToRad(alfa1 / 8)),
                                            -diameterIn / 2 * Math.Sin(DegToRad(alfa1 / 4)),
                                            -diameterIn / 2 * Math.Cos(DegToRad(alfa1 / 4)), 1);
                        _doc.ksArcByPoint(0, 0, diameterIn / 2, -diameterIn / 2 * Math.Sin(DegToRad(alfa1 / 4)),
                                          -diameterIn / 2 * Math.Cos(DegToRad(alfa1 / 4)),
                                          -diameterIn / 2 * Math.Sin(DegToRad(alfa1 / 2)),
                                          -diameterIn / 2 * Math.Cos(DegToRad(alfa1 / 2)), -1, 1);
                        _doc.ksArcBy3Points(-diameterIn / 2 * Math.Sin(DegToRad(alfa1 / 2)),
                                            -diameterIn / 2 * Math.Cos(DegToRad(alfa1 / 2)),
                                            -diameterPitch / 2 * Math.Sin(DegToRad(0.625 * alfa1)),
                                            -diameterPitch / 2 * Math.Cos(DegToRad(0.625 * alfa1)),
                                            -(diameterOut / 2 + 0.1) * Math.Sin(DegToRad(0.75 * alfa1)),
                                            -(diameterOut / 2 + 0.1) * Math.Cos(DegToRad(0.75 * alfa1)), 1);
                        _doc.ksArcBy3Points(-(diameterOut / 2 + 0.1) * Math.Sin(DegToRad(0.75 * alfa1)),
                                            -(diameterOut / 2 + 0.1) * Math.Cos(DegToRad(0.75 * alfa1)),
                                            -(diameterOut / 2 + 2) * Math.Sin(DegToRad(0.375 * alfa1)),
                                            -(diameterOut / 2 + 2) * Math.Cos(DegToRad(0.375 * alfa1)),
                                            -(diameterOut / 2 + 0.1) * Math.Sin(DegToRad(0)),
                                            -(diameterOut / 2 + 0.1) * Math.Cos(DegToRad(0)), 1);
                        _doc.ksDeleteMtr();
                        iSketch2Def.EndEdit();
                    }
                }
                // интерфейс второго эскиза выреза между зубьями
                ksEntity iSketch3Entity = iPart.NewEntity((short)Obj3dType.o3d_sketch) as ksEntity;
                if (iSketch3Entity != null)
                {
                    ksSketchDefinition iSketch3Def = iSketch3Entity.GetDefinition() as ksSketchDefinition;
                    if (iSketch3Def != null)
                    {
                        // строим на плоскости YOZ
                        iSketch3Def.SetPlane(planeYoz);
                        iSketch3Entity.Create();
                        _doc  = iSketch3Def.BeginEdit() as ksDocument2D;
                        alfa2 = -(180 / Math.PI * (thickness * Math.Tan(Math.PI * (angle) / 180) / diameterPitch));
                        _doc.ksMtr(0, 0, 90, 1, 1);
                        // вычерчивание изображения эскиза
                        // вместо эвольвент для простоты
                        // берем обычные дуги по трем точкам
                        _doc.ksArcBy3Points(-(diameterOut / 2 + 0.1) * Math.Sin(DegToRad(alfa2)),
                                            -(diameterOut / 2 + 0.1) * Math.Cos(DegToRad(alfa2)),
                                            -diameterPitch / 2 * Math.Sin(DegToRad(alfa1 / 8 + alfa2)),
                                            -diameterPitch / 2 * Math.Cos(DegToRad(alfa1 / 8 + alfa2)),
                                            -diameterIn / 2 * Math.Sin(DegToRad(alfa1 / 4 + alfa2)),
                                            -diameterIn / 2 * Math.Cos(DegToRad(alfa1 / 4 + alfa2)), 1);
                        _doc.ksArcByPoint(0, 0, diameterIn / 2, -diameterIn / 2 * Math.Sin(DegToRad(alfa1 / 4 + alfa2)),
                                          -diameterIn / 2 * Math.Cos(DegToRad(alfa1 / 4 + alfa2)),
                                          -diameterIn / 2 * Math.Sin(DegToRad(alfa1 / 2 + alfa2)),
                                          -diameterIn / 2 * Math.Cos(DegToRad(alfa1 / 2 + alfa2)), -1, 1);
                        _doc.ksArcBy3Points(-diameterIn / 2 * Math.Sin(DegToRad(alfa1 / 2 + alfa2)),
                                            -diameterIn / 2 * Math.Cos(DegToRad(alfa1 / 2 + alfa2)),
                                            -diameterPitch / 2 * Math.Sin(DegToRad(0.625 * alfa1 + alfa2)),
                                            -diameterPitch / 2 * Math.Cos(DegToRad(0.625 * alfa1 + alfa2)),
                                            -(diameterOut / 2 + 0.1) * Math.Sin(DegToRad(0.75 * alfa1 + alfa2)),
                                            -(diameterOut / 2 + 0.1) * Math.Cos(DegToRad(0.75 * alfa1 + alfa2)), 1);
                        _doc.ksArcBy3Points(-(diameterOut / 2 + 0.1) * Math.Sin(DegToRad(0.75 * alfa1 + alfa2)),
                                            -(diameterOut / 2 + 0.1) * Math.Cos(DegToRad(0.75 * alfa1 + alfa2)),
                                            -(diameterOut / 2 + 2) * Math.Sin(DegToRad(0.375 * alfa1 + alfa2)),
                                            -(diameterOut / 2 + 2) * Math.Cos(DegToRad(0.375 * alfa1 + alfa2)),
                                            -(diameterOut / 2 + 0.1) * Math.Sin(DegToRad(alfa2)),
                                            -(diameterOut / 2 + 0.1) * Math.Cos(DegToRad(alfa2)),
                                            1);
                        _doc.ksDeleteMtr();
                        iSketch3Def.EndEdit();
                    }
                }
                // вторая смещенная плоскость
                ksEntity iOffsetPlane1Entity = iPart.NewEntity((short)Obj3dType.o3d_planeOffset) as ksEntity;
                if (iOffsetPlane1Entity != null)
                {
                    ksPlaneOffsetDefinition iOffsetPlane1Def =
                        iOffsetPlane1Entity.GetDefinition() as ksPlaneOffsetDefinition;
                    if (iOffsetPlane1Def != null)
                    {
                        // величина смещения та же
                        iOffsetPlane1Def.offset = thickness / 2;
                        // направление противоположное
                        iOffsetPlane1Def.direction = true;
                        iOffsetPlane1Def.SetPlane(planeYoz);
                        // делаем плоскость скрытой
                        iOffsetPlane1Entity.hidden = true;
                        // создаем смещенную плоскость
                        iOffsetPlane1Entity.Create();
                    }
                }
                // третий (последний) эскиз выреза между зубьями
                ksEntity iSketch4Entity = iPart.NewEntity((short)Obj3dType.o3d_sketch) as ksEntity;
                if (iSketch4Entity != null)
                {
                    ksSketchDefinition iSketch4Def = iSketch4Entity.GetDefinition() as ksSketchDefinition;
                    if (iSketch4Def != null)
                    {
                        // базовая плоскость – только что созданная смещенная
                        iSketch4Def.SetPlane(iOffsetPlane1Entity);
                        iSketch4Entity.Create();
                        _doc  = iSketch4Def.BeginEdit() as ksDocument2D;
                        alfa2 = -(180 / Math.PI * (2 * thickness * Math.Tan(Math.PI * (angle) / 180) / diameterPitch));
                        _doc.ksMtr(0, 0, 90, 1, 1);
                        // вычерчивание изображения эскиза
                        // вместо эвольвент для простоты
                        // берем обычные дуги по трем точкам
                        _doc.ksArcBy3Points(-(diameterOut / 2 + 0.1) * Math.Sin(DegToRad(alfa2)),
                                            -(diameterOut / 2 + 0.1) * Math.Cos(DegToRad(alfa2)),
                                            -diameterPitch / 2 * Math.Sin(DegToRad(alfa1 / 8 + alfa2)),
                                            -diameterPitch / 2 * Math.Cos(DegToRad(alfa1 / 8 + alfa2)),
                                            -diameterIn / 2 * Math.Sin(DegToRad(alfa1 / 4 + alfa2)),
                                            -diameterIn / 2 * Math.Cos(DegToRad(alfa1 / 4 + alfa2)), 1);
                        _doc.ksArcByPoint(0, 0, diameterIn / 2, -diameterIn / 2 * Math.Sin(DegToRad(alfa1 / 4 + alfa2)),
                                          -diameterIn / 2 * Math.Cos(DegToRad(alfa1 / 4 + alfa2)),
                                          -diameterIn / 2 * Math.Sin(DegToRad(alfa1 / 2 + alfa2)),
                                          -diameterIn / 2 * Math.Cos(DegToRad(alfa1 / 2 + alfa2)), -1, 1);
                        _doc.ksArcBy3Points(-diameterIn / 2 * Math.Sin(DegToRad(alfa1 / 2 + alfa2)),
                                            -diameterIn / 2 * Math.Cos(DegToRad(alfa1 / 2 + alfa2)),
                                            -diameterPitch / 2 * Math.Sin(DegToRad(0.625 * alfa1 + alfa2)),
                                            -diameterPitch / 2 * Math.Cos(DegToRad(0.625 * alfa1 + alfa2)),
                                            -(diameterOut / 2 + 0.1) * Math.Sin(DegToRad(0.75 * alfa1 + alfa2)),
                                            -(diameterOut / 2 + 0.1) * Math.Cos(DegToRad(0.75 * alfa1 + alfa2)), 1);
                        _doc.ksArcBy3Points(-(diameterOut / 2 + 0.1) * Math.Sin(DegToRad(0.75 * alfa1 + alfa2)),
                                            -(diameterOut / 2 + 0.1) * Math.Cos(DegToRad(0.75 * alfa1 + alfa2)),
                                            -(diameterOut / 2 + 2) * Math.Sin(DegToRad(0.375 * alfa1 + alfa2)),
                                            -(diameterOut / 2 + 2) * Math.Cos(DegToRad(0.375 * alfa1 + alfa2)),
                                            -(diameterOut / 2 + 0.1) * Math.Sin(DegToRad(alfa2)),
                                            -(diameterOut / 2 + 0.1) * Math.Cos(DegToRad(alfa2)),
                                            1);
                        _doc.ksDeleteMtr();
                        iSketch4Def.EndEdit();
                    }
                }
                // интерфейс операции Вырезать по сечениям
                ksEntity iCutLoftEntity = iPart.NewEntity((short)Obj3dType.o3d_cutLoft) as ksEntity;
                if (iCutLoftEntity != null)
                {
                    // интерфейс параметров операции по сечениям
                    ksCutLoftDefinition iCutLoftDef = iCutLoftEntity.GetDefinition() as ksCutLoftDefinition;
                    if (iCutLoftDef != null)
                    {
                        // интерфейс массива ksEntityCollection
                        // коллекции эскизов для вырезания по сечениям
                        ksEntityCollection collect = iCutLoftDef.Sketchs() as ksEntityCollection;
                        // добавляем эскизы в колекцию
                        collect.Add(iSketch2Entity);
                        collect.Add(iSketch3Entity);
                        collect.Add(iSketch4Entity);
                        // создаем операцию по сечениям
                        // результат – первый вырез между зубьями в венце колеса
                        iCutLoftEntity.Create();
                    }
                }
                // интерфейс вспомогательной оси на пересечении двух плоскостей
                ksEntity iAxis = iPart.NewEntity((short)Obj3dType.o3d_axis2Planes) as ksEntity;
                if (iAxis != null)
                {
                    // интерфейс параметров вспомогательной оси
                    // на пересечении плоскостей
                    ksAxis2PlanesDefinition iAxis2PlDef = iAxis.GetDefinition() as ksAxis2PlanesDefinition;
                    if (iAxis2PlDef != null)
                    {
                        // задаем плоскости
                        iAxis2PlDef.SetPlane(1, planeXoz);
                        iAxis2PlDef.SetPlane(2, planeXoy);
                        // делаем ось невидимой
                        iAxis.hidden = true;
                        // создаем вспомогательную ось
                        iAxis.Create();
                    }
                }
                // интерфейс операции Массив по концентрической сетке
                ksEntity iCircularCopy = iPart.NewEntity((short)Obj3dType.o3d_circularCopy) as ksEntity;
                if (iCircularCopy != null)
                {
                    // интерфейс параметров операции копирования по массиву
                    ksCircularCopyDefinition iCirCopyDef = iCircularCopy.GetDefinition() as ksCircularCopyDefinition;
                    if (iCirCopyDef != null)
                    {
                        // коллекция операций для копирования
                        ksEntityCollection collect1 = iCirCopyDef.GetOperationArray() as ksEntityCollection;
                        // операция всего лишь одна – вырезание зуба
                        collect1.Add(iCutLoftEntity);
                        // количество копий, равно количеству зубьев
                        iCirCopyDef.count2  = teethCount;
                        iCirCopyDef.factor2 = true;
                        // ось копирования
                        iCirCopyDef.SetAxis(iAxis);
                        // создаем концентрический массив – колесо готово!
                        iCircularCopy.Create();
                    }
                }
            }
        }
Esempio n. 20
0
        /// <summary>
        /// Метод рисует эскиз в виде части сектора
        /// </summary>
        /// <param name="internalArcOfDipRadius">Внутренний диаметр выреза</param>
        /// <param name="externalArcOfDipRadius">Внещний диаметр выреза</param>
        /// <param name="m">Модуль жесткости</param>
        /// <param name="z">Количество зубъев</param>
        /// <param name="k">Ширина ребер жескости</param>
        /// <param name="angle54">Угол 54 градусов</param>
        /// <returns></returns>
        public bool DrawDipSketch(double internalArcOfDipRadius, double externalArcOfDipRadius,
                                  double m, double z, double k, double angle54)
        {
            double a0   = _app.Mat.ksAngle(0, 0, 1, 0);
            double a180 = _app.Mat.ksAngle(0, 0, -1, 0);
            double x;
            double y;
            double l = k / 2;

            // диаметр большей дуги углубления
            // диаметр меньшей дуги углубления
            try
            {
                SketchCreator      sketchCreator = new SketchCreator(_app);
                ksSketchDefinition def           = sketchCreator.MakeSketch();
                ksDocument2D       doc           = (ksDocument2D)def.BeginEdit();
                short mathPoint = (short)StructType2DEnum.ko_MathPointParam;

                ksMathPointParam p1 = (ksMathPointParam)_app.Kompas.GetParamStruct(mathPoint);
                // задается проекция толщины ребра жесткости на ось Х
                p1.x = -l / Math.Sin(angle54);
                p1.y = 0;

                // координаты точки на ребре жесткости
                ksMathPointParam p2 = (ksMathPointParam)_app.Kompas.GetParamStruct(mathPoint);
                p2.x = (Math.Cos(angle54) * m * z)
                       + p1.x;
                p2.y = Math.Sin(angle54) * m * z;
                Point point1 = new Point(p1.x, p1.y);
                Point point2 = new Point(p2.x, p2.y);

                // координаты точки пересечения большей дуги углубления
                // и прямой проходящей вдоль ребра жесткости
                ksMathPointParam pA             = (ksMathPointParam)_app.Kompas.GetParamStruct(mathPoint);
                PointIntersect   pointIntersect = new PointIntersect(_app);
                pointIntersect.LinArc(point1, point2, internalArcOfDipRadius, a0, a180, pA);

                // координаты точки пересечения меньшей дуги углубления
                // и прямой проходящей вдоль ребра жесткости
                ksMathPointParam pB = (ksMathPointParam)_app.Kompas.GetParamStruct(mathPoint);
                pointIntersect.LinArc(point1, point2, externalArcOfDipRadius, a0, a180, pB);

                double lineSegY = m * (z + 3);
                doc.ksPoint(pB.x, pB.y, 1);
                ksMathPointParam pC = (ksMathPointParam)_app.Kompas.GetParamStruct(mathPoint);
                _app.Mat.ksSymmetry(pA.x, pA.y, 0, 0, 0, lineSegY, out x, out y);
                pC.x = x;
                pC.y = y;

                ksMathPointParam pD = (ksMathPointParam)_app.Kompas.GetParamStruct(mathPoint);
                _app.Mat.ksSymmetry(pB.x, pB.y, 0, 0, 0, lineSegY, out x, out y);
                pD.x = x;
                pD.y = y;

                doc.ksArcByPoint(0, 0, internalArcOfDipRadius, pA.x, pA.y, pC.x, pC.y, 1, 1);
                doc.ksArcByPoint(0, 0, externalArcOfDipRadius, pB.x, pB.y, pD.x, pD.y, 1, 1);
                doc.ksLineSeg(pA.x, pA.y, pB.x, pB.y, 1);
                doc.ksLineSeg(pC.x, pC.y, pD.x, pD.y, 1);

                def.EndEdit();
                return(true);
            }
            catch
            {
                return(false);
            }
        }
Esempio n. 21
0
        /// <summary>
        /// Метод рисует эскиз для выреза зубьев согласно расчетам в работе 1 по ссылке
        /// http://edu.ascon.ru/source/files/methods/method_osnovy_autoconstruct.pdf
        /// </summary>
        public bool DrawGearTeeth(double m, double baseCircle,
                                  double mainCircle, double projectionCircle, double troughsCircle)
        {
            try
            {
                SketchCreator      sketchCreator = new SketchCreator(_app);
                ksSketchDefinition def           = sketchCreator.MakeSketch();
                ksDocument2D       doc           = (ksDocument2D)def.BeginEdit();
                // углы
                double[] angle = new double[4] {
                    0, 90, 180, 270
                };

                _pointArraySize = 1;
                Array.Resize <Point>(ref _pointArray, _pointArraySize);
                _pointArray[0] = new Point(0, 0);

                // точка 1
                double[] parameters = new double[] { 0, projectionCircle, baseCircle / 2, angle[0], angle[2] };
                GetPointIntersect(_linArc, parameters);

                // точка 2
                parameters = new double[] { _mathPointArray[0].x, _mathPointArray[0].y,
                                            baseCircle / 2, angle[0], angle[2],
                                            0.5 * Math.PI * m, angle[1], angle[3] };
                GetPointIntersect(_arcArc, parameters);


                // точка 3
                parameters = new double[] {
                    _mathPointArray[_mathPointArraySize - 1].x, _mathPointArray[_mathPointArraySize - 1].y,
                    mainCircle / 2, angle[0], angle[2], baseCircle / 6, angle[3], angle[1]
                };
                GetPointIntersect(_arcArc, parameters);

                // точка С
                parameters = new double[] {
                    _mathPointArray[_mathPointArraySize - 1].x, _mathPointArray[_mathPointArraySize - 1].y,
                    projectionCircle / 2, angle[0], angle[2], baseCircle / 6, angle[1], angle[3]
                };
                GetPointIntersect(_arcArc, parameters);

                // точка 4
                parameters = new double[] {
                    _mathPointArray[_mathPointArraySize - 2].x, _mathPointArray[_mathPointArraySize - 2].y,
                    mainCircle / 2, angle[0], angle[2], baseCircle / 6, angle[1], angle[3]
                };
                GetPointIntersect(_arcArc, parameters);

                // точка F
                parameters = new double[] {
                    _mathPointArray[_mathPointArraySize - 1].x, _mathPointArray[_mathPointArraySize - 1].y,
                    troughsCircle / 2, angle[0], angle[2]
                };
                GetPointIntersect(_linArc, parameters);


                // точка 5
                parameters = new double[] {
                    _mathPointArray[0].x, _mathPointArray[0].y,
                    baseCircle / 2, angle[0], angle[2], 0.75 * Math.PI * m, angle[1], angle[3]
                };
                GetPointIntersect(_arcArc, parameters);


                // точка А
                GetSymmetry(3);

                // точка D
                GetSymmetry(5);

                // точка 3'
                GetSymmetry(2);

                // точка 4'
                GetSymmetry(4);

                _mathPointArraySize++;
                Array.Resize <ksMathPointParam>(ref _mathPointArray, _mathPointArraySize);
                short mathPoint = (short)StructType2DEnum.ko_MathPointParam;
                _mathPointArray[_mathPointArraySize - 1]   = (ksMathPointParam)_app.Kompas.GetParamStruct(mathPoint);
                _mathPointArray[_mathPointArraySize - 1].x = 0;
                _mathPointArray[_mathPointArraySize - 1].y = 0;

                doc.ksArcByPoint(_mathPointArray[2].x, _mathPointArray[2].y, baseCircle / 6,
                                 _mathPointArray[3].x, _mathPointArray[3].y, _mathPointArray[4].x, _mathPointArray[4].y, 1, 1);
                doc.ksArcByPoint(_mathPointArray[9].x, _mathPointArray[9].y, baseCircle / 6,
                                 _mathPointArray[10].x, _mathPointArray[10].y, _mathPointArray[7].x, _mathPointArray[7].y, 1, 1);
                doc.ksArcByPoint(_mathPointArray[11].x, _mathPointArray[11].y, troughsCircle / 2,
                                 _mathPointArray[5].x, _mathPointArray[5].y, _mathPointArray[8].x, _mathPointArray[8].y, 1, 1);
                doc.ksArcByPoint(_mathPointArray[11].x, _mathPointArray[11].y, projectionCircle / 2,
                                 _mathPointArray[3].x, _mathPointArray[3].y, _mathPointArray[7].x, _mathPointArray[7].y, 1, 1);
                doc.ksLineSeg(_mathPointArray[4].x, _mathPointArray[4].y, _mathPointArray[5].x, _mathPointArray[5].y, 1);
                doc.ksLineSeg(_mathPointArray[10].x, _mathPointArray[10].y, _mathPointArray[8].x, _mathPointArray[8].y, 1);

                def.EndEdit();
                return(true);
            }
            catch
            {
                return(false);
            }
        }
Esempio n. 22
0
 /// <summary>
 /// Функция для рисовки разделителей
 /// </summary>
 /// <param name="sketchEdit">Объект рисования эскиза</param>
 /// <param name="x">Координата х </param>
 /// <param name="y">Координата у </param>
 /// <param name="a">Сторона прямоугольника 1</param>
 /// <param name="b">Сторона прямоугольника 2</param>
 private void DrawSeptum(ksDocument2D sketchEdit, double x, double y, double a, double b, int type)
 {
     if (type == 0)
     {
         sketchEdit.ksLineSeg(x, y, x + b, y, 1);
         sketchEdit.ksLineSeg(x + b, y, x + b, y - a, 1);
         sketchEdit.ksLineSeg(x + b, y - a, x, y - a, 1);
         sketchEdit.ksLineSeg(x, y - a, x, y, 1);
     }
     if (type == 1)
     {
         sketchEdit.ksLineSeg(x, y, x, y - a, 1);
         sketchEdit.ksLineSeg(x, y - a, x - b, y - a, 1);
         sketchEdit.ksLineSeg(x - b, y - a, x - b, y, 1);
         sketchEdit.ksLineSeg(x - b, y, x, y, 1);
     }
     if (type == 2)
     {
         sketchEdit.ksLineSeg(x, y, x, y + a, 1);
         sketchEdit.ksLineSeg(x, y + a, x + b, y + a, 1);
         sketchEdit.ksLineSeg(x + b, y + a, x + b, y, 1);
         sketchEdit.ksLineSeg(x + b, y, x, y, 1);
     }
 }
Esempio n. 23
0
        // Создать вид
        private void DrawView()
        {
            ksViewParam par = (ksViewParam)kompas.GetParamStruct((short)StructType2DEnum.ko_ViewParam);

            if (par != null)
            {
                int number = 5;
                par.Init();
                par.x      = 10;
                par.y      = 20;
                par.scale_ = 0.5;
                par.angle  = 45;
                par.color  = Color.FromArgb(10, 20, 10).ToArgb();
                par.state  = ldefin2d.stACTIVE;
                par.name   = "User view";

                reference v = doc.ksCreateSheetView(par, ref number);
                number = doc.ksGetViewNumber(v);
                string buf = string.Format("Создали вид: ref = {0}, number = {1}", v, number);
                kompas.ksMessage(buf);

                reference gr = doc.ksNewGroup(0);
                doc.ksLineSeg(20, 10, 20, 30, 1);
                doc.ksLineSeg(20, 30, 40, 30, 1);
                doc.ksLineSeg(40, 30, 40, 10, 1);
                doc.ksLineSeg(40, 10, 20, 10, 1);
                int res = doc.ksEndGroup();

                doc.ksAddObjGroup(gr, v);
                kompas.ksMessage("Добавили вид в группу");
                kompas.ksMessageBoxResult();

                reference p = doc.ksLineSeg(10, 10, 30, 30, 0);
                doc.ksAddObjGroup(gr, p);
                kompas.ksMessage("Добавили элемент в группу");
                kompas.ksMessageBoxResult();

                doc.ksRotateObj(gr, 0, 0, -45);

                // Взять параметры вида
                par.Init();
                doc.ksGetObjParam(v, par, ldefin2d.ALLPARAM);

                buf = string.Format("x = {0:.##}, y = {1:.##}, angl = {2:.##}, name = {3}, st = {4}", par.x, par.y, par.angle, par.name, par.state);
                kompas.ksMessage(buf);

                // Сделаем текущим системный вид (номер 0)
                doc.ksOpenView(0);
                // Состояние вида: только чтение
                ksLtVariant vart = (ksLtVariant)kompas.GetParamStruct((short)StructType2DEnum.ko_LtVariant);
                if (vart != null)
                {
                    vart.Init();
                    vart.intVal = ldefin2d.stREADONLY;
                    doc.ksSetObjParam(v, vart, ldefin2d.VIEW_LAYER_STATE);
                }
            }
        }
Esempio n. 24
0
        // Работа с документом
        private void WorkDocument()
        {
            doc = (ksDocument2D)kompas.Document2D();
            ksDocumentParam docPar  = (ksDocumentParam)kompas.GetParamStruct((short)StructType2DEnum.ko_DocumentParam);
            ksDocumentParam docPar1 = (ksDocumentParam)kompas.GetParamStruct((short)StructType2DEnum.ko_DocumentParam);

            if ((docPar != null) & (docPar1 != null))
            {
                /*docPar.fileName = @"c:\2.cdw";
                 * docPar.comment = "Create document";
                 * docPar.author = "User";*/
                docPar.regime = 0;
                docPar.type   = (short)DocType.lt_DocFragment;

                /*ksSheetPar shPar = (ksSheetPar)docPar.GetLayoutParam();
                 * if (shPar != null)
                 * {
                 *      shPar.shtType = 1;
                 *      shPar.layoutName = string.Empty;
                 *      ksStandartSheet stPar = (ksStandartSheet)shPar.GetSheetParam();
                 * }*/
                // Создали документ: лист, формат А4, горизонтально расположенный
                // и с системным штампом 1
                doc.ksCreateDocument(docPar);

                //int number = 0;
                ksViewParam      par  = (ksViewParam)kompas.GetParamStruct((short)StructType2DEnum.ko_ViewParam);
                ksRectangleParam par1 = (ksRectangleParam)kompas.GetParamStruct((short)StructType2DEnum.ko_RectangleParam);
                if (par != null)
                {
                    /*number = 2;
                     *                  par.Init();
                     *                  par.x = 0;
                     *                  par.y = 0;
                     *                  //par.scale_ = 0.5;
                     *                  //par.angle = 45;
                     *                  par.color = Color.FromArgb(10, 20, 10).ToArgb();
                     *                  par.state = ldefin2d.stACTIVE;
                     *                  //par.name = "User view";
                     *                  // У документа создадим вид с номером 2, масштабом 0.5, под углом 45 гр
                     *                  doc.ksCreateSheetView(par, ref number);
                     *
                     *                  // Создадим слой с номером 5
                     *                  //doc.ksLayer(5);*/
                    par1.x      = 0;
                    par1.y      = 0;
                    par1.height = 100;
                    par1.width  = 200;
                    doc.ksRectangle(par1);

                    doc.ksLineSeg(20, 10, 40, 10, 1);
                    doc.ksLineSeg(40, 10, 40, 30, 1);
                    doc.ksLineSeg(40, 30, 20, 30, 1);
                    doc.ksLineSeg(20, 30, 20, 10, 1);

                    /*kompas.ksMessage("Нарисовали");
                     *
                     * Получить параметры документа
                     * doc.ksGetObjParam(doc.reference, docPar1, ldefin2d.ALLPARAM);
                     * ksSheetPar shPar1 = (ksSheetPar)docPar1.GetLayoutParam();
                     * if (shPar1 != null)
                     * {
                     *      ksStandartSheet stPar1 = (ksStandartSheet)shPar.GetSheetParam();
                     *      if (stPar1 != null)
                     *      {
                     *              short direct = 0;
                     *              if (stPar1.direct)
                     *                      direct = 1;
                     *              string buf = string.Format("Type = {0}, f = {1}, m = {2}, d = {3}", docPar1.type, stPar1.format, stPar1.multiply, direct);
                     *              kompas.ksMessage(buf);
                     *      }
                     * }
                     *
                     * kompas.ksMessage(docPar1.fileName);
                     * kompas.ksMessage(docPar1.comment);
                     * kompas.ksMessage(docPar1.author);
                     *
                     * // Cохраним документ
                     * doc.ksSaveDocument(string.Empty);
                     * //Закрыть документ
                     * doc.ksCloseDocument();*/
                }
            }
        }
Esempio n. 25
0
        ///<summary>
        ///Создание подструнника
        ///</summary>
        private void CreateSnare(bool ExistSnare, int stringSnare, double kadloRadius, double thicknessBottomDrumhead)
        {
            // Проверка на существование компонента сборки
            if (_part != null)
            {
                // создадим новый эскиз
                var SnareSketch = (ksEntity)_part.NewEntity((short)Obj3dType.o3d_sketch);
                if (SnareSketch != null)
                {
                    // Получение интерфейса свойств эскиза
                    var definitionSnare = (ksSketchDefinition)SnareSketch.GetDefinition();
                    if (definitionSnare != null)
                    {
                        // Получение интерфейса базовой плоскости XOY
                        var      basePlane                = (ksEntity)_part.GetDefaultEntity((short)Obj3dType.o3d_planeXOY);
                        ksEntity entityOffsetPlane        = _part.NewEntity((short)Obj3dType.o3d_planeOffset);
                        ksPlaneOffsetDefinition offsetDef = (ksPlaneOffsetDefinition)entityOffsetPlane.GetDefinition();
                        offsetDef.offset    = thicknessBottomDrumhead;
                        offsetDef.direction = false;
                        offsetDef.SetPlane(basePlane);
                        // создаем смещенную плоскость
                        entityOffsetPlane.Create();
                        ksEntity snare    = (ksEntity)_part.NewEntity((short)Obj3dType.o3d_sketch);
                        var      defSnare = (ksSketchDefinition)snare.GetDefinition();
                        defSnare.SetPlane(offsetDef);
                        snare.Create();
                        ksDocument2D SnareEdit = (ksDocument2D)defSnare.BeginEdit();
                        // Рисуем основание подструнника
                        SnareEdit.ksLineSeg(-15, kadloRadius - 5, 15, kadloRadius - 5, 1);
                        SnareEdit.ksLineSeg(15, kadloRadius - 5, 15, kadloRadius - 10, 1);
                        SnareEdit.ksLineSeg(15, kadloRadius - 10, -15, kadloRadius - 10, 1);
                        SnareEdit.ksLineSeg(-15, kadloRadius - 10, -15, kadloRadius - 5, 1);

                        SnareEdit.ksLineSeg(-15, -kadloRadius + 5, 15, -kadloRadius + 5, 1);
                        SnareEdit.ksLineSeg(15, -kadloRadius + 5, 15, -kadloRadius + 10, 1);
                        SnareEdit.ksLineSeg(15, -kadloRadius + 10, -15, -kadloRadius + 10, 1);
                        SnareEdit.ksLineSeg(-15, -kadloRadius + 10, -15, -kadloRadius + 5, 1);

                        defSnare.EndEdit();

                        // Выдавливание подструнника
                        ksEntity entityBossExtr3 = (ksEntity)_part.NewEntity((short)Obj3dType.o3d_bossExtrusion);
                        if (entityBossExtr3 != null)
                        {
                            ksBossExtrusionDefinition bossExtrDef3 = (ksBossExtrusionDefinition)entityBossExtr3.GetDefinition();
                            if (bossExtrDef3 != null)
                            {
                                // интерфейс структуры параметров выдавливания
                                ksExtrusionParam extrProp3 = (ksExtrusionParam)bossExtrDef3.ExtrusionParam();
                                if (extrProp3 != null)
                                {
                                    // эскиз операции выдавливания
                                    bossExtrDef3.SetSketch(snare);
                                    // направление выдавливания (обратное)
                                    extrProp3.direction = (short)Direction_Type.dtReverse;
                                    // тип выдавливания (строго на глубину)
                                    extrProp3.typeReverse = (short)End_Type.etBlind;
                                    // глубина выдавливания
                                    extrProp3.depthReverse = 4;
                                    // создадим операцию
                                    entityBossExtr3.Create();
                                }
                            }
                        }
                        // Создание струн подструнника
                        var StringSketch = (ksEntity)_part.NewEntity((short)Obj3dType.o3d_sketch);
                        if (StringSketch != null)
                        {
                            // Получение интерфейса свойств эскиза
                            var definitionString = (ksSketchDefinition)StringSketch.GetDefinition();
                            if (definitionString != null)
                            {
                                // Получение интерфейса базовой плоскости XOZ
                                var      stringPlane    = (ksEntity)_part.GetDefaultEntity((short)Obj3dType.o3d_planeXOZ);
                                ksEntity stSnare        = (ksEntity)_part.NewEntity((short)Obj3dType.o3d_sketch);
                                var      defStringSnare = (ksSketchDefinition)stSnare.GetDefinition();
                                defStringSnare.SetPlane(stringPlane);
                                stSnare.Create();
                                ksDocument2D stringSnareEdit = (ksDocument2D)defStringSnare.BeginEdit();
                                // В ряд рисуются круги (сечение струн)
                                int k = 1;
                                for (double x = -11; x < 12; x += 3)
                                {
                                    stringSnareEdit.ksCircle(x, thicknessBottomDrumhead + 2, 1, 1);
                                    if (k < stringSnare)
                                    {
                                        k++;
                                    }
                                    else
                                    {
                                        break;
                                    }
                                }
                                defStringSnare.EndEdit();

                                // Выдавливание струн подструнника
                                ksEntity entityBossExtr4 = (ksEntity)_part.NewEntity((short)Obj3dType.o3d_bossExtrusion);
                                if (entityBossExtr4 != null)
                                {
                                    ksBossExtrusionDefinition bossExtrDef3 = (ksBossExtrusionDefinition)entityBossExtr4.GetDefinition();
                                    if (bossExtrDef3 != null)
                                    {
                                        // интерфейс структуры параметров выдавливания
                                        ksExtrusionParam extrProp3 = (ksExtrusionParam)bossExtrDef3.ExtrusionParam();
                                        if (extrProp3 != null)
                                        {
                                            // эскиз операции выдавливания
                                            bossExtrDef3.SetSketch(stSnare);
                                            // направление выдавливания (обе стороны)
                                            extrProp3.direction = (short)Direction_Type.dtBoth;
                                            // тип выдавливания (до ближайшей поверхности)
                                            extrProp3.typeReverse = (short)End_Type.etUpToNearSurface;
                                            extrProp3.typeNormal  = (short)End_Type.etUpToNearSurface;
                                            // создадим операцию
                                            entityBossExtr4.Create();
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
Esempio n. 26
0
        public void MakeTechnicalDrawings_STUPICA(Stupica stupica)
        {
            double multiply;    // = 0.4;  //масштаб 1:2.5

            if (stupica.D_external <= 30)
            {
                multiply = 5;
            }
            else if (stupica.D_external > 30 && stupica.D_external <= 37.5)
            {
                multiply = 4;
            }
            else if (stupica.D_external > 37.5 && stupica.D_external <= 60)
            {
                multiply = 2.5;
            }
            else if (stupica.D_external > 60 && stupica.D_external <= 75)
            {
                multiply = 2;
            }
            else if (stupica.D_external > 75 && stupica.D_external <= 150)
            {
                multiply = 1;
            }
            else if (stupica.D_external > 150 && stupica.D_external <= 300)
            {
                multiply = 0.5;
            }
            else if (stupica.D_external > 300 && stupica.D_external <= 375)
            {
                multiply = 0.4;
            }
            else if (stupica.D_external > 375 && stupica.D_external <= 600)
            {
                multiply = 0.25;
            }
            else if (stupica.D_external > 600 && stupica.D_external <= 750)
            {
                multiply = 0.2;
            }
            else
            {
                multiply = 1;
            }


            ksDynamicArray arr = (ksDynamicArray)_kompas.GetDynamicArray(ldefin2d.POINT_ARR);
            ksDocument2D   doc = (ksDocument2D)_kompas.Document2D();

            doc = (ksDocument2D)_kompas.Document2D();
            ksDocumentParam docPar  = (ksDocumentParam)_kompas.GetParamStruct((short)StructType2DEnum.ko_DocumentParam);
            ksDocumentParam docPar1 = (ksDocumentParam)_kompas.GetParamStruct((short)StructType2DEnum.ko_DocumentParam);

            if ((docPar != null) & (docPar1 != null))
            {
                // docPar.fileName = @"c:\2.cdw";
                //docPar.comment = "Create document";
                docPar.author = "unbekannte";
                docPar.regime = 0;
                docPar.type   = (short)DocType.lt_DocSheetStandart;
                ksSheetPar shPar = (ksSheetPar)docPar.GetLayoutParam();
                if (shPar != null)
                {
                    shPar.shtType    = 1;
                    shPar.layoutName = string.Empty;
                    ksStandartSheet stPar = (ksStandartSheet)shPar.GetSheetParam();
                    if (stPar != null)
                    {
                        stPar.format   = 3;    //2 - А2, 3 - А3 и тд
                        stPar.multiply = 1;    //кратность формата, увеличивает лист в размерах
                        stPar.direct   = true; //горизонтально
                    }
                }
                // Создали документ: лист, формат А3, горизонтально расположенный
                // и с системным штампом 1
                doc.ksCreateDocument(docPar);

                ksStamp stamp = (ksStamp)doc.GetStamp();
                if (stamp != null)
                {
                    if (stamp.ksOpenStamp() == 1)
                    {
                        stamp.ksColumnNumber(1);
                        Set_into_Stamp(doc, "Ступица фланцевой муфты");
                        stamp.ksColumnNumber(2);
                        Set_into_Stamp(doc, "-");
                        stamp.ksColumnNumber(3);
                        Set_into_Stamp(doc, "СТАЛЬ 35 ГОСТ 1050-2013");
                        stamp.ksColumnNumber(6);
                        string tmp = "";
                        if (multiply >= 1)
                        {
                            tmp = multiply.ToString() + ":1";
                        }
                        else
                        {
                            var M = Math.Round((1 / multiply), 1);
                            tmp = "1:" + M.ToString();
                        }
                        Set_into_Stamp(doc, tmp);
                        stamp.ksColumnNumber(7);
                        Set_into_Stamp(doc, "1");
                        stamp.ksColumnNumber(8);
                        Set_into_Stamp(doc, "3");
                        stamp.ksColumnNumber(9);
                        Set_into_Stamp(doc, "ТулГУ гр. 222131");



                        stamp.ksCloseStamp();
                    }
                }

                int         number = 0;
                ksViewParam parv1  = (ksViewParam)_kompas.GetParamStruct((short)StructType2DEnum.ko_ViewParam);
                if (parv1 != null)
                {
                    number = 1;

                    parv1.Init();
                    parv1.x      = 100;
                    parv1.y      = 150;
                    parv1.scale_ = multiply;
                    parv1.angle  = 0;                                   //угол поворота вида
                    parv1.color  = Color.FromArgb(10, 20, 10).ToArgb(); //цвет вида в активном состоянии
                    parv1.state  = ldefin2d.stACTIVE;
                    parv1.name   = "Вид слева";
                    // У документа создадим вид с номером 1, масштабом 0.5, под углом 45 гр

                    reference v = doc.ksCreateSheetView(parv1, ref number); //создать вид

                    // Создадим слой с номером 3
                    doc.ksLayer(3);

                    //основа
                    doc.ksLineSeg(0, 0,
                                  0, (stupica.D_external / 2 - stupica.b1), 1);            //с середины до верха
                    doc.ksLineSeg(0, (stupica.D_external / 2 - stupica.b1),
                                  (stupica.b1), (stupica.D_external / 2), 1);              //фаска
                    doc.ksLineSeg((stupica.b1), (stupica.D_external / 2),
                                  (stupica.l1 - stupica.b1), (stupica.D_external / 2), 1); //верхняя линия
                    doc.ksLineSeg((stupica.l1 - stupica.b1), (stupica.D_external / 2),
                                  (stupica.l1), (stupica.D_external / 2 - stupica.b1), 1); //faska
                    doc.ksLineSeg((stupica.l1), (stupica.D_external / 2 - stupica.b1),
                                  (stupica.l1), (stupica.d1 / 2 + stupica.R1), 1);         //сверху вниз до скругления
                    doc.ksArcByAngle((stupica.l1 + stupica.R1), (stupica.d1 / 2 + stupica.R1), (stupica.R1),
                                     180, 270, 1, 1);                                      //скругление
                    doc.ksLineSeg((stupica.l1 + stupica.R1), (stupica.d1 / 2),
                                  (stupica.l - stupica.b1), (stupica.d1 / 2), 1);          //линия внешней стороны стакана вправо
                    doc.ksLineSeg((stupica.l - stupica.b1), (stupica.d1 / 2),
                                  (stupica.l), (stupica.d1 / 2 - stupica.b1), 1);          //faska
                    doc.ksLineSeg((stupica.l), (stupica.d1 / 2 - stupica.b1),
                                  (stupica.l), 0, 1);

                    ///////зеркально
                    doc.ksLineSeg(0, 0,
                                  0, -(stupica.D_external / 2 - stupica.b1), 1);            //с середины до верха
                    doc.ksLineSeg(0, -(stupica.D_external / 2 - stupica.b1),
                                  (stupica.b1), -(stupica.D_external / 2), 1);              //фаска
                    doc.ksLineSeg((stupica.b1), -(stupica.D_external / 2),
                                  (stupica.l1 - stupica.b1), -(stupica.D_external / 2), 1); //верхняя линия
                    doc.ksLineSeg((stupica.l1 - stupica.b1), -(stupica.D_external / 2),
                                  (stupica.l1), -(stupica.D_external / 2 - stupica.b1), 1); //faska
                    doc.ksLineSeg((stupica.l1), -(stupica.D_external / 2 - stupica.b1),
                                  (stupica.l1), -(stupica.d1 / 2 + stupica.R1), 1);         //сверху вниз до скругления
                    doc.ksArcByAngle((stupica.l1 + stupica.R1), -(stupica.d1 / 2 + stupica.R1), (stupica.R1),
                                     90, 180, 1, 1);                                        //скругление
                    doc.ksLineSeg((stupica.l1 + stupica.R1), -(stupica.d1 / 2),
                                  (stupica.l - stupica.b1), -(stupica.d1 / 2), 1);          //линия внешней стороны стакана вправо
                    doc.ksLineSeg((stupica.l - stupica.b1), -(stupica.d1 / 2),
                                  (stupica.l), -(stupica.d1 / 2 - stupica.b1), 1);          //faska
                    doc.ksLineSeg((stupica.l), -(stupica.d1 / 2 - stupica.b1),
                                  (stupica.l), 0, 1);


                    //верхнее отверстие под болты
                    doc.ksLineSeg((0), (stupica.D_okr / 2 - stupica.d4 / 2),
                                  (0), (stupica.D_okr / 2 + stupica.d4 / 2), 1);                       //снизу вверх
                    doc.ksLineSeg((0), (stupica.D_okr / 2 + stupica.d4 / 2),
                                  (stupica.l1 - stupica.b2), (stupica.D_okr / 2 + stupica.d4 / 2), 1); //верхняя планка
                    doc.ksLineSeg((stupica.l1 - stupica.b2), (stupica.D_okr / 2 + stupica.d4 / 2),
                                  (stupica.l1 - stupica.b2), (stupica.D_okr / 2 - stupica.d4 / 2), 1); //сверху вниз
                    doc.ksLineSeg((0), (stupica.D_okr / 2 - stupica.d4 / 2),
                                  (stupica.l1 - stupica.b2), (stupica.D_okr / 2 - stupica.d4 / 2), 1); //нижняя планка
                    doc.ksLineSeg((stupica.l1 - stupica.b2), (stupica.D_okr / 2 + stupica.d4 / 2),
                                  (stupica.l1), (stupica.D_okr / 2 + stupica.d4 / 2 + stupica.b2), 1); //верхняя фаска
                    doc.ksLineSeg((stupica.l1), (stupica.D_okr / 2 + stupica.d4 / 2 + stupica.b2),
                                  (stupica.l1), (stupica.D_okr / 2 - stupica.d4 / 2 - stupica.b2), 1); //сверху вниз
                    doc.ksLineSeg((stupica.l1 - stupica.b2), (stupica.D_okr / 2 - stupica.d4 / 2),
                                  (stupica.l1), (stupica.D_okr / 2 - stupica.d4 / 2 - stupica.b2), 1); //нижняя фаска

                    //нижнее отверстие под болты
                    doc.ksLineSeg((0), -(stupica.D_okr / 2 - stupica.d4 / 2),
                                  (0), -(stupica.D_okr / 2 + stupica.d4 / 2), 1);                       //снизу вверх
                    doc.ksLineSeg((0), -(stupica.D_okr / 2 + stupica.d4 / 2),
                                  (stupica.l1 - stupica.b2), -(stupica.D_okr / 2 + stupica.d4 / 2), 1); //верхняя планка
                    doc.ksLineSeg((stupica.l1 - stupica.b2), -(stupica.D_okr / 2 + stupica.d4 / 2),
                                  (stupica.l1 - stupica.b2), -(stupica.D_okr / 2 - stupica.d4 / 2), 1); //сверху вниз
                    doc.ksLineSeg((0), -(stupica.D_okr / 2 - stupica.d4 / 2),
                                  (stupica.l1 - stupica.b2), -(stupica.D_okr / 2 - stupica.d4 / 2), 1); //нижняя планка
                    doc.ksLineSeg((stupica.l1 - stupica.b2), -(stupica.D_okr / 2 + stupica.d4 / 2),
                                  (stupica.l1), -(stupica.D_okr / 2 + stupica.d4 / 2 + stupica.b2), 1); //верхняя фаска
                    doc.ksLineSeg((stupica.l1), -(stupica.D_okr / 2 + stupica.d4 / 2 + stupica.b2),
                                  (stupica.l1), -(stupica.D_okr / 2 - stupica.d4 / 2 - stupica.b2), 1); //сверху вниз
                    doc.ksLineSeg((stupica.l1 - stupica.b2), -(stupica.D_okr / 2 - stupica.d4 / 2),
                                  (stupica.l1), -(stupica.D_okr / 2 - stupica.d4 / 2 - stupica.b2), 1); //нижняя фаска

                    //внутр кольцо верх
                    doc.ksLineSeg((0), (0),
                                  (0), (stupica.d2 / 2), 1);
                    doc.ksLineSeg((stupica.l2), (0),
                                  (stupica.l2), (stupica.d2 / 2), 1);
                    doc.ksLineSeg((0), (stupica.d2 / 2),
                                  (stupica.l2), (stupica.d2 / 2), 1);

                    //внутр кольцо низ
                    doc.ksLineSeg((0), (0),
                                  (0), -(stupica.d2 / 2), 1);
                    doc.ksLineSeg((stupica.l2), (0),
                                  (stupica.l2), -(stupica.d2 / 2), 1);
                    doc.ksLineSeg((0), -(stupica.d2 / 2),
                                  (stupica.l2), -(stupica.d2 / 2), 1);

                    //осн. отверстие верх
                    doc.ksLineSeg((stupica.l2), (stupica.d / 2),
                                  (stupica.l - stupica.b1), (stupica.d / 2), 1); //
                    doc.ksLineSeg((stupica.l2), (stupica.h - stupica.d / 2),
                                  (stupica.l), (stupica.h - stupica.d / 2), 1);  //
                    doc.ksLineSeg((stupica.l - stupica.b1), (stupica.d / 2),
                                  (stupica.l), (stupica.d / 2 + stupica.b1), 1); //фаска
                    doc.ksLineSeg((stupica.l - stupica.b1), (stupica.d / 2),
                                  (stupica.l - stupica.b1), (0), 1);             //фаска

                    //осн. отверстие низ
                    doc.ksLineSeg((stupica.l2), -(stupica.d / 2),
                                  (stupica.l - stupica.b1), -(stupica.d / 2), 1);
                    doc.ksLineSeg((stupica.l - stupica.b1), -(stupica.d / 2),
                                  (stupica.l), -(stupica.d / 2 + stupica.b1), 1); //фаска
                    doc.ksLineSeg((stupica.l - stupica.b1), -(stupica.d / 2),
                                  (stupica.l - stupica.b1), (0), 1);              //фаска

                    doc.ksLineSeg((0), (0),
                                  (0), (0), 1); //
                    doc.ksLineSeg((0), (0),
                                  (0), (0), 1); //
                    doc.ksLineSeg((0), (0),
                                  (0), (0), 1); //
                    doc.ksLineSeg((0), (0),
                                  (0), (0), 1); //

                    //освевые
                    doc.ksLineSeg((0) - 5, (0),
                                  (stupica.l) + 5, (0), 3);                   //
                    doc.ksLineSeg((0) - 5, (stupica.D_okr / 2),
                                  (stupica.l1) + 5, (stupica.D_okr / 2), 3);  //
                    doc.ksLineSeg((0) - 5, -(stupica.D_okr / 2),
                                  (stupica.l1) + 5, -(stupica.D_okr / 2), 3); //

                    if (doc.ksHatch(0, 45, 2, 0, 0, 0) == 1)
                    {
                        doc.ksLineSeg(0, stupica.D_okr / 2 + stupica.d4 / 2,
                                      0, (stupica.D_external / 2 - stupica.b1), 1);                        //от отверстия до верха
                        doc.ksLineSeg(0, (stupica.D_external / 2 - stupica.b1),
                                      (stupica.b1), (stupica.D_external / 2), 1);                          //фаска
                        doc.ksLineSeg((stupica.b1), (stupica.D_external / 2),
                                      (stupica.l1 - stupica.b1), (stupica.D_external / 2), 1);             //верхняя линия
                        doc.ksLineSeg((stupica.l1 - stupica.b1), (stupica.D_external / 2),
                                      (stupica.l1), (stupica.D_external / 2 - stupica.b1), 1);             //faska
                        doc.ksLineSeg((stupica.l1), (stupica.D_external / 2 - stupica.b1),
                                      (stupica.l1), (stupica.D_okr / 2 + stupica.d4 / 2 + stupica.b2), 1); //сверху вниз до фаски
                        doc.ksLineSeg((stupica.l1 - stupica.b2), (stupica.D_okr / 2 + stupica.d4 / 2),
                                      (stupica.l1), (stupica.D_okr / 2 + stupica.d4 / 2 + stupica.b2), 1); //верхняя фаска
                        doc.ksLineSeg((0), (stupica.D_okr / 2 + stupica.d4 / 2),
                                      (stupica.l1 - stupica.b2), (stupica.D_okr / 2 + stupica.d4 / 2), 1); //нижняя линия


                        doc.ksLineSeg((0), (stupica.d2 / 2),
                                      (0), (stupica.D_okr / 2 - stupica.d4 / 2), 1);                       //от кольца до отверстия
                        doc.ksLineSeg((0), (stupica.D_okr / 2 - stupica.d4 / 2),
                                      (stupica.l1 - stupica.b2), (stupica.D_okr / 2 - stupica.d4 / 2), 1); //нижняя планка
                        doc.ksLineSeg((stupica.l1 - stupica.b2), (stupica.D_okr / 2 - stupica.d4 / 2),
                                      (stupica.l1), (stupica.D_okr / 2 - stupica.d4 / 2 - stupica.b2), 1); //нижняя фаска
                        doc.ksLineSeg((stupica.l1), (stupica.D_okr / 2 - stupica.d4 / 2 - stupica.b2),
                                      (stupica.l1), (stupica.d1 / 2 + stupica.R1), 1);                     //нижняя фаска
                        doc.ksArcByAngle((stupica.l1 + stupica.R1), (stupica.d1 / 2 + stupica.R1), (stupica.R1),
                                         180, 270, 1, 1);                                                  //скругление
                        doc.ksLineSeg((stupica.l1 + stupica.R1), (stupica.d1 / 2),
                                      (stupica.l - stupica.b1), (stupica.d1 / 2), 1);                      //линия внешней стороны стакана вправо
                        doc.ksLineSeg((stupica.l - stupica.b1), (stupica.d1 / 2),
                                      (stupica.l), (stupica.d1 / 2 - stupica.b1), 1);                      //faska
                        doc.ksLineSeg((stupica.l), (stupica.d1 / 2 - stupica.b1),
                                      (stupica.l), (stupica.h - stupica.d / 2), 1);                        //до паза
                        doc.ksLineSeg((stupica.l2), (stupica.h - stupica.d / 2),
                                      (stupica.l), (stupica.h - stupica.d / 2), 1);                        //паз
                        doc.ksLineSeg((stupica.l2), (stupica.h - stupica.d / 2),
                                      (stupica.l2), (stupica.d2 / 2), 1);
                        doc.ksLineSeg((0), (stupica.d2 / 2),
                                      (stupica.l2), (stupica.d2 / 2), 1);

                        //зеркально
                        doc.ksLineSeg(0, -(stupica.D_okr / 2 + stupica.d4 / 2),
                                      0, -(stupica.D_external / 2 - stupica.b1), 1);                        //от отверстия до верха
                        doc.ksLineSeg(0, -(stupica.D_external / 2 - stupica.b1),
                                      (stupica.b1), -(stupica.D_external / 2), 1);                          //фаска
                        doc.ksLineSeg((stupica.b1), -(stupica.D_external / 2),
                                      (stupica.l1 - stupica.b1), -(stupica.D_external / 2), 1);             //верхняя линия
                        doc.ksLineSeg((stupica.l1 - stupica.b1), -(stupica.D_external / 2),
                                      (stupica.l1), -(stupica.D_external / 2 - stupica.b1), 1);             //faska
                        doc.ksLineSeg((stupica.l1), -(stupica.D_external / 2 - stupica.b1),
                                      (stupica.l1), -(stupica.D_okr / 2 + stupica.d4 / 2 + stupica.b2), 1); //сверху вниз до фаски
                        doc.ksLineSeg((stupica.l1 - stupica.b2), -(stupica.D_okr / 2 + stupica.d4 / 2),
                                      (stupica.l1), -(stupica.D_okr / 2 + stupica.d4 / 2 + stupica.b2), 1); //верхняя фаска
                        doc.ksLineSeg((0), -(stupica.D_okr / 2 + stupica.d4 / 2),
                                      (stupica.l1 - stupica.b2), -(stupica.D_okr / 2 + stupica.d4 / 2), 1); //нижняя линия


                        doc.ksLineSeg((0), -(stupica.d2 / 2),
                                      (0), -(stupica.D_okr / 2 - stupica.d4 / 2), 1);                       //от кольца до отверстия
                        doc.ksLineSeg((0), -(stupica.D_okr / 2 - stupica.d4 / 2),
                                      (stupica.l1 - stupica.b2), -(stupica.D_okr / 2 - stupica.d4 / 2), 1); //нижняя планка
                        doc.ksLineSeg((stupica.l1 - stupica.b2), -(stupica.D_okr / 2 - stupica.d4 / 2),
                                      (stupica.l1), -(stupica.D_okr / 2 - stupica.d4 / 2 - stupica.b2), 1); //нижняя фаска
                        doc.ksLineSeg((stupica.l1), -(stupica.D_okr / 2 - stupica.d4 / 2 - stupica.b2),
                                      (stupica.l1), -(stupica.d1 / 2 + stupica.R1), 1);                     //нижняя фаска
                        doc.ksArcByAngle((stupica.l1 + stupica.R1), -(stupica.d1 / 2 + stupica.R1), (stupica.R1),
                                         90, 180, 1, 1);                                                    //скругление
                        doc.ksLineSeg((stupica.l1 + stupica.R1), -(stupica.d1 / 2),
                                      (stupica.l - stupica.b1), -(stupica.d1 / 2), 1);                      //линия внешней стороны стакана вправо
                        doc.ksLineSeg((stupica.l - stupica.b1), -(stupica.d1 / 2),
                                      (stupica.l), -(stupica.d1 / 2 - stupica.b1), 1);                      //faska
                        doc.ksLineSeg((stupica.l), -(stupica.d1 / 2 - stupica.b1),
                                      (stupica.l), -(stupica.d / 2), 1);                                    //до отв
                        doc.ksLineSeg((stupica.l - stupica.b1), -(stupica.d / 2),
                                      (stupica.l - stupica.b1), -(stupica.d / 2 + stupica.b1), 1);          //фаска
                        doc.ksLineSeg((stupica.l2), -(stupica.d / 2),
                                      (stupica.l), -(stupica.d / 2), 1);                                    //отв
                        doc.ksLineSeg((stupica.l2), -(stupica.d / 2),
                                      (stupica.l2), -(stupica.d2 / 2), 1);
                        doc.ksLineSeg((0), -(stupica.d2 / 2),
                                      (stupica.l2), -(stupica.d2 / 2), 1);

                        reference telo = doc.ksEndObj();

                        ksHatchParam par = (ksHatchParam)_kompas.GetParamStruct((short)StructType2DEnum.ko_HatchParam);
                        if (par != null)
                        {
                            par.Init();
                            int t = doc.ksGetObjParam(telo, par, ldefin2d.ALLPARAM);

                            doc.ksDeleteMtr();

                            doc.ksMtr(0, 0, 0, 2, 2);

                            // заменить параметры штриховки
                            par.x = 0.8;

                            doc.ksDeleteMtr();
                        }
                    }


                    //////////   РАЗМЕРЫ
                    //горизонтальные
                    LinRazm(doc,
                            (stupica.b1), -(stupica.d2 / 2),
                            (stupica.b1), (stupica.d2 / 2),
                            1, -15, 0, 1); //d2
                    LinRazm(doc,
                            (stupica.b1), -(stupica.D_external / 2),
                            (stupica.b1), (stupica.D_external / 2),
                            1, -27, 0, 1); //D_external
                    LinRazm(doc,
                            (stupica.l - stupica.b1), -(stupica.d1 / 2),
                            (stupica.l - stupica.b1), (stupica.d1 / 2),
                            1, 27, 0, 1); //d1

                    //вертикальные
                    LinRazm(doc,
                            (0), -(stupica.d2 / 2),
                            (stupica.l2), -(stupica.d2 / 2),
                            2, 0, -15, 0); //l2
                    LinRazm(doc,
                            (stupica.l1 - stupica.b2), -(stupica.D_okr / 2),
                            (stupica.l1), -(stupica.D_okr / 2),
                            2, 0, -(stupica.D_external / 2 - stupica.D_okr / 2) * multiply - 15, 0, 3); //b2 - фаска отверстия
                    LinRazm(doc,
                            (0), -(stupica.D_external / 2 - stupica.b1),
                            (stupica.l1), -(stupica.D_external / 2 - stupica.b1),
                            2, 0, -27, 0); //l1
                    LinRazm(doc,
                            (0), (0),
                            (stupica.l), (0),
                            2, 0, -(stupica.D_external / 2) * multiply - 39, 0); //l
                    LinRazm(doc,
                            (stupica.l - stupica.b1), (0),
                            (stupica.l), (0),
                            2, 0, -(stupica.d1 / 2) * multiply - 15, 0, 3); //b1 - фаска ребра

                    set_rad_razm(stupica, doc);


                    liniya_s_obrivom(stupica, multiply, doc);
                }



                ksViewParam parv2 = (ksViewParam)_kompas.GetParamStruct((short)StructType2DEnum.ko_ViewParam);
                if (parv2 != null)
                {
                    number = 2;
                    parv2.Init();
                    parv2.x      = 300;
                    parv2.y      = 150;
                    parv2.scale_ = multiply;                            //масштаб вида
                    parv2.angle  = 0;                                   //угол поворота вида
                    parv2.color  = Color.FromArgb(10, 20, 10).ToArgb(); //цвет вида в активном состоянии
                    parv2.state  = ldefin2d.stACTIVE;
                    parv2.name   = "Вид спереди";
                    // У документа создадим вид с номером 1, масштабом 0.5, под углом 45 гр

                    reference v = doc.ksCreateSheetView(parv2, ref number); //создать вид

                    // Создадим слой с номером 5
                    doc.ksLayer(5);

                    //внешняя окр
                    doc.ksCircle(0, 0, (stupica.D_external / 2), 1);
                    doc.ksCircle(0, 0, (stupica.D_external / 2 - stupica.b1), 1);

                    //стакан
                    doc.ksCircle(0, 0, (stupica.d1 / 2), 1);
                    doc.ksCircle(0, 0, (stupica.d1 / 2 - stupica.b1), 1);

                    //осевая
                    doc.ksCircle(0, 0, (stupica.D_okr / 2), 3);

                    //паз
                    reference left = doc.ksLineSeg((-stupica.B / 2), (stupica.d / 2 - stupica.b1 * 5),
                                                   (-stupica.B / 2), (stupica.h - stupica.d / 2 - stupica.R), 1); //левая линия
                    reference right = doc.ksLineSeg((stupica.B / 2), (stupica.d / 2 - stupica.b1 * 5),
                                                    (stupica.B / 2), (stupica.h - stupica.d / 2 - stupica.R), 1); //правая линия
                    doc.ksArcByAngle((-stupica.B / 2 + stupica.R), (stupica.h - stupica.d / 2 - stupica.R), (stupica.R),
                                     90, 180, 1, 1);                                                              //скругление
                    doc.ksArcByAngle((stupica.B / 2 - stupica.R), (stupica.h - stupica.d / 2 - stupica.R), (stupica.R),
                                     0, 90, 1, 1);                                                                //скругление
                    doc.ksLineSeg((-stupica.B / 2 + stupica.R), (stupica.h - stupica.d / 2),
                                  (stupica.B / 2 - stupica.R), (stupica.h - stupica.d / 2), 1);                   //верхняя линия

                    //внутр окр
                    reference c1 = doc.ksCircle(0, 0, (stupica.d / 2), 1);
                    reference c2 = doc.ksCircle(0, 0, (stupica.d / 2 + stupica.b1), 1);

                    /*     doc.ksTrimmCurve(left,
                     *       (-master.B / 2), (master.h - master.d / 2 - master.R),
                     *       (-master.B / 2), (master.d / 2),
                     *       (-master.B / 2), (master.d / 2 + 0.5), 1);*/


                    ksMathPointParam p1 = (ksMathPointParam)_kompas.GetParamStruct((short)StructType2DEnum.ko_MathPointParam);


                    object afa = new object();

                    //точки пересечения считаю сам, т.к. компас... не будем говорить о плохом
                    var c1_l1 = line_cirle_itersection((stupica.d / 2), (-stupica.B / 2));
                    var c1_l2 = line_cirle_itersection((stupica.d / 2), (stupica.B / 2));
                    var c2_l1 = line_cirle_itersection((stupica.d / 2 + stupica.b1), (-stupica.B / 2));
                    var c2_l2 = line_cirle_itersection((stupica.d / 2 + stupica.b1), (stupica.B / 2));

                    doc.ksTrimmCurve(left,
                                     (-stupica.B / 2), (stupica.h - stupica.d / 2 - stupica.R),
                                     c1_l1.x, c1_l1.y, c1_l1.x, c1_l1.y, 1);
                    doc.ksTrimmCurve(right,
                                     (stupica.B / 2), (stupica.h - stupica.d / 2 - stupica.R),
                                     c1_l2.x, c1_l2.y, c1_l2.x, c1_l2.y, 1);
                    doc.ksTrimmCurve(c1, c1_l1.x, c1_l1.y, c1_l2.x, c1_l2.y, 0, -(stupica.d / 2), 1);
                    doc.ksTrimmCurve(c2, c2_l1.x, c2_l1.y, c2_l2.x, c2_l2.y, 0, -(stupica.d / 2 + stupica.b1), 1);

                    doc.ksLineSeg((0), (0),
                                  (0), (0), 1); //
                    doc.ksLineSeg((0), (0),
                                  (0), (0), 1); //
                    doc.ksLineSeg((0), (0),
                                  (0), (0), 1); //

                    int N_otv = (stupica.n + stupica.n3);
                    int angle = 360 / N_otv;
                    List <ksMathPointParam> list_of_holes = new List <ksMathPointParam>();
                    for (int i = 1; i <= N_otv; i++)
                    {
                        var c_otv = point_by_angle((stupica.D_okr / 2), 90 + angle * (i - 1));
                        list_of_holes.Add(c_otv);
                        if (i % 2 == 1)
                        {
                            doc.ksCircle(c_otv.x, c_otv.y, (stupica.d4 / 2), 1);
                            doc.ksLineSeg(c_otv.x, c_otv.y + (stupica.d4 / 2 + 5), c_otv.x, c_otv.y - (stupica.d4 / 2 + 5), 3);
                            doc.ksLineSeg(c_otv.x - (stupica.d4 / 2 + 5), c_otv.y, c_otv.x + (stupica.d4 / 2 + 5), c_otv.y, 3);
                        }
                        else
                        {
                            doc.ksCircle(c_otv.x, c_otv.y, (stupica.d3 / 2), 1);
                            doc.ksLineSeg(c_otv.x, c_otv.y + (stupica.d3 / 2 + 5), c_otv.x, c_otv.y - (stupica.d3 / 2 + 5), 3);
                            doc.ksLineSeg(c_otv.x - (stupica.d3 / 2 + 5), c_otv.y, c_otv.x + (stupica.d3 / 2 + 5), c_otv.y, 3);
                        }
                        //как сделать обозначения повернутыми к центру пока не придумал, время и так нема
                    }

                    //////////   РАЗМЕРЫ
                    //диаметры

                    Diam_Razmer(0, 0, (stupica.D_okr / 2), (int)((stupica.D_external - stupica.D_okr) / 2 * multiply) + 15, 1, 1, 45, doc);
                    Diam_Razmer(list_of_holes[0].x, list_of_holes[0].y, (stupica.d4 / 2), 5, 2, 1, 45, doc);
                    Diam_Razmer(list_of_holes[1].x, list_of_holes[1].y, (stupica.d3 / 2), 5, 2, 1, 45, doc);

                    LinRazm(doc,
                            -(stupica.B / 2), (stupica.h - stupica.d / 2 - stupica.R),
                            (stupica.B / 2), (stupica.h - stupica.d / 2 - stupica.R),
                            2, 0, 12, 0); //l1

                    LinRazm(doc,
                            (0), -(stupica.d / 2),
                            (0), (stupica.h - stupica.d / 2),
                            1, (stupica.d1 / 2) * multiply + 10, 0, 0); //l1
                }
            }
        }
Esempio n. 27
0
 /// <summary>
 /// Метод для отрисовки эскиза внутреннего обода в КОМПАС-3D
 /// </summary>
 /// <param name="rimsDoc">эскиз</param>
 /// <param name="BearingWidth">Ширина подшипника</param>
 /// <param name="InnerRimDiam">Диаметр внутреннего обода</param>
 /// <param name="OuterRimDiam">Диаметр внешнего обода</param>
 /// <param name="RimsThickness">Толщина подшипника</param>
 /// <param name="BallDiam">Диаметр шарика</param>
 private static void DrawInnerRim(ksDocument2D rimsDoc, double BearingWidth, double InnerRimDiam,
                                  double OuterRimDiam, double RimsThickness, double RollingElementDiam,
                                  RollingElementForm rollingElementForm, double BearingAxis, double GutterDepth, double GutterWidth)
 {
     //ось вращения
     rimsDoc.ksLineSeg(-BearingWidth / 2, 0, BearingWidth / 2, 0, 3);
     //основание
     rimsDoc.ksLineSeg(-BearingWidth / 2, InnerRimDiam / 2, BearingWidth / 2, InnerRimDiam / 2, 1);
     //левая грань
     rimsDoc.ksLineSeg(-BearingWidth / 2, InnerRimDiam / 2, -BearingWidth / 2, RimsThickness + InnerRimDiam / 2, 1);
     //правая грань
     rimsDoc.ksLineSeg(BearingWidth / 2, InnerRimDiam / 2, BearingWidth / 2, RimsThickness + InnerRimDiam / 2, 1);
     if (rollingElementForm is RollingElementForm.Ball)
     {
         //левая верхняя
         rimsDoc.ksLineSeg(-BearingWidth / 2, RimsThickness + InnerRimDiam / 2,
                           -GutterWidth, RimsThickness + InnerRimDiam / 2, 1);
         //правая верхняя
         rimsDoc.ksLineSeg(BearingWidth / 2, RimsThickness + InnerRimDiam / 2,
                           GutterWidth, RimsThickness + InnerRimDiam / 2, 1);
         // желоб
         rimsDoc.ksArcBy3Points(-GutterWidth, RimsThickness + InnerRimDiam / 2,
                                0, RimsThickness + InnerRimDiam / 2 - GutterDepth, GutterWidth, RimsThickness + InnerRimDiam / 2, 1);
     }
     else
     {
         rimsDoc.ksLineSeg(-BearingWidth / 2, RimsThickness + InnerRimDiam / 2,
                           -GutterWidth, RimsThickness + InnerRimDiam / 2, 1);
         rimsDoc.ksLineSeg(BearingWidth / 2, RimsThickness + InnerRimDiam / 2,
                           GutterWidth, RimsThickness + InnerRimDiam / 2, 1);
         rimsDoc.ksLineSeg(-GutterWidth, RimsThickness + InnerRimDiam / 2,
                           -GutterWidth, RimsThickness + InnerRimDiam / 2 - GutterDepth, 1);
         rimsDoc.ksLineSeg(GutterWidth, RimsThickness + InnerRimDiam / 2,
                           GutterWidth, RimsThickness + InnerRimDiam / 2 - GutterDepth, 1);
         rimsDoc.ksLineSeg(-GutterWidth, RimsThickness + InnerRimDiam / 2 - GutterDepth,
                           GutterWidth, RimsThickness + InnerRimDiam / 2 - GutterDepth, 1);
     }
 }
Esempio n. 28
0
        /// <summary>
        /// вырез в нижней части цилиндра
        /// </summary>
        /// <param name="param"></param>
        public void FlatPart(Parameters param)
        {
            double Radios1 = param.Radios1;
            double Cut1    = param.Cut1;
            double Cut2    = param.Cut2;
            var    doc     = (ksDocument3D)_kompas.ActiveDocument3D();
            ksPart part3   = (ksPart)doc.GetPart((short)Part_Type.pTop_Part); // новый компонент

            if (part3 != null)
            {
                ksEntity entitySketch3 = (ksEntity)part3.NewEntity((short)Obj3dType.o3d_sketch);
                if (entitySketch3 != null)
                {
                    ksSketchDefinition sketchDef3 = (ksSketchDefinition)entitySketch3.GetDefinition();
                    if (sketchDef3 != null)
                    {
                        ksEntity basePlane = (ksEntity)part3.GetDefaultEntity((short)Obj3dType.o3d_planeXOY);
                        sketchDef3.SetPlane(basePlane); // установим плоскость
                        sketchDef3.angle = 0;
                        entitySketch3.Create();         // создадим эскиз

                        ksDocument2D sketchEdit3 = (ksDocument2D)sketchDef3.BeginEdit();
                        sketchEdit3.ksLineSeg(Radios1, Radios1, -Radios1, Radios1, 1);
                        sketchEdit3.ksLineSeg(Radios1, Cut1, -Radios1, Cut1, 1);
                        sketchEdit3.ksLineSeg(Radios1, Cut1, Radios1, Radios1, 1);
                        sketchEdit3.ksLineSeg(-Radios1, Cut1, -Radios1, Radios1, 1);
                        sketchDef3.EndEdit();   // завершение редактирования эскиза

                        ksEntity entityCutExtr = (ksEntity)part3.NewEntity((short)Obj3dType.o3d_cutExtrusion);
                        if (entityCutExtr != null)
                        {
                            ksCutExtrusionDefinition cutExtrDef = (ksCutExtrusionDefinition)entityCutExtr.GetDefinition();
                            if (cutExtrDef != null)
                            {
                                cutExtrDef.SetSketch(entitySketch3);                        // установим эскиз операции
                                cutExtrDef.directionType = (short)Direction_Type.dtReverse; //прямое направление
                                cutExtrDef.SetSideParam(false, (short)End_Type.etBlind, Cut2, 0, true);
                                cutExtrDef.SetThinParam(false, 0, 0, 0);
                            }
                            entityCutExtr.Create(); // создадим операцию вырезание выдавливанием
                        }
                    }
                }
            }
            ksPart part4 = (ksPart)doc.GetPart((short)Part_Type.pTop_Part);  // новый компонент

            if (part4 != null)
            {
                ksEntity entitySketch4 = (ksEntity)part4.NewEntity((short)Obj3dType.o3d_sketch);
                if (entitySketch4 != null)
                {
                    ksSketchDefinition sketchDef4 = (ksSketchDefinition)entitySketch4.GetDefinition();
                    if (sketchDef4 != null)
                    {
                        ksEntity basePlane = (ksEntity)part4.GetDefaultEntity((short)Obj3dType.o3d_planeXOY);
                        sketchDef4.SetPlane(basePlane); // установим плоскость
                        sketchDef4.angle = 0;
                        entitySketch4.Create();         // создадим эскиз

                        ksDocument2D sketchEdit4 = (ksDocument2D)sketchDef4.BeginEdit();
                        // введем новый эскиз - квадрат
                        sketchEdit4.ksLineSeg(-Radios1, -Radios1, Radios1, -Radios1, 1);
                        sketchEdit4.ksLineSeg(-Radios1, -Cut1, Radios1, -Cut1, 1);
                        sketchEdit4.ksLineSeg(-Radios1, -Cut1, -Radios1, -Radios1, 1);
                        sketchEdit4.ksLineSeg(Radios1, -Cut1, Radios1, -Radios1, 1);
                        sketchDef4.EndEdit();   // завершение редактирования эскиза

                        ksEntity entityCutExtr2 = (ksEntity)part4.NewEntity((short)Obj3dType.o3d_cutExtrusion);
                        if (entityCutExtr2 != null)
                        {
                            ksCutExtrusionDefinition cutExtrDef2 = (ksCutExtrusionDefinition)entityCutExtr2.GetDefinition();
                            if (cutExtrDef2 != null)
                            {
                                cutExtrDef2.SetSketch(entitySketch4);                        // установим эскиз операции
                                cutExtrDef2.directionType = (short)Direction_Type.dtReverse; //прямое направление
                                cutExtrDef2.SetSideParam(false, (short)End_Type.etBlind, Cut2, 0, true);
                                cutExtrDef2.SetThinParam(false, 0, 0, 0);
                            }

                            entityCutExtr2.Create(); // создадим операцию вырезание выдавливанием
                        }
                    }
                }
            }
        }