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
                }
            }
        }
Beispiel #2
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();
                    }
                }
            }
        }
Beispiel #3
0
        // Создать слой
        private void DrawLayer()
        {
            int n = 0;

            if (kompas.ksReadInt("Введите номер слоя", 1, 0, 255, ref n) != 1)
            {
                return;
            }

            // создаем слой, слой становится текущим
            reference lay = doc.ksLayer(n);

            doc.ksMtr(20, 15, 0, 1, 1);
            doc.ksLineSeg(-10, 0, 10, 0, 1);
            doc.ksLineSeg(10, 0, 10, 20, 1);
            doc.ksLineSeg(10, 20, -10, 20, 1);
            doc.ksLineSeg(-10, 20, -10, 0, 1);
            doc.ksDeleteMtr();

            // подсветить слой
            doc.ksLightObj(lay, 1);

            // получить номер слоя по указателю и указатель по номеру
            int       n1 = doc.ksGetLayerNumber(lay);
            reference l  = doc.ksGetLayerReference(n1);

            string buf = string.Format("n = {0:.##}, n1 = {1:.##}, layer = {2:.##}, l = {3:.##}", n, n1, lay, l);

            kompas.ksMessage(buf);

            // установить параметры слоя и считать их обратно
            ksLayerParam par  = (ksLayerParam)kompas.GetParamStruct((short)StructType2DEnum.ko_LayerParam);
            ksLayerParam par1 = (ksLayerParam)kompas.GetParamStruct((short)StructType2DEnum.ko_LayerParam);

            if ((par != null) & (par1 != null))
            {
                par.Init();
                par1.Init();
                par.color = (Color.FromArgb(0, 0, 255, 0).ToArgb());
                par.state = (ldefin2d.stACTIVE);
                par.name  = ("зеленый");
                doc.ksLayer(0);

                if (doc.ksSetObjParam(l, par, ldefin2d.ALLPARAM) != 1)
                {
                    kompas.ksMessageBoxResult();
                }
                else
                {
                    doc.ksGetObjParam(l, par1, ldefin2d.ALLPARAM);

                    buf = string.Format("col = {0:.##}, col1 = {1:.##}, name = {2}, name1 = {3}",
                                        par.color,
                                        par1.color,
                                        par.name,
                                        par1.name);
                    kompas.ksMessage(buf);
                }

                // снять выделение слоя
                doc.ksLightObj(lay, 0);

                // изменить состояние слоя
                ksLtVariant var = (ksLtVariant)kompas.GetParamStruct((short)StructType2DEnum.ko_LtVariant);
                if (var != null)
                {
                    var.Init();
                    var.intVal = ldefin2d.stACTIVE;
                    doc.ksSetObjParam(l, var, ldefin2d.VIEW_LAYER_STATE);
                }
            }
        }