Forked from
gmsh / gmsh
11535 commits behind the upstream repository.
-
Emilie Marchandise authoredEmilie Marchandise authored
optionWindow.cpp 147.15 KiB
// Gmsh - Copyright (C) 1997-2013 C. Geuzaine, J.-F. Remacle
//
// See the LICENSE.txt file for license information. Please report all
// bugs and problems to the public mailing list <gmsh@geuz.org>.
#include "GmshConfig.h"
#if !defined(HAVE_NO_STDINT_H)
#include <stdint.h>
#elif defined(HAVE_NO_INTPTR_T)
typedef unsigned long intptr_t;
#endif
#include <string.h>
#include <FL/Fl_Tabs.H>
#include <FL/Fl_Scroll.H>
#include <FL/Fl_Color_Chooser.H>
#include "GmshDefines.h"
#include "GmshMessage.h"
#include "FlGui.h"
#include "optionWindow.h"
#include "graphicWindow.h"
#include "openglWindow.h"
#include "paletteWindow.h"
#include "extraDialogs.h"
#include "drawContext.h"
#include "Options.h"
#include "GModel.h"
#include "MElement.h"
#include "PView.h"
#include "PViewData.h"
#include "PViewOptions.h"
#include "OS.h"
#include "Context.h"
#if defined(HAVE_ONELAB)
#include "onelab.h"
#endif
extern StringXColor GeneralOptions_Color[] ;
extern StringXColor GeometryOptions_Color[] ;
extern StringXColor MeshOptions_Color[] ;
extern StringXColor SolverOptions_Color[] ;
extern StringXColor PostProcessingOptions_Color[] ;
extern StringXColor ViewOptions_Color[] ;
extern StringXColor PrintOptions_Color[] ;
class engineeringValueInput : public Fl_Value_Input
{
public:
engineeringValueInput(int x, int y, int w, int h, const char *l=0) :
Fl_Value_Input(x, y, w, h, l) {}
virtual int format(char *buffer){ return sprintf(buffer, "%g", value()); }
};
static Fl_Menu_Item menu_point_display[] = {
{"Color dot", 0, 0, 0},
{"3D sphere", 0, 0, 0},
{0}
};
static Fl_Menu_Item menu_point_display_post[] = {
{"Color dot", 0, 0, 0},
{"3D sphere", 0, 0, 0},
{"Scaled dot", 0, 0, 0},
{"Scaled sphere", 0, 0, 0},
{0}
};
static Fl_Menu_Item menu_line_display[] = {
{"Color segment", 0, 0, 0},
{"3D cylinder", 0, 0, 0},
{0}
};
static Fl_Menu_Item menu_line_display_post[] = {
{"Color segment", 0, 0, 0},
{"3D cylinder", 0, 0, 0},
{"Tapered cylinder", 0, 0, 0},
{0}
};
static Fl_Menu_Item menu_surface_display[] = {
{"Cross", 0, 0, 0},
{"Wireframe", 0, 0, 0},
{"Solid", 0, 0, 0},
{0}
};
static Fl_Menu_Item menu_axes_mode[] = {
{"None", 0, 0, 0},
{"Simple axes", 0, 0, 0},
{"Box", 0, 0, 0},
{"Full grid", 0, 0, 0},
{"Open grid", 0, 0, 0},
{"Ruler", 0, 0, 0},
{0}
};
static Fl_Menu_Item menu_position[] = {
{"Manual", 0, 0, 0},
{"Automatic", 0, 0, 0},
{"Top left", 0, 0, 0},
{"Top right", 0, 0, 0},
{"Bottom left", 0, 0, 0},
{"Bottom right", 0, 0, 0},
{"Top", 0, 0, 0},
{"Bottom", 0, 0, 0},
{"Left", 0, 0, 0},
{"Right", 0, 0, 0},
{"Full", 0, 0, 0},
{0}
};
Fl_Menu_Item menu_font_names[] = {
{"Times-Roman", 0, 0, (void*)FL_TIMES},
{"Times-Bold", 0, 0, (void*)FL_TIMES_BOLD},
{"Times-Italic", 0, 0, (void*)FL_TIMES_ITALIC},
{"Times-BoldItalic", 0, 0, (void*)FL_TIMES_BOLD_ITALIC},
{"Helvetica", 0, 0, (void*)FL_HELVETICA},
{"Helvetica-Bold", 0, 0, (void*)FL_HELVETICA_BOLD},
{"Helvetica-Oblique", 0, 0, (void*)FL_HELVETICA_ITALIC},
{"Helvetica-BoldOblique", 0, 0, (void*)FL_HELVETICA_BOLD_ITALIC},
{"Courier", 0, 0, (void*)FL_COURIER},
{"Courier-Bold", 0, 0, (void*)FL_COURIER_BOLD},
{"Courier-Oblique", 0, 0, (void*)FL_COURIER_ITALIC},
{"Courier-BoldOblique", 0, 0, (void*)FL_COURIER_BOLD_ITALIC},
{"Symbol", 0, 0, (void*)FL_SYMBOL},
{"ZapfDingbats", 0, 0, (void*)FL_ZAPF_DINGBATS},
{0}
};
static void color_cb(Fl_Widget *w, void *data)
{
unsigned int (*fct) (int, int, unsigned int);
fct = (unsigned int (*)(int, int, unsigned int))data;
uchar r = CTX::instance()->unpackRed(fct(0, GMSH_GET, 0));
uchar g = CTX::instance()->unpackGreen(fct(0, GMSH_GET, 0));
uchar b = CTX::instance()->unpackBlue(fct(0, GMSH_GET, 0));
if(fl_color_chooser("Color Chooser", r, g, b))
fct(0, GMSH_SET | GMSH_GUI, CTX::instance()->packColor(r, g, b, 255));
drawContext::global()->draw();
}
static void view_color_cb(Fl_Widget *w, void *data)
{
unsigned int (*fct) (int, int, unsigned int);
fct = (unsigned int (*)(int, int, unsigned int))data;
uchar r = CTX::instance()->unpackRed
(fct(FlGui::instance()->options->view.index, GMSH_GET, 0));
uchar g = CTX::instance()->unpackGreen
(fct(FlGui::instance()->options->view.index, GMSH_GET, 0));
uchar b = CTX::instance()->unpackBlue
(fct(FlGui::instance()->options->view.index, GMSH_GET, 0));
if(fl_color_chooser("Color Chooser", r, g, b))
fct(FlGui::instance()->options->view.index,
GMSH_SET | GMSH_GUI, CTX::instance()->packColor(r, g, b, 255));
drawContext::global()->draw();
}
void options_cb(Fl_Widget *w, void *data)
{
FlGui::instance()->options->win->show();
}
static void options_browser_cb(Fl_Widget *w, void *data)
{
FlGui::instance()->options->showGroup(FlGui::instance()->options->browser->value());
}
static void options_restore_defaults_cb(Fl_Widget *w, void *data)
{
// not sure if we have to remove the file...
UnlinkFile(CTX::instance()->homeDir + CTX::instance()->sessionFileName);
UnlinkFile(CTX::instance()->homeDir + CTX::instance()->optionsFileName);
ReInitOptions(0);
InitOptionsGUI(0);
FlGui::instance()->rebuildTree();
drawContext::global()->draw();
}
void general_options_cb(Fl_Widget *w, void *data)
{
FlGui::instance()->options->showGroup(1);
}
static void general_options_color_scheme_cb(Fl_Widget *w, void *data)
{
opt_general_color_scheme
(0, GMSH_SET, FlGui::instance()->options->general.choice[3]->value());
drawContext::global()->draw();
}
static void general_options_rotation_center_select_cb(Fl_Widget *w, void *data)
{
Msg::StatusGl("Select entity or element\n[Press 'q' to abort]");
CTX::instance()->pickElements = 1;
CTX::instance()->mesh.changed = ENT_ALL;
drawContext::global()->draw();
char ib = FlGui::instance()->selectEntity(ENT_ALL);
if(ib == 'l') {
SPoint3 pc(0., 0., 0.);
if(FlGui::instance()->selectedVertices.size())
pc.setPosition(FlGui::instance()->selectedVertices[0]->x(),
FlGui::instance()->selectedVertices[0]->y(),
FlGui::instance()->selectedVertices[0]->z());
else if(FlGui::instance()->selectedElements.size())
pc = FlGui::instance()->selectedElements[0]->barycenter();
else if(FlGui::instance()->selectedEdges.size())
pc = FlGui::instance()->selectedEdges[0]->bounds().center();
else if(FlGui::instance()->selectedFaces.size())
pc = FlGui::instance()->selectedFaces[0]->bounds().center();
else if(FlGui::instance()->selectedRegions.size())
pc = FlGui::instance()->selectedRegions[0]->bounds().center();
opt_general_rotation_center0(0, GMSH_SET|GMSH_GUI, pc.x());
opt_general_rotation_center1(0, GMSH_SET|GMSH_GUI, pc.y());
opt_general_rotation_center2(0, GMSH_SET|GMSH_GUI, pc.z());
}
CTX::instance()->pickElements = 0;
CTX::instance()->mesh.changed = ENT_ALL;
GModel::current()->setSelection(0);
drawContext::global()->draw();
Msg::StatusGl("");
}
static void general_options_ok_cb(Fl_Widget *w, void *data)
{
optionWindow *o = FlGui::instance()->options;
o->activate((const char*)data);
static double lc = 0.;
if(lc != CTX::instance()->lc){
lc = CTX::instance()->lc;
for(int i = 2; i < 5; i++){
o->general.value[i]->minimum(-5 * CTX::instance()->lc);
o->general.value[i]->maximum(5 * CTX::instance()->lc);
}
}
if(data){
const char *name = (const char*)data;
if(!strcmp(name, "rotation_center_coord")){
CTX::instance()->drawRotationCenter = 1;
}
else if(!strcmp(name, "rotation_center")){
// pre-fill with cg
for(int i = 0; i < 3; i++)
o->general.value[8 + i]->value(CTX::instance()->cg[i]);
}
else if(!strcmp(name, "light_value")){
double x, y, z;
x = o->general.value[2]->value();
y = o->general.value[3]->value();
z = o->general.value[4]->value();
o->general.sphere->setValue(x, y, z);
}
else if(!strcmp(name, "light_sphere")){
double x, y, z;
o->general.sphere->getValue(x, y, z);
o->general.value[2]->value(x);
o->general.value[3]->value(y);
o->general.value[4]->value(z);
}
}
opt_general_axes_auto_position(0, GMSH_SET, o->general.butt[0]->value());
opt_general_small_axes(0, GMSH_SET, o->general.butt[1]->value());
opt_general_fast_redraw(0, GMSH_SET, o->general.butt[2]->value());
opt_general_mouse_hover_meshes(0, GMSH_SET, o->general.butt[11]->value());
if(opt_general_double_buffer(0, GMSH_GET, 0) != o->general.butt[3]->value())
opt_general_double_buffer(0, GMSH_SET, o->general.butt[3]->value());
if(opt_general_antialiasing(0, GMSH_GET, 0) != o->general.butt[12]->value())
opt_general_antialiasing(0, GMSH_SET, o->general.butt[12]->value());
opt_general_trackball(0, GMSH_SET, o->general.butt[5]->value());
opt_general_terminal(0, GMSH_SET, o->general.butt[7]->value());
double sessionrc = opt_general_session_save(0, GMSH_GET, 0);
opt_general_session_save(0, GMSH_SET, o->general.butt[8]->value());
if(sessionrc && !opt_general_session_save(0, GMSH_GET, 0))
PrintOptions(0, GMSH_SESSIONRC, 1, 1,
(CTX::instance()->homeDir + CTX::instance()->sessionFileName).c_str());
opt_general_options_save(0, GMSH_SET, o->general.butt[9]->value());
opt_general_expert_mode(0, GMSH_SET, o->general.butt[10]->value());
opt_general_tooltips(0, GMSH_SET, o->general.butt[13]->value());
opt_general_confirm_overwrite(0, GMSH_SET, o->general.butt[14]->value());
opt_general_rotation_center_cg(0, GMSH_SET, o->general.butt[15]->value());
opt_general_draw_bounding_box(0, GMSH_SET, o->general.butt[6]->value());
opt_general_polygon_offset_always(0, GMSH_SET, o->general.butt[4]->value());
opt_general_axes_mikado(0, GMSH_SET, o->general.butt[16]->value());
opt_general_shine_exponent(0, GMSH_SET, o->general.value[0]->value());
opt_general_shine(0, GMSH_SET, o->general.value[1]->value());
opt_general_light00(0, GMSH_SET, o->general.value[2]->value());
opt_general_light01(0, GMSH_SET, o->general.value[3]->value());
opt_general_light02(0, GMSH_SET, o->general.value[4]->value());
opt_general_light03(0, GMSH_SET, o->general.value[13]->value());
opt_general_verbosity(0, GMSH_SET, o->general.value[5]->value());
opt_general_point_size(0, GMSH_SET, o->general.value[6]->value());
opt_general_line_width(0, GMSH_SET, o->general.value[7]->value());
opt_general_rotation_center0(0, GMSH_SET, o->general.value[8]->value());
opt_general_rotation_center1(0, GMSH_SET, o->general.value[9]->value());
opt_general_rotation_center2(0, GMSH_SET, o->general.value[10]->value());
opt_general_quadric_subdivisions(0, GMSH_SET, o->general.value[11]->value());
opt_general_graphics_fontsize(0, GMSH_SET, o->general.value[12]->value());
opt_general_graphics_fontsize_title(0, GMSH_SET, o->general.value[28]->value());
opt_general_clip_factor(0, GMSH_SET, o->general.value[14]->value());
opt_general_polygon_offset_factor(0, GMSH_SET, o->general.value[15]->value());
opt_general_polygon_offset_units(0, GMSH_SET, o->general.value[16]->value());
opt_general_axes_tics0(0, GMSH_SET, o->general.value[17]->value());
opt_general_axes_tics1(0, GMSH_SET, o->general.value[18]->value());
opt_general_axes_tics2(0, GMSH_SET, o->general.value[19]->value());
opt_general_axes_xmin(0, GMSH_SET, o->general.value[20]->value());
opt_general_axes_ymin(0, GMSH_SET, o->general.value[21]->value());
opt_general_axes_zmin(0, GMSH_SET, o->general.value[22]->value());
opt_general_axes_xmax(0, GMSH_SET, o->general.value[23]->value());
opt_general_axes_ymax(0, GMSH_SET, o->general.value[24]->value());
opt_general_axes_zmax(0, GMSH_SET, o->general.value[25]->value());
opt_general_small_axes_position0(0, GMSH_SET, o->general.value[26]->value());
opt_general_small_axes_position1(0, GMSH_SET, o->general.value[27]->value());
opt_general_default_filename(0, GMSH_SET, o->general.input[0]->value());
opt_general_editor(0, GMSH_SET, o->general.input[1]->value());
opt_general_web_browser(0, GMSH_SET, o->general.input[2]->value());
opt_general_axes_format0(0, GMSH_SET, o->general.input[3]->value());
opt_general_axes_format1(0, GMSH_SET, o->general.input[4]->value());
opt_general_axes_format2(0, GMSH_SET, o->general.input[5]->value());
opt_general_axes_label0(0, GMSH_SET, o->general.input[6]->value());
opt_general_axes_label1(0, GMSH_SET, o->general.input[7]->value());
opt_general_axes_label2(0, GMSH_SET, o->general.input[8]->value());
opt_general_vector_type(0, GMSH_SET, o->general.choice[0]->value() + 1);
opt_general_graphics_font(0, GMSH_SET, o->general.choice[1]->text());
opt_general_graphics_font_title(0, GMSH_SET, o->general.choice[6]->text());
opt_general_orthographic(0, GMSH_SET, !o->general.choice[2]->value());
opt_general_axes(0, GMSH_SET, o->general.choice[4]->value());
opt_general_background_gradient(0, GMSH_SET, o->general.choice[5]->value());
opt_general_eye_sep_ratio(0, GMSH_SET, o->general.value[29]->value());
opt_general_focallength_ratio(0, GMSH_SET, o->general.value[30]->value());
opt_general_camera_aperture(0, GMSH_SET, o->general.value[31]->value());
opt_general_camera_mode(0, GMSH_SET, o->general.butt[18]->value());
if(opt_general_stereo_mode(0, GMSH_GET, 0) != o->general.butt[17]->value()) {
opt_general_stereo_mode(0, GMSH_SET, o->general.butt[17]->value());
if (CTX::instance()->stereo){
for(unsigned int i = 0; i < FlGui::instance()->graph.size(); i++)
FlGui::instance()->graph[i]->setStereo();
}
}
if(CTX::instance()->fastRedraw)
CTX::instance()->post.draw = CTX::instance()->mesh.draw = 0;
drawContext::global()->draw();
CTX::instance()->post.draw = CTX::instance()->mesh.draw = 1;
CTX::instance()->drawRotationCenter = 0;
}
static void general_arrow_param_cb(Fl_Widget *w, void *data)
{
double a = opt_general_arrow_head_radius(0, GMSH_GET, 0);
double b = opt_general_arrow_stem_length(0, GMSH_GET, 0);
double c = opt_general_arrow_stem_radius(0, GMSH_GET, 0);
while(arrowEditor("Arrow Editor", a, b, c)){
opt_general_arrow_head_radius(0, GMSH_SET, a);
opt_general_arrow_stem_length(0, GMSH_SET, b);
opt_general_arrow_stem_radius(0, GMSH_SET, c);
drawContext::global()->draw();
}
}
void geometry_options_cb(Fl_Widget *w, void *data)
{
FlGui::instance()->options->showGroup(2);
}
static void geometry_options_ok_cb(Fl_Widget *w, void *data)
{
optionWindow *o = FlGui::instance()->options;
o->activate((const char*)data);
opt_geometry_points(0, GMSH_SET, o->geo.butt[0]->value());
opt_geometry_lines(0, GMSH_SET, o->geo.butt[1]->value());
opt_geometry_surfaces(0, GMSH_SET, o->geo.butt[2]->value());
opt_geometry_volumes(0, GMSH_SET, o->geo.butt[3]->value());
opt_geometry_points_num(0, GMSH_SET, o->geo.butt[4]->value());
opt_geometry_lines_num(0, GMSH_SET, o->geo.butt[5]->value());
opt_geometry_surfaces_num(0, GMSH_SET, o->geo.butt[6]->value());
opt_geometry_volumes_num(0, GMSH_SET, o->geo.butt[7]->value());
opt_geometry_auto_coherence(0, GMSH_SET, o->geo.butt[8]->value());
opt_geometry_light(0, GMSH_SET, o->geo.butt[9]->value());
opt_geometry_highlight_orphans(0, GMSH_SET, o->geo.butt[10]->value());
opt_geometry_occ_fix_degenerated(0, GMSH_SET, o->geo.butt[16]->value());
opt_geometry_occ_fix_small_edges(0, GMSH_SET, o->geo.butt[11]->value());
opt_geometry_occ_fix_small_faces(0, GMSH_SET, o->geo.butt[12]->value());
opt_geometry_occ_sew_faces(0, GMSH_SET, o->geo.butt[13]->value());
opt_geometry_occ_connect_faces(0, GMSH_SET, o->geo.butt[15]->value());
opt_geometry_light_two_side(0, GMSH_SET, o->geo.butt[14]->value());
int old_hide_compound = (int)opt_geometry_hide_compounds(0, GMSH_GET, 0);
opt_geometry_hide_compounds(0, GMSH_SET, o->geo.butt[17]->value());
opt_geometry_normals(0, GMSH_SET, o->geo.value[0]->value());
opt_geometry_tangents(0, GMSH_SET, o->geo.value[1]->value());
opt_geometry_tolerance(0, GMSH_SET, o->geo.value[2]->value());
opt_geometry_point_size(0, GMSH_SET, o->geo.value[3]->value());
opt_geometry_line_width(0, GMSH_SET, o->geo.value[4]->value());
opt_geometry_point_sel_size(0, GMSH_SET, o->geo.value[5]->value());
opt_geometry_line_sel_width(0, GMSH_SET, o->geo.value[6]->value());
opt_geometry_transform00(0, GMSH_SET, o->geo.value[7]->value());
opt_geometry_transform01(0, GMSH_SET, o->geo.value[8]->value());
opt_geometry_transform02(0, GMSH_SET, o->geo.value[9]->value());
opt_geometry_transform10(0, GMSH_SET, o->geo.value[11]->value());
opt_geometry_transform11(0, GMSH_SET, o->geo.value[12]->value());
opt_geometry_transform12(0, GMSH_SET, o->geo.value[13]->value());
opt_geometry_transform20(0, GMSH_SET, o->geo.value[15]->value());
opt_geometry_transform21(0, GMSH_SET, o->geo.value[16]->value());
opt_geometry_transform22(0, GMSH_SET, o->geo.value[17]->value());
opt_geometry_offset0(0, GMSH_SET, o->geo.value[10]->value());
opt_geometry_offset1(0, GMSH_SET, o->geo.value[14]->value());
opt_geometry_offset2(0, GMSH_SET, o->geo.value[18]->value());
opt_geometry_num_sub_edges(0, GMSH_SET, o->geo.value[19]->value());
opt_geometry_point_type(0, GMSH_SET, o->geo.choice[0]->value());
opt_geometry_line_type(0, GMSH_SET, o->geo.choice[1]->value());
opt_geometry_surface_type(0, GMSH_SET, o->geo.choice[2]->value());
opt_geometry_transform(0, GMSH_SET, o->geo.choice[3]->value());
opt_geometry_label_type(0, GMSH_SET, o->geo.choice[4]->value() + 1);
if(old_hide_compound != (int)opt_geometry_hide_compounds(0, GMSH_GET, 0)){
GModel::current()->setCompoundVisibility();
FlGui::instance()->resetVisibility();
CTX::instance()->mesh.changed = ENT_ALL;
}
if(CTX::instance()->fastRedraw)
CTX::instance()->post.draw = CTX::instance()->mesh.draw = 0;
drawContext::global()->draw();
CTX::instance()->post.draw = CTX::instance()->mesh.draw = 1;
}
void mesh_options_cb(Fl_Widget *w, void *data)
{
FlGui::instance()->options->showGroup(3);
}
static void mesh_options_ok_cb(Fl_Widget *w, void *data)
{
optionWindow *o = FlGui::instance()->options;
o->activate((const char*)data);
opt_mesh_reverse_all_normals(0, GMSH_SET, o->mesh.butt[0]->value());
opt_mesh_lc_from_curvature(0, GMSH_SET, o->mesh.butt[1]->value());
opt_mesh_lc_from_points(0, GMSH_SET, o->mesh.butt[5]->value());
opt_mesh_lc_extend_from_boundary(0, GMSH_SET, o->mesh.butt[16]->value());
opt_mesh_optimize(0, GMSH_SET, o->mesh.butt[2]->value());
opt_mesh_optimize_netgen(0, GMSH_SET, o->mesh.butt[24]->value());
opt_mesh_remove_4_triangles(0,GMSH_SET, o->mesh.butt[25]->value());
opt_mesh_order(0, GMSH_SET, o->mesh.value[3]->value());
opt_mesh_smooth_internal_edges(0, GMSH_SET, o->mesh.butt[3]->value());
opt_mesh_second_order_incomplete(0, GMSH_SET, o->mesh.butt[4]->value());
opt_mesh_points(0, GMSH_SET, o->mesh.butt[6]->value());
opt_mesh_lines(0, GMSH_SET, o->mesh.butt[7]->value());
opt_mesh_triangles(0, GMSH_SET, o->mesh.menu->menu()[0].value() ? 1 : 0);
opt_mesh_quadrangles(0, GMSH_SET, o->mesh.menu->menu()[1].value() ? 1 : 0);
opt_mesh_tetrahedra(0, GMSH_SET, o->mesh.menu->menu()[2].value() ? 1 : 0);
opt_mesh_hexahedra(0, GMSH_SET, o->mesh.menu->menu()[3].value() ? 1 : 0);
opt_mesh_prisms(0, GMSH_SET, o->mesh.menu->menu()[4].value() ? 1 : 0);
opt_mesh_pyramids(0, GMSH_SET, o->mesh.menu->menu()[5].value() ? 1 : 0);
opt_mesh_surfaces_edges(0, GMSH_SET, o->mesh.butt[8]->value());
opt_mesh_surfaces_faces(0, GMSH_SET, o->mesh.butt[9]->value());
opt_mesh_volumes_edges(0, GMSH_SET, o->mesh.butt[10]->value());
opt_mesh_volumes_faces(0, GMSH_SET, o->mesh.butt[11]->value());
opt_mesh_points_num(0, GMSH_SET, o->mesh.butt[12]->value());
opt_mesh_lines_num(0, GMSH_SET, o->mesh.butt[13]->value());
opt_mesh_surfaces_num(0, GMSH_SET, o->mesh.butt[14]->value());
opt_mesh_volumes_num(0, GMSH_SET, o->mesh.butt[15]->value());
opt_mesh_light(0, GMSH_SET, o->mesh.butt[17]->value());
opt_mesh_light_two_side(0, GMSH_SET, o->mesh.butt[18]->value());
opt_mesh_smooth_normals(0, GMSH_SET, o->mesh.butt[19]->value());
opt_mesh_light_lines(0, GMSH_SET, o->mesh.butt[20]->value());
opt_mesh_nb_smoothing(0, GMSH_SET, o->mesh.value[0]->value());
opt_mesh_lloyd(0, GMSH_SET, o->mesh.value[27]->value());
opt_mesh_lc_factor(0, GMSH_SET, o->mesh.value[2]->value());
opt_mesh_lc_min(0, GMSH_SET, o->mesh.value[25]->value());
opt_mesh_lc_max(0, GMSH_SET, o->mesh.value[26]->value());
opt_mesh_quality_inf(0, GMSH_SET, o->mesh.value[4]->value());
opt_mesh_quality_sup(0, GMSH_SET, o->mesh.value[5]->value());
opt_mesh_radius_inf(0, GMSH_SET, o->mesh.value[6]->value());
opt_mesh_radius_sup(0, GMSH_SET, o->mesh.value[7]->value());
opt_mesh_normals(0, GMSH_SET, o->mesh.value[8]->value());
opt_mesh_explode(0, GMSH_SET, o->mesh.value[9]->value());
opt_mesh_tangents(0, GMSH_SET, o->mesh.value[13]->value());
opt_mesh_num_sub_edges(0, GMSH_SET, o->mesh.value[14]->value());
opt_mesh_point_size(0, GMSH_SET, o->mesh.value[10]->value());
opt_mesh_line_width(0, GMSH_SET, o->mesh.value[11]->value());
opt_mesh_label_sampling(0, GMSH_SET, o->mesh.value[12]->value());
opt_mesh_angle_smooth_normals(0, GMSH_SET, o->mesh.value[18]->value());
opt_mesh_recombine3d_all(0, GMSH_SET, o->mesh.butt[22]->value());
opt_mesh_point_type(0, GMSH_SET, o->mesh.choice[0]->value()); opt_mesh_algo2d(0, GMSH_SET,
(o->mesh.choice[2]->value() == 1) ? ALGO_2D_MESHADAPT :
(o->mesh.choice[2]->value() == 2) ? ALGO_2D_DELAUNAY :
(o->mesh.choice[2]->value() == 3) ? ALGO_2D_FRONTAL :
(o->mesh.choice[2]->value() == 4) ? ALGO_2D_FRONTAL_QUAD :
(o->mesh.choice[2]->value() == 5) ? ALGO_2D_PACK_PRLGRMS :
ALGO_2D_AUTO);
opt_mesh_algo3d(0, GMSH_SET,
(o->mesh.choice[3]->value() == 0) ? ALGO_3D_DELAUNAY :
(o->mesh.choice[3]->value() == 2) ? ALGO_3D_FRONTAL_DEL :
(o->mesh.choice[3]->value() == 3) ? ALGO_3D_FRONTAL_HEX :
(o->mesh.choice[3]->value() == 4) ? ALGO_3D_MMG3D :
(o->mesh.choice[3]->value() == 5) ? ALGO_3D_RTREE :
ALGO_3D_FRONTAL);
opt_mesh_algo_recombine(0, GMSH_SET, o->mesh.choice[1]->value());
opt_mesh_recombine_all(0, GMSH_SET, o->mesh.butt[21]->value());
opt_mesh_algo_subdivide(0, GMSH_SET, o->mesh.choice[5]->value());
opt_mesh_remesh_algo(0, GMSH_SET, o->mesh.choice[8]->value());
opt_mesh_remesh_param(0, GMSH_SET, o->mesh.choice[9]->value());
opt_mesh_color_carousel(0, GMSH_SET, o->mesh.choice[4]->value());
opt_mesh_quality_type(0, GMSH_SET, o->mesh.choice[6]->value());
opt_mesh_label_type(0, GMSH_SET, o->mesh.choice[7]->value());
if(CTX::instance()->fastRedraw)
CTX::instance()->post.draw = CTX::instance()->mesh.draw = 0;
drawContext::global()->draw();
CTX::instance()->post.draw = CTX::instance()->mesh.draw = 1;
}
void solver_options_cb(Fl_Widget *w, void *data)
{
FlGui::instance()->options->showGroup(4);
}
static void solver_options_ok_cb(Fl_Widget *w, void *data)
{
optionWindow *o = FlGui::instance()->options;
o->activate((const char*)data);
#if defined(HAVE_ONELAB)
int old_listen = (int)opt_solver_listen(0, GMSH_GET, o->solver.butt[0]->value());
opt_solver_listen(0, GMSH_SET, o->solver.butt[0]->value());
if(!old_listen && o->solver.butt[0]->value()){
onelab::server::citer it = onelab::server::instance()->findClient("Listen");
if(it == onelab::server::instance()->lastClient()){
onelab::localNetworkClient *c = new onelab::localNetworkClient("Listen", "");
c->run();
}
else
it->second->run();
}
#endif
opt_solver_socket_name(0, GMSH_SET, o->solver.input[0]->value());
opt_solver_timeout(0, GMSH_SET, o->solver.value[0]->value());
if(CTX::instance()->fastRedraw)
CTX::instance()->post.draw = CTX::instance()->mesh.draw = 0;
drawContext::global()->draw();
CTX::instance()->post.draw = CTX::instance()->mesh.draw = 1;
}
void post_options_cb(Fl_Widget *w, void *data)
{
FlGui::instance()->options->showGroup(5);
}
static void post_options_ok_cb(Fl_Widget *w, void *data)
{
optionWindow *o = FlGui::instance()->options;
o->activate((const char*)data);
opt_post_anim_cycle(0, GMSH_SET, o->post.butt[0]->value());
opt_post_combine_remove_orig(0, GMSH_SET, o->post.butt[1]->value());
opt_post_horizontal_scales(0, GMSH_SET, o->post.butt[2]->value());
opt_post_anim_delay(0, GMSH_SET, o->post.value[0]->value());
opt_post_anim_step(0, GMSH_SET, o->post.value[1]->value());
opt_post_link(0, GMSH_SET, o->post.choice[0]->value());
if(CTX::instance()->fastRedraw)
CTX::instance()->post.draw = CTX::instance()->mesh.draw = 0;
drawContext::global()->draw();
CTX::instance()->post.draw = CTX::instance()->mesh.draw = 1;
}
void view_options_cb(Fl_Widget *w, void *data)
{
FlGui::instance()->options->showGroup((intptr_t)data + 6);
}
static void view_options_timestep_cb(Fl_Widget *w, void *data)
{
std::string str((const char*)data);
int links = (int)opt_post_link(0, GMSH_GET, 0);
for(int i = 0; i < (int)PView::list.size(); i++) {
if((links == 2 || links == 4) ||
((links == 1 || links == 3) && opt_view_visible(i, GMSH_GET, 0)) ||
(links == 0 && i == FlGui::instance()->options->view.index)) {
if(str == "=")
opt_view_timestep(i, GMSH_SET, ((Fl_Value_Input *) w)->value());
else if(str == "-")
opt_view_timestep(i, GMSH_SET | GMSH_GUI,
opt_view_timestep(i, GMSH_GET, 0) - 1);
else if(str == "+")
opt_view_timestep(i, GMSH_SET | GMSH_GUI,
opt_view_timestep(i, GMSH_GET, 0) + 1);
}
}
drawContext::global()->draw();
}
static void view_options_ok_cb(Fl_Widget *w, void *data)
{
int current = FlGui::instance()->options->view.index;
if(current < 0) return;
optionWindow *o = FlGui::instance()->options;
o->activate((const char*)data);
if(data){
const char *str = (const char*)data;
if(!strcmp(str, "range_min") || !strcmp(str, "range_max")){
int vindex = o->view.index;
if(vindex >= 0 && vindex < (int)PView::list.size()){
// compute min/max taking current visibility status into account
int step = (int)opt_view_timestep(vindex, GMSH_GET, 0);
PViewData *data = PView::list[vindex]->getData(true);
PViewOptions *opt = PView::list[vindex]->getOptions();
if(!strcmp(str, "range_min"))
o->view.value[31]->value(data->getMin(step, true, opt->forceNumComponents,
opt->componentMap));
else if(!strcmp(str, "range_max"))
o->view.value[32]->value(data->getMax(step, true, opt->forceNumComponents,
opt->componentMap));
}
}
}
int force = 0, links = (int)opt_post_link(0, GMSH_GET, 0);
// get the old values for the current view
double scale_type = opt_view_scale_type(current, GMSH_GET, 0);
double intervals_type = opt_view_intervals_type(current, GMSH_GET, 0);
double point_type = opt_view_point_type(current, GMSH_GET, 0);
double line_type = opt_view_line_type(current, GMSH_GET, 0);
double vector_type = opt_view_vector_type(current, GMSH_GET, 0);
double glyph_location = opt_view_glyph_location(current, GMSH_GET, 0);
double tensor_type = opt_view_tensor_type(current, GMSH_GET, 0);
double range_type = opt_view_range_type(current, GMSH_GET, 0);
double axes = opt_view_axes(current, GMSH_GET, 0);
double mikado = opt_view_axes_mikado(current, GMSH_GET, 0);
double boundary = opt_view_boundary(current, GMSH_GET, 0);
double external_view = opt_view_external_view(current, GMSH_GET, 0);
double gen_raise_view = opt_view_gen_raise_view(current, GMSH_GET, 0);
double show_time = opt_view_show_time(current, GMSH_GET, 0);
double force_num_components = opt_view_force_num_components(current, GMSH_GET, 0);
double center_glyphs = opt_view_center_glyphs(current, GMSH_GET, 0);
double type = opt_view_type(current, GMSH_GET, 0);
double saturate_values = opt_view_saturate_values(current, GMSH_GET, 0);
double max_recursion_level = opt_view_max_recursion_level(current, GMSH_GET, 0);
double adapt_vis_grid = opt_view_adapt_visualization_grid(current, GMSH_GET, 0);
double target_error = opt_view_target_error(current, GMSH_GET, 0);
double show_element = opt_view_show_element(current, GMSH_GET, 0);
double draw_skin_only = opt_view_draw_skin_only(current, GMSH_GET, 0);
double show_scale = opt_view_show_scale(current, GMSH_GET, 0);
double auto_position = opt_view_auto_position(current, GMSH_GET, 0);
double axes_auto_position = opt_view_axes_auto_position(current, GMSH_GET, 0);
double draw_strings = opt_view_draw_strings(current, GMSH_GET, 0);
double light = opt_view_light(current, GMSH_GET, 0);
double light_two_side = opt_view_light_two_side(current, GMSH_GET, 0);
double light_lines = opt_view_light_lines(current, GMSH_GET, 0);
double smooth_normals = opt_view_smooth_normals(current, GMSH_GET, 0);
double draw_points = opt_view_draw_points(current, GMSH_GET, 0);
double draw_lines = opt_view_draw_lines(current, GMSH_GET, 0);
double draw_triangles = opt_view_draw_triangles(current, GMSH_GET, 0);
double draw_quadrangles = opt_view_draw_quadrangles(current, GMSH_GET, 0);
double draw_tetrahedra = opt_view_draw_tetrahedra(current, GMSH_GET, 0);
double draw_hexahedra = opt_view_draw_hexahedra(current, GMSH_GET, 0);
double draw_prisms = opt_view_draw_prisms(current, GMSH_GET, 0);
double draw_pyramids = opt_view_draw_pyramids(current, GMSH_GET, 0);
double draw_scalars = opt_view_draw_scalars(current, GMSH_GET, 0);
double draw_vectors = opt_view_draw_vectors(current, GMSH_GET, 0);
double draw_tensors = opt_view_draw_tensors(current, GMSH_GET, 0);
double use_gen_raise = opt_view_use_gen_raise(current, GMSH_GET, 0);
double fake_transparency = opt_view_fake_transparency(current, GMSH_GET, 0);
double use_stipple = opt_view_use_stipple(current, GMSH_GET, 0);
double normals = opt_view_normals(current, GMSH_GET, 0);
double tangents = opt_view_tangents(current, GMSH_GET, 0);
double custom_min = opt_view_custom_min(current, GMSH_GET, 0);
double custom_max = opt_view_custom_max(current, GMSH_GET, 0);
double nb_iso = opt_view_nb_iso(current, GMSH_GET, 0);
double offset0 = opt_view_offset0(current, GMSH_GET, 0);
double offset1 = opt_view_offset1(current, GMSH_GET, 0);
double offset2 = opt_view_offset2(current, GMSH_GET, 0);
double transform00 = opt_view_transform00(current, GMSH_GET, 0);
double transform01 = opt_view_transform01(current, GMSH_GET, 0);
double transform02 = opt_view_transform02(current, GMSH_GET, 0);
double transform10 = opt_view_transform10(current, GMSH_GET, 0);
double transform11 = opt_view_transform11(current, GMSH_GET, 0);
double transform12 = opt_view_transform12(current, GMSH_GET, 0);
double transform20 = opt_view_transform20(current, GMSH_GET, 0);
double transform21 = opt_view_transform21(current, GMSH_GET, 0);
double transform22 = opt_view_transform22(current, GMSH_GET, 0);
double raise0 = opt_view_raise0(current, GMSH_GET, 0);
double raise1 = opt_view_raise1(current, GMSH_GET, 0);
double raise2 = opt_view_raise2(current, GMSH_GET, 0);
double normal_raise = opt_view_normal_raise(current, GMSH_GET, 0);
double timestep = opt_view_timestep(current, GMSH_GET, 0);
double arrow_size_min = opt_view_arrow_size_min(current, GMSH_GET, 0);
double arrow_size_max = opt_view_arrow_size_max(current, GMSH_GET, 0);
double displacement_factor = opt_view_displacement_factor(current, GMSH_GET, 0);
double point_size = opt_view_point_size(current, GMSH_GET, 0);
double line_width = opt_view_line_width(current, GMSH_GET, 0);
double explode = opt_view_explode(current, GMSH_GET, 0);
double angle_smooth_normals = opt_view_angle_smooth_normals(current, GMSH_GET, 0);
double position0 = opt_view_position0(current, GMSH_GET, 0);
double position1 = opt_view_position1(current, GMSH_GET, 0);
double size0 = opt_view_size0(current, GMSH_GET, 0);
double size1 = opt_view_size1(current, GMSH_GET, 0);
double axes_tics0 = opt_view_axes_tics0(current, GMSH_GET, 0);
double axes_tics1 = opt_view_axes_tics1(current, GMSH_GET, 0);
double axes_tics2 = opt_view_axes_tics2(current, GMSH_GET, 0);
double axes_xmin = opt_view_axes_xmin(current, GMSH_GET, 0);
double axes_ymin = opt_view_axes_ymin(current, GMSH_GET, 0);
double axes_zmin = opt_view_axes_zmin(current, GMSH_GET, 0);
double axes_xmax = opt_view_axes_xmax(current, GMSH_GET, 0);
double axes_ymax = opt_view_axes_ymax(current, GMSH_GET, 0);
double axes_zmax = opt_view_axes_zmax(current, GMSH_GET, 0);
double gen_raise_factor = opt_view_gen_raise_factor(current, GMSH_GET, 0);
double component_map0 = opt_view_component_map0(current, GMSH_GET, 0);
double component_map1 = opt_view_component_map1(current, GMSH_GET, 0);
double component_map2 = opt_view_component_map2(current, GMSH_GET, 0);
double component_map3 = opt_view_component_map3(current, GMSH_GET, 0);
double component_map4 = opt_view_component_map4(current, GMSH_GET, 0);
double component_map5 = opt_view_component_map5(current, GMSH_GET, 0);
double component_map6 = opt_view_component_map6(current, GMSH_GET, 0);
double component_map7 = opt_view_component_map7(current, GMSH_GET, 0);
double component_map8 = opt_view_component_map8(current, GMSH_GET, 0);
double sampling = opt_view_sampling(current, GMSH_GET, 0);
std::string name = opt_view_name(current, GMSH_GET, "");
std::string format = opt_view_format(current, GMSH_GET, "");
std::string axes_label0 = opt_view_axes_label0(current, GMSH_GET, "");
std::string axes_label1 = opt_view_axes_label1(current, GMSH_GET, "");
std::string axes_label2 = opt_view_axes_label2(current, GMSH_GET, "");
std::string axes_format0 = opt_view_axes_format0(current, GMSH_GET, "");
std::string axes_format1 = opt_view_axes_format1(current, GMSH_GET, "");
std::string axes_format2 = opt_view_axes_format2(current, GMSH_GET, "");
std::string gen_raise0 = opt_view_gen_raise0(current, GMSH_GET, "");
std::string gen_raise1 = opt_view_gen_raise1(current, GMSH_GET, "");
std::string gen_raise2 = opt_view_gen_raise2(current, GMSH_GET, "");
// modify only the views that need to be updated
for(int i = 0; i < (int)PView::list.size(); i++) {
if((links == 2 || links == 4) ||
((links == 1 || links == 3) && opt_view_visible(i, GMSH_GET, 0)) ||
(links == 0 && i == current)) {
if(links == 3 || links == 4)
force = 1;
double val;
// view_choice
val = o->view.choice[1]->value() + 1;
if(force || (val != scale_type))
opt_view_scale_type(i, GMSH_SET, val);
val = o->view.choice[0]->value() + 1;
if(force || (val != intervals_type))
opt_view_intervals_type(i, GMSH_SET, val);
val = o->view.choice[5]->value();
if(force || (val != point_type))
opt_view_point_type(i, GMSH_SET, val);
val = o->view.choice[6]->value();
if(force || (val != line_type))
opt_view_line_type(i, GMSH_SET, val);
val = o->view.choice[2]->value() + 1;
if(force || (val != vector_type))
opt_view_vector_type(i, GMSH_SET, val);
val = o->view.choice[3]->value() + 1;
if(force || (val != glyph_location))
opt_view_glyph_location(i, GMSH_SET, val);
val = o->view.choice[4]->value() + 1;
if(force || (val != tensor_type))
opt_view_tensor_type(i, GMSH_SET, val);
val = o->view.choice[7]->value() + 1;
if(force || (val != range_type))
opt_view_range_type(i, GMSH_SET, val);
val = o->view.choice[8]->value();
if(force || (val != axes))
opt_view_axes(i, GMSH_SET, val);
val = o->view.choice[9]->value();
if(force || (val != boundary))
opt_view_boundary(i, GMSH_SET, val);
val = o->view.choice[10]->value() - 1;
if(force || (val != external_view))
opt_view_external_view(i, GMSH_SET, val);
val = o->view.choice[11]->value() - 1;
if(force || (val != gen_raise_view))
opt_view_gen_raise_view(i, GMSH_SET, val);
val = o->view.choice[12]->value();
if(force || (val != show_time))
opt_view_show_time(i, GMSH_SET, val);
val = o->view.choice[13]->value() + 1;
if(force || (val != type))
opt_view_type(i, GMSH_SET, val);
val =
(o->view.choice[14]->value() == 1) ? 1 :
(o->view.choice[14]->value() == 2) ? 3 :
(o->view.choice[14]->value() == 3) ? 9 : 0;
if(force || (val != force_num_components))
opt_view_force_num_components(i, GMSH_SET, val);
val = o->view.choice[15]->value();
if(force || (val != center_glyphs))
opt_view_center_glyphs(i, GMSH_SET, val);
val = o->view.choice[16]->value();
if(force || (val != auto_position))
opt_view_auto_position(i, GMSH_SET, val);
// view_butts
val = o->view.butt[0]->value();
if(force || (val != adapt_vis_grid))
opt_view_adapt_visualization_grid(i, GMSH_SET, val);
val = o->view.butt[38]->value();
if(force || (val != saturate_values))
opt_view_saturate_values(i, GMSH_SET, val);
val = o->view.butt[10]->value();
if(force || (val != show_element))
opt_view_show_element(i, GMSH_SET, val);
val = o->view.butt[2]->value();
if(force || (val != draw_skin_only))
opt_view_draw_skin_only(i, GMSH_SET, val);
val = o->view.butt[4]->value();
if(force || (val != show_scale))
opt_view_show_scale(i, GMSH_SET, val);
val = o->view.butt[3]->value();
if(force || (val != mikado))
opt_view_axes_mikado(i, GMSH_SET, val);
val = o->view.butt[25]->value();
if(force || (val != axes_auto_position))
opt_view_axes_auto_position(i, GMSH_SET, val);
val = o->view.butt[5]->value();
if(force || (val != draw_strings))
opt_view_draw_strings(i, GMSH_SET, val);
val = o->view.butt[11]->value();
if(force || (val != light))
opt_view_light(i, GMSH_SET, val);
val = o->view.butt[8]->value();
if(force || (val != light_lines))
opt_view_light_lines(i, GMSH_SET, val);
val = o->view.butt[9]->value();
if(force || (val != light_two_side))
opt_view_light_two_side(i, GMSH_SET, val);
val = o->view.butt[12]->value();
if(force || (val != smooth_normals))
opt_view_smooth_normals(i, GMSH_SET, val);
val = o->view.menu[0]->menu()[0].value() ? 1 : 0;
if(force || (val != draw_scalars))
opt_view_draw_scalars(i, GMSH_SET, val);
val = o->view.menu[0]->menu()[1].value() ? 1 : 0;
if(force || (val != draw_vectors))
opt_view_draw_vectors(i, GMSH_SET, val);
val = o->view.menu[0]->menu()[2].value() ? 1 : 0;
if(force || (val != draw_tensors))
opt_view_draw_tensors(i, GMSH_SET, val);
val = o->view.menu[1]->menu()[0].value() ? 1 : 0;
if(force || (val != draw_points))
opt_view_draw_points(i, GMSH_SET, val);
val = o->view.menu[1]->menu()[1].value() ? 1 : 0;
if(force || (val != draw_lines))
opt_view_draw_lines(i, GMSH_SET, val);
val = o->view.menu[1]->menu()[2].value() ? 1 : 0;
if(force || (val != draw_triangles))
opt_view_draw_triangles(i, GMSH_SET, val);
val = o->view.menu[1]->menu()[3].value() ? 1 : 0;
if(force || (val != draw_quadrangles))
opt_view_draw_quadrangles(i, GMSH_SET, val);
val = o->view.menu[1]->menu()[4].value() ? 1 : 0;
if(force || (val != draw_tetrahedra))
opt_view_draw_tetrahedra(i, GMSH_SET, val);
val = o->view.menu[1]->menu()[5].value() ? 1 : 0;
if(force || (val != draw_hexahedra))
opt_view_draw_hexahedra(i, GMSH_SET, val);
val = o->view.menu[1]->menu()[6].value() ? 1 : 0;
if(force || (val != draw_prisms))
opt_view_draw_prisms(i, GMSH_SET, val);
val = o->view.menu[1]->menu()[7].value() ? 1 : 0;
if(force || (val != draw_pyramids))
opt_view_draw_pyramids(i, GMSH_SET, val);
val = o->view.butt[6]->value();
if(force || (val != use_gen_raise))
opt_view_use_gen_raise(i, GMSH_SET, val);
val = o->view.butt[24]->value();
if(force || (val != fake_transparency))
opt_view_fake_transparency(i, GMSH_SET, val);
val = o->view.butt[26]->value();
if(force || (val != use_stipple))
opt_view_use_stipple(i, GMSH_SET, val);
// view_values
val = o->view.value[0]->value();
if(force || (val != normals))
opt_view_normals(i, GMSH_SET, val);
val = o->view.value[1]->value();
if(force || (val != tangents))
opt_view_tangents(i, GMSH_SET, val);
val = o->view.value[31]->value();
if(force || (val != custom_min))
opt_view_custom_min(i, GMSH_SET, val);
val = o->view.value[32]->value();
if(force || (val != custom_max))
opt_view_custom_max(i, GMSH_SET, val);
val = o->view.value[33]->value();
if(force || (val != max_recursion_level))
opt_view_max_recursion_level(i, GMSH_SET, val);
val = o->view.value[34]->value();
if(force || (val != target_error))
opt_view_target_error(i, GMSH_SET, val);
val = o->view.value[30]->value();
if(force || (val != nb_iso))
opt_view_nb_iso(i, GMSH_SET, val);
val = o->view.value[40]->value();
if(force || (val != offset0))
opt_view_offset0(i, GMSH_SET, val);
val = o->view.value[41]->value();
if(force || (val != offset1))
opt_view_offset1(i, GMSH_SET, val);
val = o->view.value[42]->value();
if(force || (val != offset2))
opt_view_offset2(i, GMSH_SET, val);
val = o->view.value[51]->value();
if(force || (val != transform00))
opt_view_transform00(i, GMSH_SET, val);
val = o->view.value[52]->value();
if(force || (val != transform01))
opt_view_transform01(i, GMSH_SET, val);
val = o->view.value[53]->value();
if(force || (val != transform02))
opt_view_transform02(i, GMSH_SET, val);
val = o->view.value[54]->value();
if(force || (val != transform10))
opt_view_transform10(i, GMSH_SET, val);
val = o->view.value[55]->value();
if(force || (val != transform11))
opt_view_transform11(i, GMSH_SET, val);
val = o->view.value[56]->value();
if(force || (val != transform12))
opt_view_transform12(i, GMSH_SET, val);
val = o->view.value[57]->value();
if(force || (val != transform20))
opt_view_transform20(i, GMSH_SET, val);
val = o->view.value[58]->value();
if(force || (val != transform21))
opt_view_transform21(i, GMSH_SET, val);
val = o->view.value[59]->value();
if(force || (val != transform22))
opt_view_transform22(i, GMSH_SET, val);
val = o->view.value[43]->value();
if(force || (val != raise0))
opt_view_raise0(i, GMSH_SET, val);
val = o->view.value[44]->value();
if(force || (val != raise1))
opt_view_raise1(i, GMSH_SET, val);
val = o->view.value[45]->value();
if(force || (val != raise2))
opt_view_raise2(i, GMSH_SET, val);
val = o->view.value[46]->value();
if(force || (val != normal_raise))
opt_view_normal_raise(i, GMSH_SET, val);
val = o->view.value[50]->value();
if(force || (val != timestep))
opt_view_timestep(i, GMSH_SET, val);
val = o->view.value[64]->value();
if(force || (val != arrow_size_min))
opt_view_arrow_size_min(i, GMSH_SET, val);
val = o->view.value[60]->value();
if(force || (val != arrow_size_max))
opt_view_arrow_size_max(i, GMSH_SET, val);
val = o->view.value[63]->value();
if(force || (val != displacement_factor))
opt_view_displacement_factor(i, GMSH_SET, val);
val = o->view.value[61]->value();
if(force || (val != point_size))
opt_view_point_size(i, GMSH_SET, val);
val = o->view.value[62]->value();
if(force || (val != line_width))
opt_view_line_width(i, GMSH_SET, val);
val = o->view.value[12]->value();
if(force || (val != explode))
opt_view_explode(i, GMSH_SET, val);
val = o->view.value[10]->value();
if(force || (val != angle_smooth_normals))
opt_view_angle_smooth_normals(i, GMSH_SET, val);
val = o->view.value[20]->value();
if(force || (val != position0))
opt_view_position0(i, GMSH_SET, val);
val = o->view.value[21]->value();
if(force || (val != position1))
opt_view_position1(i, GMSH_SET, val);
val = o->view.value[22]->value();
if(force || (val != size0))
opt_view_size0(i, GMSH_SET, val);
val = o->view.value[23]->value();
if(force || (val != size1))
opt_view_size1(i, GMSH_SET, val);
val = o->view.value[13]->value();
if(force || (val != axes_xmin))
opt_view_axes_xmin(i, GMSH_SET, val);
val = o->view.value[14]->value();
if(force || (val != axes_ymin))
opt_view_axes_ymin(i, GMSH_SET, val);
val = o->view.value[15]->value();
if(force || (val != axes_zmin))
opt_view_axes_zmin(i, GMSH_SET, val);
val = o->view.value[16]->value();
if(force || (val != axes_xmax))
opt_view_axes_xmax(i, GMSH_SET, val);
val = o->view.value[17]->value();
if(force || (val != axes_ymax))
opt_view_axes_ymax(i, GMSH_SET, val);
val = o->view.value[18]->value();
if(force || (val != axes_zmax))
opt_view_axes_zmax(i, GMSH_SET, val);
val = o->view.value[2]->value();
if(force || (val != gen_raise_factor))
opt_view_gen_raise_factor(i, GMSH_SET, val);
val = o->view.value[3]->value();
if(force || (val != axes_tics0))
opt_view_axes_tics0(i, GMSH_SET, val);
val = o->view.value[4]->value();
if(force || (val != axes_tics1))
opt_view_axes_tics1(i, GMSH_SET, val);
val = o->view.value[5]->value();
if(force || (val != axes_tics2))
opt_view_axes_tics2(i, GMSH_SET, val);
val = o->view.value[70]->value();
if(force || (val != component_map0))
opt_view_component_map0(i, GMSH_SET, val);
val = o->view.value[70]->value();
if(force || (val != component_map0))
opt_view_component_map0(i, GMSH_SET, val);
val = o->view.value[70]->value();
if(force || (val != component_map0))
opt_view_component_map0(i, GMSH_SET, val);
val = o->view.value[71]->value();
if(force || (val != component_map1))
opt_view_component_map1(i, GMSH_SET, val);
val = o->view.value[72]->value();
if(force || (val != component_map2))
opt_view_component_map2(i, GMSH_SET, val);
val = o->view.value[73]->value();
if(force || (val != component_map3))
opt_view_component_map3(i, GMSH_SET, val);
val = o->view.value[74]->value();
if(force || (val != component_map4))
opt_view_component_map4(i, GMSH_SET, val);
val = o->view.value[75]->value();
if(force || (val != component_map5))
opt_view_component_map5(i, GMSH_SET, val);
val = o->view.value[76]->value();
if(force || (val != component_map6))
opt_view_component_map6(i, GMSH_SET, val);
val = o->view.value[77]->value();
if(force || (val != component_map7))
opt_view_component_map7(i, GMSH_SET, val);
val = o->view.value[78]->value();
if(force || (val != component_map8))
opt_view_component_map8(i, GMSH_SET, val);
val = o->view.value[6]->value();
if(force || (val != sampling))
opt_view_sampling(i, GMSH_SET, val);
// view_inputs
std::string str;
str = o->view.input[0]->value();
if(force || (str != name))
opt_view_name(i, GMSH_SET, str);
str = o->view.input[1]->value();
if(force || (str != format))
opt_view_format(i, GMSH_SET, str);
str = o->view.input[10]->value();
if(force || (str != axes_label0))
opt_view_axes_label0(i, GMSH_SET, str);
str = o->view.input[11]->value();
if(force || (str != axes_label1))
opt_view_axes_label1(i, GMSH_SET, str);
str = o->view.input[12]->value();
if(force || (str != axes_label2))
opt_view_axes_label2(i, GMSH_SET, str);
str = o->view.input[7]->value();
if(force || (str != axes_format0))
opt_view_axes_format0(i, GMSH_SET, str);
str = o->view.input[8]->value();
if(force || (str != axes_format1))
opt_view_axes_format1(i, GMSH_SET, str);
str = o->view.input[9]->value();
if(force || (str != axes_format2))
opt_view_axes_format2(i, GMSH_SET, str);
str = o->view.input[4]->value();
if(force || (str != gen_raise0))
opt_view_gen_raise0(i, GMSH_SET, str);
str = o->view.input[5]->value();
if(force || (str != gen_raise1))
opt_view_gen_raise1(i, GMSH_SET, str);
str = o->view.input[6]->value();
if(force || (str != gen_raise2))
opt_view_gen_raise2(i, GMSH_SET, str);
// colors (since the color buttons modify the values directly
// through callbacks, we can use the opt_XXX routines directly)
if(force || (i != current)){
opt_view_color_points
(i, GMSH_SET, opt_view_color_points(current, GMSH_GET, 0));
opt_view_color_lines
(i, GMSH_SET, opt_view_color_lines(current, GMSH_GET, 0));
opt_view_color_triangles
(i, GMSH_SET, opt_view_color_triangles(current, GMSH_GET, 0));
opt_view_color_quadrangles
(i, GMSH_SET, opt_view_color_quadrangles(current, GMSH_GET, 0));
opt_view_color_tetrahedra
(i, GMSH_SET, opt_view_color_tetrahedra(current, GMSH_GET, 0));
opt_view_color_hexahedra
(i, GMSH_SET, opt_view_color_hexahedra(current, GMSH_GET, 0));
opt_view_color_prisms
(i, GMSH_SET, opt_view_color_prisms(current, GMSH_GET, 0));
opt_view_color_pyramids
(i, GMSH_SET, opt_view_color_pyramids(current, GMSH_GET, 0));
opt_view_color_tangents
(i, GMSH_SET, opt_view_color_tangents(current, GMSH_GET, 0));
opt_view_color_normals
(i, GMSH_SET, opt_view_color_normals(current, GMSH_GET, 0));
opt_view_color_text2d
(i, GMSH_SET, opt_view_color_text2d(current, GMSH_GET, 0));
opt_view_color_text3d
(i, GMSH_SET, opt_view_color_text3d(current, GMSH_GET, 0));
opt_view_color_axes
(i, GMSH_SET, opt_view_color_axes(current, GMSH_GET, 0));
}
// colorbar window
if(force || (i != current)) {
ColorTable_Copy(&PView::list[current]->getOptions()->colorTable);
ColorTable_Paste(&PView::list[i]->getOptions()->colorTable);
PView::list[i]->setChanged(true);
}
}
}
if(CTX::instance()->fastRedraw)
CTX::instance()->post.draw = CTX::instance()->mesh.draw = 0;
drawContext::global()->draw();
CTX::instance()->post.draw = CTX::instance()->mesh.draw = 1;
}
static void view_options_max_recursion_cb(Fl_Widget *w, void *data)
{
std::string str((const char*)data);
int val = (int)FlGui::instance()->options->view.value[33]->value();
if(str == "-" && val > 0)
FlGui::instance()->options->view.value[33]->value(val - 1);
else if(str == "+")
FlGui::instance()->options->view.value[33]->value(val + 1);
view_options_ok_cb(0, 0);
}
optionWindow::optionWindow(int deltaFontSize)
{
FL_NORMAL_SIZE -= deltaFontSize;
int width = 34 * FL_NORMAL_SIZE + WB;
int height = 14 * BH + 4 * WB;
int L = 7 * FL_NORMAL_SIZE;
win = new paletteWindow
(width, height, CTX::instance()->nonModalWindows ? true : false);
win->box(GMSH_WINDOW_BOX);
win->label("Options - General");
// Selection browser
browser = new Fl_Hold_Browser(0, 0, L, height);
browser->box(FL_FLAT_BOX);
browser->has_scrollbar(Fl_Browser_::VERTICAL);
browser->add("General");
browser->add("Geometry");
browser->add("Mesh");
browser->add("Solver");
browser->add("Post-pro");
browser->callback(options_browser_cb);
browser->value(1);
redraw = new Fl_Return_Button
(WB, height - BH - WB, L - WB, BH, "Redraw");
redraw->callback(redraw_cb);
width -= L;
int BW = width - 4 * WB;
// General options
general.group = new Fl_Group(L, 0, width, height, "General Options");
{
Fl_Tabs *o = new Fl_Tabs(L + WB, WB, width - 2 * WB, height - 2 * WB);
{
Fl_Group *o = new Fl_Group
(L + WB, WB + BH, width - 2 * WB, height - 2 * WB - BH, "General");
general.butt[10] = new Fl_Check_Button
(L + 2 * WB, 2 * WB + 1 * BH, BW, BH, "Enable expert mode");
general.butt[10]->type(FL_TOGGLE_BUTTON);
general.butt[10]->callback(general_options_ok_cb);
general.butt[13] = new Fl_Check_Button
(L + 2 * WB, 2 * WB + 2 * BH, BW, BH, "Show tooltips");
general.butt[13]->type(FL_TOGGLE_BUTTON);
general.butt[13]->callback(general_options_ok_cb);
general.butt[6] = new Fl_Check_Button
(L + 2 * WB, 2 * WB + 3 * BH, BW, BH, "Show bounding boxes");
general.butt[6]->tooltip("(Alt+b)");
general.butt[6]->type(FL_TOGGLE_BUTTON);
general.butt[6]->callback(general_options_ok_cb);
general.butt[2] = new Fl_Check_Button
(L + 2 * WB, 2 * WB + 4 * BH, BW, BH,
"Draw simplified model during user interaction");
general.butt[2]->tooltip("(Alt+f)");
general.butt[2]->type(FL_TOGGLE_BUTTON);
general.butt[2]->callback(general_options_ok_cb, (void*)"fast_redraw");
general.butt[11] = new Fl_Check_Button
(L + 2 * WB, 2 * WB + 5 * BH, BW, BH, "Enable mouse hover over meshes");
general.butt[11]->type(FL_TOGGLE_BUTTON);
general.butt[11]->callback(general_options_ok_cb);
general.butt[3] = new Fl_Check_Button
(L + 2 * WB, 2 * WB + 6 * BH, BW, BH, "Enable double buffering");
general.butt[3]->type(FL_TOGGLE_BUTTON);
general.butt[3]->callback(general_options_ok_cb);
general.butt[12] = new Fl_Check_Button
(L + 2 * WB, 2 * WB + 7 * BH, BW, BH, "Enable antialiasing");
general.butt[12]->type(FL_TOGGLE_BUTTON);
general.butt[12]->callback(general_options_ok_cb);
general.butt[5] = new Fl_Check_Button
(L + 2 * WB, 2 * WB + 8 * BH, BW, BH,
"Use trackball rotation instead of Euler angles");
general.butt[5]->type(FL_TOGGLE_BUTTON);
general.butt[5]->callback(general_options_ok_cb);
general.butt[15] = new Fl_Check_Button
(L + 2 * WB, 2 * WB + 9 * BH, BW, BH, "Rotate around pseudo center of mass");
general.butt[15]->type(FL_TOGGLE_BUTTON);
general.butt[15]->callback(general_options_ok_cb, (void*)"rotation_center");
general.push[0] = new Fl_Button
(L + 2 * IW - 2 * WB, 2 * WB + 10 * BH, BB, BH, "Select");
general.push[0]->callback(general_options_rotation_center_select_cb);
general.value[8] = new Fl_Value_Input
(L + 2 * WB, 2 * WB + 10 * BH, IW / 3, BH);
general.value[8]->callback(general_options_ok_cb, (void*)"rotation_center_coord");
general.value[9] = new Fl_Value_Input
(L + 2 * WB + IW / 3, 2 * WB + 10 * BH, IW / 3, BH);
general.value[9]->callback(general_options_ok_cb, (void*)"rotation_center_coord");
general.value[10] = new Fl_Value_Input
(L + 2 * WB + 2 * IW / 3, 2 * WB + 10 * BH, IW / 3, BH, "Rotation center");
general.value[10]->align(FL_ALIGN_RIGHT);
general.value[10]->callback(general_options_ok_cb, (void*)"rotation_center_coord");
o->end();
}
{
Fl_Group *o = new Fl_Group
(L + WB, WB + BH, width - 2 * WB, height - 2 * WB - BH, "Advanced");
general.input[1] = new Fl_Input
(L + 2 * WB, 2 * WB + 1 * BH, IW, BH, "Text editor command");
general.input[1]->align(FL_ALIGN_RIGHT);
general.input[1]->callback(general_options_ok_cb);
general.input[2] = new Fl_Input
(L + 2 * WB, 2 * WB + 2 * BH, IW, BH, "Web browser command");
general.input[2]->align(FL_ALIGN_RIGHT);
general.input[2]->callback(general_options_ok_cb);
general.butt[7] = new Fl_Check_Button
(L + 2 * WB, 2 * WB + 3 * BH, BW, BH, "Print messages on terminal");
general.butt[7]->type(FL_TOGGLE_BUTTON);
general.butt[7]->callback(general_options_ok_cb);
general.butt[8] = new Fl_Check_Button
(L + 2 * WB, 2 * WB + 4 * BH, BW, BH, "Save session information on exit");
general.butt[8]->type(FL_TOGGLE_BUTTON);
general.butt[8]->callback(general_options_ok_cb);
general.butt[9] = new Fl_Check_Button
(L + 2 * WB, 2 * WB + 5 * BH, BW/2-WB, BH, "Save options on exit");
general.butt[9]->type(FL_TOGGLE_BUTTON);
general.butt[9]->callback(general_options_ok_cb);
Fl_Button *b0 = new Fl_Button
(L + width / 2, 2 * WB + 5 * BH, (int)(1.75*BB), BH, "Restore default options");
b0->callback(options_restore_defaults_cb);
general.butt[14] = new Fl_Check_Button
(L + 2 * WB, 2 * WB + 6 * BH, BW, BH,
"Ask confirmation before overwriting files");
general.butt[14]->type(FL_TOGGLE_BUTTON);
general.butt[14]->callback(general_options_ok_cb);
general.value[5] = new Fl_Value_Input
(L + 2 * WB, 2 * WB + 7 * BH, IW, BH, "Message verbosity");
general.value[5]->minimum(0);
general.value[5]->maximum(10);
general.value[5]->step(1);
general.value[5]->align(FL_ALIGN_RIGHT);
general.value[5]->callback(general_options_ok_cb);
general.input[0] = new Fl_Input
(L + 2 * WB, 2 * WB + 8 * BH, IW, BH, "Default file name");
general.input[0]->align(FL_ALIGN_RIGHT);
general.input[0]->callback(general_options_ok_cb);
o->end();
}
{
Fl_Group *o = new Fl_Group
(L + WB, WB + BH, width - 2 * WB, height - 2 * WB - BH, "Axes");
general.choice[4] = new Fl_Choice
(L + 2 * WB, 2 * WB + 1 * BH, IW, BH, "Axes mode");
general.choice[4]->menu(menu_axes_mode);
general.choice[4]->align(FL_ALIGN_RIGHT);
general.choice[4]->tooltip("(Alt+a)");
general.choice[4]->callback(general_options_ok_cb, (void*)"general_axes");
general.butt[16] = new Fl_Check_Button
(L + width - (int)(0.85*IW) - 2 * WB, 2 * WB + 1 * BH, (int)(0.85*IW), BH,
"Mikado style");
general.butt[16]->type(FL_TOGGLE_BUTTON);
general.butt[16]->callback(general_options_ok_cb);
general.value[17] = new Fl_Value_Input
(L + 2 * WB, 2 * WB + 2 * BH, IW / 3, BH);
general.value[17]->minimum(0.);
general.value[17]->step(1);
general.value[17]->maximum(100);
general.value[17]->callback(general_options_ok_cb);
general.value[18] = new Fl_Value_Input
(L + 2 * WB + 1*IW/3, 2 * WB + 2 * BH, IW / 3, BH);
general.value[18]->minimum(0.);
general.value[18]->step(1);
general.value[18]->maximum(100);
general.value[18]->callback(general_options_ok_cb);
general.value[19] = new Fl_Value_Input
(L + 2 * WB + 2*IW/3, 2 * WB + 2 * BH, IW / 3, BH, "Axes tics");
general.value[19]->minimum(0.);
general.value[19]->step(1);
general.value[19]->maximum(100);
general.value[19]->align(FL_ALIGN_RIGHT);
general.value[19]->callback(general_options_ok_cb);
general.input[3] = new Fl_Input
(L + 2 * WB, 2 * WB + 3 * BH, IW/3, BH);
general.input[3]->callback(general_options_ok_cb);
general.input[4] = new Fl_Input
(L + 2 * WB + 1*IW/3, 2 * WB + 3 * BH, IW/3, BH);
general.input[4]->callback(general_options_ok_cb);
general.input[5] = new Fl_Input
(L + 2 * WB + 2*IW/3, 2 * WB + 3 * BH, IW/3, BH, "Axes format");
general.input[5]->align(FL_ALIGN_RIGHT);
general.input[5]->callback(general_options_ok_cb);
general.input[6] = new Fl_Input
(L + 2 * WB, 2 * WB + 4 * BH, IW/3, BH);
general.input[6]->callback(general_options_ok_cb);
general.input[7] = new Fl_Input
(L + 2 * WB + 1*IW/3, 2 * WB + 4 * BH, IW/3, BH);
general.input[7]->callback(general_options_ok_cb);
general.input[8] = new Fl_Input
(L + 2 * WB + 2*IW/3, 2 * WB + 4 * BH, IW/3, BH, "Axes labels");
general.input[8]->align(FL_ALIGN_RIGHT);
general.input[8]->callback(general_options_ok_cb);
general.butt[0] = new Fl_Check_Button
(L + 2 * WB, 2 * WB + 5 * BH, BW, BH,
"Set position and size of axes automatically");
general.butt[0]->type(FL_TOGGLE_BUTTON);
general.butt[0]->callback(general_options_ok_cb, (void*)"general_axes_auto");
general.value[20] = new Fl_Value_Input
(L + 2 * WB, 2 * WB + 6 * BH, IW / 3, BH);
general.value[20]->callback(general_options_ok_cb);
general.value[21] = new Fl_Value_Input
(L + 2 * WB + IW / 3, 2 * WB + 6 * BH, IW / 3, BH);
general.value[21]->callback(general_options_ok_cb);
general.value[22] = new Fl_Value_Input
(L + 2 * WB + 2 * IW / 3, 2 * WB + 6 * BH, IW / 3, BH, "Axes minimum");
general.value[22]->align(FL_ALIGN_RIGHT);
general.value[22]->callback(general_options_ok_cb);
general.value[23] = new Fl_Value_Input
(L + 2 * WB, 2 * WB + 7 * BH, IW / 3, BH);
general.value[23]->callback(general_options_ok_cb);
general.value[24] = new Fl_Value_Input
(L + 2 * WB + IW / 3, 2 * WB + 7 * BH, IW / 3, BH);
general.value[24]->callback(general_options_ok_cb);
general.value[25] = new Fl_Value_Input
(L + 2 * WB + 2 * IW / 3, 2 * WB + 7 * BH, IW / 3, BH, "Axes maximum");
general.value[25]->align(FL_ALIGN_RIGHT);
general.value[25]->callback(general_options_ok_cb);
general.butt[1] = new Fl_Check_Button
(L + 2 * WB, 2 * WB + 8 * BH, BW, BH, "Show small axes");
general.butt[1]->tooltip("(Alt+Shift+a)");
general.butt[1]->type(FL_TOGGLE_BUTTON);
general.butt[1]->callback(general_options_ok_cb, (void*)"general_small_axes");
general.value[26] = new Fl_Value_Input
(L + 2 * WB, 2 * WB + 9 * BH, IW / 2, BH);
general.value[26]->minimum(-2000);
general.value[26]->maximum(2000);
general.value[26]->step(1);
general.value[26]->callback(general_options_ok_cb);
general.value[27] = new Fl_Value_Input
(L + 2 * WB + IW / 2, 2 * WB + 9 * BH, IW / 2, BH, "Small axes position");
general.value[27]->align(FL_ALIGN_RIGHT);
general.value[27]->minimum(-2000);
general.value[27]->maximum(2000);
general.value[27]->step(1);
general.value[27]->callback(general_options_ok_cb);
o->end();
}
{
Fl_Group *o = new Fl_Group
(L + WB, WB + BH, width - 2 * WB, height - 2 * WB - BH, "Aspect");
o->hide();
static Fl_Menu_Item menu_projection[] = {
{"Orthographic", 0, 0, 0},
{"Perspective", 0, 0, 0},
{0}
};
general.choice[2] = new Fl_Choice
(L + 2 * WB, 2 * WB + 1 * BH, IW, BH, "Projection mode");
general.choice[2]->menu(menu_projection);
general.choice[2]->align(FL_ALIGN_RIGHT);
general.choice[2]->tooltip("(Alt+o)");
general.choice[2]->callback(general_options_ok_cb);
general.value[14] = new Fl_Value_Input
(L + 2 * WB, 2 * WB + 2 * BH, IW, BH, "Z-clipping distance factor");
general.value[14]->minimum(0.1);
general.value[14]->maximum(20.);
general.value[14]->step(0.1);
general.value[14]->align(FL_ALIGN_RIGHT);
general.value[14]->callback(general_options_ok_cb);
general.value[15] = new Fl_Value_Input
(L + 2 * WB, 2 * WB + 3 * BH, IW/2, BH);
general.value[15]->minimum(0.);
general.value[15]->maximum(10.);
general.value[15]->step(0.01);
general.value[15]->align(FL_ALIGN_RIGHT);
general.value[15]->callback(general_options_ok_cb);
general.value[16] = new Fl_Value_Input
(L + 2 * WB + IW/2, 2 * WB + 3 * BH, IW/2, BH, "Polygon offset factor/units");
general.value[16]->minimum(0.);
general.value[16]->maximum(10.);
general.value[16]->step(0.01);
general.value[16]->align(FL_ALIGN_RIGHT);
general.value[16]->callback(general_options_ok_cb);
general.butt[4] = new Fl_Check_Button
(L + 2 * WB, 2 * WB + 4 * BH, BW, BH, "Always apply polygon offset");
general.butt[4]->type(FL_TOGGLE_BUTTON);
general.butt[4]->callback(general_options_ok_cb);
general.value[11] = new Fl_Value_Input
(L + 2 * WB, 2 * WB + 5 * BH, IW, BH, "Quadric subdivisions");
general.value[11]->minimum(3);
general.value[11]->maximum(30);
general.value[11]->step(1);
general.value[11]->align(FL_ALIGN_RIGHT);
general.value[11]->callback(general_options_ok_cb);
general.value[6] = new Fl_Value_Input
(L + 2 * WB, 2 * WB + 6 * BH, IW, BH, "Point size");
general.value[6]->minimum(0.1);
general.value[6]->maximum(50);
general.value[6]->step(0.1);
general.value[6]->align(FL_ALIGN_RIGHT);
general.value[6]->callback(general_options_ok_cb);
general.value[7] = new Fl_Value_Input
(L + 2 * WB, 2 * WB + 7 * BH, IW, BH, "Line width");
general.value[7]->minimum(0.1);
general.value[7]->maximum(50);
general.value[7]->step(0.1);
general.value[7]->align(FL_ALIGN_RIGHT);
general.value[7]->callback(general_options_ok_cb);
static Fl_Menu_Item menu_genvectype[] = {
{"Line", 0, 0, 0},
{"Arrow", 0, 0, 0},
{"Pyramid", 0, 0, 0},
{"3D arrow", 0, 0, 0},
{0}
};
general.choice[0] = new Fl_Choice
(L + 2 * WB, 2 * WB + 8 * BH, IW, BH, "Vector display");
general.choice[0]->menu(menu_genvectype);
general.choice[0]->align(FL_ALIGN_RIGHT);
general.choice[0]->callback(general_options_ok_cb);
Fl_Button *b = new Fl_Button
(L + 2 * IW - 2 * WB, 2 * WB + 8 * BH, BB, BH, "Edit arrow");
b->callback(general_arrow_param_cb);
int w1 = (int)(4. * IW / 5.), w2 = IW - w1;
general.choice[1] = new Fl_Choice(L + 2 * WB, 2 * WB + 9 * BH, w1, BH);
general.choice[1]->menu(menu_font_names);
general.choice[1]->align(FL_ALIGN_RIGHT);
general.choice[1]->callback(general_options_ok_cb);
general.value[12] = new Fl_Value_Input
(L + 2 * WB + w1, 2 * WB + 9 * BH, w2, BH, "Default font");
general.value[12]->minimum(5);
general.value[12]->maximum(40);
general.value[12]->step(1);
general.value[12]->align(FL_ALIGN_RIGHT);
general.value[12]->callback(general_options_ok_cb);
general.choice[6] = new Fl_Choice(L + 2 * WB, 2 * WB + 10 * BH, w1, BH);
general.choice[6]->menu(menu_font_names);
general.choice[6]->align(FL_ALIGN_RIGHT);
general.choice[6]->callback(general_options_ok_cb);
general.value[28] = new Fl_Value_Input
(L + 2 * WB + w1, 2 * WB + 10 * BH, w2, BH, "Title font");
general.value[28]->minimum(5);
general.value[28]->maximum(40);
general.value[28]->step(1);
general.value[28]->align(FL_ALIGN_RIGHT);
general.value[28]->callback(general_options_ok_cb);
o->end();
}
{
Fl_Group *o = new Fl_Group
(L + WB, WB + BH, width - 2 * WB, height - 2 * WB - BH, "Color");
o->hide();
general.value[2] = new Fl_Value_Input
(L + 2 * WB, 2 * WB + 1 * BH, IW/3, BH);
general.value[2]->minimum(-1.);
general.value[2]->maximum(1.);
general.value[2]->step(0.01);
general.value[2]->callback(general_options_ok_cb, (void*)"light_value");
general.value[3] = new Fl_Value_Input
(L + 2 * WB + IW / 3, 2 * WB + 1 * BH, IW/3, BH);
general.value[3]->minimum(-1.);
general.value[3]->maximum(1.);
general.value[3]->step(0.01);
general.value[3]->callback(general_options_ok_cb, (void*)"light_value");
general.value[4] = new Fl_Value_Input
(L + 2 * WB + 2 * IW / 3, 2 * WB + 1 * BH, IW/3, BH, "Light position");
general.value[4]->minimum(-1.);
general.value[4]->maximum(1.);
general.value[4]->step(0.01);
general.value[4]->align(FL_ALIGN_RIGHT);
general.value[4]->callback(general_options_ok_cb, (void*)"light_value");
general.value[13] = new Fl_Value_Input
(L + 2 * WB, 2 * WB + 2 * BH, IW, BH, "Light position divisor");
general.value[13]->minimum(0.);
general.value[13]->maximum(1.);
general.value[13]->step(0.01);
general.value[13]->align(FL_ALIGN_RIGHT);
general.value[13]->callback(general_options_ok_cb);
general.sphere = new spherePositionWidget
(L + width - 2 * BH - 2 * WB, 2 * WB + 1 * BH, 2 * BH);
general.sphere->callback(general_options_ok_cb, (void*)"light_sphere");
general.value[1] = new Fl_Value_Input
(L + 2 * WB, 2 * WB + 3 * BH, IW/2, BH);
general.value[1]->minimum(0);
general.value[1]->maximum(10);
general.value[1]->step(0.1);
general.value[1]->callback(general_options_ok_cb);
general.value[0] = new Fl_Value_Input
(L + 2 * WB + IW/2, 2 * WB + 3 * BH, IW/2, BH, "Material shininess/exponent");
general.value[0]->minimum(0);
general.value[0]->maximum(128);
general.value[0]->step(1);
general.value[0]->align(FL_ALIGN_RIGHT);
general.value[0]->callback(general_options_ok_cb);
static Fl_Menu_Item menu_color_scheme[] = {
{"Dark", 0, 0, 0},
{"Light", 0, 0, 0},
{"Grayscale", 0, 0, 0},
{0}
};
general.choice[3] = new Fl_Choice
(L + 2 * WB, 2 * WB + 4 * BH, IW, BH, "Predefined color scheme");
general.choice[3]->menu(menu_color_scheme);
general.choice[3]->align(FL_ALIGN_RIGHT);
general.choice[3]->tooltip("(Alt+c)");
general.choice[3]->callback(general_options_color_scheme_cb);
static Fl_Menu_Item menu_bg_grad[] = {
{"None", 0, 0, 0},
{"Vertical", 0, 0, 0},
{"Horizontal", 0, 0, 0},
{"Radial", 0, 0, 0},
{"Image", 0, 0, 0},
{0}
};
general.choice[5] = new Fl_Choice
(L + 2 * WB, 2 * WB + 5 * BH, IW, BH, "Background gradient");
general.choice[5]->menu(menu_bg_grad);
general.choice[5]->align(FL_ALIGN_RIGHT);
general.choice[5]->callback(general_options_ok_cb);
Fl_Scroll *s = new Fl_Scroll
(L + 2 * WB, 3 * WB + 6 * BH, IW + 20, height - 5 * WB - 6 * BH);
int i = 0;
while(GeneralOptions_Color[i].str) {
general.color[i] = new Fl_Button
(L + 2 * WB, 3 * WB + (6 + i) * BH, IW, BH, GeneralOptions_Color[i].str);
general.color[i]->callback(color_cb, (void *)GeneralOptions_Color[i].function);
i++;
}
s->end();
o->end();
}
{
Fl_Group *o = new Fl_Group
(L + WB, WB + BH, width - 2 * WB, height - 2 * WB - BH, "Camera");
o->hide();
general.butt[18] = new Fl_Check_Button
(L + 2 * WB, 2 * WB + 1 * BH, BW, BH, "Enable camera (experimental)");
general.butt[18]->type(FL_TOGGLE_BUTTON);
general.butt[18]->callback(general_options_ok_cb, (void*)"general_camera");
general.butt[17] = new Fl_Check_Button
(L + 2 * WB, 2 * WB + 2 * BH, BW, BH, "Enable stereo rendering (experimental)");
general.butt[17]->type(FL_TOGGLE_BUTTON);
general.butt[17]->callback(general_options_ok_cb);
general.value[29] = new Fl_Value_Input
(L + 2 * WB, 2 * WB + 3 * BH, IW, BH, "Eye separation ratio (%)");
general.value[29]->minimum(0.1);
general.value[29]->maximum(10.);
general.value[29]->step(.1);
general.value[29]->align(FL_ALIGN_RIGHT);
general.value[29]->callback(general_options_ok_cb);
general.value[30] = new Fl_Value_Input
(L + 2 * WB, 2 * WB + 4 * BH, IW, BH, "Focal length ratio (%)");
general.value[30]->minimum(0.1);
general.value[30]->maximum(10.);
general.value[30]->step(.1);
general.value[30]->align(FL_ALIGN_RIGHT);
general.value[30]->callback(general_options_ok_cb);
general.value[31] = new Fl_Value_Input
(L + 2 * WB, 2 * WB + 5 * BH, IW, BH, "Camera Aperture (degrees)");
general.value[31]->minimum(10.);
general.value[31]->maximum(120.);
general.value[31]->step(1);
general.value[31]->align(FL_ALIGN_RIGHT);
general.value[31]->callback(general_options_ok_cb);
o->end();
}
//end of new menu for stereo
o->end();
}
general.group->end();
// Geometry options
geo.group = new Fl_Group(L, 0, width, height, "Geometry Options");
geo.group->hide();
{
Fl_Tabs *o = new Fl_Tabs(L + WB, WB, width - 2 * WB, height - 2 * WB);
{
Fl_Group *o = new Fl_Group
(L + WB, WB + BH, width - 2 * WB, height - 2 * WB - BH, "General");
o->hide();
geo.value[2] = new Fl_Value_Input
(L + 2 * WB, 2 * WB + 1 * BH, IW, BH, "Geometry tolerance");
geo.value[2]->align(FL_ALIGN_RIGHT);
geo.value[2]->callback(geometry_options_ok_cb);
geo.butt[8] = new Fl_Check_Button
(L + 2 * WB, 2 * WB + 2 * BH, BW, BH, "Remove duplicate entities in GEO model transforms");
geo.butt[8]->type(FL_TOGGLE_BUTTON);
geo.butt[8]->callback(geometry_options_ok_cb);
Fl_Box* b = new Fl_Box(L + 2 * WB, 2 * WB + 3 * BH, BW, 2);
b->box(FL_ENGRAVED_FRAME);
b->labeltype(FL_NO_LABEL);
Fl_Box *b2 = new Fl_Box
(FL_NO_BOX, L + 2 * WB, 2 * WB + 3 * BH + 1, IW, BH, "Open CASCADE model healing options (experimental):");
b2->align(FL_ALIGN_INSIDE|FL_ALIGN_LEFT);
geo.butt[16] = new Fl_Check_Button
(L + 2 * WB, 2 * WB + 4 * BH, BW, BH, "Remove degenerated edges and faces");
geo.butt[16]->type(FL_TOGGLE_BUTTON);
geo.butt[16]->callback(geometry_options_ok_cb);
geo.butt[11] = new Fl_Check_Button
(L + 2 * WB, 2 * WB + 5 * BH, BW, BH, "Remove small edges");
geo.butt[11]->type(FL_TOGGLE_BUTTON);
geo.butt[11]->callback(geometry_options_ok_cb);
geo.butt[12] = new Fl_Check_Button
(L + 2 * WB, 2 * WB + 6 * BH, BW, BH, "Remove small faces");
geo.butt[12]->type(FL_TOGGLE_BUTTON);
geo.butt[12]->callback(geometry_options_ok_cb);
geo.butt[13] = new Fl_Check_Button
(L + 2 * WB, 2 * WB + 7 * BH, BW, BH, "Sew faces");
geo.butt[13]->type(FL_TOGGLE_BUTTON);
geo.butt[13]->callback(geometry_options_ok_cb);
geo.butt[15] = new Fl_Check_Button
(L + 2 * WB, 2 * WB + 8 * BH, BW, BH, "Cut and merge faces");
geo.butt[15]->type(FL_TOGGLE_BUTTON);
geo.butt[15]->callback(geometry_options_ok_cb);
#if !defined(HAVE_OCC)
b2->deactivate();
geo.butt[16]->deactivate();
geo.butt[11]->deactivate();
geo.butt[12]->deactivate();
geo.butt[13]->deactivate();
geo.butt[15]->deactivate();
#endif
o->end();
}
{
Fl_Group *o = new Fl_Group
(L + WB, WB + BH, width - 2 * WB, height - 2 * WB - BH, "Visibility");
geo.butt[0] = new Fl_Check_Button
(L + 2 * WB, 2 * WB + 1 * BH, BW / 2 - WB, BH, "Points");
geo.butt[0]->tooltip("(Alt+p)");
geo.butt[0]->type(FL_TOGGLE_BUTTON);
geo.butt[0]->callback(geometry_options_ok_cb);
geo.butt[1] = new Fl_Check_Button
(L + 2 * WB, 2 * WB + 2 * BH, BW / 2 - WB, BH, "Lines");
geo.butt[1]->tooltip("(Alt+l)");
geo.butt[1]->type(FL_TOGGLE_BUTTON);
geo.butt[1]->callback(geometry_options_ok_cb);
geo.butt[2] = new Fl_Check_Button
(L + 2 * WB, 2 * WB + 3 * BH, BW / 2 - WB, BH, "Surfaces");
geo.butt[2]->tooltip("(Alt+s)");
geo.butt[2]->type(FL_TOGGLE_BUTTON);
geo.butt[2]->callback(geometry_options_ok_cb);
geo.butt[3] = new Fl_Check_Button
(L + 2 * WB, 2 * WB + 4 * BH, BW / 2 - WB, BH, "Volumes");
geo.butt[3]->tooltip("(Alt+v)");
geo.butt[3]->type(FL_TOGGLE_BUTTON);
geo.butt[3]->callback(geometry_options_ok_cb);
geo.butt[4] = new Fl_Check_Button
(L + width / 2, 2 * WB + 1 * BH, BW / 2 - WB, BH, "Point labels");
geo.butt[4]->type(FL_TOGGLE_BUTTON);
geo.butt[4]->callback(geometry_options_ok_cb);
geo.butt[5] = new Fl_Check_Button
(L + width / 2, 2 * WB + 2 * BH, BW / 2 - WB, BH, "Line labels");
geo.butt[5]->type(FL_TOGGLE_BUTTON);
geo.butt[5]->callback(geometry_options_ok_cb);
geo.butt[6] = new Fl_Check_Button
(L + width / 2, 2 * WB + 3 * BH, BW / 2 - WB, BH, "Surface labels");
geo.butt[6]->type(FL_TOGGLE_BUTTON);
geo.butt[6]->callback(geometry_options_ok_cb);
geo.butt[7] = new Fl_Check_Button
(L + width / 2, 2 * WB + 4 * BH, BW / 2 - WB, BH, "Volume labels");
geo.butt[7]->type(FL_TOGGLE_BUTTON);
geo.butt[7]->callback(geometry_options_ok_cb);
static Fl_Menu_Item menu_label_type[] = {
{"Elementary tags", 0, 0, 0},
{"Physical tags", 0, 0, 0},
{0}
};
geo.choice[4] = new Fl_Choice
(L + 2 * WB, 2 * WB + 5 * BH, IW, BH, "Label type");
geo.choice[4]->menu(menu_label_type);
geo.choice[4]->align(FL_ALIGN_RIGHT);
geo.choice[4]->callback(geometry_options_ok_cb);
geo.value[0] = new Fl_Value_Input
(L + 2 * WB, 2 * WB + 6 * BH, IW / 2, BH);
geo.value[0]->minimum(0);
geo.value[0]->maximum(500);
geo.value[0]->step(1);
geo.value[0]->align(FL_ALIGN_RIGHT);
geo.value[0]->when(FL_WHEN_RELEASE);
geo.value[0]->callback(geometry_options_ok_cb);
geo.value[1] = new Fl_Value_Input
(L + 2 * WB + IW / 2, 2 * WB + 6 * BH, IW / 2, BH, "Normals and tangents");
geo.value[1]->minimum(0);
geo.value[1]->maximum(500);
geo.value[1]->step(1);
geo.value[1]->align(FL_ALIGN_RIGHT);
geo.value[1]->when(FL_WHEN_RELEASE);
geo.value[1]->callback(geometry_options_ok_cb);
geo.butt[17] = new Fl_Check_Button
(L + 2 * WB, 2 * WB + 7 * BH, BW, BH, "Hide entities making up coumpounds");
geo.butt[17]->type(FL_TOGGLE_BUTTON);
geo.butt[17]->callback(geometry_options_ok_cb);
o->end();
}
{
Fl_Group *o = new Fl_Group
(L + WB, WB + BH, width - 2 * WB, height - 2 * WB - BH, "Transfo");
o->hide();
static Fl_Menu_Item menu_transform[] = {
{"None", 0, 0, 0},
{"Scaling", 0, 0, 0},
{0}
};
geo.choice[3] = new Fl_Choice
(L + 2 * WB, 2 * WB + 1 * BH, IW, BH, "Main window transform");
geo.choice[3]->menu(menu_transform);
geo.choice[3]->align(FL_ALIGN_RIGHT);
geo.choice[3]->callback(geometry_options_ok_cb, (void*)"geo_transform");
int ss = 2 * IW / 3 / 3 + 4;
geo.value[7] = new Fl_Value_Input
(L + 2 * WB , 2 * WB + 2 * BH, ss, BH);
geo.value[8] = new Fl_Value_Input
(L + 2 * WB + ss , 2 * WB + 2 * BH, ss, BH);
geo.value[9] = new Fl_Value_Input
(L + 2 * WB + 2*ss, 2 * WB + 2 * BH, ss, BH, " X");
geo.value[10] = new Fl_Value_Input
(L + 2 * WB + IW , 2 * WB + 2 * BH, 7*IW/10, BH);
geo.value[11] = new Fl_Value_Input
(L + 2 * WB , 2 * WB + 3 * BH, ss, BH);
geo.value[12] = new Fl_Value_Input
(L + 2 * WB + ss , 2 * WB + 3 * BH, ss, BH);
geo.value[13] = new Fl_Value_Input
(L + 2 * WB + 2*ss, 2 * WB + 3 * BH, ss, BH, " Y +");
geo.value[14] = new Fl_Value_Input
(L + 2 * WB + IW , 2 * WB + 3 * BH, 7*IW/10, BH);
geo.value[15] = new Fl_Value_Input
(L + 2 * WB , 2 * WB + 4 * BH, ss, BH);
geo.value[16] = new Fl_Value_Input
(L + 2 * WB + ss , 2 * WB + 4 * BH, ss, BH);
geo.value[17] = new Fl_Value_Input
(L + 2 * WB + 2*ss, 2 * WB + 4 * BH, ss, BH, " Z");
geo.value[18] = new Fl_Value_Input
(L + 2 * WB + IW , 2 * WB + 4 * BH, 7*IW/10, BH);
for(int i = 7; i <= 18; i++){
geo.value[i]->minimum(-1.);
geo.value[i]->maximum(1.);
geo.value[i]->step(0.1);
geo.value[i]->align(FL_ALIGN_RIGHT);
geo.value[i]->when(FL_WHEN_RELEASE);
geo.value[i]->callback(geometry_options_ok_cb);
}
o->end();
}
{
Fl_Group *o = new Fl_Group
(L + WB, WB + BH, width - 2 * WB, height - 2 * WB - BH, "Aspect");
o->hide();
geo.choice[0] = new Fl_Choice
(L + 2 * WB, 2 * WB + 1 * BH, IW, BH, "Point display");
geo.choice[0]->menu(menu_point_display);
geo.choice[0]->align(FL_ALIGN_RIGHT);
geo.choice[0]->callback(geometry_options_ok_cb);
geo.value[3] = new Fl_Value_Input
(L + 2 * WB, 2 * WB + 2 * BH, IW, BH, "Point size");
geo.value[3]->minimum(0.1);
geo.value[3]->maximum(50);
geo.value[3]->step(0.1);
geo.value[3]->align(FL_ALIGN_RIGHT);
geo.value[3]->callback(geometry_options_ok_cb);
geo.value[5] = new Fl_Value_Input
(L + 2 * WB, 2 * WB + 3 * BH, IW, BH, "Selected point size");
geo.value[5]->minimum(0.1);
geo.value[5]->maximum(50);
geo.value[5]->step(0.1);
geo.value[5]->align(FL_ALIGN_RIGHT);
geo.value[5]->callback(geometry_options_ok_cb);
geo.choice[1] = new Fl_Choice
(L + 2 * WB, 2 * WB + 4 * BH, IW, BH, "Line display");
geo.choice[1]->menu(menu_line_display);
geo.choice[1]->align(FL_ALIGN_RIGHT);
geo.choice[1]->callback(geometry_options_ok_cb);
geo.value[4] = new Fl_Value_Input
(L + 2 * WB, 2 * WB + 5 * BH, IW, BH, "Line width");
geo.value[4]->minimum(0.1);
geo.value[4]->maximum(50);
geo.value[4]->step(0.1);
geo.value[4]->align(FL_ALIGN_RIGHT);
geo.value[4]->callback(geometry_options_ok_cb);
geo.value[6] = new Fl_Value_Input
(L + 2 * WB, 2 * WB + 6 * BH, IW, BH, "Selected line width");
geo.value[6]->minimum(0.1);
geo.value[6]->maximum(50);
geo.value[6]->step(0.1);
geo.value[6]->align(FL_ALIGN_RIGHT);
geo.value[6]->callback(geometry_options_ok_cb);
geo.value[19] = new Fl_Value_Input
(L + 2 * WB, 2 * WB + 7 * BH, IW, BH, "Curve subdivisions");
geo.value[19]->minimum(1);
geo.value[19]->maximum(50);
geo.value[19]->step(1);
geo.value[19]->align(FL_ALIGN_RIGHT);
geo.value[19]->callback(geometry_options_ok_cb);
geo.choice[2] = new Fl_Choice
(L + 2 * WB, 2 * WB + 8 * BH, IW, BH, "Surface display");
geo.choice[2]->menu(menu_surface_display);
geo.choice[2]->align(FL_ALIGN_RIGHT);
geo.choice[2]->callback(geometry_options_ok_cb);
geo.choice[2]->tooltip("(Alt+d)");
o->end();
}
{
Fl_Group *o = new Fl_Group
(L + WB, WB + BH, width - 2 * WB, height - 2 * WB - BH, "Color");
o->hide();
geo.butt[9] = new Fl_Check_Button
(L + 2 * WB, 2 * WB + 1 * BH, BW, BH, "Enable lighting");
geo.butt[9]->type(FL_TOGGLE_BUTTON);
geo.butt[9]->tooltip("(Alt+w)");
geo.butt[9]->callback(geometry_options_ok_cb);
geo.butt[14] = new Fl_Check_Button
(L + 2 * WB, 2 * WB + 2 * BH, BW, BH, "Use two-side lighting");
geo.butt[14]->type(FL_TOGGLE_BUTTON);
geo.butt[14]->callback(geometry_options_ok_cb);
geo.butt[10] = new Fl_Check_Button
(L + 2 * WB, 2 * WB + 3 * BH, BW, BH, "Highlight orphan entities");
geo.butt[10]->type(FL_TOGGLE_BUTTON);
geo.butt[10]->callback(geometry_options_ok_cb);
Fl_Scroll *s = new Fl_Scroll
(L + 2 * WB, 2 * WB + 4 * BH, IW + 20, height - 4 * WB - 4 * BH);
int i = 0;
while(GeometryOptions_Color[i].str) {
geo.color[i] = new Fl_Button
(L + 2 * WB, 2 * WB + (4 + i) * BH, IW, BH, GeometryOptions_Color[i].str);
geo.color[i]->callback(color_cb, (void *)GeometryOptions_Color[i].function);
i++;
}
s->end();
o->end();
}
o->end();
}
geo.group->end();
// Mesh options
mesh.group = new Fl_Group(L, 0, width, height, "Mesh Options");
mesh.group->hide();
{
Fl_Tabs *o = new Fl_Tabs(L + WB, WB, width - 2 * WB, height - 2 * WB);
{
Fl_Group *o = new Fl_Group
(L + WB, WB + BH, width - 2 * WB, height - 2 * WB - BH, "General");
o->hide();
static Fl_Menu_Item menu_2d_algo[] = {
{"Automatic", 0, 0, 0},
{"MeshAdapt", 0, 0, 0},
{"Delaunay", 0, 0, 0},
{"Frontal", 0, 0, 0},
{"Delaunay for quads", 0, 0, 0},
{"Packing Of Parallelograms", 0, 0, 0},
{0}
};
static Fl_Menu_Item menu_3d_algo[] = {
{"Delaunay", 0, 0, 0},
{"Frontal", 0, 0, 0},
{"Frontal Delaunay", 0, 0, 0},
{"Frontal Hex", 0, 0, 0},
{"MMG3D", 0, 0, 0},
{"R-tree", 0, 0, 0},
{0}
};
static Fl_Menu_Item menu_recombination_algo[] = {
{"Standard", 0, 0, 0},
{"Blossom", 0, 0, 0},
{0}
};
static Fl_Menu_Item menu_subdivision_algo[] = {
{"None", 0, 0, 0},
{"All Quads", 0, 0, 0},
{"All Hexas", 0, 0, 0},
{0}
};
static Fl_Menu_Item menu_remeshing_algo[] = {
{"No split", 0, 0, 0},
{"Automatic", 0, 0, 0},
{"Automatic only with Metis", 0, 0, 0},
{0}
};
static Fl_Menu_Item menu_remeshing_param[] = {
{"Harmonic", 0, 0, 0},
{"Conformal", 0, 0, 0},
{"Rbf Harmonic", 0, 0, 0},
{0}
};
mesh.choice[2] = new Fl_Choice
(L + 2 * WB, 2 * WB + 1 * BH, IW, BH, "2D algorithm");
mesh.choice[2]->menu(menu_2d_algo);
mesh.choice[2]->align(FL_ALIGN_RIGHT);
mesh.choice[2]->callback(mesh_options_ok_cb);
mesh.choice[3] = new Fl_Choice
(L + 2 * WB, 2 * WB + 2 * BH, IW, BH, "3D algorithm");
mesh.choice[3]->menu(menu_3d_algo);
mesh.choice[3]->align(FL_ALIGN_RIGHT);
mesh.choice[3]->callback(mesh_options_ok_cb);
mesh.choice[1] = new Fl_Choice
(L + 2 * WB, 2 * WB + 3 * BH, IW, BH, "2D recombination algorithm");
mesh.choice[1]->menu(menu_recombination_algo);
mesh.choice[1]->align(FL_ALIGN_RIGHT);
mesh.choice[1]->callback(mesh_options_ok_cb);
mesh.butt[21] = new Fl_Check_Button
(L + 2 * WB, 2 * WB + 4 * BH, BW, BH, "Recombine all triangular meshes");
mesh.butt[21]->type(FL_TOGGLE_BUTTON);
mesh.butt[21]->callback(mesh_options_ok_cb);
mesh.butt[22] = new Fl_Check_Button
(L + 2 * WB, 2 * WB + 5 * BH, BW, BH, "Recombine all tets into (dominant) hex meshes");
mesh.butt[22]->type(FL_TOGGLE_BUTTON);
mesh.butt[22]->callback(mesh_options_ok_cb);
mesh.choice[5] = new Fl_Choice
(L + 2 * WB, 2 * WB + 6 * BH, IW, BH, "Subdivision algorithm");
mesh.choice[5]->menu(menu_subdivision_algo);
mesh.choice[5]->align(FL_ALIGN_RIGHT);
mesh.choice[5]->callback(mesh_options_ok_cb);
mesh.choice[8] = new Fl_Choice
(L + 2 * WB, 2 * WB + 7 * BH, IW, BH, "Remeshing algorithm");
mesh.choice[8]->menu(menu_remeshing_algo);
mesh.choice[8]->align(FL_ALIGN_RIGHT);
mesh.choice[8]->callback(mesh_options_ok_cb);
mesh.choice[9] = new Fl_Choice
(L + 2 * WB, 2 * WB + 8 * BH, IW, BH, "Remeshing parametrization");
mesh.choice[9]->menu(menu_remeshing_param);
mesh.choice[9]->align(FL_ALIGN_RIGHT);
mesh.choice[9]->callback(mesh_options_ok_cb);
mesh.value[0] = new Fl_Value_Input
(L + 2 * WB, 2 * WB + 9 * BH, IW, BH, "Smoothing steps");
mesh.value[0]->minimum(0);
mesh.value[0]->maximum(100);
mesh.value[0]->step(1);
mesh.value[0]->align(FL_ALIGN_RIGHT);
mesh.value[0]->callback(mesh_options_ok_cb);
mesh.value[27] = new Fl_Value_Input
(L + 2 * WB, 2 * WB + 10 * BH, IW, BH, "LLoyd Smoothing steps");
mesh.value[27]->minimum(0);
mesh.value[27]->maximum(100);
mesh.value[27]->step(1);
mesh.value[27]->align(FL_ALIGN_RIGHT);
mesh.value[27]->callback(mesh_options_ok_cb);
mesh.value[2] = new Fl_Value_Input
(L + 2 * WB, 2 * WB + 11 * BH, IW, BH, "Element size factor");
mesh.value[2]->minimum(0.001);
mesh.value[2]->maximum(1000);
mesh.value[2]->step(0.01);
mesh.value[2]->align(FL_ALIGN_RIGHT);
mesh.value[2]->callback(mesh_options_ok_cb);
mesh.value[25] = new Fl_Value_Input
(L + 2 * WB, 2 * WB + 12 * BH, IW/2, BH);
mesh.value[25]->align(FL_ALIGN_RIGHT);
mesh.value[25]->callback(mesh_options_ok_cb);
mesh.value[26] = new Fl_Value_Input
(L + 2 * WB + IW/2, 2 * WB + 12 * BH, IW/2, BH, "Min/Max element size");
mesh.value[26]->align(FL_ALIGN_RIGHT);
mesh.value[26]->callback(mesh_options_ok_cb);
mesh.value[3] = new Fl_Value_Input
(L + 2 * WB, 2 * WB + 13 * BH, IW / 3, BH, "Element order");
mesh.value[3]->minimum(1);
mesh.value[3]->maximum(2);
mesh.value[3]->step(1);
mesh.value[3]->align(FL_ALIGN_RIGHT);
mesh.value[3]->callback(mesh_options_ok_cb);
mesh.butt[4] = new Fl_Check_Button
(L + 2 * WB + IW + WB / 2, 2 * WB + 13 * BH, BW, BH, "Use incomplete elements");
mesh.butt[4]->type(FL_TOGGLE_BUTTON);
mesh.butt[4]->callback(mesh_options_ok_cb);
o->end();
}
{
Fl_Group *o = new Fl_Group
(L + WB, WB + BH, width - 2 * WB, height - 2 * WB - BH, "Advanced");
o->hide();
mesh.butt[5] = new Fl_Check_Button
(L + 2 * WB, 2 * WB + 1 * BH, BW, BH, "Compute element sizes using point values");
mesh.butt[5]->type(FL_TOGGLE_BUTTON);
mesh.butt[5]->callback(mesh_options_ok_cb);
mesh.butt[1] = new Fl_Check_Button
(L + 2 * WB, 2 * WB + 2 * BH, BW, BH, "Compute element sizes from curvature (experimental)" );
mesh.butt[1]->type(FL_TOGGLE_BUTTON);
mesh.butt[1]->callback(mesh_options_ok_cb);
mesh.butt[16] = new Fl_Check_Button
(L + 2 * WB, 2 * WB + 3 * BH, BW, BH, "Extend element sizes from boundary");
mesh.butt[16]->type(FL_TOGGLE_BUTTON);
mesh.butt[16]->callback(mesh_options_ok_cb);
mesh.butt[2] = new Fl_Check_Button
(L + 2 * WB, 2 * WB + 4 * BH, BW, BH, "Optimize quality of tetrahedra");
mesh.butt[2]->type(FL_TOGGLE_BUTTON);
mesh.butt[2]->callback(mesh_options_ok_cb);
mesh.butt[24] = new Fl_Check_Button
(L + 2 * WB, 2 * WB + 5 * BH, BW, BH, "Optimize quality of tetrahedra with Netgen");
mesh.butt[24]->type(FL_TOGGLE_BUTTON);
#if !defined(HAVE_NETGEN)
mesh.butt[24]->deactivate();
#endif
mesh.butt[24]->callback(mesh_options_ok_cb);
mesh.butt[3] = new Fl_Check_Button
(L + 2 * WB, 2 * WB + 6 * BH, BW, BH, "Optimize high order 2D planar meshes (experimental)");
mesh.butt[3]->type(FL_TOGGLE_BUTTON);
mesh.butt[3]->callback(mesh_options_ok_cb);
mesh.butt[25] = new Fl_Check_Button
(L + 2 * WB, 2 * WB + 7 * BH, BW, BH, "Try to remove 4 triangles nodes (experimental)");
mesh.butt[25]->type(FL_TOGGLE_BUTTON);
mesh.butt[25]->callback(mesh_options_ok_cb);
o->end();
}
{
Fl_Group *o = new Fl_Group
(L + WB, WB + BH, width - 2 * WB, height - 2 * WB - BH, "Visibility");
mesh.butt[6] = new Fl_Check_Button
(L + 2 * WB, 2 * WB + 1 * BH, BW / 2 - WB, BH, "Nodes");
mesh.butt[6]->tooltip("(Alt+Shift+p)");
mesh.butt[6]->type(FL_TOGGLE_BUTTON);
mesh.butt[6]->callback(mesh_options_ok_cb);
mesh.butt[7] = new Fl_Check_Button
(L + 2 * WB, 2 * WB + 2 * BH, BW / 2 - WB, BH, "Lines");
mesh.butt[7]->tooltip("(Alt+Shift+l)");
mesh.butt[7]->type(FL_TOGGLE_BUTTON);
mesh.butt[7]->callback(mesh_options_ok_cb);
mesh.butt[8] = new Fl_Check_Button
(L + 2 * WB, 2 * WB + 3 * BH, BW / 2 - WB, BH, "Surface edges");
mesh.butt[8]->tooltip("(Alt+Shift+s)");
mesh.butt[8]->type(FL_TOGGLE_BUTTON);
mesh.butt[8]->callback(mesh_options_ok_cb);
mesh.butt[9] = new Fl_Check_Button
(L + 2 * WB, 2 * WB + 4 * BH, BW / 2 - WB, BH, "Surface faces");
mesh.butt[9]->tooltip("(Alt+Shift+d)");
mesh.butt[9]->type(FL_TOGGLE_BUTTON);
mesh.butt[9]->callback(mesh_options_ok_cb);
mesh.butt[10] = new Fl_Check_Button
(L + 2 * WB, 2 * WB + 5 * BH, BW / 2 - WB, BH, "Volume edges");
mesh.butt[10]->tooltip("(Alt+Shift+v)");
mesh.butt[10]->type(FL_TOGGLE_BUTTON);
mesh.butt[10]->callback(mesh_options_ok_cb);
mesh.butt[11] = new Fl_Check_Button
(L + 2 * WB, 2 * WB + 6 * BH, BW / 2 - WB, BH, "Volume faces");
mesh.butt[11]->tooltip("(Alt+Shift+b)");
mesh.butt[11]->type(FL_TOGGLE_BUTTON);
mesh.butt[11]->callback(mesh_options_ok_cb);
mesh.butt[12] = new Fl_Check_Button
(L + width / 2, 2 * WB + 1 * BH, BW / 2 - WB, BH, "Node labels");
mesh.butt[12]->type(FL_TOGGLE_BUTTON);
mesh.butt[12]->callback(mesh_options_ok_cb);
mesh.butt[13] = new Fl_Check_Button
(L + width / 2, 2 * WB + 2 * BH, BW / 2 - WB, BH, "Line labels");
mesh.butt[13]->type(FL_TOGGLE_BUTTON);
mesh.butt[13]->callback(mesh_options_ok_cb);
mesh.butt[14] = new Fl_Check_Button
(L + width / 2, 2 * WB + 3 * BH, BW / 2 - WB, BH, "Surface labels");
mesh.butt[14]->type(FL_TOGGLE_BUTTON);
mesh.butt[14]->callback(mesh_options_ok_cb);
mesh.butt[15] = new Fl_Check_Button
(L + width / 2, 2 * WB + 4 * BH, BW / 2 - WB, BH, "Volume labels");
mesh.butt[15]->type(FL_TOGGLE_BUTTON);
mesh.butt[15]->callback(mesh_options_ok_cb);
static Fl_Menu_Item menu_label_type[] = {
{"Number", 0, 0, 0},
{"Elementary tag", 0, 0, 0},
{"Physical tag", 0, 0, 0},
{"Mesh partition", 0, 0, 0},
{"Coordinates", 0, 0, 0},
{0}
};
mesh.choice[7] = new Fl_Choice
(L + 2 * WB, 2 * WB + 7 * BH, IW, BH, "Label type");
mesh.choice[7]->menu(menu_label_type);
mesh.choice[7]->align(FL_ALIGN_RIGHT);
mesh.choice[7]->callback(mesh_options_ok_cb);
mesh.value[12] = new Fl_Value_Input
(L + 2 * width / 3 - 2 * WB, 2 * WB + 7 * BH, width / 8, BH, "Sampling");
mesh.value[12]->minimum(1);
mesh.value[12]->maximum(100);
mesh.value[12]->step(1);
mesh.value[12]->align(FL_ALIGN_RIGHT);
mesh.value[12]->when(FL_WHEN_RELEASE);
mesh.value[12]->callback(mesh_options_ok_cb);
static Fl_Menu_Item menu_mesh_element_types[] = {
{"Triangles", 0, 0, 0, FL_MENU_TOGGLE},
{"Quadrangles", 0, 0, 0, FL_MENU_TOGGLE},
{"Tetrahedra", 0, 0, 0, FL_MENU_TOGGLE},
{"Hexahedra", 0, 0, 0, FL_MENU_TOGGLE},
{"Prisms", 0, 0, 0, FL_MENU_TOGGLE},
{"Pyramids", 0, 0, 0, FL_MENU_TOGGLE},
{0}
};
mesh.menu = new Fl_Menu_Button
(L + 2 * WB, 2 * WB + 8 * BH, IW, BH, "Elements");
mesh.menu->menu(menu_mesh_element_types);
mesh.menu->callback(mesh_options_ok_cb);
mesh.value[4] = new Fl_Value_Input
(L + 2 * WB, 2 * WB + 9 * BH, IW / 4, BH);
mesh.value[4]->minimum(0);
mesh.value[4]->maximum(1);
mesh.value[4]->step(0.01);
mesh.value[4]->align(FL_ALIGN_RIGHT);
mesh.value[4]->when(FL_WHEN_RELEASE);
mesh.value[4]->callback(mesh_options_ok_cb);
mesh.value[5] = new Fl_Value_Input
(L + 2 * WB + IW / 4, 2 * WB + 9 * BH, IW / 2 - IW / 4, BH);
mesh.value[5]->minimum(0);
mesh.value[5]->maximum(1);
mesh.value[5]->step(0.01);
mesh.value[5]->align(FL_ALIGN_RIGHT);
mesh.value[5]->when(FL_WHEN_RELEASE);
mesh.value[5]->callback(mesh_options_ok_cb);
static Fl_Menu_Item menu_quality_type[] = {
{"Gamma", 0, 0, 0},
{"Eta", 0, 0, 0},
{"Rho", 0, 0, 0},
{"Disto", 0, 0, 0},
{0}
};
mesh.choice[6] = new Fl_Choice
(L + 2 * WB + IW / 2, 2 * WB + 9 * BH, IW/2, BH, "Quality range");
mesh.choice[6]->menu(menu_quality_type);
mesh.choice[6]->align(FL_ALIGN_RIGHT);
mesh.choice[6]->callback(mesh_options_ok_cb);
mesh.value[6] = new Fl_Value_Input
(L + 2 * WB, 2 * WB + 10 * BH, IW / 2, BH);
mesh.value[6]->align(FL_ALIGN_RIGHT);
mesh.value[6]->when(FL_WHEN_RELEASE);
mesh.value[6]->callback(mesh_options_ok_cb);
mesh.value[7] = new Fl_Value_Input
(L + 2 * WB + IW / 2, 2 * WB + 10 * BH, IW / 2, BH, "Size range");
mesh.value[7]->align(FL_ALIGN_RIGHT);
mesh.value[7]->when(FL_WHEN_RELEASE);
mesh.value[7]->callback(mesh_options_ok_cb);
mesh.value[8] = new Fl_Value_Input
(L + 2 * WB, 2 * WB + 11 * BH, IW / 2, BH);
mesh.value[8]->minimum(0);
mesh.value[8]->maximum(500);
mesh.value[8]->step(1);
mesh.value[8]->align(FL_ALIGN_RIGHT);
mesh.value[8]->when(FL_WHEN_RELEASE);
mesh.value[8]->callback(mesh_options_ok_cb);
mesh.value[13] = new Fl_Value_Input
(L + 2 * WB + IW / 2, 2 * WB + 11 * BH, IW / 2, BH, "Normals and tangents");
mesh.value[13]->minimum(0);
mesh.value[13]->maximum(200);
mesh.value[13]->step(1.0);
mesh.value[13]->align(FL_ALIGN_RIGHT);
mesh.value[13]->when(FL_WHEN_RELEASE);
mesh.value[13]->callback(mesh_options_ok_cb);
o->end();
}
{
Fl_Group *o = new Fl_Group
(L + WB, WB + BH, width - 2 * WB, height - 2 * WB - BH, "Aspect");
o->hide();
mesh.value[9] = new Fl_Value_Input
(L + 2 * WB, 2 * WB + 1 * BH, IW, BH, "Element shrinking factor");
mesh.value[9]->minimum(0);
mesh.value[9]->maximum(1);
mesh.value[9]->step(0.01);
mesh.value[9]->align(FL_ALIGN_RIGHT);
mesh.value[9]->when(FL_WHEN_RELEASE);
mesh.value[9]->callback(mesh_options_ok_cb);
mesh.choice[0] = new Fl_Choice
(L + 2 * WB, 2 * WB + 2 * BH, IW, BH, "Point display");
mesh.choice[0]->menu(menu_point_display);
mesh.choice[0]->align(FL_ALIGN_RIGHT);
mesh.choice[0]->callback(mesh_options_ok_cb);
mesh.value[10] = new Fl_Value_Input
(L + 2 * WB, 2 * WB + 3 * BH, IW, BH, "Point size");
mesh.value[10]->minimum(0.1);
mesh.value[10]->maximum(50);
mesh.value[10]->step(0.1);
mesh.value[10]->align(FL_ALIGN_RIGHT);
mesh.value[10]->callback(mesh_options_ok_cb);
mesh.value[11] = new Fl_Value_Input
(L + 2 * WB, 2 * WB + 4 * BH, IW, BH, "Line width");
mesh.value[11]->minimum(0.1);
mesh.value[11]->maximum(50);
mesh.value[11]->step(0.1);
mesh.value[11]->align(FL_ALIGN_RIGHT);
mesh.value[11]->callback(mesh_options_ok_cb);
mesh.value[14] = new Fl_Value_Input
(L + 2 * WB, 2 * WB + 5 * BH, IW, BH, "High-order element subdivisions");
mesh.value[14]->minimum(1);
mesh.value[14]->maximum(10);
mesh.value[14]->step(1);
mesh.value[14]->align(FL_ALIGN_RIGHT);
mesh.value[14]->when(FL_WHEN_RELEASE);
mesh.value[14]->callback(mesh_options_ok_cb);
o->end();
}
{
Fl_Group *o = new Fl_Group
(L + WB, WB + BH, width - 2 * WB, height - 2 * WB - BH, "Color");
o->hide();
mesh.butt[17] = new Fl_Check_Button
(L + 2 * WB, 2 * WB + 1 * BH, BW, BH, "Enable lighting");
mesh.butt[17]->tooltip("(Alt+w)");
mesh.butt[17]->type(FL_TOGGLE_BUTTON);
mesh.butt[17]->callback(mesh_options_ok_cb, (void*)"mesh_light");
mesh.butt[20] = new Fl_Check_Button
(L + 2 * WB, 2 * WB + 2 * BH, BW, BH, "Enable lighting of lines");
mesh.butt[20]->type(FL_TOGGLE_BUTTON);
mesh.butt[20]->callback(mesh_options_ok_cb);
mesh.butt[18] = new Fl_Check_Button
(L + 2 * WB, 2 * WB + 3 * BH, BW, BH, "Use two-side lighting");
mesh.butt[18]->type(FL_TOGGLE_BUTTON);
mesh.butt[18]->callback(mesh_options_ok_cb);
mesh.butt[0] = new Fl_Check_Button
(L + 2 * WB, 2 * WB + 4 * BH, BW, BH, "Reverse all normals");
mesh.butt[0]->tooltip("(Alt+Shift+w)");
mesh.butt[0]->type(FL_TOGGLE_BUTTON);
mesh.butt[0]->callback(mesh_options_ok_cb);
mesh.butt[19] = new Fl_Check_Button
(L + 2 * WB, 2 * WB + 5 * BH, BW, BH, "Smooth normals");
mesh.butt[19]->type(FL_TOGGLE_BUTTON);
mesh.butt[19]->callback(mesh_options_ok_cb);
mesh.value[18] = new Fl_Value_Input
(L + 2 * WB, 2 * WB + 6 * BH, IW, BH, "Smoothing threshold angle");
mesh.value[18]->minimum(0.);
mesh.value[18]->maximum(180.);
mesh.value[18]->step(1.);
mesh.value[18]->align(FL_ALIGN_RIGHT);
mesh.value[18]->when(FL_WHEN_RELEASE);
mesh.value[18]->callback(mesh_options_ok_cb);
static Fl_Menu_Item menu_mesh_color[] = {
{"By element type", 0, 0, 0},
{"By elementary entity", 0, 0, 0},
{"By physical group", 0, 0, 0},
{"By mesh partition", 0, 0, 0},
{0}
};
mesh.choice[4] = new Fl_Choice
(L + 2 * WB, 2 * WB + 7 * BH, IW, BH, "Coloring mode");
mesh.choice[4]->menu(menu_mesh_color);
mesh.choice[4]->align(FL_ALIGN_RIGHT);
mesh.choice[4]->callback(mesh_options_ok_cb);
Fl_Scroll *s = new Fl_Scroll
(L + 2 * WB, 3 * WB + 8 * BH, IW + 20, height - 5 * WB - 8 * BH);
int i = 0;
while(MeshOptions_Color[i].str) {
mesh.color[i] = new Fl_Button
(L + 2 * WB, 3 * WB + (8 + i) * BH, IW, BH, MeshOptions_Color[i].str);
mesh.color[i]->callback(color_cb, (void *)MeshOptions_Color[i].function);
i++;
}
s->end();
o->end();
}
o->end();
}
mesh.group->end();
// Solver options
solver.group = new Fl_Group(L, 0, width, height, "Solver Options");
solver.group->hide();
{
Fl_Tabs *o = new Fl_Tabs(L + WB, WB, width - 2 * WB, height - 2 * WB);
{
{
Fl_Group *o = new Fl_Group
(L + WB, WB + BH, width - 2 * WB, height - 2 * WB - BH, "General");
solver.input[0] = new Fl_Input
(L + 2 * WB, 2 * WB + 1 * BH, IW, BH, "Socket name");
solver.input[0]->align(FL_ALIGN_RIGHT);
solver.input[0]->callback(solver_options_ok_cb);
solver.value[0] = new Fl_Value_Input
(L + 2 * WB, 2 * WB + 2 * BH, IW, BH, "Timeout (s)");
solver.value[0]->align(FL_ALIGN_RIGHT);
solver.value[0]->callback(solver_options_ok_cb);
solver.butt[0] = new Fl_Check_Button
(L + 2 * WB, 2 * WB + 3 * BH, BW, BH,
"Always listen to incoming connection requests");
solver.butt[0]->type(FL_TOGGLE_BUTTON);
solver.butt[0]->callback(solver_options_ok_cb);
o->end();
}
}
o->end();
}
solver.group->end();
// Post-processing options
post.group = new Fl_Group(L, 0, width, height, "Post-processing Options");
post.group->hide();
{
Fl_Tabs *o = new Fl_Tabs(L + WB, WB, width - 2 * WB, height - 2 * WB);
{
Fl_Group *o = new Fl_Group
(L + WB, WB + BH, width - 2 * WB, height - 2 * WB - BH, "General");
static Fl_Menu_Item menu_links[] = {
{"None", 0, 0, 0},
{"Apply next changes to all visible views", 0, 0, 0},
{"Apply next changes to all views", 0, 0, 0},
{"Force same options for all visible views", 0, 0, 0},
{"Force same options for all views", 0, 0, 0},
{0}
};
post.choice[0] = new Fl_Choice
(L + 2 * WB, 2 * WB + 1 * BH, IW, BH, "View links");
post.choice[0]->menu(menu_links);
post.choice[0]->align(FL_ALIGN_RIGHT);
post.choice[0]->callback(post_options_ok_cb);
post.value[0] = new Fl_Value_Input
(L + 2 * WB, 2 * WB + 2 * BH, IW, BH, "Frame duration (in seconds)");
post.value[0]->minimum(0);
post.value[0]->maximum(10);
post.value[0]->step(0.01);
post.value[0]->align(FL_ALIGN_RIGHT);
post.value[0]->callback(post_options_ok_cb);
post.value[1] = new Fl_Value_Input
(L + 2 * WB, 2 * WB + 3 * BH, IW, BH, "Animation increment step");
post.value[1]->minimum(1);
post.value[1]->maximum(100);
post.value[1]->step(1);
post.value[1]->align(FL_ALIGN_RIGHT);
post.value[1]->callback(post_options_ok_cb);
post.butt[0] = new Fl_Check_Button
(L + 2 * WB, 2 * WB + 4 * BH, BW, BH, "Cycle through views instead of time steps");
post.butt[0]->type(FL_TOGGLE_BUTTON);
post.butt[0]->callback(post_options_ok_cb);
post.butt[1] = new Fl_Check_Button
(L + 2 * WB, 2 * WB + 5 * BH, BW, BH, "Remove original views after combination");
post.butt[1]->type(FL_TOGGLE_BUTTON);
post.butt[1]->callback(post_options_ok_cb);
post.butt[2] = new Fl_Check_Button
(L + 2 * WB, 2 * WB + 6 * BH, BW, BH, "Draw value scales horizontally");
post.butt[2]->type(FL_TOGGLE_BUTTON);
post.butt[2]->callback(post_options_ok_cb);
o->end();
}
o->end();
}
post.group->end();
// View options
view.index = -1;
view.group = new Fl_Group(L, 0, width, height, "View Options");
view.group->hide();
{
Fl_Tabs *o = new Fl_Tabs(L + WB, WB, width - 2 * WB, height - 2 * WB);
{
Fl_Group *o = new Fl_Group
(L + WB, WB + BH, width - 2 * WB, height - 2 * WB - BH, "General");
static Fl_Menu_Item menu_plot_type[] = {
{"3D", 0, 0, 0},
{"2D space", 0, 0, 0},
{"2D time", 0, 0, 0},
{"2D", 0, 0, 0},
{0}
};
view.choice[13] = new Fl_Choice
(L + 2 * WB, 2 * WB + 1 * BH, IW, BH, "Plot type");
view.choice[13]->menu(menu_plot_type);
view.choice[13]->align(FL_ALIGN_RIGHT);
view.choice[13]->callback(view_options_ok_cb);
view.input[0] = new Fl_Input
(L + 2 * WB, 2 * WB + 2 * BH, IW, BH, "View name");
view.input[0]->align(FL_ALIGN_RIGHT);
view.input[0]->callback(view_options_ok_cb);
int sw = (int)(1.5 * FL_NORMAL_SIZE);
view.push[3] = new Fl_Button
(L + 2 * WB, 2 * WB + 3 * BH, sw, BH, "-");
view.push[3]->callback(view_options_timestep_cb, (void*)"-");
view.push[4] = new Fl_Button
(L + 2 * WB + IW - sw, 2 * WB + 3 * BH, sw, BH, "+");
view.push[4]->callback(view_options_timestep_cb, (void*)"+");
view.value[50] = new Fl_Value_Input
(L + 2 * WB + sw, 2 * WB + 3 * BH, IW - 2 * sw, BH);
view.value[50]->callback(view_options_timestep_cb, (void*)"=");
view.value[50]->align(FL_ALIGN_RIGHT);
view.value[50]->minimum(0);
view.value[50]->maximum(0);
view.value[50]->step(1);
view.label[0] = new Fl_Box
(L + 2 * WB + IW, 2 * WB + 3 * BH, width / 2, BH, "Time step");
view.label[0]->box(FL_NO_BOX);
view.label[0]->align(FL_ALIGN_LEFT | FL_ALIGN_INSIDE);
view.range = new Fl_Group
(L + 2 * WB, 2 * WB + 4 * BH, width - 4 * WB, 8 * BH);
view.value[30] = new Fl_Value_Input
(L + 2 * WB, 2 * WB + 4 * BH, IW, BH, "Intervals");
view.value[30]->align(FL_ALIGN_RIGHT);
view.value[30]->minimum(1);
view.value[30]->maximum(256);
view.value[30]->step(1);
view.value[30]->when(FL_WHEN_RELEASE);
view.value[30]->callback(view_options_ok_cb);
view.input[1] = new Fl_Input
(L + width - (int)(0.85*IW) - 2 * WB, 2 * WB + 4 * BH, (int)(0.5*0.85*IW), BH,
"Format");
view.input[1]->align(FL_ALIGN_RIGHT);
view.input[1]->callback(view_options_ok_cb);
static Fl_Menu_Item menu_iso[] = {
{"Iso-values", 0, 0, 0},
{"Continuous map", 0, 0, 0},
{"Filled iso-values", 0, 0, 0},
{"Numeric values", 0, 0, 0},
{0}
};
view.choice[0] = new Fl_Choice
(L + 2 * WB, 2 * WB + 5 * BH, IW, BH, "Intervals type");
view.choice[0]->menu(menu_iso);
view.choice[0]->align(FL_ALIGN_RIGHT);
view.choice[0]->tooltip("(Alt+t)");
view.choice[0]->callback(view_options_ok_cb);
static Fl_Menu_Item menu_scale[] = {
{"Linear", 0, 0, 0},
{"Logarithmic", 0, 0, 0},
{"Double logarithmic", 0, 0, 0},
{0}
};
view.choice[1] = new Fl_Choice
(L + width - (int)(0.85*IW) - 2 * WB, 2 * WB + 5 * BH, (int)(0.85*IW), BH);
view.choice[1]->menu(menu_scale);
view.choice[1]->align(FL_ALIGN_RIGHT);
view.choice[1]->callback(view_options_ok_cb);
static Fl_Menu_Item menu_range[] = {
{"Default", 0, 0, 0},
{"Custom", 0, 0, 0},
{"Per time step", 0, 0, 0},
{0}
};
view.choice[7] = new Fl_Choice
(L + 2 * WB, 2 * WB + 6 * BH, IW, BH, "Range mode");
view.choice[7]->menu(menu_range);
view.choice[7]->align(FL_ALIGN_RIGHT);
view.choice[7]->tooltip("(Alt+r)");
view.choice[7]->callback(view_options_ok_cb, (void*)"custom_range");
view.butt[38] = new Fl_Check_Button
(L + width - (int)(0.85*IW) - 2 * WB, 2 * WB + 6 * BH, (int)(0.85*IW), BH,
"Saturate");
view.butt[38]->type(FL_TOGGLE_BUTTON);
view.butt[38]->callback(view_options_ok_cb);
int sw2 = (int)(2.5 * FL_NORMAL_SIZE);
view.push[1] = new Fl_Button
(L + 2 * WB, 2 * WB + 7 * BH, sw2, BH, "Min");
view.push[1]->callback(view_options_ok_cb, (void*)"range_min");
view.value[31] = new Fl_Value_Input
(L + 2 * WB + sw2, 2 * WB + 7 * BH, IW - sw2, BH, "Custom min");
view.value[31]->align(FL_ALIGN_RIGHT);
view.value[31]->when(FL_WHEN_RELEASE);
view.value[31]->callback(view_options_ok_cb);
view.push[2] = new Fl_Button
(L + 2 * WB, 2 * WB + 8 * BH, sw2, BH, "Max");
view.push[2]->callback(view_options_ok_cb, (void*)"range_max");
view.value[32] = new Fl_Value_Input
(L + 2 * WB + sw2, 2 * WB + 8 * BH, IW - sw2, BH, "Custom max");
view.value[32]->align(FL_ALIGN_RIGHT);
view.value[32]->when(FL_WHEN_RELEASE);
view.value[32]->callback(view_options_ok_cb);
view.butt[0] = new Fl_Check_Button
(L + 2 * WB, 2 * WB + 9 * BH, BW, BH, "Adapt visualization grid");
view.butt[0]->type(FL_TOGGLE_BUTTON);
view.butt[0]->callback(view_options_ok_cb, (void*)"view_adaptive");
view.push[5] = new Fl_Button
(L + 2 * WB, 2 * WB + 10 * BH, sw, BH, "-");
view.push[5]->callback(view_options_max_recursion_cb, (void*)"-");
view.push[6] = new Fl_Button
(L + 2 * WB + IW - sw, 2 * WB + 10 * BH, sw, BH, "+");
view.push[6]->callback(view_options_max_recursion_cb, (void*)"+");
view.value[33] = new Fl_Value_Input
(L + 2 * WB + sw, 2 * WB + 10 * BH, IW - 2 * sw, BH);
view.value[33]->align(FL_ALIGN_RIGHT);
view.value[33]->minimum(0);
view.value[33]->maximum(6);
view.value[33]->step(1);
view.value[33]->when(FL_WHEN_RELEASE);
view.value[33]->callback(view_options_ok_cb);
view.label[1] = new Fl_Box
(L + 2 * WB + IW, 2 * WB + 10 * BH, width / 2, BH, "Maximum recursion level");
view.label[1]->box(FL_NO_BOX);
view.label[1]->align(FL_ALIGN_LEFT | FL_ALIGN_INSIDE);
view.value[34] = new Fl_Value_Input
(L + 2 * WB, 2 * WB + 11 * BH, IW, BH, "Target visualization error");
view.value[34]->align(FL_ALIGN_RIGHT);
view.value[34]->minimum(-1.e-4);
view.value[34]->maximum(0.1);
view.value[34]->step(1.e-4);
view.value[34]->when(FL_WHEN_RELEASE);
view.value[34]->callback(view_options_ok_cb);
view.range->end();
o->end();
}
{
Fl_Group *o = new Fl_Group
(L + WB, WB + BH, width - 2 * WB, height - 2 * WB - BH, "Axes");
o->hide();
view.choice[8] = new Fl_Choice
(L + 2 * WB, 2 * WB + 1 * BH, IW, BH, "Axes mode");
view.choice[8]->menu(menu_axes_mode);
view.choice[8]->align(FL_ALIGN_RIGHT);
view.choice[8]->tooltip("(Alt+a)");
view.choice[8]->callback(view_options_ok_cb, (void*)"view_axes");
view.butt[3] = new Fl_Check_Button
(L + width - (int)(0.85*IW) - 2 * WB, 2 * WB + 1 * BH, (int)(0.85*IW), BH,
"Mikado style");
view.butt[3]->type(FL_TOGGLE_BUTTON);
view.butt[3]->callback(view_options_ok_cb);
view.value[3] = new Fl_Value_Input
(L + 2 * WB, 2 * WB + 2 * BH, IW/3, BH);
view.value[3]->minimum(0.);
view.value[3]->step(1);
view.value[3]->maximum(100);
view.value[3]->callback(view_options_ok_cb);
view.value[4] = new Fl_Value_Input
(L + 2 * WB + 1*IW/3, 2 * WB + 2 * BH, IW/3, BH);
view.value[4]->minimum(0.);
view.value[4]->step(1);
view.value[4]->maximum(100);
view.value[4]->callback(view_options_ok_cb);
view.value[5] = new Fl_Value_Input
(L + 2 * WB + 2*IW/3, 2 * WB + 2 * BH, IW/3, BH, "Axes tics");
view.value[5]->minimum(0.);
view.value[5]->step(1);
view.value[5]->maximum(100);
view.value[5]->align(FL_ALIGN_RIGHT);
view.value[5]->callback(view_options_ok_cb);
view.input[7] = new Fl_Input
(L + 2 * WB, 2 * WB + 3 * BH, IW/3, BH);
view.input[7]->callback(view_options_ok_cb);
view.input[8] = new Fl_Input
(L + 2 * WB + 1*IW/3, 2 * WB + 3 * BH, IW/3, BH);
view.input[8]->callback(view_options_ok_cb);
view.input[9] = new Fl_Input
(L + 2 * WB + 2*IW/3, 2 * WB + 3 * BH, IW/3, BH, "Axes format");
view.input[9]->align(FL_ALIGN_RIGHT);
view.input[9]->callback(view_options_ok_cb);
view.input[10] = new Fl_Input
(L + 2 * WB, 2 * WB + 4 * BH, IW/3, BH);
view.input[10]->callback(view_options_ok_cb);
view.input[11] = new Fl_Input
(L + 2 * WB + 1*IW/3, 2 * WB + 4 * BH, IW/3, BH);
view.input[11]->callback(view_options_ok_cb);
view.input[12] = new Fl_Input
(L + 2 * WB + 2*IW/3, 2 * WB + 4 * BH, IW/3, BH, "Axes labels");
view.input[12]->align(FL_ALIGN_RIGHT);
view.input[12]->callback(view_options_ok_cb);
view.butt[25] = new Fl_Check_Button
(L + 2 * WB, 2 * WB + 5 * BH, BW, BH, "Position 3D axes automatically");
view.butt[25]->type(FL_TOGGLE_BUTTON);
view.butt[25]->callback(view_options_ok_cb, (void*)"view_axes_auto_3d");
view.value[13] = new Fl_Value_Input
(L + 2 * WB, 2 * WB + 6 * BH, IW / 3, BH);
view.value[13]->callback(view_options_ok_cb);
view.value[14] = new Fl_Value_Input
(L + 2 * WB + IW / 3, 2 * WB + 6 * BH, IW / 3, BH);
view.value[14]->callback(view_options_ok_cb);
view.value[15] = new Fl_Value_Input
(L + 2 * WB + 2 * IW / 3, 2 * WB + 6 * BH, IW / 3, BH, "3D axes minimum");
view.value[15]->align(FL_ALIGN_RIGHT);
view.value[15]->callback(view_options_ok_cb);
view.value[16] = new Fl_Value_Input
(L + 2 * WB, 2 * WB + 7 * BH, IW / 3, BH);
view.value[16]->callback(view_options_ok_cb);
view.value[17] = new Fl_Value_Input
(L + 2 * WB + IW / 3, 2 * WB + 7 * BH, IW / 3, BH);
view.value[17]->callback(view_options_ok_cb);
view.value[18] = new Fl_Value_Input
(L + 2 * WB + 2 * IW / 3, 2 * WB + 7 * BH, IW / 3, BH, "3D axes maximum");
view.value[18]->align(FL_ALIGN_RIGHT);
view.value[18]->callback(view_options_ok_cb);
view.choice[16] = new Fl_Choice
(L + 2 * WB, 2 * WB + 8 * BH, IW, BH, "2D axes/value scale position");
view.choice[16]->menu(menu_position);
view.choice[16]->align(FL_ALIGN_RIGHT);
view.choice[16]->callback(view_options_ok_cb, (void*)"view_axes_auto_2d");
view.value[20] = new Fl_Value_Input
(L + 2 * WB, 2 * WB + 9 * BH, IW / 2, BH);
view.value[20]->minimum(-2000);
view.value[20]->maximum(2000);
view.value[20]->step(1);
view.value[20]->callback(view_options_ok_cb);
view.value[21] = new Fl_Value_Input
(L + 2 * WB + IW / 2, 2 * WB + 9 * BH, IW / 2, BH, "2D axes/value scale position");
view.value[21]->align(FL_ALIGN_RIGHT);
view.value[21]->minimum(-2000);
view.value[21]->maximum(2000);
view.value[21]->step(1);
view.value[21]->callback(view_options_ok_cb);
view.value[22] = new Fl_Value_Input
(L + 2 * WB, 2 * WB + 10 * BH, IW / 2, BH);
view.value[22]->minimum(0);
view.value[22]->maximum(2000);
view.value[22]->step(1);
view.value[22]->callback(view_options_ok_cb);
view.value[23] = new Fl_Value_Input
(L + 2 * WB + IW / 2, 2 * WB + 10 * BH, IW / 2, BH, "2D axes/value scale size");
view.value[23]->align(FL_ALIGN_RIGHT);
view.value[23]->minimum(0);
view.value[23]->maximum(2000);
view.value[23]->step(1);
view.value[23]->callback(view_options_ok_cb);
o->end();
}
{
Fl_Group *o = new Fl_Group
(L + WB, WB + BH, width - 2 * WB, height - 2 * WB - BH, "Visibility");
o->hide();
view.butt[4] = new Fl_Check_Button
(L + 2 * WB, 2 * WB + 1 * BH, BW, BH, "Show value scale");
view.butt[4]->tooltip("(Alt+i)");
view.butt[4]->type(FL_TOGGLE_BUTTON);
view.butt[4]->callback(view_options_ok_cb);
static Fl_Menu_Item time_display[] = {
{"None", 0, 0, 0},
{"Value if multi-step", 0, 0, 0},
{"Value", 0, 0, 0},
{"Step if multi-step", 0, 0, 0},
{"Step", 0, 0, 0},
{0}
};
view.choice[12] = new Fl_Choice
(L + 2 * WB, 2 * WB + 2 * BH, IW, BH, "Time display mode");
view.choice[12]->menu(time_display);
view.choice[12]->align(FL_ALIGN_RIGHT);
view.choice[12]->callback(view_options_ok_cb);
view.butt[5] = new Fl_Check_Button
(L + 2 * WB, 2 * WB + 3 * BH, BW, BH, "Show annotations");
view.butt[5]->tooltip("(Alt+n)");
view.butt[5]->type(FL_TOGGLE_BUTTON);
view.butt[5]->callback(view_options_ok_cb);
view.butt[10] = new Fl_Check_Button
(L + 2 * WB, 2 * WB + 4 * BH, BW, BH, "Draw element outlines");
view.butt[10]->tooltip("(Alt+e)");
view.butt[10]->type(FL_TOGGLE_BUTTON);
view.butt[10]->callback(view_options_ok_cb);
view.butt[2] = new Fl_Check_Button
(L + 2 * WB, 2 * WB + 5 * BH, BW, BH, "Draw only skin of 3D views");
view.butt[2]->type(FL_TOGGLE_BUTTON);
view.butt[2]->callback(view_options_ok_cb);
static Fl_Menu_Item menu_view_element_types[] = {
{"Points", 0, 0, 0, FL_MENU_TOGGLE},
{"Lines", 0, 0, 0, FL_MENU_TOGGLE},
{"Triangles", 0, 0, 0, FL_MENU_TOGGLE},
{"Quadrangles", 0, 0, 0, FL_MENU_TOGGLE},
{"Tetrahedra", 0, 0, 0, FL_MENU_TOGGLE},
{"Hexahedra", 0, 0, 0, FL_MENU_TOGGLE},
{"Prisms", 0, 0, 0, FL_MENU_TOGGLE},
{"Pyramids", 0, 0, 0, FL_MENU_TOGGLE},
{0}
};
view.menu[1] = new Fl_Menu_Button
(L + 2 * WB, 2 * WB + 6 * BH, IW, BH, "Elements");
view.menu[1]->menu(menu_view_element_types);
view.menu[1]->callback(view_options_ok_cb);
view.value[6] = new Fl_Value_Input
(L + width / 2, 2 * WB + 6 * BH, width / 4 - 2 * WB, BH, "Sampling");
view.value[6]->minimum(1);
view.value[6]->maximum(100);
view.value[6]->step(1);
view.value[6]->align(FL_ALIGN_RIGHT);
view.value[6]->when(FL_WHEN_RELEASE);
view.value[6]->callback(view_options_ok_cb);
static Fl_Menu_Item menu_boundary[] = {
{"None", 0, 0, 0},
{"Dimension - 1", 0, 0, 0},
{"Dimension - 2", 0, 0, 0},
{"Dimension - 3", 0, 0, 0},
{0}
};
view.choice[9] = new Fl_Choice
(L + 2 * WB, 2 * WB + 7 * BH, IW, BH, "Element boundary mode");
view.choice[9]->menu(menu_boundary);
view.choice[9]->align(FL_ALIGN_RIGHT);
view.choice[9]->callback(view_options_ok_cb);
view.value[0] = new Fl_Value_Input
(L + 2 * WB, 2 * WB + 8 * BH, IW / 2, BH);
view.value[0]->minimum(0);
view.value[0]->maximum(500);
view.value[0]->step(1);
view.value[0]->align(FL_ALIGN_RIGHT);
view.value[0]->when(FL_WHEN_RELEASE);
view.value[0]->callback(view_options_ok_cb);
view.value[1] = new Fl_Value_Input
(L + 2 * WB + IW / 2, 2 * WB + 8 * BH, IW / 2, BH, "Normals and tangents");
view.value[1]->minimum(0);
view.value[1]->maximum(500);
view.value[1]->step(1);
view.value[1]->align(FL_ALIGN_RIGHT);
view.value[1]->when(FL_WHEN_RELEASE);
view.value[1]->callback(view_options_ok_cb);
static Fl_Menu_Item menu_view_field_types[] = {
{"Scalar", 0, 0, 0, FL_MENU_TOGGLE},
{"Vector", 0, 0, 0, FL_MENU_TOGGLE},
{"Tensor", 0, 0, 0, FL_MENU_TOGGLE},
{0}
};
view.menu[0] = new Fl_Menu_Button
(L + 2 * WB, 2 * WB + 9 * BH, IW, BH, "Fields");
view.menu[0]->menu(menu_view_field_types);
view.menu[0]->callback(view_options_ok_cb);
static Fl_Menu_Item menu_force_field_type[] = {
{"Original Field", 0, 0, 0},
{"Force Scalar", 0, 0, 0},
{"Force Vector", 0, 0, 0},
{"Force Tensor", 0, 0, 0},
{0}
};
view.choice[14] = new Fl_Choice
(L + 2 * WB, 2 * WB + 10 * BH, IW, BH);
view.choice[14]->menu(menu_force_field_type);
view.choice[14]->align(FL_ALIGN_RIGHT);
view.choice[14]->callback(view_options_ok_cb);
for(int i = 0; i < 9; i++){
int W = width - 5 * WB - IW;
int w = W / 9;
view.value[70 + i] = new Fl_Value_Input
(L + 3 * WB + IW + i * w, 2 * WB + 10 * BH, w, BH);
view.value[70 + i]->minimum(-1);
view.value[70 + i]->maximum(9);
view.value[70 + i]->step(1);
view.value[70 + i]->callback(view_options_ok_cb);
}
o->end();
}
{
Fl_Group *o = new Fl_Group
(L + WB, WB + BH, width - 2 * WB, height - 2 * WB - BH, "Transfo");
o->hide();
Fl_Box *b = new Fl_Box
(FL_NO_BOX, L + 2 * WB, 2 * WB + 1 * BH, IW, BH, "Coordinate transformation:");
b->align(FL_ALIGN_INSIDE|FL_ALIGN_LEFT);
int ss = 2 * IW / 3 / 3 + 4;
view.value[51] = new Fl_Value_Input
(L + 2 * WB , 2 * WB + 2 * BH, ss, BH);
view.value[52] = new Fl_Value_Input
(L + 2 * WB + ss , 2 * WB + 2 * BH, ss, BH);
view.value[53] = new Fl_Value_Input
(L + 2 * WB + 2*ss, 2 * WB + 2 * BH, ss, BH, " X");
view.value[40] = new engineeringValueInput
(L + 2 * WB + IW , 2 * WB + 2 * BH, 7*IW/10, BH);
view.value[54] = new Fl_Value_Input
(L + 2 * WB , 2 * WB + 3 * BH, ss, BH);
view.value[55] = new Fl_Value_Input
(L + 2 * WB + ss , 2 * WB + 3 * BH, ss, BH);
view.value[56] = new Fl_Value_Input
(L + 2 * WB + 2*ss, 2 * WB + 3 * BH, ss, BH, " Y +");
view.value[41] = new engineeringValueInput
(L + 2 * WB + IW , 2 * WB + 3 * BH, 7*IW/10, BH);
view.value[57] = new Fl_Value_Input
(L + 2 * WB , 2 * WB + 4 * BH, ss, BH);
view.value[58] = new Fl_Value_Input
(L + 2 * WB + ss , 2 * WB + 4 * BH, ss, BH);
view.value[59] = new Fl_Value_Input
(L + 2 * WB + 2*ss, 2 * WB + 4 * BH, ss, BH, " Z");
view.value[42] = new engineeringValueInput
(L + 2 * WB + IW , 2 * WB + 4 * BH, 7*IW/10, BH);
Fl_Box *b2 = new Fl_Box
(FL_NO_BOX, L + 2 * WB + 2 * IW-3*WB, 2 * WB + 1 * BH, 7*IW/10, BH, "Raise:");
b2->align(FL_ALIGN_INSIDE|FL_ALIGN_LEFT);
view.value[43] = new engineeringValueInput
(L + 2 * WB + 2 * IW-3*WB, 2 * WB + 2 * BH, 7*IW/10, BH);
view.value[44] = new engineeringValueInput
(L + 2 * WB + 2 * IW-3*WB, 2 * WB + 3 * BH, 7*IW/10, BH);
view.value[45] = new engineeringValueInput
(L + 2 * WB + 2 * IW-3*WB, 2 * WB + 4 * BH, 7*IW/10, BH);
view.value[46] = new engineeringValueInput
(L + 2 * WB, 2 * WB + 5 * BH, 3*ss, BH, "Normal raise");
for(int i = 40; i <= 46; i++){
view.value[i]->align(FL_ALIGN_RIGHT);
view.value[i]->when(FL_WHEN_RELEASE);
view.value[i]->callback(view_options_ok_cb);
}
for(int i = 51; i <= 59; i++){
view.value[i]->minimum(-1.);
view.value[i]->maximum(1.);
view.value[i]->step(0.1);
view.value[i]->align(FL_ALIGN_RIGHT);
view.value[i]->when(FL_WHEN_RELEASE);
view.value[i]->callback(view_options_ok_cb);
}
view.butt[6] = new Fl_Check_Button
(L + 2 * WB, 2 * WB + 6 * BH, BW, BH, "Use general transformation expressions");
view.butt[6]->type(FL_TOGGLE_BUTTON);
view.butt[6]->callback(view_options_ok_cb, (void*)"view_general_transform");
view.choice[11] = new Fl_Choice
(L + 2 * WB, 2 * WB + 7 * BH, IW, BH, "Data source");
view.choice[11]->align(FL_ALIGN_RIGHT);
view.choice[11]->add("Self");
view.choice[11]->callback(view_options_ok_cb);
view.value[2] = new engineeringValueInput
(L + 2 * WB, 2 * WB + 8 * BH, IW, BH, "Factor");
view.value[2]->align(FL_ALIGN_RIGHT);
view.value[2]->when(FL_WHEN_RELEASE);
view.value[2]->callback(view_options_ok_cb);
view.input[4] = new Fl_Input
(L + 2 * WB, 2 * WB + 9 * BH, IW, BH, "X expression");
view.input[4]->align(FL_ALIGN_RIGHT);
view.input[4]->callback(view_options_ok_cb);
view.input[5] = new Fl_Input
(L + 2 * WB, 2 * WB + 10 * BH, IW, BH, "Y expression");
view.input[5]->align(FL_ALIGN_RIGHT);
view.input[5]->callback(view_options_ok_cb);
view.input[6] = new Fl_Input
(L + 2 * WB, 2 * WB + 11 * BH, IW, BH, "Z expression");
view.input[6]->align(FL_ALIGN_RIGHT);
view.input[6]->callback(view_options_ok_cb);
o->end();
}
{
Fl_Group *o = new Fl_Group
(L + WB, WB + BH, width - 2 * WB, height - 2 * WB - BH, "Aspect");
o->hide();
view.value[12] = new Fl_Value_Input
(L + 2 * WB, 2 * WB + 1 * BH, IW, BH, "Element shrinking factor");
view.value[12]->minimum(0.);
view.value[12]->step(0.01);
view.value[12]->maximum(1.);
view.value[12]->align(FL_ALIGN_RIGHT);
view.value[12]->when(FL_WHEN_RELEASE);
view.value[12]->callback(view_options_ok_cb);
view.choice[5] = new Fl_Choice
(L + 2 * WB, 2 * WB + 2 * BH, IW, BH, "Point display");
view.choice[5]->menu(menu_point_display_post);
view.choice[5]->align(FL_ALIGN_RIGHT);
view.choice[5]->callback(view_options_ok_cb);
view.value[61] = new Fl_Value_Input
(L + 2 * WB, 2 * WB + 3 * BH, IW, BH, "Point size");
view.value[61]->minimum(0.1);
view.value[61]->maximum(50);
view.value[61]->step(0.1);
view.value[61]->align(FL_ALIGN_RIGHT);
view.value[61]->callback(view_options_ok_cb);
view.choice[6] = new Fl_Choice
(L + 2 * WB, 2 * WB + 4 * BH, IW, BH, "Line display");
view.choice[6]->menu(menu_line_display_post);
view.choice[6]->align(FL_ALIGN_RIGHT);
view.choice[6]->callback(view_options_ok_cb);
view.butt[26] = new Fl_Check_Button
(L + width - (int)(1.15*BB) - 2 * WB, 2 * WB + 4 * BH, (int)(1.15*BB), BH,
"Stipple in 2D");
view.butt[26]->type(FL_TOGGLE_BUTTON);
view.butt[26]->callback(view_options_ok_cb);
view.value[62] = new Fl_Value_Input
(L + 2 * WB, 2 * WB + 5 * BH, IW, BH, "Line width");
view.value[62]->minimum(0.1);
view.value[62]->maximum(50);
view.value[62]->step(0.1);
view.value[62]->align(FL_ALIGN_RIGHT);
view.value[62]->callback(view_options_ok_cb);
{
static Fl_Menu_Item menu_vectype[] = {
{"Line", 0, 0, 0},
{"Arrow", 0, 0, 0},
{"Pyramid", 0, 0, 0},
{"3D arrow", 0, 0, 0},
{"Displacement", 0, 0, 0},
{"Comet", 0, 0, 0},
{0}
};
view.choice[2] = new Fl_Choice
(L + 2 * WB, 2 * WB + 6 * BH, IW, BH, "Vector display");
view.choice[2]->menu(menu_vectype);
view.choice[2]->align(FL_ALIGN_RIGHT);
view.choice[2]->callback(view_options_ok_cb);
view.value[64] = new Fl_Value_Input
(L + 2 * WB, 2 * WB + 7 * BH, IW / 2, BH);
view.value[64]->minimum(0);
view.value[64]->maximum(500);
view.value[64]->step(1);
view.value[64]->align(FL_ALIGN_RIGHT);
view.value[64]->callback(view_options_ok_cb);
view.value[60] = new Fl_Value_Input
(L + 2 * WB + IW / 2, 2 * WB + 7 * BH, IW / 2, BH, "Arrow size");
view.value[60]->minimum(0);
view.value[60]->maximum(500);
view.value[60]->step(1);
view.value[60]->align(FL_ALIGN_RIGHT);
view.value[60]->callback(view_options_ok_cb);
view.value[63] = new engineeringValueInput
(L + 2 * WB, 2 * WB + 8 * BH, IW, BH, "Displacement factor");
view.value[63]->minimum(0.);
view.value[63]->maximum(1.);
view.value[63]->step(0.01);
view.value[63]->align(FL_ALIGN_RIGHT);
view.value[63]->when(FL_WHEN_RELEASE);
view.value[63]->callback(view_options_ok_cb);
view.choice[10] = new Fl_Choice
(L + 2 * WB, 2 * WB + 9 * BH, IW, BH, "Data source");
view.choice[10]->align(FL_ALIGN_RIGHT);
view.choice[10]->add("Self");
view.choice[10]->callback(view_options_ok_cb);
}
static Fl_Menu_Item menu_glyph_loc[] = {
{"Barycenter", 0, 0, 0},
{"Vertex", 0, 0, 0},
{0}
};
view.choice[3] = new Fl_Choice
(L + 2 * WB, 2 * WB + 10 * BH, IW, BH, "Glyph location");
view.choice[3]->menu(menu_glyph_loc);
view.choice[3]->align(FL_ALIGN_RIGHT);
view.choice[3]->callback(view_options_ok_cb);
static Fl_Menu_Item menu_glyph_center[] = {
{"Left-aligned", 0, 0, 0},
{"Centered", 0, 0, 0},
{"Right-aligned", 0, 0, 0},
{0}
};
view.choice[15] = new Fl_Choice
(L + width - (int)(1.15*BB) - 2 * WB, 2 * WB + 10 * BH, (int)(1.15*BB), BH);
view.choice[15]->menu(menu_glyph_center);
view.choice[15]->callback(view_options_ok_cb);
static Fl_Menu_Item menu_tensor[] = {
{"Von-Mises", 0, 0, 0},
{"Maximum eigen value", 0, 0, 0},
{"Minimum eigen value", 0, 0, 0},
{"Eigen vectors", 0, 0, 0},
{"Ellipse (2d)", 0, 0, 0},
{"Ellipsoid", 0, 0, 0},
{0}
};
view.choice[4] = new Fl_Choice
(L + 2 * WB, 2 * WB + 11 * BH, IW, BH, "Tensor display");
view.choice[4]->menu(menu_tensor);
view.choice[4]->align(FL_ALIGN_RIGHT);
view.choice[4]->callback(view_options_ok_cb);
o->end();
}
{
Fl_Group *o = new Fl_Group
(L + WB, WB + BH, width - 2 * WB, height - 2 * WB - BH, "Color");
o->hide();
view.butt[11] = new Fl_Check_Button
(L + 2 * WB, 2 * WB + 1 * BH, BW, BH, "Enable lighting");
view.butt[11]->tooltip("(Alt+w)");
view.butt[11]->type(FL_TOGGLE_BUTTON);
view.butt[11]->callback(view_options_ok_cb, (void*)"view_light");
view.butt[8] = new Fl_Check_Button
(L + 2 * WB, 2 * WB + 2 * BH, BW, BH, "Enable lighting of lines");
view.butt[8]->type(FL_TOGGLE_BUTTON);
view.butt[8]->callback(view_options_ok_cb);
view.butt[9] = new Fl_Check_Button
(L + 2 * WB, 2 * WB + 3 * BH, BW, BH, "Use two-side lighting");
view.butt[9]->type(FL_TOGGLE_BUTTON);
view.butt[9]->callback(view_options_ok_cb);
view.butt[12] = new Fl_Check_Button
(L + 2 * WB, 2 * WB + 4 * BH, BW, BH, "Smooth normals");
view.butt[12]->type(FL_TOGGLE_BUTTON);
view.butt[12]->callback(view_options_ok_cb);
view.value[10] = new Fl_Value_Input
(L + 2 * WB, 2 * WB + 5 * BH, IW, BH, "Smoothing threshold angle");
view.value[10]->minimum(0.);
view.value[10]->step(1.);
view.value[10]->maximum(180.);
view.value[10]->align(FL_ALIGN_RIGHT);
view.value[10]->when(FL_WHEN_RELEASE);
view.value[10]->callback(view_options_ok_cb);
view.butt[24] = new Fl_Check_Button
(L + 2 * WB, 2 * WB + 6 * BH, BW, BH, "Use fake transparency mode");
view.butt[24]->type(FL_TOGGLE_BUTTON);
view.butt[24]->callback(view_options_ok_cb);
Fl_Scroll *s = new Fl_Scroll
(L + 2 * WB, 3 * WB + 7 * BH, IW + 20, height - 5 * WB - 7 * BH);
int i = 0;
while(ViewOptions_Color[i].str) {
view.color[i] = new Fl_Button
(L + 2 * WB, 3 * WB + (7 + i) * BH, IW, BH, ViewOptions_Color[i].str);
view.color[i]->callback(view_color_cb, (void *)ViewOptions_Color[i].function);
i++;
}
s->end();
o->end();
}
{
Fl_Group *o = new Fl_Group
(L + WB, WB + BH, width - 2 * WB, height - 2 * WB - BH, "Map");
o->hide();
view.colorbar = new colorbarWindow
(L + 2 * WB, 2 * WB + BH, width - 4 * WB, height - 4 * WB - BH);
view.colorbar->end();
view.colorbar->callback(view_options_ok_cb);
o->end();
}
o->end();
}
view.group->end();
win->position(CTX::instance()->optPosition[0], CTX::instance()->optPosition[1]);
win->end();
FL_NORMAL_SIZE += deltaFontSize;
}
void optionWindow::showGroup(int num, bool showWindow)
{
general.group->hide();
geo.group->hide();
mesh.group->hide();
solver.group->hide();
post.group->hide();
view.group->hide();
browser->value(num);
switch(num){
case 0: case 1: win->label("Options - General"); general.group->show(); break;
case 2: win->label("Options - Geometry"); geo.group->show(); break;
case 3: win->label("Options - Mesh"); mesh.group->show(); break;
case 4: win->label("Options - Solver"); solver.group->show(); break;
case 5: win->label("Options - Post-pro"); post.group->show(); break;
default:
{
updateViewGroup(num - 6);
static char str[128];
sprintf(str, "Options - View [%d]", num - 6);
win->label(str);
view.group->show();
}
break;
}
if(showWindow) win->show();
}
void optionWindow::resetBrowser()
{
int select = browser->value();
browser->clear();
browser->add("General");
browser->add("Geometry");
browser->add("Mesh");
browser->add("Solver");
browser->add("Post-pro");
for(unsigned int i = 0; i < PView::list.size(); i++){
char str[128];
sprintf(str, "View [%d]", i);
browser->add(str);
}
int num = (select <= browser->size()) ? select : browser->size();
browser->value(num);
showGroup(num, false);
}
void optionWindow::resetExternalViewList()
{
char str[32];
view.choice[10]->clear();
view.choice[11]->clear();
view.choice[10]->add("Self");
view.choice[11]->add("Self");
for(unsigned int i = 0; i < PView::list.size(); i++) {
sprintf(str, "View [%d]", i);
view.choice[10]->add(str, 0, NULL);
view.choice[11]->add(str, 0, NULL);
}
if(view.index >= 0){
opt_view_external_view(view.index, GMSH_GUI, 0);
opt_view_gen_raise_view(view.index, GMSH_GUI, 0);
}
}
void optionWindow::updateViewGroup(int index)
{
if(index < 0 || index >= (int)PView::list.size()) return;
view.index = index;
PView *v = PView::list[index];
PViewData *data = v->getData();
PViewOptions *opt = v->getOptions();
double maxval = std::max(fabs(data->getMin()), fabs(data->getMax()));
if(!maxval) maxval = 1.;
double val1 = 10. * CTX::instance()->lc;
double val2 = 2. * CTX::instance()->lc / maxval;
opt_view_name(index, GMSH_GUI, "");
opt_view_format(index, GMSH_GUI, "");
opt_view_type(index, GMSH_GUI, 0);
opt_view_show_scale(index, GMSH_GUI, 0);
opt_view_draw_strings(index, GMSH_GUI, 0);
opt_view_adapt_visualization_grid(index, GMSH_GUI, 0);
opt_view_max_recursion_level(index, GMSH_GUI, 0);
opt_view_target_error(index, GMSH_GUI, 0);
if(data->getNumPoints() || data->getNumLines()){
((Fl_Menu_Item*)view.choice[13]->menu())[1].activate();
((Fl_Menu_Item*)view.choice[13]->menu())[2].activate();
}
else {
((Fl_Menu_Item*)view.choice[13]->menu())[1].deactivate();
((Fl_Menu_Item*)view.choice[13]->menu())[2].deactivate();
}
opt_view_auto_position(index, GMSH_GUI, 0);
opt_view_position0(index, GMSH_GUI, 0);
opt_view_position1(index, GMSH_GUI, 0);
opt_view_size0(index, GMSH_GUI, 0);
opt_view_size1(index, GMSH_GUI, 0);
opt_view_axes(index, GMSH_GUI, 0);
opt_view_axes_mikado(index, GMSH_GUI, 0);
opt_view_axes_format0(index, GMSH_GUI, "");
opt_view_axes_format1(index, GMSH_GUI, "");
opt_view_axes_format2(index, GMSH_GUI, "");
opt_view_axes_tics0(index, GMSH_GUI, 0);
opt_view_axes_tics1(index, GMSH_GUI, 0);
opt_view_axes_tics2(index, GMSH_GUI, 0);
opt_view_axes_label0(index, GMSH_GUI, "");
opt_view_axes_label1(index, GMSH_GUI, "");
opt_view_axes_label2(index, GMSH_GUI, "");
opt_view_axes_auto_position(index, GMSH_GUI, 0);
opt_view_axes_xmin(index, GMSH_GUI, 0);
opt_view_axes_xmax(index, GMSH_GUI, 0);
opt_view_axes_ymin(index, GMSH_GUI, 0);
opt_view_axes_ymax(index, GMSH_GUI, 0);
opt_view_axes_zmin(index, GMSH_GUI, 0);
opt_view_axes_zmax(index, GMSH_GUI, 0);
for(int i = 13; i <= 18; i++){
view.value[i]->step(CTX::instance()->lc / 200.);
view.value[i]->minimum(-CTX::instance()->lc);
view.value[i]->maximum(CTX::instance()->lc);
}
if(data->getNumElements()) {
view.range->activate();
((Fl_Menu_Item*)view.choice[13]->menu())[0].activate();
}
else {
view.range->deactivate();
((Fl_Menu_Item*)view.choice[13]->menu())[0].deactivate();
}
opt_view_show_element(index, GMSH_GUI, 0);
opt_view_draw_skin_only(index, GMSH_GUI, 0);
opt_view_light(index, GMSH_GUI, 0);
opt_view_light_two_side(index, GMSH_GUI, 0);
opt_view_light_lines(index, GMSH_GUI, 0);
opt_view_smooth_normals(index, GMSH_GUI, 0);
opt_view_angle_smooth_normals(index, GMSH_GUI, 0);
opt_view_boundary(index, GMSH_GUI, 0);
opt_view_explode(index, GMSH_GUI, 0);
opt_view_draw_points(index, GMSH_GUI, 0);
opt_view_draw_lines(index, GMSH_GUI, 0);
opt_view_draw_triangles(index, GMSH_GUI, 0);
opt_view_draw_quadrangles(index, GMSH_GUI, 0);
opt_view_draw_tetrahedra(index, GMSH_GUI, 0);
opt_view_draw_hexahedra(index, GMSH_GUI, 0);
opt_view_draw_prisms(index, GMSH_GUI, 0);
opt_view_draw_pyramids(index, GMSH_GUI, 0);
opt_view_draw_scalars(index, GMSH_GUI, 0);
opt_view_draw_vectors(index, GMSH_GUI, 0);
opt_view_draw_tensors(index, GMSH_GUI, 0);
opt_view_normals(index, GMSH_GUI, 0);
opt_view_tangents(index, GMSH_GUI, 0);
opt_view_sampling(index, GMSH_GUI, 0);
opt_view_nb_iso(index, GMSH_GUI, 0);
opt_view_intervals_type(index, GMSH_GUI, 0);
opt_view_range_type(index, GMSH_GUI, 0);
opt_view_custom_min(index, GMSH_GUI, 0);
opt_view_custom_max(index, GMSH_GUI, 0);
opt_view_scale_type(index, GMSH_GUI, 0);
opt_view_saturate_values(index, GMSH_GUI, 0);
opt_view_offset0(index, GMSH_GUI, 0);
opt_view_offset1(index, GMSH_GUI, 0);
opt_view_offset2(index, GMSH_GUI, 0);
for(int i = 40; i <= 42; i++) {
view.value[i]->step(val1 / 200.);
view.value[i]->minimum(-val1);
view.value[i]->maximum(val1);
}
opt_view_transform00(index, GMSH_GUI, 0);
opt_view_transform01(index, GMSH_GUI, 0);
opt_view_transform02(index, GMSH_GUI, 0);
opt_view_transform10(index, GMSH_GUI, 0);
opt_view_transform11(index, GMSH_GUI, 0);
opt_view_transform12(index, GMSH_GUI, 0);
opt_view_transform20(index, GMSH_GUI, 0);
opt_view_transform21(index, GMSH_GUI, 0);
opt_view_transform22(index, GMSH_GUI, 0);
opt_view_raise0(index, GMSH_GUI, 0);
opt_view_raise1(index, GMSH_GUI, 0);
opt_view_raise2(index, GMSH_GUI, 0);
opt_view_normal_raise(index, GMSH_GUI, 0);
for(int i = 43; i <= 46; i++) {
view.value[i]->step(val2 / 200.);
view.value[i]->minimum(-val2);
view.value[i]->maximum(val2);
}
opt_view_use_gen_raise(index, GMSH_GUI, 0);
opt_view_gen_raise_view(index, GMSH_GUI, 0);
opt_view_gen_raise_factor(index, GMSH_GUI, 0);
opt_view_gen_raise0(index, GMSH_GUI, "");
opt_view_gen_raise1(index, GMSH_GUI, "");
opt_view_gen_raise2(index, GMSH_GUI, "");
view.value[2]->step(val2 / 200.);
view.value[2]->minimum(-val2);
view.value[2]->maximum(val2);
if(data->getNumTimeSteps() == 1) {
view.value[50]->deactivate();
view.push[3]->deactivate();
view.push[4]->deactivate();
view.label[0]->deactivate();
}
else {
view.value[50]->activate();
view.push[3]->activate();
view.push[4]->activate();
view.label[0]->activate();
}
view.value[50]->maximum(data->getNumTimeSteps() - 1);
opt_view_timestep(index, GMSH_GUI, 0);
opt_view_show_time(index, GMSH_GUI, 0);
opt_view_force_num_components(index, GMSH_GUI, 0);
opt_view_component_map0(index, GMSH_GUI, 0);
opt_view_component_map1(index, GMSH_GUI, 0);
opt_view_component_map2(index, GMSH_GUI, 0);
opt_view_component_map3(index, GMSH_GUI, 0);
opt_view_component_map4(index, GMSH_GUI, 0);
opt_view_component_map5(index, GMSH_GUI, 0);
opt_view_component_map6(index, GMSH_GUI, 0);
opt_view_component_map7(index, GMSH_GUI, 0);
opt_view_component_map8(index, GMSH_GUI, 0);
opt_view_point_size(index, GMSH_GUI, 0);
opt_view_point_type(index, GMSH_GUI, 0);
opt_view_line_width(index, GMSH_GUI, 0);
opt_view_line_type(index, GMSH_GUI, 0);
opt_view_vector_type(index, GMSH_GUI, 0);
opt_view_arrow_size_min(index, GMSH_GUI, 0);
opt_view_arrow_size_max(index, GMSH_GUI, 0);
opt_view_displacement_factor(index, GMSH_GUI, 0);
double val3 = 2. * CTX::instance()->lc / maxval;
view.value[63]->step(val3 / 100.);
view.value[63]->maximum(val3);
opt_view_external_view(index, GMSH_GUI, 0);
opt_view_glyph_location(index, GMSH_GUI, 0);
opt_view_center_glyphs(index, GMSH_GUI, 0);
opt_view_tensor_type(index, GMSH_GUI, 0);
opt_view_fake_transparency(index, GMSH_GUI, 0);
opt_view_use_stipple(index, GMSH_GUI, 0);
opt_view_color_points(index, GMSH_GUI, 0);
opt_view_color_lines(index, GMSH_GUI, 0);
opt_view_color_triangles(index, GMSH_GUI, 0);
opt_view_color_quadrangles(index, GMSH_GUI, 0);
opt_view_color_tetrahedra(index, GMSH_GUI, 0);
opt_view_color_hexahedra(index, GMSH_GUI, 0);
opt_view_color_prisms(index, GMSH_GUI, 0);
opt_view_color_pyramids(index, GMSH_GUI, 0);
opt_view_color_tangents(index, GMSH_GUI, 0);
opt_view_color_normals(index, GMSH_GUI, 0);
opt_view_color_text2d(index, GMSH_GUI, 0);
opt_view_color_text3d(index, GMSH_GUI, 0);
opt_view_color_axes(index, GMSH_GUI, 0);
view.colorbar->update(data->getName().c_str(), data->getMin(),
data->getMax(), &opt->colorTable, &v->getChanged());
}
void optionWindow::activate(const char *what)
{
if(!what) return;
// activate/deactivate parts of the option window depending on the
// user's choices (or the option settings)
if(!strcmp(what, "fast_redraw")){
if(general.butt[2]->value()){
browser->resize(browser->x(), browser->y(), browser->w(),
win->h() - 2 * WB - BH);
redraw->show();
win->redraw();
}
else{
browser->resize(browser->x(), browser->y(), browser->w(),
win->h());
redraw->hide();
win->redraw();
}
}
else if(!strcmp(what, "rotation_center")){
if(general.butt[15]->value()) {
general.push[0]->deactivate();
general.value[8]->deactivate();
general.value[9]->deactivate();
general.value[10]->deactivate();
}
else {
general.push[0]->activate();
general.value[8]->activate();
general.value[9]->activate();
general.value[10]->activate();
}
}
else if(!strcmp(what, "general_axes")){
if(general.choice[4]->value()){
general.value[17]->activate();
general.value[18]->activate();
general.value[19]->activate();
general.input[3]->activate();
general.input[4]->activate();
general.input[5]->activate();
general.input[6]->activate();
general.input[7]->activate();
general.input[8]->activate();
}
else{
general.value[17]->deactivate();
general.value[18]->deactivate();
general.value[19]->deactivate();
general.input[3]->deactivate();
general.input[4]->deactivate();
general.input[5]->deactivate();
general.input[6]->deactivate();
general.input[7]->deactivate();
general.input[8]->deactivate();
}
}
else if(!strcmp(what, "general_axes_auto")){
if(general.butt[0]->value()){
general.value[20]->deactivate();
general.value[21]->deactivate();
general.value[22]->deactivate();
general.value[23]->deactivate();
general.value[24]->deactivate();
general.value[25]->deactivate();
}
else{
general.value[20]->activate();
general.value[21]->activate();
general.value[22]->activate();
general.value[23]->activate();
general.value[24]->activate();
general.value[25]->activate();
}
}
else if(!strcmp(what, "general_small_axes")){
if(general.butt[1]->value()){
general.value[26]->activate();
general.value[27]->activate();
}
else{
general.value[26]->deactivate();
general.value[27]->deactivate();
}
}
else if(!strcmp(what, "general_camera")){
if(general.butt[18]->value()){
general.butt[17]->activate();
general.value[29]->activate();
general.value[30]->activate();
general.value[31]->activate();
}
else{
general.butt[17]->deactivate();
general.value[29]->deactivate();
general.value[30]->deactivate();
general.value[31]->deactivate();
}
}
else if(!strcmp(what, "geo_transform")){
if(geo.choice[3]->value() == 1){
for(int i = 7; i <= 18; i++)
geo.value[i]->activate();
}
else{
for(int i = 7; i <= 18; i++)
geo.value[i]->deactivate();
}
}
else if(!strcmp(what, "custom_range")){
if(view.choice[7]->value() == 1){
view.value[31]->activate();
view.value[32]->activate();
view.push[1]->activate();
view.push[2]->activate();
view.butt[38]->activate();
}
else {
view.value[31]->deactivate();
view.value[32]->deactivate();
view.push[1]->deactivate();
view.push[2]->deactivate();
view.butt[38]->deactivate();
}
}
else if(!strcmp(what, "view_adaptive")){
if(view.butt[0]->value()){
view.push[5]->activate();
view.push[6]->activate();
view.value[33]->activate();
view.value[34]->activate();
view.label[1]->activate();
}
else{
view.push[5]->deactivate();
view.push[6]->deactivate();
view.value[33]->deactivate();
view.value[34]->deactivate();
view.label[1]->deactivate();
}
}
else if(!strcmp(what, "view_general_transform")){
if(view.butt[6]->value()){
view.choice[11]->activate();
view.value[2]->activate();
view.input[4]->activate();
view.input[5]->activate();
view.input[6]->activate();
}
else{
view.choice[11]->deactivate();
view.value[2]->deactivate();
view.input[4]->deactivate();
view.input[5]->deactivate();
view.input[6]->deactivate();
}
}
else if(!strcmp(what, "mesh_light")){
if(mesh.butt[17]->value()){
mesh.butt[18]->activate();
mesh.butt[19]->activate();
mesh.butt[20]->activate();
mesh.butt[0]->activate();
mesh.value[18]->activate();
}
else{
mesh.butt[18]->deactivate();
mesh.butt[19]->deactivate();
mesh.butt[20]->deactivate();
mesh.butt[0]->deactivate();
mesh.value[18]->deactivate();
}
}
else if(!strcmp(what, "view_light")){
if(view.butt[11]->value()){
view.butt[8]->activate();
view.butt[9]->activate();
view.butt[12]->activate();
view.value[10]->activate();
}
else{
view.butt[8]->deactivate();
view.butt[9]->deactivate();
view.butt[12]->deactivate();
view.value[10]->deactivate();
}
}
else if(!strcmp(what, "view_axes")){
if(view.choice[8]->value()){
view.value[3]->activate();
view.value[4]->activate();
view.value[5]->activate();
view.input[7]->activate();
view.input[8]->activate();
view.input[9]->activate();
view.input[10]->activate();
view.input[11]->activate();
view.input[12]->activate();
}
else{
view.value[3]->deactivate();
view.value[4]->deactivate();
view.value[5]->deactivate();
view.input[7]->deactivate();
view.input[8]->deactivate();
view.input[9]->deactivate();
view.input[10]->deactivate();
view.input[11]->deactivate();
view.input[12]->deactivate();
}
}
else if(!strcmp(what, "view_axes_auto_3d")){
if(view.butt[25]->value()){
view.value[13]->deactivate();
view.value[14]->deactivate();
view.value[15]->deactivate();
view.value[16]->deactivate();
view.value[17]->deactivate();
view.value[18]->deactivate();
}
else{
view.value[13]->activate();
view.value[14]->activate();
view.value[15]->activate();
view.value[16]->activate();
view.value[17]->activate();
view.value[18]->activate();
}
}
else if(!strcmp(what, "view_axes_auto_2d")){
if(view.choice[16]->value()){
view.value[20]->deactivate();
view.value[21]->deactivate();
view.value[22]->deactivate();
view.value[23]->deactivate();
}
else{
view.value[20]->activate();
view.value[21]->activate();
view.value[22]->activate();
view.value[23]->activate();
}
}
}