Bixion2D


Bixion2D intenta alcanzar el ideal de tener un GUI (Graphical User Interface) programado usando C# por encima de OpenGL. Disponer del código fuente en C# hace posible un estudio de este y con tiempo adquirir el conocimiento del autor original en el desarrollo de interfaces gráficos. El usar OpenGL como librería de base implica una consistencia visual para todas las plataformas, es decir, el aspecto visual será el mismo en windows, linux y mac (algo que no ocurre, por ejemplo, en la versión 10.04 de Triedimax donde el aspecto de Windows Forms es muy variable entre windows y Linux).  Bixion2D es código abierto bajo la licencia GNU LGPL versión 3.

   

Vídeo de YouTube




  
   Bixion v14.11 (Fecha de publicación: 29 de Octubre de 2014)

He encontrado un proyecto genial "TrueTypeSharp", y este proyecto me ha permitido "intentar" la tan deseada eliminación de librerías dependientes, a saber freetype y zlib1, tanto en Windows como en Linux.
Este proyecto implementa la renderización de fuentes de letra truetype por software utilizando exclusivamente el lenguaje de programación c#, ¡genial!.
El problema ¡o quizás la ventaja! es que no es un equivalente exacto de la librería freetype y conocer los parámetros de las métricas y cuales son sus efectos es complicado. Por todo esto el resultado es bueno pero no exacto, ver imagen siguiente:


Como se puede apreciar en la imagen hay problemas con la representación de algunos caracteres ('i', 'l', '!'), el problema se agrava al escoger una fuente de letra mas pequeña, por ejemplo una 11, en la imagen la fuente de letra es una "tahoma 12".
Por esto entiendo que puede ser un problema de la implementación de TrueTypeSharp y no un problema del programa de representación.
Aparte de incluir el código fuente de TrueTypeSharp en el proyecto Bixion, las modificaciones se encuentran concentradas en la implementación o re-implementación de dos métodos, "[Gui-Font.cs].Gui.Font.FreeType.Load()" y "
[Gui-Font.cs].Gui.Font.FreeType.CompileChar()".

¡¡¡ CUALQUIER AYUDA PARA SUPERAR ESTOS PROBLEMAS SE AGRADECERÁ!!!

  
 


 Bixion2D v11.04-1 (Fecha de publicación: 30 de Abril de 2011)

La entrada de texto ahora es totalmente funcional. He eliminado los métodos de captura de los eventos "KeyDown y KeyUp" y los he sustituido por el método de captura del evento "KeyPress" en la clase 'ZweiDe'.

   
 

















 Bixion2D v11.04 (Fecha de publicación: 28 de Abril de 2011)

Por hacer: (25-Abril-2011)
  • El código es totalmente funcional, no obstante, me he propuesto el objetivo de eliminar todas las dependencias de código no manejado y esto implica eliminar la dependencia de freetype6 y zlib1. Básicamente hay dos caminos a seguir para conseguir esto:
1. Conseguir una implementación en C# de freetype6 o un subconjunto suficiente de esta. Esta opción es la mas costosa en tiempo y esfuerzo, pero sería la ideal.
2. Utilizar fuentes de mapa de bits. 
  • Esta versión de Bixion requiere de OpenGL 3.0, es necesario modificar el código para adaptarla a OpenGL 2.1.

Primer lanzamiento: (25-Abril-2011)
¡Por fin! Después de numerosos 'debugs' he descubierto cual era el problema. El código original utilizaba la función "Glfw.glfwGetMousePos(out x, out y);" para obtener la posición del puntero del ratón. Esta función devuelve la posición actual del ratón. Si el cursor no está oculto, la posición del ratón es igual a la posición del cursor, relativa a la esquina superior izquierda de la ventana y con el eje hacia abajo. Si el cursor está oculto, la posición del ratón es una posición absoluta virtual, sin limitarse a las fronteras con excepción de los que implica el número máximo que puede estar representado por un entero con signo. Normalmente el puntero del ratón se oculta al iniciar el programa, luego las coordenadas que proporciona Glfw son posiciones absolutas relativas.
Yo trataba de conseguir esto utilizando "OpenTK.GameWindow.Mouse.X y 
OpenTK.GameWindow.Mouse.Y" pero estas coordenadas son relativas a la ventana. La solución ha consistido en utilizar "OpenTK.Mouse.GetState()" para obtener las coordenadas X e Y del ratón.

Estado del proyecto: (29-Enero-2011)
He conseguido eliminar las dependencias no manejadas del proyecto original, las librerías Devil y Glfw. Las librerías freetype6 y zlib1 deben mantenerse. El proyecto ya funciona únicamente con OpenTK (exceptuando freetype6) pero estoy teniendo muchos problemas con la gestión del ratón y el re-dimensionado de la ventana. El programador original diseño el sistema suponiendo que se ejecutaría siempre a pantalla completa y ahora al re-dimensionar la ventana la posición del cursor virtual no coincide con la posición del cursor real. El control del cursor no funciona por eventos, en cada actualización del GUI se interroga sobre la posición del cursor y si se ha pulsado o no el botón del ratón y simplemente ¡el código es un caos!, ¡problemas y más problemas!. 


WebRep
Calificación general
 
Comments