// Создать точку private void DrawPoint() { // 0-точка, 1-крестик, 2-х-точка, 3-квадрат, // 4-треугольник, 5-окружность, 6-звезда, // 7-перечеркнутый квадрат doc.ksMtr(10, 10, 0, 1, 1); string buf = string.Empty; // построить точку reference p = doc.ksPoint(30, 40, 0); doc.ksPoint(40, 40, 1); doc.ksPoint(50, 40, 2); doc.ksPoint(60, 40, 3); doc.ksPoint(70, 40, 4); doc.ksPoint(80, 40, 5); doc.ksPoint(90, 40, 6); doc.ksPoint(100, 40, 7); // взять параметры точки ksPointParam par = (ksPointParam)kompas.GetParamStruct((short)StructType2DEnum.ko_PointParam); if (par != null) { int t = doc.ksGetObjParam(p, par, ldefin2d.ALLPARAM); buf = string.Format("t = {0}, x = {1:.#}, y = {2:.#}, style = {3}", t, par.x, par.y, par.style); kompas.ksMessage(buf); // заменить параметры точки par.x = 20; par.y = 30; par.style = 7; if (doc.ksSetObjParam(p, par, ldefin2d.ALLPARAM) == 1) { kompas.ksMessage("Изменили объект"); } else { kompas.ksMessageBoxResult(); } } doc.ksDeleteMtr(); }
/// <summary> /// Метод рисует эскиз в виде части сектора /// </summary> /// <param name="internalArcOfDipRadius">Внутренний диаметр выреза</param> /// <param name="externalArcOfDipRadius">Внещний диаметр выреза</param> /// <param name="m">Модуль жесткости</param> /// <param name="z">Количество зубъев</param> /// <param name="k">Ширина ребер жескости</param> /// <param name="angle54">Угол 54 градусов</param> /// <returns></returns> public bool DrawDipSketch(double internalArcOfDipRadius, double externalArcOfDipRadius, double m, double z, double k, double angle54) { double a0 = _app.Mat.ksAngle(0, 0, 1, 0); double a180 = _app.Mat.ksAngle(0, 0, -1, 0); double x; double y; double l = k / 2; // диаметр большей дуги углубления // диаметр меньшей дуги углубления try { SketchCreator sketchCreator = new SketchCreator(_app); ksSketchDefinition def = sketchCreator.MakeSketch(); ksDocument2D doc = (ksDocument2D)def.BeginEdit(); short mathPoint = (short)StructType2DEnum.ko_MathPointParam; ksMathPointParam p1 = (ksMathPointParam)_app.Kompas.GetParamStruct(mathPoint); // задается проекция толщины ребра жесткости на ось Х p1.x = -l / Math.Sin(angle54); p1.y = 0; // координаты точки на ребре жесткости ksMathPointParam p2 = (ksMathPointParam)_app.Kompas.GetParamStruct(mathPoint); p2.x = (Math.Cos(angle54) * m * z) + p1.x; p2.y = Math.Sin(angle54) * m * z; Point point1 = new Point(p1.x, p1.y); Point point2 = new Point(p2.x, p2.y); // координаты точки пересечения большей дуги углубления // и прямой проходящей вдоль ребра жесткости ksMathPointParam pA = (ksMathPointParam)_app.Kompas.GetParamStruct(mathPoint); PointIntersect pointIntersect = new PointIntersect(_app); pointIntersect.LinArc(point1, point2, internalArcOfDipRadius, a0, a180, pA); // координаты точки пересечения меньшей дуги углубления // и прямой проходящей вдоль ребра жесткости ksMathPointParam pB = (ksMathPointParam)_app.Kompas.GetParamStruct(mathPoint); pointIntersect.LinArc(point1, point2, externalArcOfDipRadius, a0, a180, pB); double lineSegY = m * (z + 3); doc.ksPoint(pB.x, pB.y, 1); ksMathPointParam pC = (ksMathPointParam)_app.Kompas.GetParamStruct(mathPoint); _app.Mat.ksSymmetry(pA.x, pA.y, 0, 0, 0, lineSegY, out x, out y); pC.x = x; pC.y = y; ksMathPointParam pD = (ksMathPointParam)_app.Kompas.GetParamStruct(mathPoint); _app.Mat.ksSymmetry(pB.x, pB.y, 0, 0, 0, lineSegY, out x, out y); pD.x = x; pD.y = y; doc.ksArcByPoint(0, 0, internalArcOfDipRadius, pA.x, pA.y, pC.x, pC.y, 1, 1); doc.ksArcByPoint(0, 0, externalArcOfDipRadius, pB.x, pB.y, pD.x, pD.y, 1, 1); doc.ksLineSeg(pA.x, pA.y, pB.x, pB.y, 1); doc.ksLineSeg(pC.x, pC.y, pD.x, pD.y, 1); def.EndEdit(); return(true); } catch { return(false); } }