Example #1
0
 /// <summary>
 /// Нарисовать внутреннее скругление шайбы
 /// </summary>
 /// <param name="shimSettings">Параметры шайбы</param>
 /// <param name="shimEdit">Чертеж</param>
 private static void DrawShimInnerFillet(ShimSettings shimSettings,
                                         ksDocument2D shimEdit)
 {
     if (shimSettings.InnerFillet > 0)
     {
         shimEdit.ksArcByPoint(
             shimSettings.InnerRadius + shimSettings.InnerFillet,
             shimSettings.Height / 2 - shimSettings.InnerFillet,
             shimSettings.InnerFillet,
             shimSettings.InnerRadius + shimSettings.InnerFillet,
             shimSettings.Height / 2, shimSettings.InnerRadius,
             shimSettings.Height / 2 - shimSettings.InnerFillet,
             1, 1);
     }
     if (shimSettings.InnerFillet != shimSettings.Height / 2)
     {
         shimEdit.ksLineSeg(shimSettings.InnerRadius,
                            shimSettings.Height / 2 - shimSettings.InnerFillet,
                            shimSettings.InnerRadius,
                            -shimSettings.Height / 2 + shimSettings.InnerFillet, 1);
     }
     if (shimSettings.InnerFillet > 0)
     {
         shimEdit.ksArcByPoint(
             shimSettings.InnerRadius + shimSettings.InnerFillet,
             -shimSettings.Height / 2 + shimSettings.InnerFillet,
             shimSettings.InnerFillet,
             shimSettings.InnerRadius + shimSettings.InnerFillet,
             -shimSettings.Height / 2, shimSettings.InnerRadius,
             -shimSettings.Height / 2 + shimSettings.InnerFillet,
             -1, 1);
     }
 }
Example #2
0
        /// <summary>
        /// Создание модели шестерни
        /// </summary>
        /// <param name="properties">Передаваемые с формы параметры</param>
        public void CreateModel(Gear properties)
        {
            int teethCount    = properties.TeethCount;
            var angle         = properties.Angle;
            var thickness     = properties.Thickness;
            var shaftDiam     = properties.ShaftDiam;
            var diameterOut   = properties.DiameterOut;
            var diameterIn    = properties.DiameterIn;
            var diameterPitch = (diameterOut + diameterIn) / 2; // делительный диаметр колеса
            var alfa1         = 0.0;
            var alfa2         = 0.0;
            // интерфейсы ортогональных плоскостей
            ksPart iPart = _doc3.GetPart((int)Part_Type.pNew_Part) as ksPart;  //новый компонет

            if (iPart != null)
            {
                // интерфейсы ортогональных плоскостей
                ksEntity planeXoy = iPart.GetDefaultEntity((short)Obj3dType.o3d_planeXOY) as ksEntity;
                ksEntity planeXoz = iPart.GetDefaultEntity((short)Obj3dType.o3d_planeXOZ) as ksEntity;
                ksEntity planeYoz = iPart.GetDefaultEntity((short)Obj3dType.o3d_planeYOZ) as ksEntity;
                // интерфейс эскиза (половина контура сечения колеса)
                ksEntity iSketchEntity = iPart.NewEntity((short)Obj3dType.o3d_sketch) as ksEntity;
                if (iSketchEntity != null)
                {
                    // интерфейс параметров эскиза
                    ksSketchDefinition iSketchDef = iSketchEntity.GetDefinition() as ksSketchDefinition;
                    if (iSketchDef != null)
                    {
                        if (planeXoy != null)
                        {
                            // устанавливаем плоскость,
                            // на которой создается эскиз
                            iSketchDef.SetPlane(planeXoy);

                            iSketchEntity.Create();

                            // запускаем процесс редактирования эскиза
                            // doc – указатель на интерфейс ksDocument2D
                            _doc = iSketchDef.BeginEdit() as ksDocument2D;
                            if (_doc != null)
                            {
                                _doc.ksLineSeg(-thickness / 2, 00, thickness / 2, 0, 3); //3 - осевая линия
                                _doc.ksLineSeg(thickness / 2, shaftDiam / 2, -thickness / 2, shaftDiam / 2, 1);
                                _doc.ksLineSeg(thickness / 2, shaftDiam / 2, thickness / 2, diameterOut / 2, 1);
                                _doc.ksLineSeg(-thickness / 2, diameterOut / 2, -thickness / 2, shaftDiam / 2, 1);
                                _doc.ksLineSeg(-thickness / 2, diameterOut / 2, thickness / 2, diameterOut / 2, 1);
                            }
                            iSketchDef.EndEdit();
                        }
                    }
                }
                // интерфейс базовой операции вращения
                ksEntity iBaseRotatedEntity = iPart.NewEntity((short)Obj3dType.o3d_baseRotated) as ksEntity;
                if (iBaseRotatedEntity != null)
                {
                    // интерфейс параметров вращения
                    ksBaseRotatedDefinition iBaseRotatedDef =
                        iBaseRotatedEntity.GetDefinition() as ksBaseRotatedDefinition;
                    if (iBaseRotatedDef != null)
                    {
                        // настройка параметров вращения
                        iBaseRotatedDef.SetThinParam(false, (short)Direction_Type.dtNormal, 1, 1);
                        iBaseRotatedDef.SetSideParam(true, 360.0);
                        iBaseRotatedDef.toroidShapeType = false;
                        iBaseRotatedDef.SetSketch(iSketchEntity);
                        // создаем операцию вращения
                        // результат – заготовка зубчатого колеса
                        iBaseRotatedEntity.Create();
                    }
                }
                ksEntity iSketch1Entity = iPart.NewEntity((short)Obj3dType.o3d_sketch) as ksEntity;
                if (iSketch1Entity != null)
                {
                    ksSketchDefinition iSketch1Def = iSketch1Entity.GetDefinition() as ksSketchDefinition;
                    if (iSketch1Def != null)
                    {
                        if (planeYoz != null)
                        {
                            // размещаем эскиз на плоскости XOY
                            iSketch1Def.SetPlane(planeXoy);
                            iSketch1Entity.Create();
                            _doc = iSketch1Def.BeginEdit() as ksDocument2D;
                            if (_doc != null)
                            {
                                var width = properties.KeywayWidth;
                                _doc.ksLineSeg(thickness / 2, -width / 2, -thickness / 2, -width / 2, 1);
                                _doc.ksLineSeg(-thickness / 2, width / 2, -thickness / 2, -width / 2, 1);
                                _doc.ksLineSeg(-thickness / 2, width / 2, thickness / 2, width / 2, 1);
                                _doc.ksLineSeg(thickness / 2, width / 2, thickness / 2, -width / 2, 1);
                            }
                            iSketch1Def.EndEdit();
                        }
                    }
                }
                // интерфейс операции Вырезать выдавливанием
                ksEntity iCutExtrusion = iPart.NewEntity((short)Obj3dType.o3d_cutExtrusion) as ksEntity;
                if (iCutExtrusion != null)
                {
                    // интерфейс параметров вырезания
                    ksCutExtrusionDefinition iCutExtrusionDef =
                        iCutExtrusion.GetDefinition() as ksCutExtrusionDefinition;
                    if (iCutExtrusionDef != null)
                    {
                        // настройка параметров
                        iCutExtrusionDef.SetSketch(iSketch1Entity);
                        // направление
                        iCutExtrusionDef.directionType = (short)Direction_Type.dtNormal;
                        // величина вырезания по каждому из направлений
                        iCutExtrusionDef.SetSideParam(true, (short)ksEndTypeEnum.etBlind,
                                                      properties.KeywayDepth + shaftDiam / 2, 0, false);
                        iCutExtrusionDef.SetThinParam(false, 0, 0, 0);
                        iCutExtrusion.Create();
                    }
                }
                // интерфейс смещенной плоскости
                ksEntity iOffsetPlaneEntity = iPart.NewEntity((short)Obj3dType.o3d_planeOffset) as ksEntity;
                if (iOffsetPlaneEntity != null)
                {
                    // интерфейс параметров смещенной плоскости
                    ksPlaneOffsetDefinition iOffsetPlaneDef =
                        iOffsetPlaneEntity.GetDefinition() as ksPlaneOffsetDefinition;
                    if (iOffsetPlaneDef != null)
                    {
                        // величина, базовая плоскость и другие параметры смещения
                        iOffsetPlaneDef.offset = thickness / 2;
                        iOffsetPlaneDef.SetPlane(planeYoz);
                        iOffsetPlaneDef.direction = false;
                        // делаем плоскость скрытой
                        iOffsetPlaneEntity.hidden = true;
                        // создаем вспомогательную плоскость
                        iOffsetPlaneEntity.Create();
                    }
                }
                // эскиз первого выреза между зубьями
                ksEntity iSketch2Entity = iPart.NewEntity((short)Obj3dType.o3d_sketch) as ksEntity;
                if (iSketch2Entity != null)
                {
                    ksSketchDefinition iSketch2Def = iSketch2Entity.GetDefinition() as ksSketchDefinition;
                    if (iSketch2Def != null)
                    {
                        // базовая плоскость – вспомогательная iOffsetPlaneEntity
                        iSketch2Def.SetPlane(iOffsetPlaneEntity);
                        iSketch2Entity.Create();
                        _doc  = iSketch2Def.BeginEdit() as ksDocument2D;
                        alfa1 = 360.0 / teethCount;
                        _doc.ksMtr(0, 0, 90, 1, 1);
                        // вычерчивание изображения эскиза
                        // вместо эвольвент для простоты
                        // берем обычные дуги по трем точкам
                        _doc.ksArcBy3Points(-(diameterOut / 2 + 0.1) * Math.Sin(DegToRad(0)),
                                            -(diameterOut / 2 + 0.1) * Math.Cos(DegToRad(0)),
                                            -diameterPitch / 2 * Math.Sin(DegToRad(alfa1 / 8)),
                                            -diameterPitch / 2 * Math.Cos(DegToRad(alfa1 / 8)),
                                            -diameterIn / 2 * Math.Sin(DegToRad(alfa1 / 4)),
                                            -diameterIn / 2 * Math.Cos(DegToRad(alfa1 / 4)), 1);
                        _doc.ksArcByPoint(0, 0, diameterIn / 2, -diameterIn / 2 * Math.Sin(DegToRad(alfa1 / 4)),
                                          -diameterIn / 2 * Math.Cos(DegToRad(alfa1 / 4)),
                                          -diameterIn / 2 * Math.Sin(DegToRad(alfa1 / 2)),
                                          -diameterIn / 2 * Math.Cos(DegToRad(alfa1 / 2)), -1, 1);
                        _doc.ksArcBy3Points(-diameterIn / 2 * Math.Sin(DegToRad(alfa1 / 2)),
                                            -diameterIn / 2 * Math.Cos(DegToRad(alfa1 / 2)),
                                            -diameterPitch / 2 * Math.Sin(DegToRad(0.625 * alfa1)),
                                            -diameterPitch / 2 * Math.Cos(DegToRad(0.625 * alfa1)),
                                            -(diameterOut / 2 + 0.1) * Math.Sin(DegToRad(0.75 * alfa1)),
                                            -(diameterOut / 2 + 0.1) * Math.Cos(DegToRad(0.75 * alfa1)), 1);
                        _doc.ksArcBy3Points(-(diameterOut / 2 + 0.1) * Math.Sin(DegToRad(0.75 * alfa1)),
                                            -(diameterOut / 2 + 0.1) * Math.Cos(DegToRad(0.75 * alfa1)),
                                            -(diameterOut / 2 + 2) * Math.Sin(DegToRad(0.375 * alfa1)),
                                            -(diameterOut / 2 + 2) * Math.Cos(DegToRad(0.375 * alfa1)),
                                            -(diameterOut / 2 + 0.1) * Math.Sin(DegToRad(0)),
                                            -(diameterOut / 2 + 0.1) * Math.Cos(DegToRad(0)), 1);
                        _doc.ksDeleteMtr();
                        iSketch2Def.EndEdit();
                    }
                }
                // интерфейс второго эскиза выреза между зубьями
                ksEntity iSketch3Entity = iPart.NewEntity((short)Obj3dType.o3d_sketch) as ksEntity;
                if (iSketch3Entity != null)
                {
                    ksSketchDefinition iSketch3Def = iSketch3Entity.GetDefinition() as ksSketchDefinition;
                    if (iSketch3Def != null)
                    {
                        // строим на плоскости YOZ
                        iSketch3Def.SetPlane(planeYoz);
                        iSketch3Entity.Create();
                        _doc  = iSketch3Def.BeginEdit() as ksDocument2D;
                        alfa2 = -(180 / Math.PI * (thickness * Math.Tan(Math.PI * (angle) / 180) / diameterPitch));
                        _doc.ksMtr(0, 0, 90, 1, 1);
                        // вычерчивание изображения эскиза
                        // вместо эвольвент для простоты
                        // берем обычные дуги по трем точкам
                        _doc.ksArcBy3Points(-(diameterOut / 2 + 0.1) * Math.Sin(DegToRad(alfa2)),
                                            -(diameterOut / 2 + 0.1) * Math.Cos(DegToRad(alfa2)),
                                            -diameterPitch / 2 * Math.Sin(DegToRad(alfa1 / 8 + alfa2)),
                                            -diameterPitch / 2 * Math.Cos(DegToRad(alfa1 / 8 + alfa2)),
                                            -diameterIn / 2 * Math.Sin(DegToRad(alfa1 / 4 + alfa2)),
                                            -diameterIn / 2 * Math.Cos(DegToRad(alfa1 / 4 + alfa2)), 1);
                        _doc.ksArcByPoint(0, 0, diameterIn / 2, -diameterIn / 2 * Math.Sin(DegToRad(alfa1 / 4 + alfa2)),
                                          -diameterIn / 2 * Math.Cos(DegToRad(alfa1 / 4 + alfa2)),
                                          -diameterIn / 2 * Math.Sin(DegToRad(alfa1 / 2 + alfa2)),
                                          -diameterIn / 2 * Math.Cos(DegToRad(alfa1 / 2 + alfa2)), -1, 1);
                        _doc.ksArcBy3Points(-diameterIn / 2 * Math.Sin(DegToRad(alfa1 / 2 + alfa2)),
                                            -diameterIn / 2 * Math.Cos(DegToRad(alfa1 / 2 + alfa2)),
                                            -diameterPitch / 2 * Math.Sin(DegToRad(0.625 * alfa1 + alfa2)),
                                            -diameterPitch / 2 * Math.Cos(DegToRad(0.625 * alfa1 + alfa2)),
                                            -(diameterOut / 2 + 0.1) * Math.Sin(DegToRad(0.75 * alfa1 + alfa2)),
                                            -(diameterOut / 2 + 0.1) * Math.Cos(DegToRad(0.75 * alfa1 + alfa2)), 1);
                        _doc.ksArcBy3Points(-(diameterOut / 2 + 0.1) * Math.Sin(DegToRad(0.75 * alfa1 + alfa2)),
                                            -(diameterOut / 2 + 0.1) * Math.Cos(DegToRad(0.75 * alfa1 + alfa2)),
                                            -(diameterOut / 2 + 2) * Math.Sin(DegToRad(0.375 * alfa1 + alfa2)),
                                            -(diameterOut / 2 + 2) * Math.Cos(DegToRad(0.375 * alfa1 + alfa2)),
                                            -(diameterOut / 2 + 0.1) * Math.Sin(DegToRad(alfa2)),
                                            -(diameterOut / 2 + 0.1) * Math.Cos(DegToRad(alfa2)),
                                            1);
                        _doc.ksDeleteMtr();
                        iSketch3Def.EndEdit();
                    }
                }
                // вторая смещенная плоскость
                ksEntity iOffsetPlane1Entity = iPart.NewEntity((short)Obj3dType.o3d_planeOffset) as ksEntity;
                if (iOffsetPlane1Entity != null)
                {
                    ksPlaneOffsetDefinition iOffsetPlane1Def =
                        iOffsetPlane1Entity.GetDefinition() as ksPlaneOffsetDefinition;
                    if (iOffsetPlane1Def != null)
                    {
                        // величина смещения та же
                        iOffsetPlane1Def.offset = thickness / 2;
                        // направление противоположное
                        iOffsetPlane1Def.direction = true;
                        iOffsetPlane1Def.SetPlane(planeYoz);
                        // делаем плоскость скрытой
                        iOffsetPlane1Entity.hidden = true;
                        // создаем смещенную плоскость
                        iOffsetPlane1Entity.Create();
                    }
                }
                // третий (последний) эскиз выреза между зубьями
                ksEntity iSketch4Entity = iPart.NewEntity((short)Obj3dType.o3d_sketch) as ksEntity;
                if (iSketch4Entity != null)
                {
                    ksSketchDefinition iSketch4Def = iSketch4Entity.GetDefinition() as ksSketchDefinition;
                    if (iSketch4Def != null)
                    {
                        // базовая плоскость – только что созданная смещенная
                        iSketch4Def.SetPlane(iOffsetPlane1Entity);
                        iSketch4Entity.Create();
                        _doc  = iSketch4Def.BeginEdit() as ksDocument2D;
                        alfa2 = -(180 / Math.PI * (2 * thickness * Math.Tan(Math.PI * (angle) / 180) / diameterPitch));
                        _doc.ksMtr(0, 0, 90, 1, 1);
                        // вычерчивание изображения эскиза
                        // вместо эвольвент для простоты
                        // берем обычные дуги по трем точкам
                        _doc.ksArcBy3Points(-(diameterOut / 2 + 0.1) * Math.Sin(DegToRad(alfa2)),
                                            -(diameterOut / 2 + 0.1) * Math.Cos(DegToRad(alfa2)),
                                            -diameterPitch / 2 * Math.Sin(DegToRad(alfa1 / 8 + alfa2)),
                                            -diameterPitch / 2 * Math.Cos(DegToRad(alfa1 / 8 + alfa2)),
                                            -diameterIn / 2 * Math.Sin(DegToRad(alfa1 / 4 + alfa2)),
                                            -diameterIn / 2 * Math.Cos(DegToRad(alfa1 / 4 + alfa2)), 1);
                        _doc.ksArcByPoint(0, 0, diameterIn / 2, -diameterIn / 2 * Math.Sin(DegToRad(alfa1 / 4 + alfa2)),
                                          -diameterIn / 2 * Math.Cos(DegToRad(alfa1 / 4 + alfa2)),
                                          -diameterIn / 2 * Math.Sin(DegToRad(alfa1 / 2 + alfa2)),
                                          -diameterIn / 2 * Math.Cos(DegToRad(alfa1 / 2 + alfa2)), -1, 1);
                        _doc.ksArcBy3Points(-diameterIn / 2 * Math.Sin(DegToRad(alfa1 / 2 + alfa2)),
                                            -diameterIn / 2 * Math.Cos(DegToRad(alfa1 / 2 + alfa2)),
                                            -diameterPitch / 2 * Math.Sin(DegToRad(0.625 * alfa1 + alfa2)),
                                            -diameterPitch / 2 * Math.Cos(DegToRad(0.625 * alfa1 + alfa2)),
                                            -(diameterOut / 2 + 0.1) * Math.Sin(DegToRad(0.75 * alfa1 + alfa2)),
                                            -(diameterOut / 2 + 0.1) * Math.Cos(DegToRad(0.75 * alfa1 + alfa2)), 1);
                        _doc.ksArcBy3Points(-(diameterOut / 2 + 0.1) * Math.Sin(DegToRad(0.75 * alfa1 + alfa2)),
                                            -(diameterOut / 2 + 0.1) * Math.Cos(DegToRad(0.75 * alfa1 + alfa2)),
                                            -(diameterOut / 2 + 2) * Math.Sin(DegToRad(0.375 * alfa1 + alfa2)),
                                            -(diameterOut / 2 + 2) * Math.Cos(DegToRad(0.375 * alfa1 + alfa2)),
                                            -(diameterOut / 2 + 0.1) * Math.Sin(DegToRad(alfa2)),
                                            -(diameterOut / 2 + 0.1) * Math.Cos(DegToRad(alfa2)),
                                            1);
                        _doc.ksDeleteMtr();
                        iSketch4Def.EndEdit();
                    }
                }
                // интерфейс операции Вырезать по сечениям
                ksEntity iCutLoftEntity = iPart.NewEntity((short)Obj3dType.o3d_cutLoft) as ksEntity;
                if (iCutLoftEntity != null)
                {
                    // интерфейс параметров операции по сечениям
                    ksCutLoftDefinition iCutLoftDef = iCutLoftEntity.GetDefinition() as ksCutLoftDefinition;
                    if (iCutLoftDef != null)
                    {
                        // интерфейс массива ksEntityCollection
                        // коллекции эскизов для вырезания по сечениям
                        ksEntityCollection collect = iCutLoftDef.Sketchs() as ksEntityCollection;
                        // добавляем эскизы в колекцию
                        collect.Add(iSketch2Entity);
                        collect.Add(iSketch3Entity);
                        collect.Add(iSketch4Entity);
                        // создаем операцию по сечениям
                        // результат – первый вырез между зубьями в венце колеса
                        iCutLoftEntity.Create();
                    }
                }
                // интерфейс вспомогательной оси на пересечении двух плоскостей
                ksEntity iAxis = iPart.NewEntity((short)Obj3dType.o3d_axis2Planes) as ksEntity;
                if (iAxis != null)
                {
                    // интерфейс параметров вспомогательной оси
                    // на пересечении плоскостей
                    ksAxis2PlanesDefinition iAxis2PlDef = iAxis.GetDefinition() as ksAxis2PlanesDefinition;
                    if (iAxis2PlDef != null)
                    {
                        // задаем плоскости
                        iAxis2PlDef.SetPlane(1, planeXoz);
                        iAxis2PlDef.SetPlane(2, planeXoy);
                        // делаем ось невидимой
                        iAxis.hidden = true;
                        // создаем вспомогательную ось
                        iAxis.Create();
                    }
                }
                // интерфейс операции Массив по концентрической сетке
                ksEntity iCircularCopy = iPart.NewEntity((short)Obj3dType.o3d_circularCopy) as ksEntity;
                if (iCircularCopy != null)
                {
                    // интерфейс параметров операции копирования по массиву
                    ksCircularCopyDefinition iCirCopyDef = iCircularCopy.GetDefinition() as ksCircularCopyDefinition;
                    if (iCirCopyDef != null)
                    {
                        // коллекция операций для копирования
                        ksEntityCollection collect1 = iCirCopyDef.GetOperationArray() as ksEntityCollection;
                        // операция всего лишь одна – вырезание зуба
                        collect1.Add(iCutLoftEntity);
                        // количество копий, равно количеству зубьев
                        iCirCopyDef.count2  = teethCount;
                        iCirCopyDef.factor2 = true;
                        // ось копирования
                        iCirCopyDef.SetAxis(iAxis);
                        // создаем концентрический массив – колесо готово!
                        iCircularCopy.Create();
                    }
                }
            }
        }
Example #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);
            }
        }
Example #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);
            }
        }