private bool liniya_s_obrivom(Stupica master, double multiply, ksDocument2D doc)
        {
            ksLBreakDimParam param = (ksLBreakDimParam)_kompas.GetParamStruct((short)StructType2DEnum.ko_LBreakDimParam);

            if (param == null)
            {
                return(true);
            }

            ksBreakDimDrawing dPar = (ksBreakDimDrawing)param.GetDPar();
            ksLBreakDimSource sPar = (ksLBreakDimSource)param.GetSPar();
            ksDimTextParam    tPar = (ksDimTextParam)param.GetTPar();

            if (dPar == null || sPar == null || tPar == null)
            {
                return(true);
            }

            dPar.Init();
            dPar.textPos = 5;
            dPar.pl      = false;
            dPar.pt      = 1; //стрелка внутри
            dPar.angle   = 90;
            dPar.length  = 10;


            sPar.Init();
            //точка размер чего строим
            sPar.x1 = master.l - master.b1;
            sPar.y1 = -(master.d / 2);
            //точки размерной линии
            sPar.x2 = master.l + 15 / multiply;
            sPar.y2 = -(master.d / 2);
            sPar.x3 = master.l + 15 / multiply;
            sPar.y3 = 0;

            tPar.Init(false);
            tPar.bitFlag    = 0; //выводится только номинал
            tPar.style      = 3; //текст размерной надписи????
            tPar.stringFlag = false;
            tPar.sign       = 1; //diametr

            ksChar255      str     = (ksChar255)_kompas.GetParamStruct((short)StructType2DEnum.ko_Char255);
            ksDynamicArray arrText = (ksDynamicArray)tPar.GetTextArr();

            if (str == null || arrText == null)
            {
                return(true);
            }

            str.str = master.d.ToString();
            arrText.ksAddArrayItem(-1, str);

            int obj = doc.ksLinBreakDimension(param); //отрисовка

            return(false);
        }
        private void set_rad_razm(Stupica master, ksDocument2D doc)
        {
            ksRDimParam     aDim     = (ksRDimParam)_kompas.GetParamStruct((short)StructType2DEnum.ko_RDimParam);
            ksTextLineParam textLine = (ksTextLineParam)_kompas.GetParamStruct((short)StructType2DEnum.ko_TextLineParam);
            ksTextItemParam textItem = (ksTextItemParam)_kompas.GetParamStruct((short)StructType2DEnum.ko_TextItemParam);


            textLine.Init();
            textItem.Init();

            ksDimTextParam     tPar = (ksDimTextParam)aDim.GetTPar();
            ksTextItemFont     font = (ksTextItemFont)textItem.GetItemFont();
            ksDynamicArray     arra = (ksDynamicArray)textLine.GetTextItemArr();
            ksRDimSourceParam  sPar = (ksRDimSourceParam)aDim.GetSPar();
            ksRDimDrawingParam dPar = (ksRDimDrawingParam)aDim.GetDPar();


            tPar.Init(true);
            tPar.SetBitFlagValue(ldefin2d._AUTONOMINAL, true);
            tPar.sign = 3; //знак радиуса


            font.Init();
            font.height   = 5;
            font.ksu      = 1;
            font.fontName = "GOST type A";
            font.SetBitVectorValue(ldefin2d.NEW_LINE, true);

            arra.ksAddArrayItem(-1, textItem);


            sPar.Init();
            sPar.xc  = (master.l1 + master.R1);
            sPar.yc  = (master.d1 / 2 + master.R1);
            sPar.rad = (master.R1);

            dPar.Init();
            dPar.textPos  = -15;
            dPar.pt1      = 1; //1 -стрелка изнутри 2-стрелка снаружи 0-нетс стрелки
            dPar.pt2      = 0;
            dPar.shelfDir = 1;
            dPar.ang      = 180 + 45;

            int obj = doc.ksRadDimension(aDim);
        }
        private void Diam_Razmer(double xc, double yc, double rad, int dlina_vinosnoi_linii, short tip_strelki,
                                 int napr_vinosnoi_linii, int angle_vinosnoi_linii, ksDocument2D doc)
        {
            ksRDimParam     aDim     = (ksRDimParam)_kompas.GetParamStruct((short)StructType2DEnum.ko_RDimParam);
            ksTextLineParam textLine = (ksTextLineParam)_kompas.GetParamStruct((short)StructType2DEnum.ko_TextLineParam);
            ksTextItemParam textItem = (ksTextItemParam)_kompas.GetParamStruct((short)StructType2DEnum.ko_TextItemParam);

            if (aDim == null || textLine == null || textItem == null)
            {
                return;
            }

            textLine.Init();
            textItem.Init();

            ksDimTextParam     tPar = (ksDimTextParam)aDim.GetTPar();
            ksTextItemFont     font = (ksTextItemFont)textItem.GetItemFont();
            ksDynamicArray     arra = (ksDynamicArray)textLine.GetTextItemArr();
            ksRDimSourceParam  sPar = (ksRDimSourceParam)aDim.GetSPar();
            ksRDimDrawingParam dPar = (ksRDimDrawingParam)aDim.GetDPar();

            if (tPar == null || font == null || sPar == null || dPar == null)
            {
                return;
            }

            tPar.Init(true);
            tPar.SetBitFlagValue(ldefin2d._AUTONOMINAL, true);
            tPar.sign = 1; //знак диаметра


            /*
             *      font.Init();
             *      font.height = 5;
             *      font.ksu = 1;
             *      font.fontName = "GOST type A";
             *      font.SetBitVectorValue(ldefin2d.NEW_LINE, true);
             */

            arra.ksAddArrayItem(-1, textItem);

            ksDynamicArray arr1 = (ksDynamicArray)tPar.GetTextArr();

            if (arr1 == null)
            {
                return;
            }
            arr1.ksAddArrayItem(-1, textLine);

            sPar.Init();
            sPar.xc  = xc;
            sPar.yc  = yc;
            sPar.rad = rad;

            dPar.Init();
            dPar.textPos  = dlina_vinosnoi_linii;
            dPar.pt1      = tip_strelki;
            dPar.pt2      = tip_strelki;
            dPar.shelfDir = napr_vinosnoi_linii;
            dPar.ang      = angle_vinosnoi_linii;

            int obj = doc.ksDiamDimension(aDim);
        }
Beispiel #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();
                }
            }
        }