Puntos amarrados

(Hasta hoy, bueno, ayer, me di cuenta de que ahora sí estoy siendo publicado en Planeta GNOME Hispano; un saludo a todos mis nuevos lectores).

Por fin terminé la refactorización (por decirle de algún modo) de Geom. Sí terminé reescribiendo bastantes cosas; en particular, Geom ahora sigue completamente un patrón Model-View-Controller, donde todas las operaciones interesantes se realizan en el modelo, y todo lo relacionado a presentación está en la vista.

Eso significó meter aún más herencia al diseño; pero si se me permite, quedó muy bonito. También ya está básicamente toda la infraestructura para propiedades de objetos (cambiarles individualmente color, ancho de línea, tamaño de los puntos, etc.), y para salvar y abrir archivos usando un formato XML. No está funcionando todavía porque necesito implementar un desmantelamiento de los objetos geométricos usando el orden parcial que se genera dadas las relaciones de qué objeto domina a cuál (o cuales). Y además necesito eso para mi tesis.

Que también es otra cosa de la que quería hablar; voy a dejar de programar en esto unos cuantos días, mientras termino el borrador del artículo que estoy coescribiendo y además cuando regrese probablemente me meta más a CCC que al programa: me están comenzando a pegar seriamente algunas limitaciones del canvas, y Sven se ve que está ocupado con otras cosas. El fin de semana (si tengo tiempo) probablemente ponga un repositorio para que la gente pueda bajar el código fuente y jugar con Geom; creo que ya está listo para que otra gente lo vea y (si así lo desean) me echen una mano.

Además de la refactorización, hay varias cosas nuevas funcionando: para empezar, cada objeto se resalta cuando el ratón pasa sobre él. Sé que no suena terriblemente emocionante, pero tuve que hacerlo afuera de CCC, por las limitaciones de la biblioteca inicialmente, pero creo que terminaré haciéndolo así en la versión final: es sencillamente más fácil tener todo el control de qué ocurre en el canvas. Con esto puedo restringir puntos a objetos como círculos, segmentos o polígonos, y construir cosas más interesantes que las que ya tenía. También hay líneas (conceptualmente infinitas), aunque me están dando algunas broncas. El canvas se puede desplazar haciendo click con el botón de enmedio del ratón (como en el Gimp), si bien tampoco funciona perfectamente.

Ahorita los objetos se actualizan como si las relaciones entre ellos formaran un árbol (se actualiza el objeto “raíz”; después sus hijos, después los hijos de sus hijos, etc.), pero es sólo temporal. Realmente necesito implementar con cuidado el manejo del orden parcial entre objetos, no sólo para actualizar arbitrariamente, sino para poder salvar de forma eficiente (y correcta).

Y encima de eso están las cosas que tengo que hacerle a CCC: el rectángulo que dibujo cuando selecciono objetos no se borra perfectamente; el resaltado de objetos no funciona siempre; hay un bug en AMD64 cuando se limpian líneas, etc., etc. Pero eso será hasta después de que termine el borrador de mi artículo.

Nueva versión de Geom

Nueva versión de Geom

También hay un screencast de la nueva versión; son casi 8 megas, pero tiene comentario del director (gracias a Tomboy, y con faltas de ortografía porque lo hice en inglés y sin guión preparado).

Y pues eso es todo; me voy a dormir que mañana tengo bastantes cosas que hacer.

(Para los lectores del Planeta: aquí están las entradas relacionadas con Geom que tal vez no hayan visto:

Por si quieren ver las motivaciones de esto y algunas ideas en el diseño.)

5 comentarios sobre “Puntos amarrados

  1. Hola canek.
    yo tambien escribí algo para sustituir al programa que tenian omar y juanjo. justamente lo puse hoy en sourceforge y asi me di cuenta que tu has hecho otro 8-O
    me gustaria que le hecharas un ojo a mi página y me des tu opinon
    http://lienzo.sourceforge.net

    ¿planeas hacer tu programa opensource?
    Alvaro

  2. Por supuesto que será OpenSource. El fin de semana espero poner un SVN anónimo público.

    Estoy viendo que usas GnomeCanvas. ¿Estás consciente de que está marcado para eliminación esa biblioteca? Es por eso que estoy usando CCC. Si CCC no te convence, GooCanvas es otra opción; pero de verdad, GnomeCanvas va a morir. De hecho para motivos prácticos ya está muerto. Necesitas usar un canvas que utilice Cairo; cualquier otra cosa es perder el tiempo.

    Por eso empecé desde cero Geom, entre otras razones. Fue lo que Omar me recomendó también.

  3. hola
    si estoy conciente de que murió hace tiempo GnomeCanvas pero las otras opciones que he estudiado son en wxwidgets por wxart2d y (me avergüenza decirlo) java y no me han convencido mucho.
    De todos modos yo creo que ya no es muy dificil cambiar las llamadas gráficas a otra biblioteca que este basada en gdk o/y glib.
    de ccc no encontre mucha documentación y de goocanvas nada. Aunque si creo que sería un gran esfuerzo no seria exesivo reescribir las funciones que uso del canvas en otra biblioteca (ya una vez lo hice con java2d aunque no me gustó)
    la verdad me gustaría encontrar una minimalista para poder correr el programa en miniarquitecturas (por eso me interesó java).
    Tambien pensé en usar otro lenguaje en vez de lua como haskell o ocaml pero lua aunque es mas lento me parece mas intuitivo y fácil de aprender.
    bueno, si puedes avisame cuando esté disponible tu programa. saludos 8-D
    Alvaro

  4. Estuve platicando ayer con Juan, y la bronca (desde mi punto de vista) es que ellos tenían básicamente un kernel para dibujar en GNOME Canvas, y una biblioteca de geometría en Lua. No tenían interfaz gráfica (para motivos prácticos), no tenían manera de salvar o cargar construcciones (sólo programas en Lua) y no tenían forma de construir interactivamente nada (consecuencia de no tener UI). Y por lo que pude ver, lo que tú llevas no es mucho más, es básicamente lo mismo pero para GNOME 2.

    En mi programa el lenguaje de extensión, si acaso llega a haber, será de extensión; no el núcleo del programa. Me interesa antes que nada un programa interactivo.

    Ya liberé la primera versión de Geom; en la última entrada en mi blog encontrarás las ligas relacionadas.

  5. hola, hasta ahora pude revisar lo que escribiste ;-)
    ya le eché un ojo a las librerías que dices de canvas y me parece que voy a cambiar toda la infraestructura del canvas a goocanvas (lo cual es mas fácil que CCC y tiene mas desarrollo) pero el proyecto “Lienzo” basicamente esta abandonado desde que lo cambié a lua5.1 (ellos preferían otro lenguaje)
    Tu idea de extensión me agrada por que ello podría permitir cualquier lenguaje que pueda encajarse y tenga interacción on “C”, el único pero a tu programa es que algunas de las librerías que usa no compilan en mi máquina (g4, darwin) y nadie parece trabajarlas para esta arq. y sí me interesa mucho un programa que trabaje hasta en una palm o que sea encajable como widget en otra aplicación.
    Como el proyecto “Lienzo” esta casi muerto (los cambios ya no son avance sino arreglos) tal vez reempiece todo desde cero en java. Lastima que en java no hay interprete para lua5.1

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *