/* textplot.c */
/*
* Vis5D system for visualizing five dimensional gridded data sets.
* Copyright (C) 1990 - 2000 Bill Hibbard, Johan Kellum, Brian Paul,
* Dave Santek, and Andre Battaiola.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* As a special exception to the terms of the GNU General Public
* License, you are permitted to link Vis5D with (and distribute the
* resulting source and executables) the LUI library (copyright by
* Stellar Computer Inc. and licensed for distribution with Vis5D),
* the McIDAS library, and/or the NetCDF library, where those
* libraries are governed by the terms of their own licenses.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*
*/
#include "../config.h"
#include <string.h>
#include <math.h>
#include <stdio.h>
#include "memory.h"
#include "textplot.h"
#include "globals.h"
#include "api.h"
#define MAX_SYMBOLS 400
#define MAX_SYMBOL_VERTS 35
#define DISTANCE( x1, y1, x2, y2 ) sqrt( (x1-x2)*(x1-x2) + (y1-y2)*(y1-y2) )
static float textcoordx[MAX_SYMBOLS][MAX_SYMBOL_VERTS];
static float textcoordy[MAX_SYMBOLS][MAX_SYMBOL_VERTS];
static void init_text(void)
{
int i, j;
for( i = 0; i < MAX_SYMBOLS; i++){
for (j = 0; j < MAX_SYMBOL_VERTS; j++){
textcoordx[i][j] = 27.0;
textcoordy[i][j] = 27.0;
}
}
textcoordx[0][0]=-0.3;
textcoordy[0][0]=1.0;
textcoordx[0][1]=-0.8;
textcoordy[0][1]=0.25;
textcoordx[0][2]=-0.8;
textcoordy[0][2]=0.25;
textcoordx[0][3]=-0.8;
textcoordy[0][3]=-0.25;
textcoordx[0][4]=-0.8;
textcoordy[0][4]=-0.25;
textcoordx[0][5]=-0.3;
textcoordy[0][5]=-1.0;
textcoordx[0][6]=-0.3;
textcoordy[0][6]=-1.0;
textcoordx[0][7]=0.3;
textcoordy[0][7]=-1.0;
textcoordx[0][8]=0.3;
textcoordy[0][8]=-1.0;
textcoordx[0][9]=0.8;
textcoordy[0][9]=-0.25;
textcoordx[0][10]=0.8;
textcoordy[0][10]=-0.25;
textcoordx[0][11]=0.8;
textcoordy[0][11]=0.25;
textcoordx[0][12]=0.8;
textcoordy[0][12]=0.25;
textcoordx[0][13]=0.3;
textcoordy[0][13]=1.0;
textcoordx[0][14]=0.3;
textcoordy[0][14]=1.0;
textcoordx[0][15]=-0.3;
textcoordy[0][15]=1.0;
/* 1 */
textcoordx[1][0]=-0.2;
textcoordy[1][0]=0.6;
textcoordx[1][1]=0.0;
textcoordy[1][1]=1.0;
textcoordx[1][2]=0.0;
textcoordy[1][2]=1.0;
textcoordx[1][3]=0.0;
textcoordy[1][3]=-1.0;
textcoordx[1][4]=-0.2;
textcoordy[1][4]=-1.0;
textcoordx[1][5]=0.2;
textcoordy[1][5]=-1.0;
/* 2 */
textcoordx[2][0]=-0.8;
textcoordy[2][0]=0.6;
textcoordx[2][1]=-0.3;
textcoordy[2][1]=1.0;
textcoordx[2][2]=-0.3;
textcoordy[2][2]=1.0;
textcoordx[2][3]=0.3;
textcoordy[2][3]=1.0;
textcoordx[2][4]=0.3;
textcoordy[2][4]=1.0;
textcoordx[2][5]=0.8;
textcoordy[2][5]=0.6;
textcoordx[2][6]=0.8;
textcoordy[2][6]=0.6;
textcoordx[2][7]=-0.8;
textcoordy[2][7]=-1.0;
textcoordx[2][8]=-0.8;
textcoordy[2][8]=-1.0;
textcoordx[2][9]=0.8;
textcoordy[2][9]=-1.0;
/* 3 */
textcoordx[3][0]=-0.8;
textcoordy[3][0]=1.0;
textcoordx[3][1]=0.8;
textcoordy[3][1]=1.0;
textcoordx[3][2]=0.8;
textcoordy[3][2]=1.0;
textcoordx[3][3]=-0.8;
textcoordy[3][3]=0.0;
textcoordx[3][4]=-0.8;
textcoordy[3][4]=0.0;
textcoordx[3][5]=0.0;
textcoordy[3][5]=0.1;
textcoordx[3][6]=0.0;
textcoordy[3][6]=0.1;
textcoordx[3][7]=0.4;
textcoordy[3][7]=0.1;
textcoordx[3][8]=0.4;
textcoordy[3][8]=0.1;
textcoordx[3][9]=0.8;
textcoordy[3][9]=-0.2;
textcoordx[3][10]=0.8;
textcoordy[3][10]=-0.2;
textcoordx[3][11]=0.8;
textcoordy[3][11]=-0.4;
textcoordx[3][12]=0.8;
textcoordy[3][12]=-0.4;
textcoordx[3][13]=0.3;
textcoordy[3][13]=-1.0;
textcoordx[3][14]=0.3;
textcoordy[3][14]=-1.0;
textcoordx[3][15]=-0.3;
textcoordy[3][15]=-1.0;
textcoordx[3][16]=-0.3;
textcoordy[3][16]=-1.0;
textcoordx[3][17]=-0.8;
textcoordy[3][17]=-0.7;
/* 4 */
textcoordx[4][0]=-0.8;
textcoordy[4][0]=1.0;
textcoordx[4][1]=-0.8;
textcoordy[4][1]=0.0;
textcoordx[4][2]=-0.8;
textcoordy[4][2]=0.0;
textcoordx[4][3]=0.8;
textcoordy[4][3]=0.0;
textcoordx[4][4]=0.2;
textcoordy[4][4]=0.8;
textcoordx[4][5]=0.2;
textcoordy[4][5]=-1.0;
/* 5 */
textcoordx[5][0]=0.8;
textcoordy[5][0]=1.0;
textcoordx[5][1]=-0.8;
textcoordy[5][1]=1.0;
textcoordx[5][2]=-0.8;
textcoordy[5][2]=1.0;
textcoordx[5][3]=-0.8;
textcoordy[5][3]=0.0;
textcoordx[5][4]=-0.8;
textcoordy[5][4]=0.0;
textcoordx[5][5]=0.2;
textcoordy[5][5]=0.1;
textcoordx[5][6]=0.2;
textcoordy[5][6]=0.1;
textcoordx[5][7]=0.8;
textcoordy[5][7]=-0.1;
textcoordx[5][8]=0.8;
textcoordy[5][8]=-0.1;
textcoordx[5][9]=0.7;
textcoordy[5][9]=-0.7;
textcoordx[5][10]=0.7;
textcoordy[5][10]=-0.7;
textcoordx[5][11]=0.0;
textcoordy[5][11]=-1.0;
textcoordx[5][12]=0.0;
textcoordy[5][12]=-1.0;
textcoordx[5][13]=-0.7;
textcoordy[5][13]=-0.7;
textcoordx[5][14]=-0.7;
textcoordy[5][14]=-0.7;
textcoordx[5][15]=-0.8;
textcoordy[5][15]=-0.35;
/* 6 */
textcoordx[6][0]=0.7;
textcoordy[6][0]=1.0;
textcoordx[6][1]=-0.8;
textcoordy[6][1]=-0.2;
textcoordx[6][2]=-0.8;
textcoordy[6][2]=-0.2;
textcoordx[6][3]=-0.8;
textcoordy[6][3]=-0.6;
textcoordx[6][4]=-0.8;
textcoordy[6][4]=-0.6;
textcoordx[6][5]=-0.4;
textcoordy[6][5]=-1.0;
textcoordx[6][6]=-0.4;
textcoordy[6][6]=-1.0;
textcoordx[6][7]=0.4;
textcoordy[6][7]=-1.0;
textcoordx[6][8]=0.4;
textcoordy[6][8]=-1.0;
textcoordx[6][9]=0.8;
textcoordy[6][9]=-0.6;
textcoordx[6][10]=0.8;
textcoordy[6][10]=-0.6;
textcoordx[6][11]=0.8;
textcoordy[6][11]=-0.2;
textcoordx[6][12]=0.8;
textcoordy[6][12]=-0.2;
textcoordx[6][13]=0.4;
textcoordy[6][13]=0.2;
textcoordx[6][14]=0.4;
textcoordy[6][14]=0.2;
textcoordx[6][15]=-0.4;
textcoordy[6][15]=0.2;
textcoordx[6][16]=-0.4;
textcoordy[6][16]=0.2;
textcoordx[6][17]=-0.8;
textcoordy[6][17]=-0.2;
/* 7 */
textcoordx[7][0]=-0.8;
textcoordy[7][0]=1.0;
textcoordx[7][1]=0.8;
textcoordy[7][1]=1.0;
textcoordx[7][2]=0.8;
textcoordy[7][2]=1.0;
textcoordx[7][3]=-0.7;
textcoordy[7][3]=-1.0;
/* 8 */
textcoordx[8][0]=-0.3;
textcoordy[8][0]=1.0;
textcoordx[8][1]=-0.8;
textcoordy[8][1]=0.75;
textcoordx[8][2]=-0.8;
textcoordy[8][2]=0.75;
textcoordx[8][3]=-0.8;
textcoordy[8][3]=0.25;
textcoordx[8][4]=-0.8;
textcoordy[8][4]=0.25;
textcoordx[8][5]=-0.3;
textcoordy[8][5]=0.0;
textcoordx[8][6]=-0.3;
textcoordy[8][6]=0.0;
textcoordx[8][7]=0.3;
textcoordy[8][7]=0.0;
textcoordx[8][8]=0.3;
textcoordy[8][8]=0.0;
textcoordx[8][9]=0.8;
textcoordy[8][9]=0.25;
textcoordx[8][10]=0.8;
textcoordy[8][10]=0.25;
textcoordx[8][11]=0.8;
textcoordy[8][11]=0.75;
textcoordx[8][12]=0.8;
textcoordy[8][12]=0.75;
textcoordx[8][13]=0.3;
textcoordy[8][13]=1.0;
textcoordx[8][14]=0.3;
textcoordy[8][14]=1.0;
textcoordx[8][15]=-0.3;
textcoordy[8][15]=1.0;
textcoordx[8][16]=-0.3;
textcoordy[8][16]=0.0;
textcoordx[8][17]=-0.8;
textcoordy[8][17]=-0.25;
textcoordx[8][18]=-0.8;
textcoordy[8][18]=-0.25;
textcoordx[8][19]=-0.8;
textcoordy[8][19]=-0.75;
textcoordx[8][20]=-0.8;
textcoordy[8][20]=-0.75;
textcoordx[8][21]=-0.3;
textcoordy[8][21]=-1.0;
textcoordx[8][22]=-0.3;
textcoordy[8][22]=-1.0;
textcoordx[8][23]=0.3;
textcoordy[8][23]=-1.0;
textcoordx[8][24]=0.3;
textcoordy[8][24]=-1.0;
textcoordx[8][25]=0.8;
textcoordy[8][25]=-0.75;
textcoordx[8][26]=0.8;
textcoordy[8][26]=-0.75;
textcoordx[8][27]=0.8;
textcoordy[8][27]=-0.25;
textcoordx[8][28]=0.8;
textcoordy[8][28]=-0.25;
textcoordx[8][29]=0.3;
textcoordy[8][29]=0.0;
/* 9 */
textcoordx[9][0]=-0.8;
textcoordy[9][0]=-1.0;
textcoordx[9][1]=0.8;
textcoordy[9][1]=0.25;
textcoordx[9][2]=0.8;
textcoordy[9][2]=0.25;
textcoordx[9][3]=0.8;
textcoordy[9][3]=0.75;
textcoordx[9][4]=0.8;
textcoordy[9][4]=0.75;
textcoordx[9][5]=0.3;
textcoordy[9][5]=1.0;
textcoordx[9][6]=0.3;
textcoordy[9][6]=1.0;
textcoordx[9][7]=-0.3;
textcoordy[9][7]=1.0;
textcoordx[9][8]=-0.3;
textcoordy[9][8]=1.0;
textcoordx[9][9]=-0.8;
textcoordy[9][9]=0.75;
textcoordx[9][10]=-0.8;
textcoordy[9][10]=0.75;
textcoordx[9][11]=-0.8;
textcoordy[9][11]=0.25;
textcoordx[9][12]=-0.8;
textcoordy[9][12]=0.25;
textcoordx[9][13]=-0.3;
textcoordy[9][13]=0.0;
textcoordx[9][14]=-0.3;
textcoordy[9][14]=0.0;
textcoordx[9][15]=0.3;
textcoordy[9][15]=0.0;
textcoordx[9][16]=0.3;
textcoordy[9][16]=0.0;
textcoordx[9][17]=0.8;
textcoordy[9][17]=0.25;
/* . */
textcoordx['.'][0]=-0.3;
textcoordy['.'][0]=-0.7;
textcoordx['.'][1]=0.3;
textcoordy['.'][1]=-0.7;
textcoordx['.'][2]=0.3;
textcoordy['.'][2]=-0.7;
textcoordx['.'][3]=0.3;
textcoordy['.'][3]=-1.0;
textcoordx['.'][4]=0.3;
textcoordy['.'][4]=-1.0;
textcoordx['.'][5]=-0.3;
textcoordy['.'][5]=-1.0;
textcoordx['.'][6]=-0.3;
textcoordy['.'][6]=-1.0;
textcoordx['.'][7]=-0.3;
textcoordy['.'][7]=-0.7;
textcoordx['.'][8]=-0.3;
textcoordy['.'][8]=-0.7;
textcoordx['.'][9]=0.3;
textcoordy['.'][9]=-1.0;
textcoordx['.'][10]=0.3;
textcoordy['.'][10]=-0.7;
textcoordx['.'][11]=-0.3;
textcoordy['.'][11]=-1.0;
/* - */
textcoordx['-'][0]=-0.7;
textcoordy['-'][0]=0.0;
textcoordx['-'][1]=0.7;
textcoordy['-'][1]=0.0;
/* A */
textcoordx['A'][0]=-0.8;
textcoordy['A'][0]=-1.0;
textcoordx['A'][1]=0.0;
textcoordy['A'][1]=1.0;
textcoordx['A'][2]=0.0;
textcoordy['A'][2]=1.0;
textcoordx['A'][3]=0.8;
textcoordy['A'][3]=-1.0;
textcoordx['A'][4]=-0.4;
textcoordy['A'][4]=0.0;
textcoordx['A'][5]=0.4;
textcoordy['A'][5]=0.0;
/* B */
textcoordx['B'][0]=-0.8;
textcoordy['B'][0]=1.0;
textcoordx['B'][1]=-0.3;
textcoordy['B'][1]=1.0;
textcoordx['B'][2]=-0.3;
textcoordy['B'][2]=1.0;
textcoordx['B'][3]=0.8;
textcoordy['B'][3]=0.8;
textcoordx['B'][4]=0.8;
textcoordy['B'][4]=0.8;
textcoordx['B'][5]=0.8;
textcoordy['B'][5]=0.2;
textcoordx['B'][6]=0.8;
textcoordy['B'][6]=0.2;
textcoordx['B'][7]=-0.8;
textcoordy['B'][7]=0.0;
textcoordx['B'][8]=-0.8;
textcoordy['B'][8]=0.0;
textcoordx['B'][9]=0.8;
textcoordy['B'][9]=-0.2;
textcoordx['B'][10]=0.8;
textcoordy['B'][10]=-0.2;
textcoordx['B'][11]=0.8;
textcoordy['B'][11]=-0.8;
textcoordx['B'][12]=0.8;
textcoordy['B'][12]=-0.8;
textcoordx['B'][13]=-0.3;
textcoordy['B'][13]=-1.0;
textcoordx['B'][14]=-0.3;
textcoordy['B'][14]=-1.0;
textcoordx['B'][15]=-0.8;
textcoordy['B'][15]=-1.0;
textcoordx['B'][16]=-0.8;
textcoordy['B'][16]=-1.0;
textcoordx['B'][17]=-0.8;
textcoordy['B'][17]=1.0;
/* C */
textcoordx['C'][0]=0.8;
textcoordy['C'][0]=0.5;
textcoordx['C'][1]=0.8;
textcoordy['C'][1]=0.6;
textcoordx['C'][2]=0.8;
textcoordy['C'][2]=0.6;
textcoordx['C'][3]=0.5;
textcoordy['C'][3]=1.0;
textcoordx['C'][4]=0.5;
textcoordy['C'][4]=1.0;
textcoordx['C'][5]=-0.5;
textcoordy['C'][5]=1.0;
textcoordx['C'][6]=-0.5;
textcoordy['C'][6]=1.0;
textcoordx['C'][7]=-0.8;
textcoordy['C'][7]=0.6;
textcoordx['C'][8]=-0.8;
textcoordy['C'][8]=0.6;
textcoordx['C'][9]=-0.8;
textcoordy['C'][9]=-0.6;
textcoordx['C'][10]=-0.8;
textcoordy['C'][10]=-0.6;
textcoordx['C'][11]=-0.5;
textcoordy['C'][11]=-1.0;
textcoordx['C'][12]=-0.5;
textcoordy['C'][12]=-1.0;
textcoordx['C'][13]=0.5;
textcoordy['C'][13]=-1.0;
textcoordx['C'][14]=0.5;
textcoordy['C'][14]=-1.0;
textcoordx['C'][15]=0.8;
textcoordy['C'][15]=-0.6;
textcoordx['C'][16]=0.8;
textcoordy['C'][16]=-0.6;
textcoordx['C'][17]=0.8;
textcoordy['C'][17]=-0.6;
/* D */
textcoordx['D'][0]=-0.8;
textcoordy['D'][0]=1.0;
textcoordx['D'][1]=0.0;
textcoordy['D'][1]=1.0;
textcoordx['D'][2]=0.0;
textcoordy['D'][2]=1.0;
textcoordx['D'][3]=0.8;
textcoordy['D'][3]=0.7;
textcoordx['D'][4]=0.8;
textcoordy['D'][4]=0.7;
textcoordx['D'][5]=0.8;
textcoordy['D'][5]=-0.7;
textcoordx['D'][6]=0.8;
textcoordy['D'][6]=-0.7;
textcoordx['D'][7]=0.0;
textcoordy['D'][7]=-1.0;
textcoordx['D'][8]=0.0;
textcoordy['D'][8]=-1.0;
textcoordx['D'][9]=-0.8;
textcoordy['D'][9]=-1.0;
textcoordx['D'][10]=-0.8;
textcoordy['D'][10]=-1.0;
textcoordx['D'][11]=-0.8;
textcoordy['D'][11]=1.0;
/* E */
textcoordx['E'][0]=-0.8;
textcoordy['E'][0]=1.0;
textcoordx['E'][1]=0.8;
textcoordy['E'][1]=1.0;
textcoordx['E'][2]=-0.8;
textcoordy['E'][2]=0.0;
textcoordx['E'][3]=0.5;
textcoordy['E'][3]=0.0;
textcoordx['E'][4]=-0.8;
textcoordy['E'][4]=-1.0;
textcoordx['E'][5]=0.8;
textcoordy['E'][5]=-1.0;
textcoordx['E'][6]=-0.8;
textcoordy['E'][6]=1.0;
textcoordx['E'][7]=-0.8;
textcoordy['E'][7]=-1.0;
/* F */
textcoordx['F'][0]=-0.8;
textcoordy['F'][0]=1.0;
textcoordx['F'][1]=0.8;
textcoordy['F'][1]=1.0;
textcoordx['F'][2]=-0.8;
textcoordy['F'][2]=0.1;
textcoordx['F'][3]=0.6;
textcoordy['F'][3]=0.1;
textcoordx['F'][4]=-0.8;
textcoordy['F'][4]=1.0;
textcoordx['F'][5]=-0.8;
textcoordy['F'][5]=-1.0;
/* G */
textcoordx['G'][0]=0.8;
textcoordy['G'][0]=0.3;
textcoordx['G'][1]=0.8;
textcoordy['G'][1]=0.6;
textcoordx['G'][2]=0.8;
textcoordy['G'][2]=0.6;
textcoordx['G'][3]=0.4;
textcoordy['G'][3]=1.0;
textcoordx['G'][4]=0.4;
textcoordy['G'][4]=1.0;
textcoordx['G'][5]=-0.4;
textcoordy['G'][5]=1.0;
textcoordx['G'][6]=-0.4;
textcoordy['G'][6]=1.0;
textcoordx['G'][7]=-0.8;
textcoordy['G'][7]=0.6;
textcoordx['G'][8]=-0.8;
textcoordy['G'][8]=0.6;
textcoordx['G'][9]=-0.8;
textcoordy['G'][9]=-0.6;
textcoordx['G'][10]=-0.8;
textcoordy['G'][10]=-0.6;
textcoordx['G'][11]=-0.4;
textcoordy['G'][11]=-1.0;
textcoordx['G'][12]=-0.4;
textcoordy['G'][12]=-1.0;
textcoordx['G'][13]=0.4;
textcoordy['G'][13]=-1.0;
textcoordx['G'][14]=0.4;
textcoordy['G'][14]=-1.0;
textcoordx['G'][15]=0.8;
textcoordy['G'][15]=-0.3;
textcoordx['G'][16]=0.8;
textcoordy['G'][16]=-0.3;
textcoordx['G'][17]=0.2;
textcoordy['G'][17]=-0.3;
/* H */
textcoordx['H'][0]=-0.8;
textcoordy['H'][0]=1.0;
textcoordx['H'][1]=-0.8;
textcoordy['H'][1]=-1.0;
textcoordx['H'][2]=0.8;
textcoordy['H'][2]=1.0;
textcoordx['H'][3]=0.8;
textcoordy['H'][3]=-1.0;
textcoordx['H'][4]=-0.8;
textcoordy['H'][4]=0.0;
textcoordx['H'][5]=0.8;
textcoordy['H'][5]=0.0;
/* I */
textcoordx['I'][0]=-0.4;
textcoordy['I'][0]=1.0;
textcoordx['I'][1]=0.4;
textcoordy['I'][1]=1.0;
textcoordx['I'][2]=-0.4;
textcoordy['I'][2]=-1.0;
textcoordx['I'][3]=0.4;
textcoordy['I'][3]=-1.0;
textcoordx['I'][4]=0.0;
textcoordy['I'][4]=1.0;
textcoordx['I'][5]=0.0;
textcoordy['I'][5]=-1.0;
/* J */
textcoordx['J'][0]=-0.2;
textcoordy['J'][0]=1.0;
textcoordx['J'][1]=0.8;
textcoordy['J'][1]=1.0;
textcoordx['J'][2]=0.3;
textcoordy['J'][2]=1.0;
textcoordx['J'][3]=0.3;
textcoordy['J'][3]=-0.6;
textcoordx['J'][4]=0.3;
textcoordy['J'][4]=-0.6;
textcoordx['J'][5]=-0.1;
textcoordy['J'][5]=-1.0;
textcoordx['J'][6]=-0.1;
textcoordy['J'][6]=-1.0;
textcoordx['J'][7]=-0.4;
textcoordy['J'][7]=-1.0;
textcoordx['J'][8]=-0.4;
textcoordy['J'][8]=-1.0;
textcoordx['J'][9]=-0.8;
textcoordy['J'][9]=-0.6;
textcoordx['J'][10]=-0.8;
textcoordy['J'][10]=-0.6;
textcoordx['J'][11]=-0.8;
textcoordy['J'][11]=-0.4;
/* K */
textcoordx['K'][0]=-0.8;
textcoordy['K'][0]=1.0;
textcoordx['K'][1]=-0.8;
textcoordy['K'][1]=-1.0;
textcoordx['K'][2]=-0.8;
textcoordy['K'][2]=-0.2;
textcoordx['K'][3]=0.8;
textcoordy['K'][3]=1.0;
textcoordx['K'][4]=-0.4;
textcoordy['K'][4]=0.1;
textcoordx['K'][5]=0.8;
textcoordy['K'][5]=-1.0;
/* L */
textcoordx['L'][0]=-0.8;
textcoordy['L'][0]=1.0;
textcoordx['L'][1]=-0.8;
textcoordy['L'][1]=-1.0;
textcoordx['L'][2]=-0.8;
textcoordy['L'][2]=-1.0;
textcoordx['L'][3]=0.8;
textcoordy['L'][3]=-1.0;
/* M */
textcoordx['M'][0]=-0.8;
textcoordy['M'][0]=-1.0;
textcoordx['M'][1]=-0.8;
textcoordy['M'][1]=1.0;
textcoordx['M'][2]=-0.8;
textcoordy['M'][2]=1.0;
textcoordx['M'][3]=0.0;
textcoordy['M'][3]=0.0;
textcoordx['M'][4]=0.0;
textcoordy['M'][4]=0.0;
textcoordx['M'][5]=0.8;
textcoordy['M'][5]=1.0;
textcoordx['M'][6]=0.8;
textcoordy['M'][6]=1.0;
textcoordx['M'][7]=0.8;
textcoordy['M'][7]=-1.0;
/* N */
textcoordx['N'][0]=-0.8;
textcoordy['N'][0]=-1.0;
textcoordx['N'][1]=-0.8;
textcoordy['N'][1]=1.0;
textcoordx['N'][2]=-0.8;
textcoordy['N'][2]=1.0;
textcoordx['N'][3]=0.8;
textcoordy['N'][3]=-1.0;
textcoordx['N'][4]=0.8;
textcoordy['N'][4]=1.0;
textcoordx['N'][5]=0.8;
textcoordy['N'][5]=-1.0;
/* O */
textcoordx['O'][0]=-0.4;
textcoordy['O'][0]=1.0;
textcoordx['O'][1]=-0.8;
textcoordy['O'][1]=0.4;
textcoordx['O'][2]=-0.8;
textcoordy['O'][2]=0.4;
textcoordx['O'][3]=-0.8;
textcoordy['O'][3]=-0.4;
textcoordx['O'][4]=-0.8;
textcoordy['O'][4]=-0.4;
textcoordx['O'][5]=-0.4;
textcoordy['O'][5]=-1.0;
textcoordx['O'][6]=-0.4;
textcoordy['O'][6]=-1.0;
textcoordx['O'][7]=0.4;
textcoordy['O'][7]=-1.0;
textcoordx['O'][8]=0.4;
textcoordy['O'][8]=-1.0;
textcoordx['O'][9]=0.8;
textcoordy['O'][9]=-0.4;
textcoordx['O'][10]=0.8;
textcoordy['O'][10]=-0.4;
textcoordx['O'][11]=0.8;
textcoordy['O'][11]=0.4;
textcoordx['O'][12]=0.8;
textcoordy['O'][12]=0.4;
textcoordx['O'][13]=0.4;
textcoordy['O'][13]=1.0;
textcoordx['O'][14]=0.4;
textcoordy['O'][14]=1.0;
textcoordx['O'][15]=-0.4;
textcoordy['O'][15]=1.0;
/* P */
textcoordx['P'][0]=-0.8;
textcoordy['P'][0]=1.0;
textcoordx['P'][1]=-0.8;
textcoordy['P'][1]=-1.0;
textcoordx['P'][2]=-0.8;
textcoordy['P'][2]=0.0;
textcoordx['P'][3]=0.5;
textcoordy['P'][3]=0.0;
textcoordx['P'][4]=0.5;
textcoordy['P'][4]=0.0;
textcoordx['P'][5]=0.8;
textcoordy['P'][5]=0.3;
textcoordx['P'][6]=0.8;
textcoordy['P'][6]=0.3;
textcoordx['P'][7]=0.8;
textcoordy['P'][7]=0.7;
textcoordx['P'][8]=0.8;
textcoordy['P'][8]=0.7;
textcoordx['P'][9]=0.5;
textcoordy['P'][9]=1.0;
textcoordx['P'][10]=0.5;
textcoordy['P'][10]=1.0;
textcoordx['P'][11]=-0.8;
textcoordy['P'][11]=1.0;
/* Q */
textcoordx['Q'][0]=-0.4;
textcoordy['Q'][0]=1.0;
textcoordx['Q'][1]=-0.8;
textcoordy['Q'][1]=0.4;
textcoordx['Q'][2]=-0.8;
textcoordy['Q'][2]=0.4;
textcoordx['Q'][3]=-0.8;
textcoordy['Q'][3]=-0.4;
textcoordx['Q'][4]=-0.8;
textcoordy['Q'][4]=-0.4;
textcoordx['Q'][5]=-0.4;
textcoordy['Q'][5]=-1.0;
textcoordx['Q'][6]=-0.4;
textcoordy['Q'][6]=-1.0;
textcoordx['Q'][7]=0.4;
textcoordy['Q'][7]=-1.0;
textcoordx['Q'][8]=0.4;
textcoordy['Q'][8]=-1.0;
textcoordx['Q'][9]=0.8;
textcoordy['Q'][9]=-0.4;
textcoordx['Q'][10]=0.8;
textcoordy['Q'][10]=-0.4;
textcoordx['Q'][11]=0.8;
textcoordy['Q'][11]=0.4;
textcoordx['Q'][12]=0.8;
textcoordy['Q'][12]=0.4;
textcoordx['Q'][13]=0.4;
textcoordy['Q'][13]=1.0;
textcoordx['Q'][14]=0.4;
textcoordy['Q'][14]=1.0;
textcoordx['Q'][15]=-0.4;
textcoordy['Q'][15]=1.0;
textcoordx['Q'][16]=0.2;
textcoordy['Q'][16]=-0.5;
textcoordx['Q'][17]=0.8;
textcoordy['Q'][17]=-0.9;
/* R */
textcoordx['R'][0]=-0.8;
textcoordy['R'][0]=1.0;
textcoordx['R'][1]=-0.8;
textcoordy['R'][1]=-1.0;
textcoordx['R'][2]=-0.8;
textcoordy['R'][2]=0.0;
textcoordx['R'][3]=0.5;
textcoordy['R'][3]=0.0;
textcoordx['R'][4]=0.5;
textcoordy['R'][4]=0.0;
textcoordx['R'][5]=0.8;
textcoordy['R'][5]=0.3;
textcoordx['R'][6]=0.8;
textcoordy['R'][6]=0.3;
textcoordx['R'][7]=0.8;
textcoordy['R'][7]=0.7;
textcoordx['R'][8]=0.8;
textcoordy['R'][8]=0.7;
textcoordx['R'][9]=0.5;
textcoordy['R'][9]=1.0;
textcoordx['R'][10]=0.5;
textcoordy['R'][10]=1.0;
textcoordx['R'][11]=-0.8;
textcoordy['R'][11]=1.0;
textcoordx['R'][12]=0.5;
textcoordy['R'][12]=0.0;
textcoordx['R'][13]=0.8;
textcoordy['R'][13]=-1.0;
/* S */
textcoordx['S'][0]=0.8;
textcoordy['S'][0]=0.6;
textcoordx['S'][1]=0.4;
textcoordy['S'][1]=1.0;
textcoordx['S'][2]=0.4;
textcoordy['S'][2]=1.0;
textcoordx['S'][3]=-0.4;
textcoordy['S'][3]=1.0;
textcoordx['S'][20]=-0.4;
textcoordy['S'][20]=1.0;
textcoordx['S'][21]=-0.8;
textcoordy['S'][21]=0.6;
textcoordx['S'][4]=-0.8;
textcoordy['S'][4]=0.6;
textcoordx['S'][5]=-0.8;
textcoordy['S'][5]=0.4;
textcoordx['S'][6]=-0.8;
textcoordy['S'][6]=0.4;
textcoordx['S'][7]=-0.4;
textcoordy['S'][7]=0.0;
textcoordx['S'][8]=-0.4;
textcoordy['S'][8]=0.0;
textcoordx['S'][9]=0.4;
textcoordy['S'][9]=0.0;
textcoordx['S'][10]=0.4;
textcoordy['S'][10]=0.0;
textcoordx['S'][11]=0.8;
textcoordy['S'][11]=-0.4;
textcoordx['S'][12]=0.8;
textcoordy['S'][12]=-0.4;
textcoordx['S'][13]=0.8;
textcoordy['S'][13]=-0.6;
textcoordx['S'][14]=0.8;
textcoordy['S'][14]=-0.6;
textcoordx['S'][15]=0.4;
textcoordy['S'][15]=-1.0;
textcoordx['S'][16]=0.4;
textcoordy['S'][16]=-1.0;
textcoordx['S'][17]=-0.4;
textcoordy['S'][17]=-1.0;
textcoordx['S'][18]=-0.4;
textcoordy['S'][18]=-1.0;
textcoordx['S'][19]=-0.8;
textcoordy['S'][19]=-0.6;
/* T */
textcoordx['T'][0]=-0.8;
textcoordy['T'][0]=1.0;
textcoordx['T'][1]=0.8;
textcoordy['T'][1]=1.0;
textcoordx['T'][2]=0.0;
textcoordy['T'][2]=1.0;
textcoordx['T'][3]=0.0;
textcoordy['T'][3]=-1.0;
/* U */
textcoordx['U'][0]=-0.8;
textcoordy['U'][0]=1.0;
textcoordx['U'][1]=-0.8;
textcoordy['U'][1]=-0.7;
textcoordx['U'][2]=-0.8;
textcoordy['U'][2]=-0.7;
textcoordx['U'][3]=-0.5;
textcoordy['U'][3]=-1.0;
textcoordx['U'][4]=-0.5;
textcoordy['U'][4]=-1.0;
textcoordx['U'][5]=0.5;
textcoordy['U'][5]=-1.0;
textcoordx['U'][6]=0.5;
textcoordy['U'][6]=-1.0;
textcoordx['U'][7]=0.8;
textcoordy['U'][7]=-0.7;
textcoordx['U'][8]=0.8;
textcoordy['U'][8]=-0.7;
textcoordx['U'][9]=0.8;
textcoordy['U'][9]=1.0;
/* V */
textcoordx['V'][0]=-0.8;
textcoordy['V'][0]=1.0;
textcoordx['V'][1]=0.0;
textcoordy['V'][1]=-1.0;
textcoordx['V'][2]=0.0;
textcoordy['V'][2]=-1.0;
textcoordx['V'][3]=0.8;
textcoordy['V'][3]=1.0;
/* W */
textcoordx['W'][0]=-0.8;
textcoordy['W'][0]=1.0;
textcoordx['W'][1]=-0.8;
textcoordy['W'][1]=-1.0;
textcoordx['W'][2]=-0.8;
textcoordy['W'][2]=-1.0;
textcoordx['W'][3]=0.0;
textcoordy['W'][3]=0.0;
textcoordx['W'][4]=0.0;
textcoordy['W'][4]=0.0;
textcoordx['W'][5]=0.8;
textcoordy['W'][5]=-1.0;
textcoordx['W'][6]=0.8;
textcoordy['W'][6]=-1.0;
textcoordx['W'][7]=0.8;
textcoordy['W'][7]=1.0;
/* X */
textcoordx['X'][0]=-0.8;
textcoordy['X'][0]=1.0;
textcoordx['X'][1]=0.8;
textcoordy['X'][1]=-1.0;
textcoordx['X'][2]=0.8;
textcoordy['X'][2]=1.0;
textcoordx['X'][3]=-0.8;
textcoordy['X'][3]=-1.0;
/* Y */
textcoordx['Y'][0]=-0.8;
textcoordy['Y'][0]=1.0;
textcoordx['Y'][1]=0.0;
textcoordy['Y'][1]=0.1;
textcoordx['Y'][2]=0.0;
textcoordy['Y'][2]=0.1;
textcoordx['Y'][3]=0.8;
textcoordy['Y'][3]=1.0;
textcoordx['Y'][4]=0.0;
textcoordy['Y'][4]=0.1;
textcoordx['Y'][5]=0.0;
textcoordy['Y'][5]=-1.0;
/* Z phew!!!.... */
textcoordx['Z'][0]=-0.8;
textcoordy['Z'][0]=1.0;
textcoordx['Z'][1]=0.8;
textcoordy['Z'][1]=1.0;
textcoordx['Z'][2]=-0.8;
textcoordy['Z'][2]=-1.0;
textcoordx['Z'][3]=0.8;
textcoordy['Z'][3]=1.0;
textcoordx['Z'][4]=-0.8;
textcoordy['Z'][4]=-1.0;
textcoordx['Z'][5]=0.8;
textcoordy['Z'][5]=-1.0;
}
static int make_digit( char digit, float x, float y, float dx,
float dy, float vx[], float vy[])
{
int num = 0;
static int do_once = 1;
int n;
if (do_once){
init_text();
do_once = 0;
}
if (digit >= '0' && digit <= '9'){
n = digit - '0';
}
else{
n = (int)digit;
}
while(textcoordx[n][num] <= 1.0){
vx[num] = x + (dx*textcoordx[n][num]);
vy[num] = y + (dy*0.9*textcoordy[n][num]);
num++;
vx[num] = x + (dx*textcoordx[n][num]);
vy[num] = y + (dy*0.9*textcoordy[n][num]);
num++;
}
return num;
}
static void do_digits( double x, char str[],
int *decimal, int *sign)
{
register int k, k1, k2, k3;
int len;
len = strlen(str);
k = (int) x;
if (x < 0){
k = -k;
x = -x;
*sign = 1;
}
else{
*sign = 0;
}
k1 = ( (int) (x * 10.0) ) % 10;
k2 = ( (int) (x * 100.0) ) % 10;
k3 = ( (int) (x * 1000.0) ) % 10;
if (k>=100) {
str[len-4] = 0;
*decimal = 0;
}
else if (k>=10) {
*decimal = 1;
str[len-1] = 0;
if (k2 == 0){
str[len-2] = 0;
if (k1 == 0){
str[len-4] = 0;
*decimal = 0;
}
}
}
else{
*decimal = 1;
if (k3==0){
str[len-1] = 0;
if (k2==0){
str[len-2] = 0;
if (k1==0){
str[len-4] = 0;
*decimal = 0;
}
}
}
}
}
int create_num_textplot( Irregular_Context itx, int time, float xs[],
float ys[], float zs[], double *numdata, int ploton[],
float vx[],
float vy[], float vz[], int *numv)
{
int v, i, j, vcount;
char label_str[40];
int label_len;
float x, y;
int morev;
float sizex, sizey, sizespace;
int decimal, sign;
int count = 0;
sizex = 0.002 * itx->TextPlotFontX;
sizey = 0.002 * 0.8 * itx->TextPlotFontY;
sizespace = .0005 * itx->TextPlotFontSpace;
vcount = 0;
for (i = 0; i < itx->NumRecs[time]; i++){
if (ploton[i]==1){
if (!IS_MISSING(numdata[count])){
sprintf( label_str, "%.3f", numdata[count]);
do_digits( numdata[count], label_str, &decimal, &sign);
label_len = strlen(label_str);
x = xs[i] - ((sizex * label_len)+(sizespace * (label_len-1)))/2.0;
y = ys[i];
if (sign){
x += sizex/4.0;
}
if (decimal){
x += sizex/4.0;
}
for (j = 0; j < label_len; j++){
if (label_str[j] == '.' ||
label_str[j] == '-'){
x -= sizex/4.0;
morev = make_digit( label_str[j], x, y,
sizex/4.0, sizey,
vx+vcount, vy+vcount);
x -= sizex/4.0;
}
else{
morev = make_digit( label_str[j], x, y,
sizex/2.0, sizey,
vx+vcount, vy+vcount);
}
x += sizex + sizespace;
for (v = vcount; v < vcount+morev; v++){
vz[v] = zs[i];
}
vcount += morev;
if (vcount >= MAX_TEXT_PLOT_VERTS){
printf("Error in create_num_textplot\n");
return -1;
}
}
}
count++;
}
}
*numv = vcount;
return 0;
}
int create_color_num_textplot( Irregular_Context itx, int time, float xs[],
float ys[], float zs[], double *numdata,
int ploton[], float vx[],
float vy[], float vz[], int *numv,
uint_1 *color_indexes)
{
int v, i, j, vcount;
char label_str[40];
int label_len;
float x, y;
int morev;
float sizex, sizey, sizespace;
int decimal, sign;
float valscale, min, max;
int var, index;
int pcount = 0;
sizex = 0.002 * itx->TextPlotFontX;
sizey = 0.002 * 0.8 * itx->TextPlotFontY;
sizespace = .0005 * itx->TextPlotFontSpace;
var = itx->TextPlotVar;
vcount = 0;
min = itx->Variable[var]->MinVal;
max = itx->Variable[var]->MaxVal;
valscale = 254.0 / (max - min);
for (i = 0; i < itx->NumRecs[time]; i++){
if (ploton[i]){
if (!IS_MISSING(numdata[pcount])){
sprintf( label_str, "%.3f", numdata[pcount]);
do_digits( numdata[pcount], label_str, &decimal, &sign);
label_len = strlen(label_str);
x = xs[i] - ((sizex * label_len)+(sizespace * (label_len-1)))/2.0;
y = ys[i];
if (sign){
x += sizex/4.0;
}
if (decimal){
x += sizex/4.0;
}
for (j = 0; j < label_len; j++){
if (label_str[j] == '.' ||
label_str[j] == '-'){
x -= sizex/4.0;
morev = make_digit( label_str[j], x, y,
sizex/4.0, sizey,
vx+vcount, vy+vcount);
x -= sizex/4.0;
}
else{
morev = make_digit( label_str[j], x, y,
sizex/2.0, sizey,
vx+vcount, vy+vcount);
}
x += sizex + sizespace;
index = (numdata[pcount] - min) * valscale;
index = (index < 0) ? 0 : (index > 254) ? 254 : index;
for (v = vcount; v < vcount+morev; v+=2){
vz[v] = zs[i];
vz[v+1] = zs[i];
color_indexes[v/2] = index;
}
vcount += morev;
if (vcount >= MAX_TEXT_PLOT_VERTS){
printf("Error in create_num_textplot\n");
return -1;
}
}
}
pcount++;
}
}
*numv = vcount;
return 0;
}
int create_letter_textplot( Irregular_Context itx, int time, float xs[],
float ys[], float zs[], char *chardata, int ploton[], int var,
float vx[],
float vy[], float vz[], int *numv)
{
int v, i, j, vcount;
int label_len;
float x, y;
int morev;
float sizex, sizey, sizespace;
char tempword[1000];
int l, ccount;
sizex = 0.002 * itx->TextPlotFontX;
sizey = 0.002 * 0.8 * itx->TextPlotFontY;
sizespace = 0.0005 * itx->TextPlotFontSpace;
vcount = 0;
ccount = 0;
if (chardata[0] == 0){
*numv = 0;
return 0;
}
for (i = 0; i < itx->NumRecs[time]; i++){
if (ploton[i]){
for (l = 0; l < itx->Variable[var]->CharVarLength; l++){
tempword[l] = chardata[ccount+l];
}
tempword[l] = 0;
label_len = strlen(tempword);
x = xs[i] - ((sizex * label_len)+(sizespace * (label_len-1)))/2.0;
y = ys[i];
for (j = 0; j < label_len; j++){
morev = make_digit( tempword[j], x, y,
sizex/2.0, sizey,
vx+vcount, vy+vcount);
x += sizex+ sizespace;
for (v = vcount; v < vcount+morev; v++){
vz[v] = zs[i];
}
vcount += morev;
if (vcount >= MAX_TEXT_PLOT_VERTS){
printf("Error in create_letter_textplot\n");
return -1;
}
}
ccount += itx->Variable[var]->CharVarLength;
}
}
*numv = vcount;
return 0;
}
void space_plots( Irregular_Context itx, int time,
int ploton[], float xs[],
float ys[], float zs[], int *numtouse)
{
float xlist[MAXRECS];
int xrecord[MAXRECS];
int numx;
int temp[MAXRECS];
int numtemps;
float thres;
int i, j, k, ntu;
float dist;
for (i = 0; i < itx->NumRecs[time]; i++){
ploton[i] = 1;
}
ntu = itx->NumRecs[time];
if (itx->TextPlotSpacing == 0.0){
*numtouse = 0;
return;
}
/***************************/
/* set first record to one */
/***************************/
xlist[0] = xs[0];
xrecord[0] = 0;
numx = 1;
thres = 0.1 * itx->TextPlotSpacing;
for (i = 1; i < itx->NumRecs[time]; i++){
numtemps = 0;
/******************************************/
/* go through records that are ok to plot */
/******************************************/
for ( j = 0; j < numx; j++){
/* check if within threshold */
if (xs[i]-xlist[j] < thres){
temp[numtemps] = xrecord[j];
numtemps++;
}
}
for (j = 0; j < numtemps && ploton[i]; j++){
dist = DISTANCE(xs[i], ys[i], xs[temp[j]], ys[temp[j]]);
if (dist < thres){
ploton[i] = 0;
ntu--;
}
}
if (ploton[i]){
for (j = 0; j < numx; j++){
if (xs[i] < xlist[j]){
for (k = numx; k > j; k--){
xlist[k] = xlist[k-1];
xrecord[k] = xrecord[k-1];
}
break;
}
}
xlist[j] = xs[i];
xrecord[j] = i;
numx++;
}
}
*numtouse = ntu;
}
syntax highlighted by Code2HTML, v. 0.9.1