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); } } }
/// <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); } }
// Создать текст 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); } } } } }
// Создать 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(); } } }