override public void drawCells()
        {
            //получить грани бобышки
            faces = bodyDrawer.GetFacesArray();
            //выбрать вторую (вверх бобышки)
            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.GetCellsWidth() / 2.0);
            double y_current = (body.GetLenght() / 2.0) - (cellObj.GetK() + (cellObj.GetCellsLenght() / 2.0));
            //Определяем положение правого нижнего угла ячейки
            double x_end = ((-body.GetWidth()) / 2.0) + (cellObj.GetK() + cellObj.GetCellsWidth());
            double y_end = (body.GetLenght() / 2.0) - (cellObj.GetK() + cellObj.GetCellsLenght());

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

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

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

            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 < column; 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.GetCellsLenght());
                //Запоминаем координаты
                leftHoleCenterX = x_current; leftHoleCenterY = y_current;
                //Определяем положение правого нижнего угла ячейки
                x_end = x_current + (cellObj.GetCellsWidth() / 2.0);
                y_end = y_current + (cellObj.GetCellsLenght() / 2.0);
            }

            //Получаем объект "вырез"
            cut = featureCut(cellObj.GetCellsHeight());
            application.swModel.ClearSelection();
        }
Example #2
0
        public void Calculation()
        {
            double A, B, C;

            //Вычисляем элементы кубического уравнения
            //x^3 + Ax^2 + Bx + C = 0
            A  = body.GetWidth() * (columns + 1) + body.GetLenght() * (rows + 1) + body.GetHeight() * (columns + 1) * (rows + 1);
            A /= (columns + 1) * (rows + 1); A *= (-1);
            B  = body.GetWidth() * body.GetLenght() + body.GetWidth() * body.GetHeight() * (rows + 1) + body.GetLenght() * body.GetHeight() * (columns + 1);
            B /= (columns + 1) * (rows + 1);
            C  = VCells - body.GetV(); C /= (columns + 1) * (rows + 1);

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

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

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

                //Вычисляем предположительные значения сторон отверстия
                SetCellsWidth(); SetCellsHeight(); SetCellsLenght();
                if (cellWidth < 0 || cellHeight < 0 || cellLenght < 0)
                {
                    continue;
                }
                buff1 = columns * cellWidth + (columns + 1) * k;
                buff2 = rows * cellLenght + (rows + 1) * k;
                buff3 = k + cellHeight;

                if (Comporation(buff1, body.GetWidth()) && Comporation(buff2, body.GetHeight()) &&
                    Comporation(buff3, body.GetLenght()))
                {
                    SetVCellsFactical();
                    return;
                }
                else
                {
                    k = -1.0;
                }
            }
        }
Example #3
0
        public virtual bool trySizeCondition()
        {
            local = body.GetWidth() / columns;
            double buff = body.GetLenght() / rows;

            return(local == buff ? true : false);
        }
Example #4
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;
        }