Пример #1
0
        public void ChangeFont_WhenAlways_ShouldChangeFont(RectangleClass box, Font font, Font expected)
        {
            box.ChangeFont(font);
            Font actual = box.GetFont();

            Assert.AreEqual(expected, actual);
        }
Пример #2
0
        public static void AccessToStructs()
        {
            // Using a Struct
            var rectangleStruct = new RectangleStruct(11, 33, "RectangleStruct")
            {
                Width = 1, Height = 3,
            };
            var rectangleStruct2 = new RectangleStruct {
                Width = 1, Height = 3,
            };

            Console.WriteLine("rectangleStruct: {0}:{1}", rectangleStruct.Width, rectangleStruct.Height);



            // Calling a struct Method
            var rectangleStruct3 = rectangleStruct.Add(rectangleStruct2);

            Console.WriteLine("rectangleStruct: {0}:{1}", rectangleStruct3.Width, rectangleStruct3.Height);

            var rectangleClass = new RectangleClass("RectangleClass")
            {
                Width = 1, Height = 3,
            };

            Console.WriteLine("rectangleClass: {0}:{1}", rectangleClass.Width, rectangleClass.Height);
        }
Пример #3
0
        public void checkIntegerArea()
        {
            RectangleClass rcObj  = new RectangleClass(2, 2);
            int            result = rcObj.GetArea();

            Assert.AreEqual(4, result);
        }
Пример #4
0
        public void checkIntegerParameter()
        {
            RectangleClass rcObj  = new RectangleClass(2, 2);
            int            result = rcObj.GetPerimeter();

            Assert.AreEqual(8, result);
        }
Пример #5
0
        public void checkIntegerSetWidth()
        {
            RectangleClass rcObj  = new RectangleClass();
            int            result = rcObj.SetLength(5);

            Assert.AreEqual(5, result);
        }
Пример #6
0
        public void checkIntegerWidth()
        {
            RectangleClass rcObj  = new RectangleClass(4, 4);
            int            result = rcObj.GetWidth();

            Assert.AreEqual(4, result);
        }
Пример #7
0
        public void checkIntegerLength()
        {
            RectangleClass rcObj  = new RectangleClass(10, 10);
            int            result = rcObj.GetLength();

            Assert.AreEqual(10, result);
        }
Пример #8
0
        public void DrawFrontView()
        {
            LayerManager.SetLayerCurrent("SidePanel");

            RectangleClass rect = new RectangleClass("Knee Brace", BottomLeftPoint, BottomRightPoint, TopRightPoint, TopLeftPoint);

            geometry.DrawRectangle(rect, BottomLeftPoint);
        }
Пример #9
0
        public void ConnectionPoints_WhenAlways_ShouldCreateConnectionPoints(RectangleClass box, Point startPoint, Point crntPoint, Point oppositePoint, ConnectionPoint expected)
        {
            box.AddPoints(startPoint);
            box.crntZone = new BoxZones();
            box.crntZone = BoxZones.Top;
            ConnectionPoint actual = box.GetConnectionPoint(crntPoint, oppositePoint);

            Assert.AreEqual(expected, actual);
        }
Пример #10
0
        public void ZoomAndCenterMap(double scaleFactor, Point centerPoint, ref AxMapObjects2.AxMap mapControl)
        {
            Rectangle oExtent = new RectangleClass();

            oExtent.Left   = mapControl.FullExtent.Left;
            oExtent.Right  = mapControl.FullExtent.Right;
            oExtent.Top    = mapControl.FullExtent.Top;
            oExtent.Bottom = mapControl.FullExtent.Bottom;

            oExtent.ScaleRectangle(scaleFactor);
            oExtent.Offset(centerPoint.X - oExtent.Center.X, centerPoint.Y - oExtent.Center.Y);

            mapControl.Extent = oExtent;
        }
        public void Rectangle_AreaCalculateTest()
        {
            // arrange
            double width    = 10;
            double height   = 20;
            double expected = 200;

            // act
            RectangleClass Rectangle = new RectangleClass();

            double actual = Rectangle.AreaCalculate(width, height);

            // assert
            Assert.AreEqual(expected, actual);
        }
 private static void FinishSlope(Stack <PointStruct <int> > stack,
                                 int curHeight,
                                 int line,
                                 int i,
                                 ref int bestArea,
                                 RectangleClass <int> best)
 {
     while (stack.Count > 0 && stack.Peek().Y > curHeight)
     {
         var endedRectLu = stack.Pop();
         var endedArea   = (i - endedRectLu.X) * endedRectLu.Y;
         if (endedArea > bestArea)
         {
             best.LeftUp    = new PointStruct <int>(endedRectLu.X, line - endedRectLu.Y + 1);
             best.RightDown = new PointStruct <int>(i - 1, line);
             bestArea       = endedArea;
             Console.WriteLine(new { bestArea });
         }
     }
 }
        public void Rectangle_ParceParametersTest()
        {
            // arrange
            string[] parameters = new string[]
            {
                "\"type\":rectangle",
                "\"width\":10",
                "\"height\":20",
            };
            double expectedPerimeter = 60;

            // act
            RectangleClass Rectangle = new RectangleClass();

            Rectangle.ParceParameters(parameters);

            double actual = Rectangle.PerimeterGet();

            // assert
            Assert.AreEqual(expectedPerimeter, actual);
        }
        //**********************************************************************************************
        // РАЗБОР ДОКУМЕНТА
        //**********************************************************************************************
        /// <summary>
        /// Получение данных из документа.
        /// </summary>
        /// <param name="document"></param>
        void DataParcer(FlowDocument document)
        {
            List <FigureClass> Shapes = new List <FigureClass> {
            };                                                                             //Список фигур в документе.
            List <string> blocks      = new List <string> {
            };                                                                             //Промежуточный список для хранения блоков с параметрами для каждой фигуры.
            List <DeltaShapesValueClass> deltaShapes = new List <DeltaShapesValueClass>(); //Список для расчета средних значений периметра и площади для каждого типа фигур.

            //0. Преобразуем документ в строку
            String input = new TextRange(document.ContentStart, document.ContentEnd).Text;

            input = Regex.Replace(input, @"[ \r\n\t]", ""); //Избавляемся от пробелов, переносов.
            input = input.ToLower();                        //Переводим в нижний регистр

            //Патерн для разбиения строки на блоки.
            String pattern = @"\{([^\{\}]+)\}";     //где, \{	Совпадение с открывающей скобкой.

            // ([^\{\}]+)  Совпадение с любым символом, который не является открывающей или закрывающей круглой скобкой один или несколько раз.
            // \}   Совпадение с закрывающей скобкой

            //1. Извлечение блоков из строки на основе шаблона
            foreach (Match match in Regex.Matches(input, pattern))
            {
                blocks.Add(match.Groups[1].Value);
            }
            //Количество элементов больше 0?
            if (blocks.Count == 0)
            {
                ClearAnswer();
                return;//Пусто. Выход
            }


            //2. Извлечение данных из блоков
            foreach (var item in blocks)
            {
                string type = "";
                //2.1. Существует ли параметр типа фигуры в строке
                if (item.IndexOf("type") == -1) //не существует
                {
                    //Удаляем элемент из списка.
                    blocks.Remove(item);
                    continue;
                }

                //2.2. Разбиение блока на массив строк с параметрами.
                string[] parameters = item.Split(';', StringSplitOptions.RemoveEmptyEntries);

                //2.3. Определение типа фигуры
                foreach (var array_element in parameters)
                {
                    //Ищем параметр type
                    if (array_element.IndexOf("type") == -1) //не тот параметр
                    {
                        continue;                            //Далее
                    }
                    else//Нашли
                    {
                        type = GetType(array_element); //Проверяем, определен ли данный тип фигуры
                        break;
                    }
                }

                if (type == "")//Тип фигуры не определен
                {
                    //Удаляем элемент из списка.
                    blocks.Remove(item);
                    continue;
                }

                //3. Получаем остальные параметры. Для каждого типа фигуры свой набор параметров.
                switch (type)
                {
                case FIGURE_CIRCLE:
                    СircleClass circle = new СircleClass();
                    circle.ParceParameters(parameters);                            //Разбор параметров и рассчет значений площади и периметра.
                    Shapes.Add(circle);                                            //Добавляем элемент в список фигур
                    DeltaShapes_AddTypeIfDoesnotExist(FIGURE_CIRCLE, deltaShapes); //Добавить тип фигуры в список используемых фигур.
                    break;

                case FIGURE_RECTANGLE:
                    RectangleClass rectangle = new RectangleClass();
                    rectangle.ParceParameters(parameters);
                    Shapes.Add(rectangle);
                    DeltaShapes_AddTypeIfDoesnotExist(FIGURE_RECTANGLE, deltaShapes);
                    break;

                case FIGURE_SQUARE:
                    SquareClass square = new SquareClass();
                    square.ParceParameters(parameters);
                    Shapes.Add(square);
                    DeltaShapes_AddTypeIfDoesnotExist(FIGURE_SQUARE, deltaShapes);
                    break;

                case FIGURE_TRAPEZOID:
                    TrapezoidClass trapezoid = new TrapezoidClass();
                    trapezoid.ParceParameters(parameters);
                    Shapes.Add(trapezoid);
                    DeltaShapes_AddTypeIfDoesnotExist(FIGURE_TRAPEZOID, deltaShapes);
                    break;

                case FIGURE_TRIANGLE:
                    TriangleClass triangle = new TriangleClass();
                    triangle.ParceParameters(parameters);
                    Shapes.Add(triangle);
                    DeltaShapes_AddTypeIfDoesnotExist(FIGURE_TRIANGLE, deltaShapes);
                    break;
                }
            }

            //По заданию, неоходимо найти:
            //1. Средний периметр и площадь всех фигур
            //2. Фигура наибольшей площади
            //3. Тип фигуры с наибольшим значением среднего периметра среди всех других типов фигур.

            double deltaPerimeter = 0;                    //Средний периметр
            double deltaArea      = 0;                    //Средняя площадь

            double maxArea           = 0;                 //Значение площади
            string maxAreaTypeFigure = "Пусто";           //Тип фигуры

            double maxDeltaPerimeter           = 0;       //Наибольший средний периметр
            string maxDeltaPerimeterTypeFigure = "Пусто"; //Тип фигуры с наибольшим средним периметром

            //Находим.
            foreach (var figure in Shapes)
            {
                //Получаем значения периметра и площади для каждой фигуры
                deltaPerimeter += figure.PerimeterGet();
                deltaArea      += figure.AreaGet();

                //Ищем фигуру наибольшей площади
                if (maxArea < figure.AreaGet())
                {
                    maxArea           = figure.AreaGet();
                    maxAreaTypeFigure = figure.TypeGet();
                }
                //Увеличить среднее значение площади и периметра для конкретного типа фигур
                DeltaShapes_AddTypeItem(figure.TypeGet(), figure.PerimeterGet(), figure.AreaGet(), deltaShapes);
            }
            //Расчет среднего значения периметра и площади всех фигур
            deltaPerimeter /= Shapes.Count;
            deltaArea      /= Shapes.Count;
            //Расчет среднего значения периметра и площади для каждого типа фигур
            DeltaShapes_CalculateDelta(deltaShapes);
            //Ищем тип фигуры с наибольшим значением среднего периметра среди всех других типов фигур
            foreach (var item in deltaShapes)
            {
                if (maxDeltaPerimeter < item.Perimeter)
                {
                    maxDeltaPerimeter           = item.Perimeter;
                    maxDeltaPerimeterTypeFigure = item.Type;
                }
            }

            //Отображаем ответ
            deltaPerimeterTextBlock.Text              = String.Format("Cредний периметр: {0:f2}(м)", deltaPerimeter);
            deltaAreaTextBlock.Text                   = String.Format("Cредняя площадь: {0:f2} (кв.м)", deltaArea);
            maxAreaTypeFigureTextBlock.Text           = String.Format("Фигура наибольшей площади: {0} ({1:f2}кв.м)", maxAreaTypeFigure, maxArea);
            maxDeltaPerimeterTypeFigureTextBlock.Text = String.Format("Тип фигуры с наибольшим средним периметром: {0} ({1:f2}м)", maxDeltaPerimeterTypeFigure, maxDeltaPerimeter);
        }
Пример #15
0
        private void pictureBox_MouseUp(object sender, MouseEventArgs e)
        {
            if (isDrag == true)
            {
                isChanged = true;
                g = pictureBox1.CreateGraphics();

                // 현재 위치 받아옴
                currentPoint = new Point(e.X, e.Y);

                // 그리기 모양 지정
                if (setShape.Equals("circle"))
                {
                    width = System.Math.Abs(currentPoint.X - previousPoint.X);
                    height = System.Math.Abs(currentPoint.Y - previousPoint.Y);

                    // 드래그하는 위치에 따라 도형의 시작 위치를 바꿔줌.
                    if (previousPoint.X > currentPoint.X && previousPoint.Y > currentPoint.Y)
                    {
                        previousPoint = currentPoint;
                    }
                    else if (previousPoint.Y > currentPoint.Y)
                    {
                        previousPoint.Y = currentPoint.Y;
                    }
                    else if (previousPoint.X > currentPoint.X)
                    {
                        previousPoint.X = currentPoint.X;
                    }

                    // 원형 객체 생성
                    RectangleClass myCircle = new RectangleClass(previousPoint, currentPoint, width, height);
                    myCircle.setPen(currentPen);
                    shapes_cir.AddLast(myCircle);

                    draw_circle(g, currentPen, previousPoint, currentPoint);
                }

                if (setShape.Equals("rectangle"))
                {
                    width = System.Math.Abs(currentPoint.X - previousPoint.X);
                    height = System.Math.Abs(currentPoint.Y - previousPoint.Y);

                    // 드래그하는 위치에 따라 도형의 시작 위치를 바꿔줌.
                    if (previousPoint.X > currentPoint.X && previousPoint.Y > currentPoint.Y)
                    {
                        previousPoint = currentPoint;
                    }
                    else if (previousPoint.Y > currentPoint.Y)
                    {
                        previousPoint.Y = currentPoint.Y;
                    }
                    else if (previousPoint.X > currentPoint.X)
                    {
                        previousPoint.X = currentPoint.X;
                    }

                    // 사각형 객체 생성
                    RectangleClass myRectangle = new RectangleClass(previousPoint, currentPoint, height, width);
                    myRectangle.setPen(currentPen);
                    shapes_rec.AddLast(myRectangle);

                    draw_rectangle(g, currentPen, previousPoint, currentPoint);
                }

                if (setShape.Equals("line"))
                {
                    // 선 객체 생성
                    LineClass myLine = new LineClass(previousPoint, currentPoint);
                    myLine.setPen(currentPen);
                    shapes_line.AddLast(myLine);

                    draw_line(g, currentPen, previousPoint, currentPoint);
                }
            }
            isDrag = false;
        }
Пример #16
0
        private void pictureBox_MouseUp(object sender, MouseEventArgs e)
        {
            if (isDrag == true)
            {
                isChanged = true;
                g         = pictureBox1.CreateGraphics();

                // 현재 위치 받아옴
                currentPoint = new Point(e.X, e.Y);

                // 그리기 모양 지정
                if (setShape.Equals("circle"))
                {
                    width  = System.Math.Abs(currentPoint.X - previousPoint.X);
                    height = System.Math.Abs(currentPoint.Y - previousPoint.Y);

                    // 드래그하는 위치에 따라 도형의 시작 위치를 바꿔줌.
                    if (previousPoint.X > currentPoint.X && previousPoint.Y > currentPoint.Y)
                    {
                        previousPoint = currentPoint;
                    }
                    else if (previousPoint.Y > currentPoint.Y)
                    {
                        previousPoint.Y = currentPoint.Y;
                    }
                    else if (previousPoint.X > currentPoint.X)
                    {
                        previousPoint.X = currentPoint.X;
                    }

                    // 원형 객체 생성
                    RectangleClass myCircle = new RectangleClass(previousPoint, currentPoint, width, height);
                    myCircle.setPen(currentPen);
                    shapes_cir.AddLast(myCircle);

                    draw_circle(g, currentPen, previousPoint, currentPoint);
                }

                if (setShape.Equals("rectangle"))
                {
                    width  = System.Math.Abs(currentPoint.X - previousPoint.X);
                    height = System.Math.Abs(currentPoint.Y - previousPoint.Y);

                    // 드래그하는 위치에 따라 도형의 시작 위치를 바꿔줌.
                    if (previousPoint.X > currentPoint.X && previousPoint.Y > currentPoint.Y)
                    {
                        previousPoint = currentPoint;
                    }
                    else if (previousPoint.Y > currentPoint.Y)
                    {
                        previousPoint.Y = currentPoint.Y;
                    }
                    else if (previousPoint.X > currentPoint.X)
                    {
                        previousPoint.X = currentPoint.X;
                    }

                    // 사각형 객체 생성
                    RectangleClass myRectangle = new RectangleClass(previousPoint, currentPoint, height, width);
                    myRectangle.setPen(currentPen);
                    shapes_rec.AddLast(myRectangle);

                    draw_rectangle(g, currentPen, previousPoint, currentPoint);
                }

                if (setShape.Equals("line"))
                {
                    // 선 객체 생성
                    LineClass myLine = new LineClass(previousPoint, currentPoint);
                    myLine.setPen(currentPen);
                    shapes_line.AddLast(myLine);

                    draw_line(g, currentPen, previousPoint, currentPoint);
                }
            }
            isDrag = false;
        }
Пример #17
0
        public void ZoomAndCenterMap(double scaleFactor, Point centerPoint, ref AxMapObjects2.AxMap mapControl)
        {
            Rectangle oExtent = new RectangleClass();
            oExtent.Left = mapControl.FullExtent.Left;
            oExtent.Right = mapControl.FullExtent.Right;
            oExtent.Top = mapControl.FullExtent.Top;
            oExtent.Bottom = mapControl.FullExtent.Bottom;

            oExtent.ScaleRectangle(scaleFactor);
            oExtent.Offset(centerPoint.X - oExtent.Center.X, centerPoint.Y - oExtent.Center.Y);

            mapControl.Extent = oExtent;
        }
        private static void FindAboveLine(char[,] rect, int[] heights, int line, char target, RectangleClass <int> best)
        {
            var stack = new Stack <PointStruct <int> >();

            var bestArea = (best.RightDown.X - best.LeftUp.X + 1) * (best.RightDown.Y - best.LeftUp.Y + 1);

            Console.WriteLine(new { line, target, bestArea });

            for (var i = 0; i < rect.GetLength(1); i++)
            {
                var curHeight = rect[line, i] == target ? heights[i] : 0;

                if (stack.Count == 0)
                {
                    if (curHeight > 0)
                    {
                        stack.Push(new PointStruct <int>(i, curHeight));
                    }
                }
                else
                {
                    FinishSlope(stack, curHeight, line, i, ref bestArea, best);

                    if (stack.Count == 0 || curHeight > stack.Peek().Y)
                    {
                        stack.Push(new PointStruct <int>(i, curHeight));
                    }
                }
            }

            FinishSlope(stack, 0, line, rect.GetLength(1), ref bestArea, best);
        }