Пример #1
0
        private void PrintPar1(ksTextLineParam par2, ksTextItemParam par3, ksDynamicArray arr2)
        {
            string buf = string.Empty;

            buf = string.Format("style = {0}", par2.style);
            kompas.ksMessage(buf);

            int count = arr2.ksGetArrayCount();

            for (int j = 0; j < count; j++)
            {
                arr2.ksGetArrayItem(j, par3);
                ksTextItemFont font = (ksTextItemFont)par3.GetItemFont();
                if (font != null)
                {
                    buf = string.Format("j = {0}, h = {1:.#}, s = {2} \n fontName = {3}",
                                        j, font.height,
                                        par3.s, font.fontName);
                    kompas.ksMessage(buf);
                }
            }
        }
Пример #2
0
        /// <summary>
        /// Метод находит точку пересечения отрезка с дугой,
        /// центр дуги - начало координат плоскости
        /// </summary>
        /// <param name="p1">Координаты первой точки отрезка</param>
        /// <param name="p2">Координаты второй точки отрезка</param>
        /// <param name="rad">Радиус дуги</param>
        /// <param name="a1">Начальный угол дуги</param>
        /// <param name="a2">Конечный угол дуги</param>
        /// <param name="par">Выходные данные</param>
        /// <returns></returns>
        public bool LinArc(Point p1, Point p2,
                           double rad, double a1, double a2,
                           ksMathPointParam par)
        {
            try
            {
                ksDynamicArray arr = (ksDynamicArray)_app.Kompas.GetDynamicArray(ldefin2d.POINT_ARR);
                if ((arr != null) && (par != null))
                {
                    _app.Mat.ksIntersectLinSArc(
                        p1.X, p1.Y, p2.X, p2.Y,
                        0, 0, rad, a1, a2, 1, arr);

                    arr.ksGetArrayItem(0, par);
                }
                return(true);
            }
            catch
            {
                return(false);
            }
        }
Пример #3
0
        // Создать текст
        private void DrawText()
        {
            ksParagraphParam par  = (ksParagraphParam)kompas.GetParamStruct((short)StructType2DEnum.ko_ParagraphParam);
            ksTextParam      par1 = (ksTextParam)kompas.GetParamStruct((short)StructType2DEnum.ko_TextParam);
            ksTextLineParam  par2 = (ksTextLineParam)kompas.GetParamStruct((short)StructType2DEnum.ko_TextLineParam);
            ksTextItemParam  par3 = (ksTextItemParam)kompas.GetParamStruct((short)StructType2DEnum.ko_TextItemParam);

            if ((par != null) && (par1 != null) && (par2 != null) && (par3 != null))
            {
                par1.Init();
                par2.Init();
                par3.Init();
                par.Init();
                par.x      = 30;
                par.y      = 30;
                par.height = 25;
                par.width  = 20;

                doc.ksParagraph(par);

                // 4 пример задания дроби и нижнего и верхнего отклонений
                ksTextItemParam itemParam = (ksTextItemParam)kompas.GetParamStruct((short)StructType2DEnum.ko_TextItemParam);
                if (itemParam != null)
                {
                    itemParam.Init();

                    ksTextItemFont itemFont = (ksTextItemFont)itemParam.GetItemFont();
                    if (itemFont != null)
                    {
                        itemFont.Init();
                        itemFont.SetBitVectorValue(ldefin2d.NEW_LINE, true);
                        itemParam.s = "111";
                        doc.ksTextLine(itemParam);

                        itemFont.Init();
                        itemFont.SetBitVectorValue(ldefin2d.NUMERATOR, true);
                        itemFont.SetBitVectorValue(ldefin2d.ITALIC_ON, true);
                        itemParam.s = "55";
                        doc.ksTextLine(itemParam);

                        itemFont.Init();
                        itemFont.SetBitVectorValue(ldefin2d.DENOMINATOR, true);
                        itemParam.s = "77";
                        doc.ksTextLine(itemParam);

                        itemFont.Init();
                        itemFont.SetBitVectorValue(ldefin2d.END_FRACTION, true);
                        itemFont.SetBitVectorValue(ldefin2d.BOLD_OFF, true);
                        itemFont.SetBitVectorValue(ldefin2d.ITALIC_OFF, true);
                        itemParam.s = "4444";
                        doc.ksTextLine(itemParam);
                    }
                }

                reference p = doc.ksEndObj();

                // в параметрах текста задействованы два массива неопределенной длины :
                ksDynamicArray arr1 = (ksDynamicArray)par1.GetTextLineArr();                   // массив по строкам
                ksDynamicArray arr2 = (ksDynamicArray)par2.GetTextItemArr();                   // массив по компонентам строки
                if ((arr1 != null) && (arr2 != null))
                {
                    // возьмем параметры 1 -ой строки ( индекс 0 )
                    doc.ksGetObjParam(p, par2, 0);

                    PrintPar1(par2, par3, arr2);
                    kompas.ksMessageBoxResult();

                    if (kompas.ksYesNo("Изменять параметры текста ?") == 1)
                    {
                        // у первой строки отключаем ITALIC и BOLD и меняем цвет
                        arr2.ksGetArrayItem(0, par3);
                        ksTextItemFont font = (ksTextItemFont)par3.GetItemFont();
                        if (font != null)
                        {
                            font.SetBitVectorValue(ldefin2d.BOLD_OFF, true);
                            font.SetBitVectorValue(ldefin2d.ITALIC_OFF, true);
                            int clr = Color.FromArgb(0, 0, 255, 0).ToArgb();
                            font.color = clr;
                            arr2.ksSetArrayItem(0, par3);
                            // заменим у текста первую строку
                            doc.ksSetObjParam(p, par2, 0);
                            // возьмем параметры 1 -ой строки ( индекс 0 )  для проверки
                            doc.ksGetObjParam(p, par2, 0);
                            PrintPar1(par2, par3, arr2);
                        }
                    }
                }
            }
        }
Пример #4
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();
                }
            }
        }