/*
* surf - visualizing algebraic curves and algebraic surfaces
* Copyright (C) 1996-1997 Friedrich-Alexander-Universitaet
* Erlangen-Nuernberg
* 1997-2000 Johannes Gutenberg-Universitaet Mainz
* Authors: Stephan Endrass, Hans Huelf, Ruediger Oertel,
* Kai Schneider, Ralf Schmitt, Johannes Beigel
*
* 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.
*
* 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., 675 Mass Ave, Cambridge, MA 02139, USA.
*
*/
// ===========================================================================
// File: init_parser.cc
// Author: Stephan Endrass
// Address: endrass@mi.uni-erlangen.de
// Date: 3.2.95
// ============================================================================
#include <stdio.h>
#include <string.h>
#include <assert.h>
#include "init_parser.h"
#include "def.h"
#include "monomarith.h"
#include "polyarith.h"
#include "hornerarith.h"
#include "polylexyacc.h"
#include "gui_config.h"
#include "symtab.h"
double Y_AXIS_LR_ROTATE;
double sym_cut_distance;
const char *POSITION_SEQUENCE_PIC_STRING[POSITION_SEQUENCE_NUM] =
{
"first",
"second",
"third"
};
const char *LIGHT_VOLUME_PIC_STRING[LIGHT_SOURCE_MAX_VALUE] =
{
"light1_vol",
"light2_vol",
"light3_vol",
"light4_vol",
"light5_vol",
"light6_vol",
"light7_vol",
"light8_vol",
"light9_vol"
};
const char *LIGHT_POSITION_PIC_STRING
[LIGHT_SOURCE_MAX_VALUE][LIGHT_POSITION_NUM] =
{
{ "light1_x", "light1_y", "light1_z" },
{ "light2_x", "light2_y", "light2_z" },
{ "light3_x", "light3_y", "light3_z" },
{ "light4_x", "light4_y", "light4_z" },
{ "light5_x", "light5_y", "light5_z" },
{ "light6_x", "light6_y", "light6_z" },
{ "light7_x", "light7_y", "light7_z" },
{ "light8_x", "light8_y", "light8_z" },
{ "light9_x", "light9_y", "light9_z" }
};
const char *LIGHT_SETTINGS_SECOND_PIC_STRING[MAIN_SURFACE_AMOUNT_NUM] [LIGHT_SETTINGS_SECOND_NUM] =
{
{ "smoothness", "transparence", "thickness" },
{ "smoothness2", "transparence2", "thickness2" },
{ "smoothness3", "transparence3", "thickness3" },
{ "smoothness4", "transparence4", "thickness4" },
{ "smoothness5", "transparence5", "thickness5" },
{ "smoothness6", "transparence6", "thickness6" },
{ "smoothness7", "transparence7", "thickness7" },
{ "smoothness8", "transparence8", "thickness8" },
{ "smoothness9", "transparence9", "thickness9" }
};
const char *LIGHT_SETTINGS_FIRST_PIC_STRING[MAIN_SURFACE_AMOUNT_NUM][LIGHT_SETTINGS_FIRST_NUM] =
{
{ "ambient", "diffuse", "reflected", "transmitted" },
{ "ambient2", "diffuse2", "reflected2", "transmitted2" },
{ "ambient3", "diffuse3", "reflected3", "transmitted3" },
{ "ambient4", "diffuse4", "reflected4", "transmitted4" },
{ "ambient5", "diffuse5", "reflected5", "transmitted5" },
{ "ambient6", "diffuse6", "reflected6", "transmitted6" },
{ "ambient7", "diffuse7", "reflected7", "transmitted7" },
{ "ambient8", "diffuse8", "reflected8", "transmitted8" },
{ "ambient9", "diffuse9", "reflected9", "transmitted9" }
};
const char *COLOR_GRADIENT_END_PIC_STRING[COLOR_GRADIENT_END_NUM] =
{
"gradient_red",
"gradient_green",
"gradient_blue"
};
const char *COLOR_BACKGROUND_PIC_STRING[COLOR_BACKGROUND_NUM] =
{
"background_red",
"background_green",
"background_blue"
};
const char *LIGHT_SLIDER_PIC_STRING[LIGHT_SOURCE_MAX_VALUE][LIGHT_SLIDER_NUM] =
{
{ "light1_red", "light1_green", "light1_blue" },
{ "light2_red", "light2_green", "light2_blue" },
{ "light3_red", "light3_green", "light3_blue" },
{ "light4_red", "light4_green", "light4_blue" },
{ "light5_red", "light5_green", "light5_blue" },
{ "light6_red", "light6_green", "light6_blue" },
{ "light7_red", "light7_green", "light7_blue" },
{ "light8_red", "light8_green", "light8_blue" },
{ "light9_red", "light9_green", "light9_blue" }
};
const char *CURVE_COLOR_SLIDER_PIC_STRING[CURVE_COLOR_SLIDER_NUM] =
{
"curve_red" ,
"curve_green",
"curve_blue"
};
static const char *MAIN_FORMULA_PXYZ_PIC_STRING[MAIN_SURFACE_AMOUNT_NUM] =
{
"surface",
"surface2",
"surface3",
"surface4",
"surface5",
"surface6",
"surface7",
"surface8",
"surface9"
};
static const char *MAIN_CLIP_PXYZ_PIC_STRING[MAIN_CLIP_AMOUNT_NUM] =
{
"clip_surface" ,
"clip_surface2",
"clip_surface3",
"clip_surface4",
"clip_surface5",
"clip_surface6",
"clip_surface7",
"clip_surface8",
"clip_surface9",
"clip_surface10",
"clip_surface11",
"clip_surface12"
};
const char *getColorSliderPicString (int surfaceNr, bool inside, int color)
{
static char str[64];
const char *first = inside ? "inside" : "surface";
const char *cstr = 0;
switch (color) {
case 0:
cstr = "red";
break;
case 1:
cstr = "green";
break;
case 2:
cstr = "blue";
break;
default:
assert(0);
}
if (surfaceNr>1) {
sprintf (str, "%s%d_%s", first, surfaceNr, cstr);
} else
sprintf (str, "%s_%s", first, cstr);
return str;
}
const char *getLightSliderPicString (int lightNr, int color )
{
static char str[64];
const char *cstr = 0;
switch (color) {
case 0:
cstr = "red";
break;
case 1:
cstr = "green";
break;
case 2:
cstr = "blue";
break;
default:
assert(0);
}
sprintf (str,"light%d_%s",lightNr,cstr);
return str;
}
static const char *COLOR_SLIDER_PIC_STRING[MAIN_SURFACE_AMOUNT_NUM][SURFS_COLOR_SLIDER_NUM] =
{
{ "surface_red", "surface_green", "surface_blue", "inside_red", "inside_green", "inside_blue"},
{ "surface2_red", "surface2_green", "surface2_blue", "inside2_red", "inside2_green", "inside2_blue"},
{ "surface3_red", "surface3_green", "surface3_blue", "inside3_red", "inside3_green", "inside3_blue"},
{ "surface4_red", "surface4_green", "surface4_blue", "inside4_red", "inside4_green", "inside4_blue"},
{ "surface5_red", "surface5_green", "surface5_blue", "inside5_red", "inside5_green", "inside5_blue"},
{ "surface6_red", "surface6_green", "surface6_blue", "inside6_red", "inside6_green", "inside6_blue"},
{ "surface7_red", "surface7_green", "surface7_blue", "inside7_red", "inside7_green", "inside7_blue"},
{ "surface8_red", "surface8_green", "surface8_blue", "inside8_red", "inside8_green", "inside8_blue"},
{ "surface9_red", "surface9_green", "surface9_blue", "inside9_red", "inside9_green", "inside9_blue"}
};
// ----------------------------------------------------------------------------
// Create command names for scanner-parser
// ----------------------------------------------------------------------------
void addCommand (const char *name, void (*func) (void))
{
symtab_add_surface_name(name, SYM_COMMAND, TRUE, (void*)func);
}
void addConstant (const char *name, const int *ptr)
{
symtab_add_surface_name(name, SYM_INTEGER, TRUE, (void*)ptr);
}
void addConstant (const char *name, const double *ptr)
{
symtab_add_surface_name(name, SYM_DOUBLE, TRUE, (void *)ptr);
}
void addNumber (const char *name, int *ptr)
{
symtab_add_surface_name(name, SYM_INTEGER, FALSE, ptr);
}
void addNumber (const char *name, double *ptr)
{
symtab_add_surface_name(name, SYM_DOUBLE, FALSE, ptr);
}
void init_surface_main_commands( void )
{
#if 0
addCommand("draw_surface", surface_3d);
addCommand("cut_surface", surface_cut);
addCommand("dither_surface", main_button_surface_print);
addCommand("dither_curve", main_button_curve_print);
addCommand("save_dithered_image", main_command_save_print);
addCommand("save_color_image", main_command_save_xwd);
addCommand("quit", main_button_quit);
addCommand("set_size", set_size);
addCommand("set_width", set_width);
addCommand("set_height", set_height);
addCommand("set_color", set_color);
addCommand("enable_zbuffer", activate_zbuffer);
addCommand("disable_zbuffer", disable_zbuffer);
addCommand("clear_zbuffer", reset_zbuffer);
addCommand("clear_screen", clear_screen);
addCommand("optimize_colormap", refresh_picture);
#endif
}
// ----------------------------------------------------------------------------
// Create variable names for scanner-parser
// ----------------------------------------------------------------------------
void init_surface_main_variables( void )
{
addNumber ("cut_distance", &sym_cut_distance);
int i;
int j;
// -------------------------
// Miscellaneous variables
// --------------------------
symtab_add_surface_name( "filename", SYM_STRING, FALSE,
(void*)&surface_filename_data);
// ------------------------------------
// Main window variables (9 surfaces)
// ------------------------------------
for( i = 0; i < MAIN_SURFACE_AMOUNT_NUM; i++ ) {
symtab_add_surface_name( MAIN_FORMULA_PXYZ_PIC_STRING[i],
SYM_POLYXYZ,
FALSE,
(void*)&main_formula_pxyz_data[i]);
}
// ----------------------------------------
// Main window variables (12 clip surfaces)
// ----------------------------------------
for( i = 0; i < MAIN_CLIP_AMOUNT_NUM; i++ ) {
symtab_add_surface_name( MAIN_CLIP_PXYZ_PIC_STRING[i],
SYM_POLYXYZ,
FALSE,
(void*)&main_clip_pxyz_data[i]);
}
addNumber("width", &main_width_data);
addNumber("height", &main_height_data);
// ------------------------------
// Light variables (9 surfaces)
// ------------------------------
for( i = 0; i < MAIN_SURFACE_AMOUNT_NUM; i++ ) {
addNumber (COLOR_SLIDER_PIC_STRING[i][0], &color_slider[i].red);
addNumber (COLOR_SLIDER_PIC_STRING[i][1], &color_slider[i].green);
addNumber (COLOR_SLIDER_PIC_STRING[i][2], &color_slider[i].blue);
addNumber (COLOR_SLIDER_PIC_STRING[i][3], &color_slider[i].inside_red);
addNumber (COLOR_SLIDER_PIC_STRING[i][4], &color_slider[i].inside_green);
addNumber (COLOR_SLIDER_PIC_STRING[i][5], &color_slider[i].inside_blue);
}
for( i = 0; i < LIGHT_SOURCE_MAX_VALUE; i++ ) {
for( j = 0; j < LIGHT_SLIDER_NUM; j++ ) {
addNumber(LIGHT_SLIDER_PIC_STRING[i][j],
&light_data[i].color[j]);
}
}
for( i = 0; i < COLOR_BACKGROUND_NUM; i++ ) {
addNumber(COLOR_BACKGROUND_PIC_STRING[i], &color_background_data[i]);
}
addNumber("do_background", &color_do_background_data);
addNumber("gradient", &color_gradient_data);
for( i = 0; i < COLOR_GRADIENT_END_NUM; i++ ) {
addNumber(COLOR_GRADIENT_END_PIC_STRING[i],
&color_gradient_end_data[i]);
}
addNumber ("illumination", &light_illumination_data);
addConstant ("ambient_light", &light_illumination_ambient_data);
addConstant ("diffuse_light", &light_illumination_diffuse_data);
addConstant ("reflected_light", &light_illumination_reflected_data);
addConstant ("transmitted_light", &light_illumination_transmitted_data);
for( i = 0; i < MAIN_SURFACE_AMOUNT_NUM; i++ ) {
addNumber (LIGHT_SETTINGS_FIRST_PIC_STRING[i][0],
&light_settings[i].ambient);
addNumber (LIGHT_SETTINGS_FIRST_PIC_STRING[i][1],
&light_settings[i].diffuse);
addNumber (LIGHT_SETTINGS_FIRST_PIC_STRING[i][2],
&light_settings[i].reflected);
addNumber (LIGHT_SETTINGS_FIRST_PIC_STRING[i][3],
&light_settings[i].transmitted);
addNumber (LIGHT_SETTINGS_SECOND_PIC_STRING[i][0],
&light_settings[i].smoothness);
addNumber (LIGHT_SETTINGS_SECOND_PIC_STRING[i][1],
&light_settings[i].transparence);
addNumber (LIGHT_SETTINGS_SECOND_PIC_STRING[i][2],
&light_settings[i].thickness);
}
for( i = 0; i < LIGHT_SOURCE_MAX_VALUE; i++ ) {
for( j = 0; j < LIGHT_POSITION_NUM; j++ ) {
addNumber( LIGHT_POSITION_PIC_STRING[i][j],
&light_data[i].position[j]);
}
addNumber(LIGHT_VOLUME_PIC_STRING[i],&light_data[i].volume);
}
// -----------------
// Print variables
// -----------------
addConstant ("yes", &global_yes_data);
addConstant ("no", &global_no_data);
addNumber("dithering_method", &print_dither_data);
addConstant("floyd_steinberg_filter",&print_dither_floyd_steinberg_data);
addConstant("jarvis_judis_ninke_filter", &print_dither_jarvis_judis_ninke_data);
addConstant("stucki_filter", &print_dither_stucki_data);
addConstant("clustered_dot_ordered_dither", &print_dither_ordered_dither_data);
addConstant("dispersed_dot_ordered_dither", &print_dither_dispersed_dither_data);
addConstant("dot_diffusion", &print_dither_dot_diffusion_data);
addConstant("smooth_dot_diffusion", &print_dither_smooth_dot_diffusion_data);
addNumber ("serpentine_raster", &print_serpentine_raster_data);
addNumber ("random_weights", &print_random_weights_data);
addNumber ("weight", &print_weight_data);
addNumber ("barons", &print_barons_data);
addConstant ("one_baron", &print_barons_one_baron_data);
addConstant ("two_baron", &print_barons_two_baron_data);
addNumber ("pattern_size", &print_pattern_size_data);
addConstant("pattern_4x4", &print_pattern_size_4_x_4_data);
addConstant("pattern_8x8", &print_pattern_size_8_x_8_data);
addConstant("pattern_16x16", &print_pattern_size_16_x_16_data);
addNumber("enhance_edges", &print_enhance_data);
addNumber("alpha", &print_alpha_data);
addNumber("background", &print_background_data);
addNumber("tone_scale_adjustment", &print_tone_data);
addNumber("gamma", &print_gamma_data);
addNumber("gamma_correction", &print_gamma_correction_data);
addNumber("resolution", &print_resolution_data);
addConstant("res_75dpi", &print_resolution_75dpi_data);
addConstant("res_100dpi", &print_resolution_100dpi_data);
addConstant("res_150dpi", &print_resolution_150dpi_data);
addConstant("res_300dpi", &print_resolution_300dpi_data);
addConstant("res_600dpi", &print_resolution_600dpi_data);
addConstant("res_1200dpi", &print_resolution_1200dpi_data);
addNumber("pixel_size", &print_p_radius_data);
addNumber("color_file_format", &color_output_data);
addConstant("xwd", &color_output_xwd_data);
addConstant("sun", &color_output_sun_data);
addConstant("ppm", &color_output_ppm_data);
addConstant("jpg", &color_output_jpeg_data);
addNumber("color_file_colormap", &colormap_output_data);
addConstant("Netscape", &colormap_output_netscape_data);
addConstant("Optimized", &colormap_output_optimized_data);
addConstant("TrueColor", &colormap_output_true_color_data);
addNumber("dither_file_format", &print_output_data);
addConstant("postscript", &print_output_ps_data);
addConstant("encapsulated", &print_output_eps_data);
addConstant("X11_bitmap",&print_output_bitmap_data);
addConstant("tiff", &print_output_tiff_data);
addConstant("pgm", &print_output_pgm_data);
addConstant("pbm", &print_output_pbm_data);
// ----------------------------------
// Position variables and constants
// ----------------------------------
addNumber ("origin_x", &position_numeric.orig_x);
addNumber ("origin_y", &position_numeric.orig_y);
addNumber ("origin_z", &position_numeric.orig_z);
addNumber ("spec_z", &position_numeric.spectator_z);
addNumber ("rot_x", &position_numeric.rot_x);
addNumber ("rot_y", &position_numeric.rot_y);
addNumber ("rot_z", &position_numeric.rot_z);
addNumber ("scale_x", &position_numeric.scale_x);
addNumber ("scale_y", &position_numeric.scale_y);
addNumber ("scale_z", &position_numeric.scale_z);
addNumber("perspective", &position_perspective_data);
addConstant("parallel", &position_perspective_parallel_data);
addConstant("central", &position_perspective_central_data);
for( i = 0; i < POSITION_SEQUENCE_NUM; i++ ) {
addNumber(POSITION_SEQUENCE_PIC_STRING[i],&(position_sequence_data[i]));
}
addConstant("translate", &position_sequence_translate_data);
addConstant("rotate", &position_sequence_rotate_data);
addConstant("scale", &position_sequence_scale_data);
// ---------------------------------
// Display variables and constants
// ---------------------------------
addNumber("normalize_brightness", &display_normalize_data);
addNumber("optimize_colors", &display_optimize_data);
addNumber("dither_colors", &display_color_dither_data);
addNumber("normalize_factor", &display_max_i_data);
addNumber("dither_steps", &display_dither_value_data);
addNumber("antialiasing", &display_ref_level_data);
addNumber("antialiasing_threshold",&display_ref_treshold_data);
addNumber("antialiasing_radius", &display_ref_radius_data);
addNumber("depth_cueing", &display_depth_cue_data);
addNumber("depth", &display_depth_value_data);
addNumber ("stereo_eye", &display_numeric.stereo_eye);
addNumber ("stereo_z", &display_numeric.stereo_z);
addNumber ("stereo_red", &display_numeric.stereo_red);
addNumber ("stereo_blue", &display_numeric.stereo_blue);
addNumber ("stereo_green", &display_numeric.stereo_green);
// ---------------------------------
// Numeric variables and constants
// ---------------------------------
addNumber("root_finder", &numeric_root_finder_data);
addConstant("d_chain_bisection", &numeric_root_d_bisection_data);
addConstant("d_chain_regula_falsi", &numeric_root_d_regula_data);
addConstant("d_chain_pegasus", &numeric_root_d_pegasus_data);
addConstant("d_chain_anderson_bjoerck", &numeric_root_d_anderson_data);
addConstant("d_chain_newton", &numeric_root_d_newton_data);
addConstant("bezier_all_roots", &numeric_root_bezier_data);
addNumber("epsilon", &numeric_epsilon_data);
addNumber("iterations", &numeric_iterations_data);
// ------------------------------
// Clip variables and constants
// ------------------------------
addNumber("clip", &clip_data);
addConstant("sphere", &clip_sphere_data);
addConstant("tetrahedron", &clip_tetrahedron_data);
addConstant("cube", &clip_cube_data);
addConstant("octahedron", &clip_octahedron_data);
addConstant("dodecahedron",&clip_dodecahedron_data);
addConstant("icosahedron", &clip_icosahedron_data);
addConstant("cylinder", &clip_cylinder_data);
addConstant("user", &clip_user_data);
addConstant("none", &clip_none_data);
addNumber ("clip_front", &clip_numeric.clip_front);
addNumber ("clip_back", &clip_numeric.clip_back);
addNumber ("radius", &clip_numeric.radius);
addNumber ("center_x", &clip_numeric.center_x);
addNumber ("center_y", &clip_numeric.center_y);
addNumber ("center_z", &clip_numeric.center_z);
// -----------------------------
// Cut variables and constants
// -----------------------------
addNumber("cut_input", &cut_input_data);
addConstant("keyboard", &cut_input_keyboard_data);
addConstant("pointer", &cut_input_mouse_data);
addNumber("cut_modus", &cut_modus_data);
addConstant("plane_xy", &cut_modus_one_point_data);
addConstant("plane_three_points", &cut_modus_three_point_data);
addNumber ("upper_left_x", &cut_numeric.upper_left_x);
addNumber ("upper_left_y", &cut_numeric.upper_left_y);
addNumber ("lower_right_x", &cut_numeric.lower_right_x);
addNumber ("lower_right_y", &cut_numeric.lower_right_y);
addNumber ("z_value", &cut_numeric.z_value);
addNumber ("point_1_x", &cut_numeric.point_1_x);
addNumber ("point_1_y", &cut_numeric.point_1_y);
addNumber ("point_1_z", &cut_numeric.point_1_z);
addNumber ("point_2_x", &cut_numeric.point_2_x);
addNumber ("point_2_y", &cut_numeric.point_2_y);
addNumber ("point_2_z", &cut_numeric.point_2_z);
addNumber ("point_3_x", &cut_numeric.point_3_x);
addNumber ("point_3_y", &cut_numeric.point_3_y);
addNumber ("point_3_z", &cut_numeric.point_3_z);
// -------------------------------
// Curve variables and constants
// -------------------------------
addNumber("curve_width", &curve_width_data);
addNumber("curve_gamma", &curve_gamma_data);
for( i = 0; i < CURVE_COLOR_SLIDER_NUM; i++ ) {
addNumber(CURVE_COLOR_SLIDER_PIC_STRING[i],&curve_color_slider_data[i]);
}
addNumber ("surface_n", &curve_surface_nr_data);
addNumber ("surf_nr", &curve_surface_nr_data);
memset (sym_cutsurfaces, 0, sizeof(sym_cutsurfaces));
for (i=0; i<int(sizeof(sym_cutsurfaces)/sizeof(sym_cutsurfaces[0])); i++) {
char str[64];
sprintf (str, "cutsurface%d", i+1);
symtab_add_surface_name (str, SYM_POLYXYZ, FALSE, &sym_cutsurfaces[i]);
}
}
syntax highlighted by Code2HTML, v. 0.9.1