예제 #1
0
 /// <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);
     }
 }
예제 #2
0
 /// <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);
     }
 }
예제 #3
0
        /// <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);
            }
        }
예제 #4
0
        /// <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);
            }
        }