예제 #1
0
 /// <summary>
 /// Расчет точек прямоугольной конфеты
 /// </summary>
 /// <param name="X">Массив x координат точек конфеты</param>
 /// <param name="Y">Массив y координат точек конфеты</param>
 /// <param name="formTotalLength">Общая длина конфетной формы</param>
 /// <param name="formTotalWidth">Общая ширина конфетной формы</param>
 /// <param name="candySettings">Параметры конфетной формы</param>
 private void InitRectCandyPoints(ref double[] X, ref double[] Y,
                                  double formTotalLength, double formTotalWidth,
                                  CandySettings candySettings)
 {
     X = new double[]
     {
         (-formTotalLength / 2) + candySettings.FormDepthByLength,
         (-formTotalLength / 2) + candySettings.FormDepthByLength,
         (-formTotalLength / 2) + candySettings.FormDepthByLength
         + Width,
         (-formTotalLength / 2) + candySettings.FormDepthByLength
         + Width,
         (-formTotalLength / 2) + candySettings.FormDepthByLength
     };
     Y = new double[]
     {
         (-formTotalWidth / 2) + candySettings.FormDepthByWidth,
         (-formTotalWidth / 2) + candySettings.FormDepthByWidth
         + Length,
         (-formTotalWidth / 2) + candySettings.FormDepthByWidth
         + Length,
         (-formTotalWidth / 2) + candySettings.FormDepthByWidth,
         (-formTotalWidth / 2) + candySettings.FormDepthByWidth
     };
 }
예제 #2
0
        /// <summary>
        /// Построение выреза прямоугольной конфеты
        /// </summary>
        /// <param name="part">Компонент сборки</param>
        /// <param name="planeFormSurface">Плоскость поверхности формы</param>
        /// <param name="candySettings">Параметры конфетной формы</param>
        /// <param name="formTotalLength">Общая длина конфетной формы</param>
        /// <param name="formTotalWidth">Общая ширина конфетной формы</param>
        public override void Build(ksPart part, ksEntity planeFormSurface,
                                   CandySettings candySettings, double formTotalLength,
                                   double formTotalWidth)
        {
            // Создание и настройка эскиза
            // на поверхности формы (смещенной плоскости)

            ksEntity formSurfaceSketch =
                part.NewEntity((short)Obj3dType.o3d_sketch);
            ksSketchDefinition formSurfaceSketchDefinition =
                formSurfaceSketch.GetDefinition();

            formSurfaceSketchDefinition.SetPlane(planeFormSurface);
            formSurfaceSketch.Create();

            // Входим в режим редактирования эскиза
            ksDocument2D formSurfaceDocument2D =
                formSurfaceSketchDefinition.BeginEdit();

            // Расчитаем положение первой конфеты
            // Положение других конфет расчитаем путем сдвига первой

            double[] rectCandyXPoints = new double[] { 0, 0, 0, 0, 0 };
            double[] rectCandyYPoints = new double[] { 0, 0, 0, 0, 0 };

            InitRectCandyPoints(ref rectCandyXPoints, ref rectCandyYPoints,
                                formTotalLength, formTotalWidth, candySettings);

            // Рисуем  прямоугольные конфеты
            for (int i = 0; i < candySettings.CandyCount / 2; ++i)
            {
                for (int j = 0; j < 2; ++j)
                {
                    DrawRect(rectCandyXPoints, rectCandyYPoints,
                             formSurfaceDocument2D);

                    rectCandyYPoints = GetShiftedArray(rectCandyYPoints,
                                                       Length + candySettings.FormDepthByWidth);
                }
                rectCandyYPoints = GetShiftedArray(rectCandyYPoints,
                                                   -2 * (Length + candySettings.FormDepthByWidth));
                rectCandyXPoints = GetShiftedArray(rectCandyXPoints,
                                                   Width + candySettings.FormDepthByLength);
            }

            // Выходим из режима редактирования эскиза
            formSurfaceSketchDefinition.EndEdit();

            // Вырезаем прямоугольные конфетки ^_^
            CutExtrude(part, formSurfaceSketch, Height);
        }
예제 #3
0
        /// <summary>
        /// Построение выреза цилиндрической конфеты
        /// </summary>
        /// <param name="part">Компонент сборки</param>
        /// <param name="planeFormSurface">Плоскость поверхности формы</param>
        /// <param name="candySettings">Параметры конфетной формы</param>
        /// <param name="formTotalLength">Общая длина конфетной формы</param>
        /// <param name="formTotalWidth">Общая ширина конфетной формы</param>
        public override void Build(ksPart part, ksEntity planeFormSurface,
                                   CandySettings candySettings, double formTotalLength,
                                   double formTotalWidth)
        {
            double[] cylinderCandyXPoints = new double[] { 0, 0, 0, 0, 0 };
            double[] cylinderCandyYPoints = new double[] { 0, 0, 0, 0, 0 };

            InitCylinderCandyPoints(ref cylinderCandyXPoints,
                                    ref cylinderCandyYPoints, formTotalLength, formTotalWidth,
                                    candySettings);

            for (int i = 0; i < candySettings.CandyCount / 2; ++i)
            {
                for (int j = 0; j < 2; ++j)
                {
                    // Создание и настройка эскиза на
                    // поверхности формы (смещенной плоскости)

                    ksEntity formSurfaceSketch =
                        part.NewEntity((short)Obj3dType.o3d_sketch);
                    ksSketchDefinition formSurfaceSketchDefinition =
                        formSurfaceSketch.GetDefinition();
                    formSurfaceSketchDefinition.SetPlane(planeFormSurface);
                    formSurfaceSketch.Create();

                    // Входим в режим редактирования эскиза
                    ksDocument2D formSurfaceDocument2D =
                        (ksDocument2D)formSurfaceSketchDefinition.BeginEdit();

                    DrawRect(cylinderCandyXPoints, cylinderCandyYPoints,
                             formSurfaceDocument2D, 0);

                    // Выходим из режима редактирования эскиза
                    formSurfaceSketchDefinition.EndEdit();

                    CutRotated(part, formSurfaceSketch);

                    cylinderCandyYPoints =
                        GetShiftedArray(cylinderCandyYPoints,
                                        Length + candySettings.FormDepthByWidth);
                }
                cylinderCandyYPoints =
                    GetShiftedArray(cylinderCandyYPoints,
                                    -2 * (Length + candySettings.FormDepthByWidth));
                cylinderCandyXPoints =
                    GetShiftedArray(cylinderCandyXPoints,
                                    Width + candySettings.FormDepthByLength);
            }
        }
예제 #4
0
        /// <summary>
        /// Построение выреза сферической конфеты
        /// </summary>
        /// <param name="part">Компонент сборки</param>
        /// <param name="planeFormSurface">Плоскость поверхности формы</param>
        /// <param name="candySettings">Параметры конфетной формы</param>
        /// <param name="formTotalLength">Общая длина конфетной формы</param>
        /// <param name="formTotalWidth">Общая ширина конфетной формы</param>
        public override void Build(ksPart part, ksEntity planeFormSurface, CandySettings candySettings, double formTotalLength, double formTotalWidth)
        {
            double x = -formTotalLength / 2
                       + candySettings.FormDepthByLength + Height;
            double y = -formTotalWidth / 2
                       + candySettings.FormDepthByWidth + Height;

            for (int i = 0; i < candySettings.CandyCount / 2; ++i)
            {
                for (int j = 0; j < 2; ++j)
                {
                    // Создание и настройка эскиза
                    // на поверхности формы (смещенной плоскости)

                    ksEntity formSurfaceSketch =
                        part.NewEntity((short)Obj3dType.o3d_sketch);
                    ksSketchDefinition formSurfaceSketchDefinition =
                        formSurfaceSketch.GetDefinition();
                    formSurfaceSketchDefinition.SetPlane(planeFormSurface);
                    formSurfaceSketch.Create();

                    // Входим в режим редактирования эскиза
                    ksDocument2D formSurfaceDocument2D =
                        (ksDocument2D)formSurfaceSketchDefinition.BeginEdit();

                    formSurfaceDocument2D.ksArcByAngle(x, y, Height, 0, 180,
                                                       1, 1);
                    formSurfaceDocument2D.ksLineSeg(-Height + x, 0 + y,
                                                    Height + x, 0 + y, 3);

                    // Выходим из режима редактирования эскиза
                    formSurfaceSketchDefinition.EndEdit();

                    CutRotated(part, formSurfaceSketch);

                    y += Length + candySettings.FormDepthByWidth;
                }
                y -= 2 * (Length + candySettings.FormDepthByWidth);
                x += Width + candySettings.FormDepthByLength;
            }
        }
예제 #5
0
        /// <summary>
        /// Построить конфетную форму в KOMPAS
        /// </summary>
        /// <param name="candySettings">Параметры конфетной формы</param>
        /// <param name="candy">Параметры конфеты</param>
        public void BuildCandySettings(CandySettings candySettings,
                                       CandyBase candy)
        {
            if (_kompas == null)
            {
                throw new Exception(
                          "Невозможно построить деталь. Нет связи с КОМПАС 3D.");
            }

            // Рисуем форму

            double formTotalLength = candySettings.FormDepthByLength
                                     + (candySettings.FormDepthByLength
                                        * candySettings.CandyCount / 2)
                                     + (candy.Width * candySettings.CandyCount / 2);
            double formTotalWidth = (candySettings.FormDepthByWidth * 3)
                                    + (candy.Length * 2);


            double[] formXPoints = new double[] { 0, 0, 0, 0, 0 };
            double[] formYPoints = new double[] { 0, 0, 0, 0, 0 };

            InitCandySettingsPoints(ref formXPoints, ref formYPoints,
                                    formTotalLength, formTotalWidth);

            // Создание документа в компасе

            ksDocument3D document3D = _kompas.Document3D();

            document3D.Create();

            // Получение компонента сборки и базовой плоскости XOY

            ksPart   part     = document3D.GetPart((short)Part_Type.pTop_Part);
            ksEntity planeXOY =
                part.GetDefaultEntity((short)Obj3dType.o3d_planeXOY);

            // Создание и настройка эскиза

            ksEntity formSketch =
                part.NewEntity((short)Obj3dType.o3d_sketch);
            ksSketchDefinition sketchDefinition =
                formSketch.GetDefinition();

            sketchDefinition.SetPlane(planeXOY);
            formSketch.Create();

            // Входим в режим редактирования эскиза
            ksDocument2D document2D = sketchDefinition.BeginEdit();

            // Соединение точек формы отрезками
            CandyBase.DrawRect(formXPoints, formYPoints, document2D);

            // Выходим из режима редактирования эскиза
            sketchDefinition.EndEdit();

            // Выдавливание формы
            CandySettingsExtrude(part, formSketch,
                                 candy.Height + candySettings.FormDepthByHeight);

            // Создание смещенной плоскости на поверхности формы
            ksEntity planeFormSurface = CreateShiftedPlane(part, planeXOY,
                                                           (candy.Height + candySettings.FormDepthByHeight) / 2);

            candy.Build(part, planeFormSurface, candySettings,
                        formTotalLength, formTotalWidth);
        }
예제 #6
0
 /// <summary>
 /// Построение выреза конфеты
 /// </summary>
 /// <param name="part">Компонент сборки</param>
 /// <param name="planeFormSurface">Плоскость поверхности формы</param>
 /// <param name="candySettings">Параметры конфетной формы</param>
 /// <param name="formTotalLength">Общая длина конфетной формы</param>
 /// <param name="formTotalWidth">Общая ширина конфетной формы</param>
 public abstract void Build(ksPart part, ksEntity planeFormSurface,
                            CandySettings candySettings, double formTotalLength,
                            double formTotalWidth);