mirror of
https://github.com/zint/zint
synced 2024-11-16 20:57:25 +13:00
Added Maxicode for glabels interface
glabels can now access Maxicode encoding
This commit is contained in:
parent
1cca83855e
commit
574319bb1c
@ -363,7 +363,7 @@ int kix_code(struct zint_symbol *symbol, unsigned char source[], int length)
|
|||||||
/* Handles Dutch Post TNT KIX symbols */
|
/* Handles Dutch Post TNT KIX symbols */
|
||||||
/* The same as RM4SCC but without check digit */
|
/* The same as RM4SCC but without check digit */
|
||||||
/* Specification at http://www.tntpost.nl/zakelijk/klantenservice/downloads/kIX_code/download.aspx */
|
/* Specification at http://www.tntpost.nl/zakelijk/klantenservice/downloads/kIX_code/download.aspx */
|
||||||
char height_pattern[50], localstr[13];
|
char height_pattern[50], localstr[20];
|
||||||
unsigned int loopey;
|
unsigned int loopey;
|
||||||
int writer, i, h;
|
int writer, i, h;
|
||||||
int error_number; /* zeroes; */
|
int error_number; /* zeroes; */
|
||||||
@ -371,7 +371,7 @@ int kix_code(struct zint_symbol *symbol, unsigned char source[], int length)
|
|||||||
|
|
||||||
error_number = 0;
|
error_number = 0;
|
||||||
|
|
||||||
if(length > 11) {
|
if(length > 18) {
|
||||||
strcpy(symbol->errtxt, "Input too long");
|
strcpy(symbol->errtxt, "Input too long");
|
||||||
return ERROR_TOO_LONG;
|
return ERROR_TOO_LONG;
|
||||||
}
|
}
|
||||||
|
102
backend/render.c
102
backend/render.c
@ -33,14 +33,20 @@
|
|||||||
|
|
||||||
struct zint_render_line *render_plot_create_line(float x, float y, float width, float length);
|
struct zint_render_line *render_plot_create_line(float x, float y, float width, float length);
|
||||||
int render_plot_add_line(struct zint_symbol *symbol, struct zint_render_line *line, struct zint_render_line **last_line);
|
int render_plot_add_line(struct zint_symbol *symbol, struct zint_render_line *line, struct zint_render_line **last_line);
|
||||||
|
struct zint_render_ring *render_plot_create_ring(float x, float y, float radius, float line_width);
|
||||||
|
int render_plot_add_ring(struct zint_symbol *symbol, struct zint_render_ring *ring, struct zint_render_ring **last_ring);
|
||||||
|
struct zint_render_hexagon *render_plot_create_hexagon(float x, float y);
|
||||||
|
int render_plot_add_hexagon(struct zint_symbol *symbol, struct zint_render_hexagon *ring, struct zint_render_hexagon **last_hexagon);
|
||||||
|
|
||||||
int render_plot_add_string(struct zint_symbol *symbol, unsigned char *text, float x, float y, float fsize, float width, struct zint_render_string **last_string);
|
int render_plot_add_string(struct zint_symbol *symbol, unsigned char *text, float x, float y, float fsize, float width, struct zint_render_string **last_string);
|
||||||
|
|
||||||
int render_plot(struct zint_symbol *symbol, float width, float height)
|
int render_plot(struct zint_symbol *symbol, float width, float height)
|
||||||
{
|
{
|
||||||
struct zint_render *render;
|
struct zint_render *render;
|
||||||
struct zint_render_line *line, *last_line = NULL;
|
struct zint_render_line *line, *last_line = NULL;
|
||||||
struct zint_render_string *last_string = NULL;
|
struct zint_render_string *last_string = NULL;
|
||||||
|
struct zint_render_ring *ring, *last_ring = NULL;
|
||||||
|
struct zint_render_hexagon *hexagon, *last_hexagon = NULL;
|
||||||
|
|
||||||
int i, r, block_width, latch, this_row;
|
int i, r, block_width, latch, this_row;
|
||||||
float textpos, textwidth, large_bar_height, preset_height, row_height, row_posn = 0.0;
|
float textpos, textwidth, large_bar_height, preset_height, row_height, row_posn = 0.0;
|
||||||
@ -61,6 +67,8 @@ int render_plot(struct zint_symbol *symbol, float width, float height)
|
|||||||
render = symbol->rendered = malloc(sizeof(struct zint_render));
|
render = symbol->rendered = malloc(sizeof(struct zint_render));
|
||||||
render->lines = NULL;
|
render->lines = NULL;
|
||||||
render->strings = NULL;
|
render->strings = NULL;
|
||||||
|
render->rings = NULL;
|
||||||
|
render->hexagons = NULL;
|
||||||
|
|
||||||
locale = setlocale(LC_ALL, "C");
|
locale = setlocale(LC_ALL, "C");
|
||||||
|
|
||||||
@ -189,9 +197,31 @@ int render_plot(struct zint_symbol *symbol, float width, float height)
|
|||||||
// SAMS ORIGINAL // default_text_posn = (symbol->height + textoffset + symbol->border_width) * scaler;
|
// SAMS ORIGINAL // default_text_posn = (symbol->height + textoffset + symbol->border_width) * scaler;
|
||||||
|
|
||||||
if(symbol->symbology == BARCODE_MAXICODE) {
|
if(symbol->symbology == BARCODE_MAXICODE) {
|
||||||
/*
|
/* Maxicode is a fixed size */
|
||||||
* TODO INSERT BARCODE_MAXICODE HERE!
|
render->width = 28.16;
|
||||||
*/
|
render->height = 26.86;
|
||||||
|
|
||||||
|
/* Central bullseye pattern */
|
||||||
|
ring = render_plot_create_ring(13.64, 13.43, 0.85, 0.67);
|
||||||
|
render_plot_add_ring(symbol, ring, &last_ring);
|
||||||
|
ring = render_plot_create_ring(13.64, 13.43, 2.20, 0.67);
|
||||||
|
render_plot_add_ring(symbol, ring, &last_ring);
|
||||||
|
ring = render_plot_create_ring(13.64, 13.43, 3.54, 0.67);
|
||||||
|
render_plot_add_ring(symbol, ring, &last_ring);
|
||||||
|
|
||||||
|
/* Hexagons */
|
||||||
|
for(r = 0; r < symbol->rows; r++) {
|
||||||
|
for(i = 0; i < symbol->width; i++) {
|
||||||
|
if(module_is_set(symbol, r, i)) {
|
||||||
|
if(r % 2 == 1) {
|
||||||
|
hexagon = render_plot_create_hexagon((i * 0.88) + 1.76, (r * 0.76) + 0.76);
|
||||||
|
} else {
|
||||||
|
hexagon = render_plot_create_hexagon((i * 0.88) + 1.32, (r * 0.76) + 0.76);
|
||||||
|
}
|
||||||
|
render_plot_add_hexagon(symbol, hexagon, &last_hexagon);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
/* everything else uses rectangles (or squares) */
|
/* everything else uses rectangles (or squares) */
|
||||||
@ -233,18 +263,10 @@ int render_plot(struct zint_symbol *symbol, float width, float height)
|
|||||||
}
|
}
|
||||||
if(latch == 1) {
|
if(latch == 1) {
|
||||||
/* a bar */
|
/* a bar */
|
||||||
line = malloc(sizeof(struct zint_render_line));
|
|
||||||
line->next = NULL;
|
|
||||||
|
|
||||||
line->width = block_width * scaler;
|
|
||||||
line->x = (i + xoffset + x_spacer) * scaler;
|
|
||||||
|
|
||||||
if(addon_latch == 0) {
|
if(addon_latch == 0) {
|
||||||
line->y = (row_posn + y_spacer) * scaler;
|
line = render_plot_create_line((i + xoffset + x_spacer) * scaler, (row_posn + y_spacer) * scaler, block_width * scaler, row_height * scaler);
|
||||||
line->length = row_height * scaler;
|
|
||||||
} else {
|
} else {
|
||||||
line->y = (row_posn + 10.0 + y_spacer) * scaler;
|
line = render_plot_create_line((i + xoffset + x_spacer) * scaler, (row_posn + 10.0 + y_spacer) * scaler, block_width * scaler, (row_height - 5.0) * scaler);
|
||||||
line->length = (row_height - 5.0) * scaler;
|
|
||||||
}
|
}
|
||||||
latch = 0;
|
latch = 0;
|
||||||
|
|
||||||
@ -525,6 +547,54 @@ int render_plot_add_line(struct zint_symbol *symbol, struct zint_render_line *li
|
|||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
struct zint_render_ring *render_plot_create_ring(float x, float y, float radius, float line_width)
|
||||||
|
{
|
||||||
|
struct zint_render_ring *ring;
|
||||||
|
|
||||||
|
ring = malloc(sizeof(struct zint_render_ring));
|
||||||
|
ring->next = NULL;
|
||||||
|
ring->x = x;
|
||||||
|
ring->y = y;
|
||||||
|
ring->radius = radius;
|
||||||
|
ring->line_width = line_width;
|
||||||
|
|
||||||
|
return ring;
|
||||||
|
}
|
||||||
|
|
||||||
|
int render_plot_add_ring(struct zint_symbol *symbol, struct zint_render_ring *ring, struct zint_render_ring **last_ring)
|
||||||
|
{
|
||||||
|
if (*last_ring)
|
||||||
|
(*last_ring)->next = ring;
|
||||||
|
else
|
||||||
|
symbol->rendered->rings = ring; // first ring
|
||||||
|
|
||||||
|
*last_ring = ring;
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
struct zint_render_hexagon *render_plot_create_hexagon(float x, float y)
|
||||||
|
{
|
||||||
|
struct zint_render_hexagon *hexagon;
|
||||||
|
|
||||||
|
hexagon = malloc(sizeof(struct zint_render_hexagon));
|
||||||
|
hexagon->next = NULL;
|
||||||
|
hexagon->x = x;
|
||||||
|
hexagon->y = y;
|
||||||
|
|
||||||
|
return hexagon;
|
||||||
|
}
|
||||||
|
|
||||||
|
int render_plot_add_hexagon(struct zint_symbol *symbol, struct zint_render_hexagon *hexagon, struct zint_render_hexagon **last_hexagon)
|
||||||
|
{
|
||||||
|
if (*last_hexagon)
|
||||||
|
(*last_hexagon)->next = hexagon;
|
||||||
|
else
|
||||||
|
symbol->rendered->hexagons = hexagon; // first hexagon
|
||||||
|
|
||||||
|
*last_hexagon = hexagon;
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Add a string structure to the symbol.
|
* Add a string structure to the symbol.
|
||||||
* Coordinates assumed to be from top-center.
|
* Coordinates assumed to be from top-center.
|
||||||
|
@ -38,10 +38,22 @@ struct zint_render_string {
|
|||||||
struct zint_render_string *next; /* Pointer to next character */
|
struct zint_render_string *next; /* Pointer to next character */
|
||||||
};
|
};
|
||||||
|
|
||||||
|
struct zint_render_ring {
|
||||||
|
float x, y, radius, line_width;
|
||||||
|
struct zint_render_ring *next; /* Pointer to next ring */
|
||||||
|
};
|
||||||
|
|
||||||
|
struct zint_render_hexagon {
|
||||||
|
float x, y;
|
||||||
|
struct zint_render_hexagon *next; /* Pointer to next hexagon */
|
||||||
|
};
|
||||||
|
|
||||||
struct zint_render {
|
struct zint_render {
|
||||||
float width, height;
|
float width, height;
|
||||||
struct zint_render_line *lines; /* Pointer to first line */
|
struct zint_render_line *lines; /* Pointer to first line */
|
||||||
struct zint_render_string *strings; /* Pointer to first string */
|
struct zint_render_string *strings; /* Pointer to first string */
|
||||||
|
struct zint_render_ring *rings; /* Pointer to first ring */
|
||||||
|
struct zint_render_hexagon *hexagons; /* Pointer to first hexagon */
|
||||||
};
|
};
|
||||||
|
|
||||||
struct zint_symbol {
|
struct zint_symbol {
|
||||||
|
Loading…
Reference in New Issue
Block a user