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

            // построить дугу
            doc.ksMtr(10, 10, 0, 1, 1);
            reference p = doc.ksArcByAngle(30, 20, 20, 45, 135, 1, 1);

            // взять параметры дуги по углам
            ksArcByAngleParam par  = (ksArcByAngleParam)kompas.GetParamStruct((short)StructType2DEnum.ko_ArcByAngleParam);
            ksArcByPointParam par1 = (ksArcByPointParam)kompas.GetParamStruct((short)StructType2DEnum.ko_ArcByPointParam);

            if ((par != null) && (par1 != null))
            {
                int t = doc.ksGetObjParam(p, par, ldefin2d.ALLPARAM);

                buf = string.Format("t = {0}, xc = {1:.#}, yc = {2:.#}, rad = {3:.#}, \n a1 = {4:.#}, a2 = {5:.#}, napr = {6} , tl = {7}",
                                    t, par.xc, par.yc,
                                    par.rad, par.ang1,
                                    par.ang2, par.dir,
                                    par.style);

                kompas.ksMessage(buf);

                // заменить параметры дуги по точкам
                par1.xc    = 40;
                par1.yc    = 30;
                par1.rad   = 10;
                par1.dir   = 1;
                par1.style = 2;
                par1.x1    = 50;
                par1.y1    = 30;
                par1.x2    = 40;
                par1.y2    = 20;

                if (doc.ksSetObjParam(p, par1, 1) == 1)
                {
                    kompas.ksMessage("Изменили объект");
                }
                else
                {
                    kompas.ksMessageBoxResult();
                }
            }
            doc.ksDeleteMtr();
        }
Esempio n. 3
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. 4
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;
            }
        }
        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
                }
            }
        }