Add a dist attribute to XML <body> tags so planet icons won't collide
This commit is contained in:
parent
1341628c24
commit
69233be35e
@ -8,6 +8,9 @@ AC_PROG_CC
|
|||||||
AM_PROG_CC_C_O
|
AM_PROG_CC_C_O
|
||||||
AM_PROG_AR
|
AM_PROG_AR
|
||||||
AC_PROG_LIBTOOL
|
AC_PROG_LIBTOOL
|
||||||
|
AC_SEARCH_LIBS([fabs], [m], [], [
|
||||||
|
AC_MSG_ERROR([Unable to find the fabs() function])
|
||||||
|
])
|
||||||
AC_PATH_PROGS(PERL, [perl5 perl])
|
AC_PATH_PROGS(PERL, [perl5 perl])
|
||||||
AC_PATH_PROGS(WGET, [wget])
|
AC_PATH_PROGS(WGET, [wget])
|
||||||
AC_PATH_PROGS(CURL, [curl])
|
AC_PATH_PROGS(CURL, [curl])
|
||||||
|
@ -8,6 +8,7 @@
|
|||||||
#include <libxslt/transform.h>
|
#include <libxslt/transform.h>
|
||||||
#include <swe-glib.h>
|
#include <swe-glib.h>
|
||||||
#include <locale.h>
|
#include <locale.h>
|
||||||
|
#include <math.h>
|
||||||
|
|
||||||
#include "ag-chart.h"
|
#include "ag-chart.h"
|
||||||
|
|
||||||
@ -995,6 +996,25 @@ ag_chart_save_to_file(AgChart *chart, GFile *file, GError **err)
|
|||||||
xmlFreeDoc(save_doc);
|
xmlFreeDoc(save_doc);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
gint
|
||||||
|
ag_chart_sort_planets_by_position(GswePlanetData *planet1,
|
||||||
|
GswePlanetData *planet2)
|
||||||
|
{
|
||||||
|
gdouble pos1,
|
||||||
|
pos2;
|
||||||
|
|
||||||
|
pos1 = gswe_planet_data_get_position(planet1);
|
||||||
|
pos2 = gswe_planet_data_get_position(planet2);
|
||||||
|
|
||||||
|
if (pos1 == pos2) {
|
||||||
|
return 0;
|
||||||
|
} else if (pos1 < pos2) {
|
||||||
|
return -1;
|
||||||
|
} else {
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
gchar *
|
gchar *
|
||||||
ag_chart_create_svg(AgChart *chart, gsize *length, GError **err)
|
ag_chart_create_svg(AgChart *chart, gsize *length, GError **err)
|
||||||
{
|
{
|
||||||
@ -1016,6 +1036,7 @@ ag_chart_create_svg(AgChart *chart, gsize *length, GError **err)
|
|||||||
GList *planet;
|
GList *planet;
|
||||||
GList *aspect;
|
GList *aspect;
|
||||||
GList *antiscion;
|
GList *antiscion;
|
||||||
|
GList *sorted_planets;
|
||||||
GswePlanetData *planet_data;
|
GswePlanetData *planet_data;
|
||||||
GsweAspectData *aspect_data;
|
GsweAspectData *aspect_data;
|
||||||
GEnumClass *planets_class;
|
GEnumClass *planets_class;
|
||||||
@ -1026,6 +1047,10 @@ ag_chart_create_svg(AgChart *chart, gsize *length, GError **err)
|
|||||||
locale_t current_locale;
|
locale_t current_locale;
|
||||||
GBytes *xslt_data;
|
GBytes *xslt_data;
|
||||||
gsize xslt_length;
|
gsize xslt_length;
|
||||||
|
gdouble asc_position,
|
||||||
|
prev_position;
|
||||||
|
gboolean first;
|
||||||
|
guint dist;
|
||||||
|
|
||||||
root_node = xmlDocGetRootElement(doc);
|
root_node = xmlDocGetRootElement(doc);
|
||||||
|
|
||||||
@ -1044,8 +1069,9 @@ ag_chart_create_svg(AgChart *chart, gsize *length, GError **err)
|
|||||||
GSWE_PLANET_ASCENDANT,
|
GSWE_PLANET_ASCENDANT,
|
||||||
NULL
|
NULL
|
||||||
);
|
);
|
||||||
value = g_malloc0(12);
|
asc_position = gswe_planet_data_get_position(planet_data);
|
||||||
g_ascii_dtostr(value, 12, gswe_planet_data_get_position(planet_data));
|
value = g_malloc0(12);
|
||||||
|
g_ascii_dtostr(value, 12, asc_position);
|
||||||
xmlNewProp(node, BAD_CAST "degree_ut", BAD_CAST value);
|
xmlNewProp(node, BAD_CAST "degree_ut", BAD_CAST value);
|
||||||
g_free(value);
|
g_free(value);
|
||||||
|
|
||||||
@ -1101,14 +1127,22 @@ ag_chart_create_svg(AgChart *chart, gsize *length, GError **err)
|
|||||||
bodies_node = xmlNewChild(root_node, NULL, BAD_CAST "bodies", NULL);
|
bodies_node = xmlNewChild(root_node, NULL, BAD_CAST "bodies", NULL);
|
||||||
|
|
||||||
planets_class = g_type_class_ref(GSWE_TYPE_PLANET);
|
planets_class = g_type_class_ref(GSWE_TYPE_PLANET);
|
||||||
|
sorted_planets = g_list_sort(
|
||||||
|
g_list_copy(gswe_moment_get_all_planets(GSWE_MOMENT(chart))),
|
||||||
|
(GCompareFunc)ag_chart_sort_planets_by_position
|
||||||
|
);
|
||||||
|
|
||||||
for (
|
for (
|
||||||
planet = gswe_moment_get_all_planets(GSWE_MOMENT(chart));
|
planet = sorted_planets,
|
||||||
|
dist = 0,
|
||||||
|
prev_position = -360.0,
|
||||||
|
first = TRUE;
|
||||||
planet;
|
planet;
|
||||||
planet = g_list_next(planet)
|
planet = g_list_next(planet)
|
||||||
) {
|
) {
|
||||||
planet_data = planet->data;
|
planet_data = planet->data;
|
||||||
GEnumValue *enum_value;
|
GEnumValue *enum_value;
|
||||||
|
gdouble position;
|
||||||
|
|
||||||
if (
|
if (
|
||||||
(gswe_planet_data_get_planet(planet_data) == GSWE_PLANET_ASCENDANT)
|
(gswe_planet_data_get_planet(planet_data) == GSWE_PLANET_ASCENDANT)
|
||||||
@ -1118,6 +1152,19 @@ ag_chart_create_svg(AgChart *chart, gsize *length, GError **err)
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
position = gswe_planet_data_get_position(planet_data);
|
||||||
|
|
||||||
|
if (first) {
|
||||||
|
dist = 0;
|
||||||
|
first = FALSE;
|
||||||
|
} else if (fabs(prev_position - position) < 5.0) {
|
||||||
|
dist++;
|
||||||
|
} else {
|
||||||
|
dist = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
prev_position = position;
|
||||||
|
|
||||||
node = xmlNewChild(bodies_node, NULL, BAD_CAST "body", NULL);
|
node = xmlNewChild(bodies_node, NULL, BAD_CAST "body", NULL);
|
||||||
|
|
||||||
enum_value = g_enum_get_value(
|
enum_value = g_enum_get_value(
|
||||||
@ -1130,6 +1177,10 @@ ag_chart_create_svg(AgChart *chart, gsize *length, GError **err)
|
|||||||
g_ascii_dtostr(value, 12, gswe_planet_data_get_position(planet_data));
|
g_ascii_dtostr(value, 12, gswe_planet_data_get_position(planet_data));
|
||||||
xmlNewProp(node, BAD_CAST "degree", BAD_CAST value);
|
xmlNewProp(node, BAD_CAST "degree", BAD_CAST value);
|
||||||
g_free(value);
|
g_free(value);
|
||||||
|
|
||||||
|
value = g_strdup_printf("%d", dist);
|
||||||
|
xmlNewProp(node, BAD_CAST "dist", BAD_CAST value);
|
||||||
|
g_free(value);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Begin <aspects> node
|
// Begin <aspects> node
|
||||||
|
@ -567,7 +567,7 @@
|
|||||||
</line>
|
</line>
|
||||||
<use>
|
<use>
|
||||||
<xsl:attribute name="xlink:href"><xsl:value-of select="concat('#', $planet_base, '_tmpl')"/></xsl:attribute>
|
<xsl:attribute name="xlink:href"><xsl:value-of select="concat('#', $planet_base, '_tmpl')"/></xsl:attribute>
|
||||||
<xsl:attribute name="transform"><xsl:value-of select="concat('translate(330,-15) rotate(', @degree - $asc_rotate ,',15,15)')"/></xsl:attribute>
|
<xsl:attribute name="transform"><xsl:value-of select="concat('translate(', 330 + @dist * 35, ',-15) rotate(', @degree - $asc_rotate ,',15,15)')"/></xsl:attribute>
|
||||||
</use>
|
</use>
|
||||||
</g>
|
</g>
|
||||||
<xsl:choose>
|
<xsl:choose>
|
||||||
|
Loading…
Reference in New Issue
Block a user