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

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

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

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

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

            var groupRightId = draw.ksNewGroup(0);

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

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

            //симметричное отображение трапеции (блока)
            draw.ksSymmetryObj(groupRightId, Ax, Ay, Bx, By, "1");
        }
        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
                }
            }
        }
Example #3
0
        // Создать Bezier сплайн
        private void DrawBezier()
        {
            string buf = string.Empty;

            double[] x = new double[] { 0, 20, 50, 70, 100, 50 };
            double[] y = new double[] { 0, 20, 10, 20, 0, -50 };

            // построить Bezier сплайн
            doc.ksBezier(0, 1);
            for (int i = 0; i < 5; i++)
            {
                doc.ksPoint(x[i], y[i], 0);
            }
            reference p = doc.ksEndObj();

            // взять параметры Bezier сплайна
            ksMathPointParam pPar = (ksMathPointParam)kompas.GetParamStruct((short)StructType2DEnum.ko_MathPointParam);
            ksBezierParam    par  = (ksBezierParam)kompas.GetParamStruct((short)StructType2DEnum.ko_BezierParam);

            if ((pPar != null) && (par != null))
            {
                par.Init();
                ksDynamicArray arr = (ksDynamicArray)par.GetMathPointArr();
                if (arr != null)
                {
                    int t = doc.ksGetObjParam(p, par, ldefin2d.ALLPARAM);

                    int count = arr.ksGetArrayCount();
                    buf = string.Format("t = {0}, count = {1}, close = {2}, tl = {3}",
                                        t, count, par.closed, par.style);
                    kompas.ksMessage(buf);

                    for (int i = 0; i < count; i++)
                    {
                        arr.ksGetArrayItem(i, pPar);
                        buf = string.Format("x[{0}] = {1:##0.#}, y[{2}] = {3:##0.#}",
                                            i, pPar.x, i, pPar.y);
                        kompas.ksMessage(buf);
                    }

                    // заменить параметры Bezier сплайна
                    arr.ksClearArray();
                    // подставим свою память
                    for (int i = 0; i < 6; i++)
                    {
                        pPar.x = x[i];
                        pPar.y = y[i];
                        arr.ksAddArrayItem(-1, pPar);
                    }

                    par.style  = 2;
                    par.closed = 1;

                    if (doc.ksSetObjParam(p, par, ldefin2d.ALLPARAM) == 1)
                    {
                        kompas.ksMessage("Изменили объект");
                    }
                    else
                    {
                        kompas.ksMessageBoxResult();
                    }
                    arr.ksDeleteArray();
                }
            }
        }