示例#1
0
        public void drawCells()
        {
            //получить грани бобышки
            faces = bodyDrawer.body3d.GetFaces();
            //выбрать вторую (вверх бобышки)
            var ent = faces.GetValue(1) as Entity;

            //выбрать верхнюю грань
            ent.Select(true);
            //добавить на неё эскиз
            swSketchManager.InsertSketch(false);

            // Получаем объект эскиза, на котором будем рисовать
            activeSketch = application.swModel.GetActiveSketch2();

            //cells
            //Определяем положение центра верхней левой ячейки относительно центра плоскости (0, 0, 0)
            double x_current = ((-body.GetWidth()) / 2.0 + (cellObj.GetK() + cellObj.GetHoleWidth() / 2.0)) / acc;
            double y_current = ((body.GetHeight() / 2.0) - (cellObj.GetK() + (cellObj.GetHoleHeight() / 2.0))) / acc;
            //Определяем положение правого нижнего угла ячейки
            double x_end = (((-body.GetWidth()) / 2.0) + (cellObj.GetK() + cellObj.GetHoleWidth())) / acc;
            double y_end = ((body.GetHeight() / 2.0) - (cellObj.GetK() + cellObj.GetHoleHeight())) / acc;

            //Запоминаем позицию для дальнейшего использования
            double leftHoleCenterX = x_current, leftHoleCenterY = y_current;

            //Сдвиг, расстояние от центра одной ячейки до центра другой по координате Х
            double delta = (cellObj.GetHoleWidth() + cellObj.GetK()) / acc;

            //Определяем количество ячеек в зависимости от итерации
            int row = cellObj.CellsInRowNumber(), collumn = cellObj.CellsInColumnNumber();

            for (int i = 0; i < row; i++)
            {
                //Рисуем первую в ряду ячейку
                application.swModel.SketchManager.CreateCenterRectangle(x_current, y_current, 0, x_end, y_end, 0);
                //Рисуем остальные
                for (int j = 1; j < collumn; j++)
                {
                    x_current = x_current + delta;
                    x_end     = x_end + delta;
                    application.swModel.SketchManager.CreateCenterRectangle(x_current, y_current, 0, x_end, y_end, 0);
                }
                //Возвращаемся к первой ячейке
                x_current = leftHoleCenterX;
                //Сдвигаемся по координате Y
                y_current = leftHoleCenterY - (cellObj.GetK() + cellObj.GetHoleHeight()) / acc;
                //Запоминаем координаты
                leftHoleCenterX = x_current; leftHoleCenterY = y_current;
                //Определяем положение правого нижнего угла ячейки
                x_end = x_current + (cellObj.GetHoleWidth() / 2.0) / acc;
                y_end = y_current + (cellObj.GetHoleHeight() / 2.0) / acc;
            }

            //Получаем объект "вырез"
            cut = featureCut(cellObj.GetHoleLenght() / acc);
            application.swModel.ClearSelection();
        }
示例#2
0
        /// <summary>
        /// Рисует тело, в котором будут отверстия
        /// </summary>
        /// <returns>Возвращает объект, на котором будут сделаны ячейки</returns>
        public void drawBody()
        {
            //получем ссылку на интерфейс, ответственный за рисование
            swSketchManager = application.swModel.SketchManager;
            application.swModel.Extension.SelectByID2("Сверху", "PLANE", 0, 0, 0, false, 0, null, 0); //выбрал плоскость

            swSketchManager.InsertSketch(false);
            sketch = application.swModel.GetActiveSketch2();
            //создать основание
            var rect = swSketchManager.CreateCenterRectangle(0, 0, 0, body.GetWidth() / acc / 2.0, body.GetHeight() / acc / 2.0, 0);

            //очистить буфер выбранных элементов
            application.swModel.ClearSelection();

            //вытянуть бобышку
            Feature feature = featureExtrusion(body.GetLenght() / acc);

            application.swModel.ClearSelection();

            body3d = feature;
        }
示例#3
0
        public void KCalculation()
        {
            double A, B, C;

            //Вычисляем элементы кубического уравнения
            //x^3 + Ax^2 + Bx + C = 0
            if (iterCheck())
            {
                double t = Math.Sqrt(Math.Pow(2, iterationNumber));
                A  = ((body.GetWidth() + body.GetHeight()) / (t + 1) + body.GetLenght()) * (-1);
                B  = body.GetWidth() * body.GetHeight() + body.GetLenght() * (t + 1) * (body.GetWidth() + body.GetHeight());
                B /= Math.Pow(t + 1, 2);
                C  = (body.GetWidth() * body.GetHeight() * body.GetLenght()) - ((VCells * Math.Pow(t, 2)) / Math.Pow(2, iterationNumber));
                C /= Math.Pow(t + 1, 2) * (-1);
            }
            else
            {
                double p = Math.Sqrt(Math.Pow(2, iterationNumber - 1));
                A  = ((body.GetWidth() / (2 * p + 1)) + (body.GetHeight() / (p + 1)) + body.GetLenght()) * (-1);
                B  = body.GetWidth() * body.GetHeight() + body.GetHeight() * body.GetLenght() * (2 * p + 1) + body.GetWidth() * body.GetLenght() * (p + 1);
                B /= (2 * p + 1) * (p + 1);
                C  = body.GetWidth() * body.GetHeight() * body.GetLenght() - (VCells * 2 * Math.Pow(p, 2) / Math.Pow(2, iterationNumber));
                C /= (2 * p + 1) * (p + 1) * (-1);
            }
            //////////////////////

            //Получаем корни уравнения
            rootsList = GetRoots(A, B, C);
            k         = -1.0;

            foreach (Complex element in rootsList)
            {
                if (element.Real < 0)
                {
                    continue;
                }
                if (element.Real == -1.0)
                {
                    k = -1.0;
                    break;
                }

                k = element.Real;
                double buff1, buff2, buff3;

                //Вычисляем предположительные значения сторон отверстия
                if (iterCheck())
                {
                    double t = Math.Sqrt(Math.Pow(2, iterationNumber));
                    SetCellsWidthOddIteration(); SetCellsHeightOddIteration(); SetCellsLenght();
                    if (cellWidth < 0 || cellHeight < 0 || cellLenght < 0)
                    {
                        continue;
                    }
                    buff1 = t * cellWidth + (t + 1) * k;
                    buff2 = t * cellHeight + (t + 1) * k;
                    buff3 = k + cellLenght;
                }
                else
                {
                    double p = Math.Sqrt(Math.Pow(2, iterationNumber - 1));
                    SetCellsWidthNotOddIteration(); SetCellsHeightNotOddIteration(); SetCellsLenght();
                    if (cellWidth < 0 || cellHeight < 0 || cellLenght < 0)
                    {
                        continue;
                    }
                    buff1 = 2 * p * cellWidth + (2 * p + 1) * k;
                    buff2 = p * cellHeight + (p + 1) * k;
                    buff3 = k + cellLenght;
                }

                if (Comporation(buff1, body.GetWidth()) && Comporation(buff2, body.GetHeight()) &&
                    Comporation(buff3, body.GetLenght()))
                {
                    SetCellsNum();
                    SetVCellsFactical();
                    return;
                }
                else
                {
                    k = -1.0;
                }
            }
        }