/// <summary> /// Метод создает эскиз правильного шестиугольника /// </summary> /// <param name="rad">Радиус описанной окружности шестиугольника</param> public bool DrawHexagon(double rad) { try { SketchCreator sketch = new SketchCreator(_app); ksSketchDefinition def = sketch.MakeSketch(); ksDocument2D doc = (ksDocument2D)def.BeginEdit(); short polyParam = (short)StructType2DEnum.ko_RegularPolygonParam; ksRegularPolygonParam param = (ksRegularPolygonParam)_app.Kompas.GetParamStruct(polyParam); param.count = 6; param.xc = 0; param.yc = 0; param.ang = 0; param.radius = rad; param.describe = false; param.style = 1; doc.ksRegularPolygon(param, 0); def.EndEdit(); return(true); } catch { return(false); } }
/// <summary> /// Метод создает эскиз окружности /// </summary> /// <param name="coor">Координаты центра окружности</param> /// <param name="radius">Радиус окружности</param> /// <param name="lineType">Тип линии</param> /// <returns></returns> public bool DrawCircle(Point coor, double radius, int lineType) { try { SketchCreator sketchCreator = new SketchCreator(_app); ksSketchDefinition def = sketchCreator.MakeSketch(); ksDocument2D doc = (ksDocument2D)def.BeginEdit(); doc.ksCircle(coor.X, coor.Y, radius, lineType); def.EndEdit(); return(true); } catch { return(false); } }
/// <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); } }
/// <summary> /// Метод рисует эскиз для выреза зубьев согласно расчетам в работе 1 по ссылке /// http://edu.ascon.ru/source/files/methods/method_osnovy_autoconstruct.pdf /// </summary> public bool DrawGearTeeth(double m, double baseCircle, double mainCircle, double projectionCircle, double troughsCircle) { try { SketchCreator sketchCreator = new SketchCreator(_app); ksSketchDefinition def = sketchCreator.MakeSketch(); ksDocument2D doc = (ksDocument2D)def.BeginEdit(); // углы double[] angle = new double[4] { 0, 90, 180, 270 }; _pointArraySize = 1; Array.Resize <Point>(ref _pointArray, _pointArraySize); _pointArray[0] = new Point(0, 0); // точка 1 double[] parameters = new double[] { 0, projectionCircle, baseCircle / 2, angle[0], angle[2] }; GetPointIntersect(_linArc, parameters); // точка 2 parameters = new double[] { _mathPointArray[0].x, _mathPointArray[0].y, baseCircle / 2, angle[0], angle[2], 0.5 * Math.PI * m, angle[1], angle[3] }; GetPointIntersect(_arcArc, parameters); // точка 3 parameters = new double[] { _mathPointArray[_mathPointArraySize - 1].x, _mathPointArray[_mathPointArraySize - 1].y, mainCircle / 2, angle[0], angle[2], baseCircle / 6, angle[3], angle[1] }; GetPointIntersect(_arcArc, parameters); // точка С parameters = new double[] { _mathPointArray[_mathPointArraySize - 1].x, _mathPointArray[_mathPointArraySize - 1].y, projectionCircle / 2, angle[0], angle[2], baseCircle / 6, angle[1], angle[3] }; GetPointIntersect(_arcArc, parameters); // точка 4 parameters = new double[] { _mathPointArray[_mathPointArraySize - 2].x, _mathPointArray[_mathPointArraySize - 2].y, mainCircle / 2, angle[0], angle[2], baseCircle / 6, angle[1], angle[3] }; GetPointIntersect(_arcArc, parameters); // точка F parameters = new double[] { _mathPointArray[_mathPointArraySize - 1].x, _mathPointArray[_mathPointArraySize - 1].y, troughsCircle / 2, angle[0], angle[2] }; GetPointIntersect(_linArc, parameters); // точка 5 parameters = new double[] { _mathPointArray[0].x, _mathPointArray[0].y, baseCircle / 2, angle[0], angle[2], 0.75 * Math.PI * m, angle[1], angle[3] }; GetPointIntersect(_arcArc, parameters); // точка А GetSymmetry(3); // точка D GetSymmetry(5); // точка 3' GetSymmetry(2); // точка 4' GetSymmetry(4); _mathPointArraySize++; Array.Resize <ksMathPointParam>(ref _mathPointArray, _mathPointArraySize); short mathPoint = (short)StructType2DEnum.ko_MathPointParam; _mathPointArray[_mathPointArraySize - 1] = (ksMathPointParam)_app.Kompas.GetParamStruct(mathPoint); _mathPointArray[_mathPointArraySize - 1].x = 0; _mathPointArray[_mathPointArraySize - 1].y = 0; doc.ksArcByPoint(_mathPointArray[2].x, _mathPointArray[2].y, baseCircle / 6, _mathPointArray[3].x, _mathPointArray[3].y, _mathPointArray[4].x, _mathPointArray[4].y, 1, 1); doc.ksArcByPoint(_mathPointArray[9].x, _mathPointArray[9].y, baseCircle / 6, _mathPointArray[10].x, _mathPointArray[10].y, _mathPointArray[7].x, _mathPointArray[7].y, 1, 1); doc.ksArcByPoint(_mathPointArray[11].x, _mathPointArray[11].y, troughsCircle / 2, _mathPointArray[5].x, _mathPointArray[5].y, _mathPointArray[8].x, _mathPointArray[8].y, 1, 1); doc.ksArcByPoint(_mathPointArray[11].x, _mathPointArray[11].y, projectionCircle / 2, _mathPointArray[3].x, _mathPointArray[3].y, _mathPointArray[7].x, _mathPointArray[7].y, 1, 1); doc.ksLineSeg(_mathPointArray[4].x, _mathPointArray[4].y, _mathPointArray[5].x, _mathPointArray[5].y, 1); doc.ksLineSeg(_mathPointArray[10].x, _mathPointArray[10].y, _mathPointArray[8].x, _mathPointArray[8].y, 1); def.EndEdit(); return(true); } catch { return(false); } }