00001 /*************************************************************************** 00002 *cr 00003 *cr (C) Copyright 1995-2019 The Board of Trustees of the 00004 *cr University of Illinois 00005 *cr All Rights Reserved 00006 *cr 00007 ***************************************************************************/ 00008 00009 /*************************************************************************** 00010 * RCS INFORMATION: 00011 * 00012 * $RCSfile: DisplayFltkMenu.C,v $ 00013 * $Author: johns $ $Locker: $ $State: Exp $ 00014 * $Revision: 1.26 $ $Date: 2019年01月17日 21:20:59 $ 00015 * 00016 *************************************************************************** 00017 * DESCRIPTION: 00018 * generated by Fast Light User Interface Designer (fluid) version 1.0011 00019 ***************************************************************************/ 00020 00021 #include "DisplayFltkMenu.h" 00022 #include "Command.h" 00023 #include "VMDApp.h" 00024 #include "DisplayDevice.h" 00025 #include "FL/forms.H" 00026 00027 DisplayFltkMenu::DisplayFltkMenu(VMDApp *anApp) 00028 : VMDFltkMenu("display", "Display Settings", anApp) { 00029 make_window(); 00030 update_settings(); 00031 command_wanted(Command::DISP_EYESEP); 00032 command_wanted(Command::DISP_FOCALLEN); 00033 command_wanted(Command::DISP_CLIP); 00034 command_wanted(Command::DISP_SCRHEIGHT); 00035 command_wanted(Command::DISP_SCRDIST); 00036 command_wanted(Command::DISP_CUEMODE); 00037 command_wanted(Command::DISP_CUESTART); 00038 command_wanted(Command::DISP_CUEEND); 00039 command_wanted(Command::DISP_CUEDENSITY); 00040 command_wanted(Command::DISP_AO); 00041 command_wanted(Command::DISP_AO_AMBIENT); 00042 command_wanted(Command::DISP_AO_DIRECT); 00043 command_wanted(Command::DISP_DOF); 00044 command_wanted(Command::DISP_DOF_FNUMBER); 00045 command_wanted(Command::DISP_DOF_FOCALDIST); 00046 } 00047 00048 00049 static void nearclip_cb(Fl_Widget *w, void *v) { 00050 float value = (float)((Fl_Valuator *)w)->value(); 00051 VMDApp *app = (VMDApp *)v; 00052 app->display_set_nearclip(value, 0); 00053 } 00054 static void farclip_cb(Fl_Widget *w, void *v) { 00055 float value = (float)((Fl_Valuator *)w)->value(); 00056 VMDApp *app = (VMDApp *)v; 00057 app->display_set_farclip(value, 0); 00058 } 00059 static void eyesep_cb(Fl_Widget *w, void *v) { 00060 float value = (float)((Fl_Valuator *)w)->value(); 00061 VMDApp *app = (VMDApp *)v; 00062 app->display_set_eyesep(value); 00063 } 00064 static void focal_cb(Fl_Widget *w, void *v) { 00065 float value = (float)((Fl_Valuator *)w)->value(); 00066 VMDApp *app = (VMDApp *)v; 00067 app->display_set_focallen(value); 00068 } 00069 static void screenh_cb(Fl_Widget *w, void *v) { 00070 float value = (float)((Fl_Valuator *)w)->value(); 00071 VMDApp *app = (VMDApp *)v; 00072 app->display_set_screen_height(value); 00073 } 00074 static void screend_cb(Fl_Widget *w, void *v) { 00075 float value = (float)((Fl_Valuator *)w)->value(); 00076 VMDApp *app = (VMDApp *)v; 00077 app->display_set_screen_distance(value); 00078 } 00079 00080 00081 static void cuemode_cb(Fl_Widget *w, void *v) { 00082 const char *mode = ((Fl_Choice *)w)->text(); 00083 VMDApp *app = (VMDApp *)v; 00084 app->depthcue_set_mode(mode); 00085 } 00086 static void cuestart_cb(Fl_Widget *w, void *v) { 00087 float value = (float)((Fl_Valuator *)w)->value(); 00088 VMDApp *app = (VMDApp *)v; 00089 app->depthcue_set_start(value); 00090 } 00091 static void cueend_cb(Fl_Widget *w, void *v) { 00092 float value = (float)((Fl_Valuator *)w)->value(); 00093 VMDApp *app = (VMDApp *)v; 00094 app->depthcue_set_end(value); 00095 } 00096 static void cuedensity_cb(Fl_Widget *w, void *v) { 00097 float value = (float)((Fl_Valuator *)w)->value(); 00098 VMDApp *app = (VMDApp *)v; 00099 app->depthcue_set_density(value); 00100 } 00101 00102 00103 static void shadowmode_cb(Fl_Widget *w, void *v) { 00104 const char *mode = ((Fl_Choice *)w)->text(); 00105 VMDApp *app = (VMDApp *)v; 00106 if (!strcmp(mode, "On")) { 00107 app->display_set_shadows(1); 00108 } else { 00109 app->display_set_shadows(0); 00110 } 00111 } 00112 00113 00114 static void aomode_cb(Fl_Widget *w, void *v) { 00115 const char *mode = ((Fl_Choice *)w)->text(); 00116 VMDApp *app = (VMDApp *)v; 00117 if (!strcmp(mode, "On")) { 00118 app->display_set_ao(1); 00119 } else { 00120 app->display_set_ao(0); 00121 } 00122 } 00123 static void aoambient_cb(Fl_Widget *w, void *v) { 00124 float value = (float)((Fl_Valuator *)w)->value(); 00125 VMDApp *app = (VMDApp *)v; 00126 app->display_set_ao_ambient(value); 00127 } 00128 static void aodirect_cb(Fl_Widget *w, void *v) { 00129 float value = (float)((Fl_Valuator *)w)->value(); 00130 VMDApp *app = (VMDApp *)v; 00131 app->display_set_ao_direct(value); 00132 } 00133 00134 00135 static void dofmode_cb(Fl_Widget *w, void *v) { 00136 const char *mode = ((Fl_Choice *)w)->text(); 00137 VMDApp *app = (VMDApp *)v; 00138 if (!strcmp(mode, "On")) { 00139 app->display_set_dof(1); 00140 } else { 00141 app->display_set_dof(0); 00142 } 00143 } 00144 static void doffnumber_cb(Fl_Widget *w, void *v) { 00145 float value = (float)((Fl_Valuator *)w)->value(); 00146 VMDApp *app = (VMDApp *)v; 00147 app->display_set_dof_fnumber(value); 00148 } 00149 static void doffocaldist_cb(Fl_Widget *w, void *v) { 00150 float value = (float)((Fl_Valuator *)w)->value(); 00151 VMDApp *app = (VMDApp *)v; 00152 app->display_set_dof_focal_dist(value); 00153 } 00154 00155 00156 void DisplayFltkMenu::make_window() { 00157 size(235, 530); 00158 { 00159 { Fl_Counter* o = nearclip = new Fl_Counter(105, 25, 110, 25, "Near Clip"); 00160 o->align(FL_ALIGN_LEFT); 00161 o->range(0.01, 1000.0); 00162 o->step(0.05); 00163 o->lstep(0.5); 00164 o->precision(2); 00165 o->callback(nearclip_cb, app); 00166 VMDFLTKTOOLTIP(o, "Set near clipping plane (OpenGL display only)") 00167 } 00168 { Fl_Counter* o = farclip = new Fl_Counter(105, 50, 110, 25, "Far Clip"); 00169 o->align(FL_ALIGN_LEFT); 00170 o->range(0.01, 1000.0); 00171 o->step(0.05); 00172 o->lstep(0.5); 00173 o->precision(2); 00174 o->callback(farclip_cb, app); 00175 VMDFLTKTOOLTIP(o, "Set far clipping plane (OpenGL display only)") 00176 } 00177 { Fl_Counter* o = eyesep = new Fl_Counter(105, 75, 110, 25, "Eye Sep"); 00178 o->align(FL_ALIGN_LEFT); 00179 o->range(0.0, 100.0); 00180 o->step(0.01); 00181 o->lstep(0.1); 00182 o->precision(2); 00183 o->callback(eyesep_cb, app); 00184 VMDFLTKTOOLTIP(o, "Set stereo eye separation") 00185 } 00186 { Fl_Counter* o = focal = new Fl_Counter(105, 100, 110, 25, "Focal Length"); 00187 o->align(FL_ALIGN_LEFT); 00188 o->range(0.01, 1000.0); 00189 o->step(0.05); 00190 o->lstep(0.5); 00191 o->precision(2); 00192 o->callback(focal_cb, app); 00193 VMDFLTKTOOLTIP(o, "Set stereo focal point") 00194 } 00195 { Fl_Counter* o = screenh = new Fl_Counter(105, 135, 110, 25, "Screen Hgt"); 00196 o->align(FL_ALIGN_LEFT); 00197 o->range(0.0, 100000.0); 00198 o->step(0.1); 00199 o->lstep(1.0); 00200 o->precision(1); 00201 o->callback(screenh_cb, app); 00202 VMDFLTKTOOLTIP(o, "Set viewing frustum height") 00203 } 00204 { Fl_Counter* o = screend = new Fl_Counter(105, 160, 110, 25, "Screen Dist"); 00205 o->align(FL_ALIGN_LEFT); 00206 o->range(-100000.0, 100000.0); 00207 o->step(0.1); 00208 o->lstep(1.0); 00209 o->precision(1); 00210 o->callback(screend_cb, app); 00211 VMDFLTKTOOLTIP(o, "Set viewing frustum distance") 00212 } 00213 00214 { Fl_Choice* o = cuemode = new Fl_Choice(105, 195, 110, 25, "Cue Mode"); 00215 o->color(VMDMENU_CHOOSER_BG); 00216 o->selection_color(VMDMENU_CHOOSER_SEL); 00217 o->box(FL_THIN_UP_BOX); 00218 o->align(FL_ALIGN_LEFT); 00219 o->callback(cuemode_cb, app); 00220 VMDFLTKTOOLTIP(o, "Set depth cueing mode") 00221 for (int m=0; m<app->display->num_cue_modes(); m++) 00222 cuemode->add(app->display->cue_mode_name(m)); 00223 } 00224 { Fl_Counter* o = cuestart = new Fl_Counter(105, 220, 110, 25, "Cue Start"); 00225 o->align(FL_ALIGN_LEFT); 00226 o->range(0.001, 1000.0); 00227 o->step(0.05); 00228 o->lstep(0.25); 00229 o->precision(2); 00230 o->callback(cuestart_cb, app); 00231 VMDFLTKTOOLTIP(o, "Set linear depth cueing starting distance") 00232 } 00233 { Fl_Counter* o = cueend = new Fl_Counter(105, 245, 110, 25, "Cue End"); 00234 o->align(FL_ALIGN_LEFT); 00235 o->range(0.001, 1000.0); 00236 o->step(0.05); 00237 o->lstep(0.25); 00238 o->precision(2); 00239 o->callback(cueend_cb, app); 00240 VMDFLTKTOOLTIP(o, "Set linear depth cueing end distance") 00241 } 00242 { Fl_Counter* o = cuedensity = new Fl_Counter(105, 270, 110, 25, "Cue Density"); 00243 o->align(FL_ALIGN_LEFT); 00244 o->range(0.001, 1000.0); 00245 o->step(0.05); 00246 o->lstep(0.1); 00247 o->precision(2); 00248 o->callback(cuedensity_cb, app); 00249 VMDFLTKTOOLTIP(o, "Set exponential depth cueing density") 00250 } 00251 00252 new Fl_Box(35, 305, 170, 25, "Ray Tracing Options"); 00253 { Fl_Choice* o = shadowmode = new Fl_Choice(105, 330, 110, 25, "Shadows"); 00254 o->color(VMDMENU_CHOOSER_BG); 00255 o->selection_color(VMDMENU_CHOOSER_SEL); 00256 o->box(FL_THIN_UP_BOX); 00257 o->align(FL_ALIGN_LEFT); 00258 o->callback(shadowmode_cb, app); 00259 VMDFLTKTOOLTIP(o, "Enable shadows in external renderers") 00260 shadowmode->add("Off"); 00261 shadowmode->add("On"); 00262 } 00263 { Fl_Choice* o = aomode = new Fl_Choice(105, 355, 110, 25, "Amb. Occl."); 00264 o->color(VMDMENU_CHOOSER_BG); 00265 o->selection_color(VMDMENU_CHOOSER_SEL); 00266 o->box(FL_THIN_UP_BOX); 00267 o->align(FL_ALIGN_LEFT); 00268 o->callback(aomode_cb, app); 00269 VMDFLTKTOOLTIP(o, "Enable ambient occlusion lighting in external renderers") 00270 aomode->add("Off"); 00271 aomode->add("On"); 00272 } 00273 { Fl_Counter* o = aoambient = new Fl_Counter(105, 380, 110, 25, "AO Ambient"); 00274 o->align(FL_ALIGN_LEFT); 00275 o->range(0.0, 1.0); 00276 o->step(0.01); 00277 o->lstep(0.10); 00278 o->precision(2); 00279 o->callback(aoambient_cb, app); 00280 VMDFLTKTOOLTIP(o, "Ambient occlusion lighting coefficient") 00281 } 00282 { Fl_Counter* o = aodirect = new Fl_Counter(105, 405, 110, 25, "AO Direct"); 00283 o->align(FL_ALIGN_LEFT); 00284 o->range(0.0, 1.0); 00285 o->step(0.01); 00286 o->lstep(0.10); 00287 o->precision(2); 00288 o->callback(aodirect_cb, app); 00289 VMDFLTKTOOLTIP(o, "Direct lighting rescaling coefficient") 00290 } 00291 00292 00293 { Fl_Choice* o = dofmode = new Fl_Choice(105, 430, 110, 25, "DoF"); 00294 o->color(VMDMENU_CHOOSER_BG); 00295 o->selection_color(VMDMENU_CHOOSER_SEL); 00296 o->box(FL_THIN_UP_BOX); 00297 o->align(FL_ALIGN_LEFT); 00298 o->callback(dofmode_cb, app); 00299 VMDFLTKTOOLTIP(o, "Enable depth of field focal blur in external renderers") 00300 dofmode->add("Off"); 00301 dofmode->add("On"); 00302 } 00303 { Fl_Counter* o = doffnumber = new Fl_Counter(105, 455, 110, 25, "DoF f/stop"); 00304 o->align(FL_ALIGN_LEFT); 00305 o->range(1.0, 500.0); 00306 o->step(0.05); 00307 o->lstep(1.0); 00308 o->precision(2); 00309 o->callback(doffnumber_cb, app); 00310 VMDFLTKTOOLTIP(o, "Depth of field focal blur aperture") 00311 } 00312 { Fl_Counter* o = doffocaldist = new Fl_Counter(105, 480, 110, 25, "DoF Foc. Dist"); 00313 o->align(FL_ALIGN_LEFT); 00314 o->range(0.01, 100.0); 00315 o->step(0.01); 00316 o->lstep(0.2); 00317 o->precision(2); 00318 o->callback(doffocaldist_cb, app); 00319 VMDFLTKTOOLTIP(o, "Depth of field focal plane distance") 00320 } 00321 00322 00323 Fl_Box *box1 = new Fl_Box(10, 10, 215, 120); 00324 box1->box(FL_ENGRAVED_FRAME); 00325 Fl_Box *box2 = new Fl_Box(10, 130, 215, 65); 00326 box2->box(FL_ENGRAVED_FRAME); 00327 Fl_Box *box3 = new Fl_Box(10, 190, 215, 110); 00328 box3->box(FL_ENGRAVED_FRAME); 00329 Fl_Box *box4 = new Fl_Box(10, 300, 215, 210); 00330 box4->box(FL_ENGRAVED_FRAME); 00331 end(); 00332 end(); 00333 } 00334 } 00335 00336 int DisplayFltkMenu::act_on_command(int, Command *) { 00337 update_settings(); 00338 return 0; 00339 } 00340 00341 void DisplayFltkMenu::update_settings() { 00342 nearclip->value(app->display->near_clip()); 00343 farclip->value(app->display->far_clip()); 00344 eyesep->value(app->display->eyesep()); 00345 focal->value(app->display->eye_dist()); 00346 screenh->value(app->display->screen_height()); 00347 screend->value(app->display->distance_to_screen()); 00348 const char *curmode = app->display->get_cue_mode(); 00349 for (int m=0; m<cuemode->size(); m++) { 00350 if (!strcmp(curmode, cuemode->text(m))) { 00351 cuemode->value(m); 00352 if (m==0) { // Linear 00353 cuestart->activate(); 00354 cueend->activate(); 00355 cuedensity->deactivate(); 00356 } else { // Exp or Exp2 00357 cuestart->deactivate(); 00358 cueend->deactivate(); 00359 cuedensity->activate(); 00360 } 00361 break; 00362 } 00363 } 00364 cuestart->value(app->display->get_cue_start()); 00365 cueend->value(app->display->get_cue_end()); 00366 cuedensity->value(app->display->get_cue_density()); 00367 00368 shadowmode->value(app->display->shadows_enabled()); 00369 00370 aomode->value(app->display->ao_enabled()); 00371 aoambient->value(app->display->get_ao_ambient()); 00372 aodirect->value(app->display->get_ao_direct()); 00373 if (app->display->ao_enabled()) { 00374 aoambient->activate(); 00375 aodirect->activate(); 00376 } else { 00377 aoambient->deactivate(); 00378 aodirect->deactivate(); 00379 } 00380 00381 dofmode->value(app->display->dof_enabled()); 00382 doffnumber->value(app->display->get_dof_fnumber()); 00383 doffocaldist->value(app->display->get_dof_focal_dist()); 00384 if (app->display->dof_enabled()) { 00385 doffnumber->activate(); 00386 doffocaldist->activate(); 00387 } else { 00388 doffnumber->deactivate(); 00389 doffocaldist->deactivate(); 00390 } 00391 00392 } 00393 00394