Ejemplo n.º 1
0
        /// <summary>
        /// Стандартный конструктор
        /// </summary>
        /// <param name="parDepth">Глубина</param>
        /// <param name="parX">Координата X</param>
        /// <param name="parY">Координата Y</param>
        /// <param name="parStringToRender">Текстовая строка</param>
        /// <param name="parFont">Шрифт</param>
        /// <param name="parColor">Цвет</param>
        /// <param name="parScaleX">Масштабирование по X</param>
        /// <param name="parScaleY">Масштабирование по Y</param>
        /// <param name="parHAlign">Горизонтальное выравнивание</param>
        /// <param name="parVAlign">Вертикальное выравнивание</param>
        public RenderingString(double parDepth, double parX, double parY, string parStringToRender, SubassetDataFont parFont,
                               Color parColor, double parScaleX = 1.0, double parScaleY = 1.0, EHorizontalAlign parHAlign = EHorizontalAlign.Left,
                               EVerticalAlign parVAlign         = EVerticalAlign.Top)
        {
            LinkedList <SubassetDataSprite> usedSprites = parFont.GetSymbolsSprites(parStringToRender);

            SpritesToRender = new LinkedList <RenderingSprite>();

            double totalWidth  = 0;
            double totalHeight = 0;

            foreach (var usedSprite in usedSprites)
            {
                totalWidth += usedSprite.Width;
                if (usedSprite.Height > totalHeight)
                {
                    totalHeight = usedSprite.Height;
                }
            }

            X = OpenGlUtil.GetLeftXCoordBasedOnHorizontalAlign(parX, totalWidth, parHAlign, parScaleX);
            Y = OpenGlUtil.GetTopYCoordBasedOnVerticalAlign(parY, totalHeight, parVAlign, parScaleY);

            totalWidth = 0;
            //totalHeight = 0;
            foreach (var usedSprite in usedSprites)
            {
                SpritesToRender.AddLast(new RenderingSprite(usedSprite, X + totalWidth, Y, 0, parColor,
                                                            parDepth, parScaleX, parScaleY, EHorizontalAlign.Left, EVerticalAlign.Top));

                totalWidth += usedSprite.Width * parScaleX;
            }

            Depth = parDepth;
        }
Ejemplo n.º 2
0
        /// <summary>
        /// Получить полную информацию о дисплее приложения для отрисовки OpenGL
        /// </summary>
        /// <param name="parWindowWidth">Ширина окна</param>
        /// <param name="parWindowHeight">Высота окна</param>
        /// <param name="parViewportWidth">Ширина вида</param>
        /// <param name="parViewportHeight">Высота вида</param>
        /// <param name="outDisplayViewportGlUnitsX1">Выходной параметр координаты экрана OpenGL для дисплея X1</param>
        /// <param name="outDisplayViewportGlUnitsY1">Выходной параметр координаты экрана OpenGL для дисплея Y1</param>
        /// <param name="outDisplayViewportGlUnitsX2">Выходной параметр координаты экрана OpenGL для дисплея X2</param>
        /// <param name="outDisplayViewportGlUnitsY2">Выходной параметр координаты экрана OpenGL для дисплея Y2</param>
        /// <param name="outGlobalRescale">Выходной параметр фактора масштабирования</param>
        public void GetDisplayData(double parWindowWidth, double parWindowHeight, double parViewportWidth, double parViewportHeight,
                                   out double outDisplayViewportGlUnitsX1, out double outDisplayViewportGlUnitsY1, out double outDisplayViewportGlUnitsX2,
                                   out double outDisplayViewportGlUnitsY2, out double outGlobalRescale)
        {
            double byWidthRescale  = (double)parWindowWidth / parViewportWidth;
            double byHeightRescale = (double)parWindowHeight / parViewportHeight;

            outGlobalRescale = (Math.Min(byWidthRescale, byHeightRescale));

            if (ShouldRescaleBeWholeNumber)
            {
                outGlobalRescale = Math.Floor(outGlobalRescale);
            }

            double rescaledWidth  = parViewportWidth * outGlobalRescale;
            double rescaledHeight = parViewportHeight * outGlobalRescale;

            // расчет координат середины экрана
            double middleX = parWindowWidth / 2;
            double middleY = parWindowHeight / 2;

            double leftupperX = middleX - rescaledWidth / 2;
            double leftupperY = middleY - rescaledHeight / 2;

            double rightbottomX = leftupperX + rescaledWidth;
            double rightbottomY = leftupperY + rescaledHeight;

            outDisplayViewportGlUnitsX1 = OpenGlUtil.GetOpenGlCoordX(leftupperX, parWindowWidth);
            outDisplayViewportGlUnitsY1 = OpenGlUtil.GetOpenGlCoordY(leftupperY, parWindowHeight);

            outDisplayViewportGlUnitsX2 = OpenGlUtil.GetOpenGlCoordX(rightbottomX, parWindowWidth);
            outDisplayViewportGlUnitsY2 = OpenGlUtil.GetOpenGlCoordY(rightbottomY, parWindowHeight);
        }
Ejemplo n.º 3
0
        /// <summary>
        /// Стандартный конструктор
        /// </summary>
        /// <param name="parSprite">Производный ассет спрайта</param>
        /// <param name="parX">Координата X</param>
        /// <param name="parY">Координата Y</param>
        /// <param name="parRotationDegrees">Поворот в градусах</param>
        /// <param name="parBlendColor">Цвет</param>
        /// <param name="parDepth">Глубина</param>
        /// <param name="parScaleX">Масштабирование по X</param>
        /// <param name="parScaleY">Масштабирование по Y</param>
        /// <param name="parHAlign">Горизонтальное выравнивание</param>
        /// <param name="parVAlign">Вертикальное выравнивание</param>
        /// <param name="parRotationPivotX">Точка опоры для поворота, координата X</param>
        /// <param name="parRotationPivotY">Точка опоры для поворота, координата Y</param>
        public RenderingSprite(SubassetDataSprite parSprite, double parX, double parY, double parRotationDegrees, Color parBlendColor,
                               double parDepth,
                               double parScaleX         = 1.0, double parScaleY = 1.0, EHorizontalAlign parHAlign = EHorizontalAlign.Left,
                               EVerticalAlign parVAlign = EVerticalAlign.Top, double parRotationPivotX = 0, double parRotationPivotY = 0)
        {
            Sprite = parSprite;

            X = OpenGlUtil.GetLeftXCoordBasedOnHorizontalAlign(parX, parSprite.Width, parHAlign, parScaleX);
            Y = OpenGlUtil.GetTopYCoordBasedOnVerticalAlign(parY, parSprite.Height, parVAlign, parScaleY);

            Depth           = parDepth;
            RotationDegrees = parRotationDegrees;
            BlendColor      = parBlendColor;
            ScaleX          = parScaleX;
            ScaleY          = parScaleY;
            PivotX          = parRotationPivotX;
            PivotY          = parRotationPivotY;
        }