- El Pensadero de Canek - https://aztlan.fciencias.unam.mx/~canek/pensadero -

Más avances en Geom

En mi “tiempo libre” de estar trabajando en el artículo (dícese, cuando ya estaba harto de programar cómo calcular tangentes a dos círculos arbitrarios para hacer diagramas bonitos) también le moví a cosas a Geom, con el resultado de que ahorita no funciona, pero cuando lo haga va a estar mucho más avanzado: funcionará (espero) seleccionar construcciones en grupo, salvar y leer archivos en su propio formato XML, y separar bien y bonito el modelo de las construcciones geométricas de su presentación en el canvas.

Además (y medio inevitablemente) seguí investigando cosas de CCC, porque al fin y al cabo lo necesito. Después de pruebas extenuantes, vi que el bug al redibujar segmentos de línea en CCC sólo ocurre en AMD64, no en x86. ¿Por qué? No sé; de hecho no tengo idea, pero Sven no tiene acceso a una máquina AMD64, así que recaerá en mis hombros el tener que resolver eso.

El formato XML que originalmente elegí para guardar los archivos de Geom se veía más o menos así:

<geom>
  <<point id=”p1″ x=”10.0″ y=”15.5″ />
</geom>

Mi razonamiento era que la información que inherentemente tendría el documento no es muy estructurada, pero Juan me dio un ejemplo que me hizo reconsiderarlo:

<point size=”3.0″ color=”#000000″>
<coordx>200.0</coordx>
<coordy>200.0</coordy>
</point>

Y es que se me había olvidado que en algún punto el programa permitirá editar cosas como el color de un punto, su tamaño, el ancho de la línea de un círculo, etc. Y entonces sí conviene representar la presentación en atributos y el contenido en elementos. También envolví cada construcción en una etiqueta <construct/>, porque así me permite mapear la jerarquía de herencia que estoy usando en GObject, y me hizo darme cuanta que el atributo id de cada construcción será fundamental, cuando al incio había creído que sólo la usaría para ponerles nombres bonitos a los puntos.

Los ids son fundamentales porque por diseño la estructura que toman las construcciones geométricas no es un árbol, sino una gráfica. Si fuera un árbol representarlo en XML sería de risa; como es una gráfica necesito referencias para poder hacer ciclos, de ahí la importancia de los ids.

Otra consecuencia es que voy a necesitar utilizar órdenes parciales para poder guardar y leer bien los archivos XML; necesito primero guardar los elementos maximales, después los menores y así hasta los minimales. Y el mismo camino para leer, obviamente.

Como sea, este si es un post en medio de la obra; no tengo screencast o screenshot para mostrar.

Todavía.