#include #include #include #include #include #include #include #include #include #include #include "globals.h" #include "states.h" #include "util.h" #include "link.h" #include "render.h" #include "event.h" #include "lights.h" #include "init.h" #include "menu.h" #include "geom.h" #include "output.h" #include "render_menu.h" #include "geom_menu.h" /* scherk variables */ int scherk_branches, scherk_storeys, scherk_mesh_tiles, scherk_tex_tiles, scherk_detail; int scherk_red, scherk_green, scherk_blue, scherk_select, scherk_save_mode; float scherk_height, scherk_flange, scherk_azimuth, scherk_twist, scherk_warp, scherk_thickness, scherk_rim_bulge, scherk_scale; char scherk_select_str[SCHERK_SELECT_SIZE+1][4] = {"f1", "f2", "r1", "r2", "r3", "r4", "all"}; char scherk_save_str[SCHERK_SAVE_SIZE+1][13] = {"Specs only", "PS boards", "UG slices", "3D UG file", ".STL B_rep", "PPHIGS_UNC", "abcdefghijkl", "PS slices", "SIF 4 SFF", "L-SIF_2D"}; /* scherk widgets */ Widget scherk_dialog_save, scherk_dialog_load_texture, ScherkTextureW, saveW; Widget scherk_scroll_detail, scherk_scroll_storeys, scherk_scroll_height, scherk_scroll_flange; Widget scherk_scroll_azimuth, scherk_scroll_twist, scherk_scroll_warp; Widget scherk_scroll_thickness, scherk_scroll_scale; Widget scherk_scroll_tex_tiles, scherk_scroll_rim_bulge, scherk_scroll_branches; Widget scherk_scroll_mesh_tiles, scherk_scroll_save_mode; Widget scherk_label_detail, scherk_label_storeys, scherk_label_height, scherk_label_flange; Widget scherk_label_azimuth, scherk_label_twist, scherk_label_warp; Widget scherk_label_thickness, scherk_label_scale; Widget scherk_label_tex_tiles, scherk_label_rim_bulge, scherk_label_branches; Widget scherk_label_mesh_tiles, scherk_label_save_mode; Widget scherk_red_scroll, scherk_green_scroll, scherk_blue_scroll; Widget scherk_red_label, scherk_green_label, scherk_blue_label; Widget scherk_select_scroll, scherk_select_label; /* call back function prototypes */ void SaveCB(Widget w, char *client_data, int call_data); void SaveScherkCB(Widget w, char *client_data, int call_data); void LoadScherkTextureCB(Widget w, char *client_data, int call_data); void ScherkTextureCB(Widget w, char *client_data, int call_data); void ScherkDetailCB(Widget w, char *client_data, int call_data); void ScherkStoreysCB(Widget w, char *client_data, int call_data); void ScherkHeightCB(Widget w, char *client_data, int call_data); void ScherkFlangeCB(Widget w, char *client_data, int call_data); void ScherkScaleCB(Widget w, char *client_data, int call_data); void ScherkAzimuthCB(Widget w, char *client_data, int call_data); void ScherkTwistCB(Widget w, char *client_data, int call_data); void ScherkWarpCB(Widget w, char *client_data, int call_data); void ScherkThicknessCB(Widget w, char *client_data, int call_data); void ScherkNtexCB(Widget w, char *client_data, int call_data); void ScherkRimBulgeCB(Widget w, char *client_data, int call_data); void ScherkBranchesCB(Widget w, char *client_data, int call_data); void ScherkMeshTilesCB(Widget w, char *client_data, int call_data); void ScherkSaveModeCB(Widget w, char *client_data, int call_data); void ScherkRedCB(Widget w, char *client_data, int call_data); void ScherkGreenCB(Widget w, char *client_data, int call_data); void ScherkBlueCB(Widget w, char *client_data, int call_data); void ScherkSelectCB(Widget w, char *client_data, int call_data); static void scherk_material(int material, unsigned char r, unsigned char g, unsigned char b) { make_material(material, (float)r/255.0, (float)g/255.0, (float)b/255.0, 0.2, 0.8, 0.8, 10.0, 0.2, 1.0); } void init_geom_data() { int i; /* scherk surface globals */ scherk_branches = 2; scherk_storeys = 3; scherk_height = 1.0; scherk_scale = 1.0; scherk_flange = 1.0; scherk_thickness = 0.04; scherk_rim_bulge = 0.0; scherk_twist = 0.0; scherk_warp = 0.0; scherk_azimuth = 0.0; scherk_mesh_tiles = 13; scherk_tex_tiles = 1; scherk_detail = 6; scherk_red = scherk_green = scherk_blue = 255; scherk_select = SCHERK_SELECT_SIZE; scherk_save_mode = 0; for (i=SCHERK_FIRST_TEXTURE; ivalue, *GetCharSet(), &s); /* save scherk data to the specified file */ fp = fopen(s, "w"); output_newscherk_data(fp); fclose(fp); } /* make the dialog box invisible */ UNMANAGE(w); gstate.timeout = SHORT_TIMEOUT_DELAY; } void LoadScherkTextureCB(Widget w, char *client_data, int call_data) { int i; char *s; XmSelectionBoxCallbackStruct *callback; callback = (XmSelectionBoxCallbackStruct *)call_data; if (client_data[0] == '1') { XmStringGetLtoR(callback->value, *GetCharSet(), &s); if (scherk_select == SCHERK_SELECT_SIZE) /* select all */ { for (i=0; ivalue; sprintf(s, "%9s = %d ", "detail", scherk_detail); XtSetArg(args[0], XmNlabelString, XmStringCreate(s, *GetCharSet())); XtSetValues(scherk_label_detail, args, 1); gstate.timeout = TIMEOUT_DELAY;; } void ScherkStoreysCB(Widget w, char *client_data, int call_data) { char s[256]; Arg args[1]; scherk_storeys = ((XmScrollBarCallbackStruct *)call_data)->value; sprintf(s, "%9s = %d ", "storeys", scherk_storeys); XtSetArg(args[0], XmNlabelString, XmStringCreate(s, *GetCharSet())); XtSetValues(scherk_label_storeys, args, 1); gstate.timeout = TIMEOUT_DELAY; } void ScherkHeightCB(Widget w, char *client_data, int call_data) { char s[256]; Arg args[1]; scherk_height = 0.05*(float)((XmScrollBarCallbackStruct *)call_data)->value; sprintf(s, "%9s = %.2f ", "height", scherk_height); XtSetArg(args[0], XmNlabelString, XmStringCreate(s, *GetCharSet())); XtSetValues(scherk_label_height, args, 1); gstate.timeout = TIMEOUT_DELAY;; } void ScherkScaleCB(Widget w, char *client_data, int call_data) { char s[256]; Arg args[1]; scherk_scale = 0.05*(float)((XmScrollBarCallbackStruct *)call_data)->value; sprintf(s, "%9s = %.2f ", "scale", scherk_scale); XtSetArg(args[0], XmNlabelString, XmStringCreate(s, *GetCharSet())); XtSetValues(scherk_label_scale, args, 1); gstate.timeout = TIMEOUT_DELAY;; } void ScherkFlangeCB(Widget w, char *client_data, int call_data) { char s[256]; Arg args[1]; scherk_flange = 0.05*(float)((XmScrollBarCallbackStruct *)call_data)->value; sprintf(s, "%9s = %.2f ", "flange", scherk_flange); XtSetArg(args[0], XmNlabelString, XmStringCreate(s, *GetCharSet())); XtSetValues(scherk_label_flange, args, 1); gstate.timeout = TIMEOUT_DELAY;; } void ScherkAzimuthCB(Widget w, char *client_data, int call_data) { char s[256]; Arg args[1]; scherk_azimuth = 1.25*(float)(((XmScrollBarCallbackStruct *)call_data)->value - 144); sprintf(s, "%9s = %.2f ", "azimuth", scherk_azimuth); XtSetArg(args[0], XmNlabelString, XmStringCreate(s, *GetCharSet())); XtSetValues(scherk_label_azimuth, args, 1); gstate.timeout = TIMEOUT_DELAY;; } void ScherkTwistCB(Widget w, char *client_data, int call_data) { char s[256]; Arg args[1]; scherk_twist = 7.5*(float)(((XmScrollBarCallbackStruct *)call_data)->value - 120); sprintf(s, "%9s = %.2f ", "twist", scherk_twist); XtSetArg(args[0], XmNlabelString, XmStringCreate(s, *GetCharSet())); XtSetValues(scherk_label_twist, args, 1); gstate.timeout = TIMEOUT_DELAY;; } void ScherkWarpCB(Widget w, char *client_data, int call_data) { char s[256]; Arg args[1]; scherk_warp = ((XmScrollBarCallbackStruct *)call_data)->value; sprintf(s, "%9s = %.2f ", "warp", scherk_warp); XtSetArg(args[0], XmNlabelString, XmStringCreate(s, *GetCharSet())); XtSetValues(scherk_label_warp, args, 1); gstate.timeout = TIMEOUT_DELAY;; } void ScherkThicknessCB(Widget w, char *client_data, int call_data) { char s[256]; Arg args[1]; scherk_thickness = 0.01*(float)((XmScrollBarCallbackStruct *)call_data)->value; sprintf(s, "%9s = %.2f ", "thickness", scherk_thickness); XtSetArg(args[0], XmNlabelString, XmStringCreate(s, *GetCharSet())); XtSetValues(scherk_label_thickness, args, 1); gstate.timeout = TIMEOUT_DELAY;; } void ScherkNtexCB(Widget w, char *client_data, int call_data) { char s[256]; Arg args[1]; scherk_tex_tiles = ((XmScrollBarCallbackStruct *)call_data)->value; sprintf(s, "%9s = %d ", "textr tiles", scherk_tex_tiles); XtSetArg(args[0], XmNlabelString, XmStringCreate(s, *GetCharSet())); XtSetValues(scherk_label_tex_tiles, args, 1); gstate.timeout = TIMEOUT_DELAY;; } void ScherkRimBulgeCB(Widget w, char *client_data, int call_data) { char s[256]; Arg args[1]; scherk_rim_bulge = 0.01*(float)((XmScrollBarCallbackStruct *)call_data)->value; sprintf(s, "%9s = %.2f ", "rim bulge", scherk_rim_bulge); XtSetArg(args[0], XmNlabelString, XmStringCreate(s, *GetCharSet())); XtSetValues(scherk_label_rim_bulge, args, 1); gstate.timeout = TIMEOUT_DELAY;; } void ScherkBranchesCB(Widget w, char *client_data, int call_data) { char s[256]; Arg args[1]; scherk_branches = ((XmScrollBarCallbackStruct *)call_data)->value; sprintf(s, "%9s = %d ", "branches", scherk_branches); XtSetArg(args[0], XmNlabelString, XmStringCreate(s, *GetCharSet())); XtSetValues(scherk_label_branches, args, 1); gstate.timeout = TIMEOUT_DELAY;; } void ScherkMeshTilesCB(Widget w, char *client_data, int call_data) { char s[256]; Arg args[1]; scherk_mesh_tiles = ((XmScrollBarCallbackStruct *)call_data)->value; sprintf(s, "%9s = %d ", "board stack", scherk_mesh_tiles); XtSetArg(args[0], XmNlabelString, XmStringCreate(s, *GetCharSet())); XtSetValues(scherk_label_mesh_tiles, args, 1); gstate.timeout = TIMEOUT_DELAY; } void ScherkRedCB(Widget w, char *client_data, int call_data) { int i; char s[256]; Arg args[1]; scherk_red = ((XmScrollBarCallbackStruct *)call_data)->value; sprintf(s, "%9s = %d ", "red", scherk_red); XtSetArg(args[0], XmNlabelString, XmStringCreate(s, *GetCharSet())); XtSetValues(scherk_red_label, args, 1); if (scherk_select == SCHERK_SELECT_SIZE) { for (i=0; ivalue; sprintf(s, "%9s = %d ", "green", scherk_green); XtSetArg(args[0], XmNlabelString, XmStringCreate(s, *GetCharSet())); XtSetValues(scherk_green_label, args, 1); if (scherk_select == SCHERK_SELECT_SIZE) { for (i=0; ivalue; sprintf(s, "%9s = %d ", "blue", scherk_blue); XtSetArg(args[0], XmNlabelString, XmStringCreate(s, *GetCharSet())); XtSetValues(scherk_blue_label, args, 1); if (scherk_select == SCHERK_SELECT_SIZE) { for (i=0; ivalue; /* sprintf(s, "%9s = %s ", "select", scherk_select_str[scherk_select]); bad original */ sprintf(s, "select = %s", scherk_select_str[scherk_select]); XtSetArg(args[0], XmNlabelString, XmStringCreate(s, *GetCharSet())); XtSetValues(scherk_select_label, args, 1); gstate.timeout = TIMEOUT_DELAY; } void ScherkSaveModeCB(Widget w, char *client_data, int call_data) { char s[256]; Arg args[1]; scherk_save_mode = ((XmScrollBarCallbackStruct *)call_data)->value; /*sprintf(s, "%20s: %s ", "save", scherk_save_str[scherk_save_mode]); original - which defines format ? */ sprintf(s, "save: %s", scherk_save_str[scherk_save_mode]); /* new try: works! */ XtSetArg(args[0], XmNlabelString, XmStringCreate(s, *GetCharSet())); XtSetValues(scherk_label_save_mode, args, 1); gstate.timeout = TIMEOUT_DELAY; }