/// <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; }
/// <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); }
/// <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; }