~ubuntu-branches/debian/squeeze/gmsh/squeeze

« back to all changes in this revision

Viewing changes to Fltk/contextWindow.cpp

  • Committer: Bazaar Package Importer
  • Author(s): Christophe Prud'homme
  • Date: 2009-02-17 10:12:27 UTC
  • mfrom: (1.2.6 upstream)
  • Revision ID: james.westby@ubuntu.com-20090217101227-mdrolkldak2pgd2i
Tags: 2.3.0.dfsg-1
* New upstream release
  + major graphics and GUI code refactoring; 
  + new full-quad/hexa subdivision algorithm (removed 
    Mesh.RecombineAlgo);
  + improved automatic transfinite corner selection (now also 
    for volumes); 
  + improved visibility browser; new automatic adaptive visualization
    for high-order simplices;
  + modified arrow size, clipping planes and transform options; many
    improvements and
  + bug fixes all over the place.

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
// Gmsh - Copyright (C) 1997-2009 C. Geuzaine, J.-F. Remacle
 
2
//
 
3
// See the LICENSE.txt file for license information. Please report all
 
4
// bugs and problems to <gmsh@geuz.org>.
 
5
 
 
6
#include <FL/Fl_Tabs.H>
 
7
#include <FL/Fl_Return_Button.H>
 
8
#include "GUI.h"
 
9
#include "Draw.h"
 
10
#include "contextWindow.h"
 
11
#include "paletteWindow.h"
 
12
#include "GModel.h"
 
13
#include "GeoStringInterface.h"
 
14
#include "OpenFile.h"
 
15
#include "Context.h"
 
16
 
 
17
extern Context_T CTX;
 
18
 
 
19
static void con_geometry_define_parameter_cb(Fl_Widget *w, void *data)
 
20
{
 
21
  add_param(GUI::instance()->geoContext->input[0]->value(),
 
22
            GUI::instance()->geoContext->input[1]->value(),
 
23
            GModel::current()->getFileName());
 
24
  GUI::instance()->resetVisibility();
 
25
}
 
26
 
 
27
static void con_geometry_define_point_cb(Fl_Widget *w, void *data)
 
28
{
 
29
  add_point(GModel::current()->getFileName(),
 
30
            GUI::instance()->geoContext->input[2]->value(),
 
31
            GUI::instance()->geoContext->input[3]->value(),
 
32
            GUI::instance()->geoContext->input[4]->value(),
 
33
            GUI::instance()->geoContext->input[5]->value());
 
34
  GUI::instance()->resetVisibility();
 
35
  GModel::current()->setSelection(0);
 
36
  SetBoundingBox();
 
37
  Draw();
 
38
}
 
39
 
 
40
static void con_geometry_snap_cb(Fl_Widget *w, void *data)
 
41
{
 
42
  CTX.geom.snap[0] = GUI::instance()->geoContext->value[0]->value();
 
43
  CTX.geom.snap[1] = GUI::instance()->geoContext->value[1]->value();
 
44
  CTX.geom.snap[2] = GUI::instance()->geoContext->value[2]->value();
 
45
}
 
46
 
 
47
geometryContextWindow::geometryContextWindow(int deltaFontSize)
 
48
{
 
49
  FL_NORMAL_SIZE -= deltaFontSize;
 
50
 
 
51
  int width = 31 * FL_NORMAL_SIZE;
 
52
  int height = 4 * WB + 8 * BH;
 
53
 
 
54
  win = new paletteWindow(width, height, CTX.non_modal_windows ? true : false, 
 
55
                          "Contextual Geometry Definitions");
 
56
  win->box(GMSH_WINDOW_BOX);
 
57
  {
 
58
    Fl_Tabs *o = new Fl_Tabs(WB, WB, width - 2 * WB, height - 2 * WB);
 
59
    // 0: Parameter
 
60
    {
 
61
      group[0] = new Fl_Group
 
62
        (WB, WB + BH, width - 2 * WB, height - 2 * WB - BH, "Parameter");
 
63
      input[0] = new Fl_Input(2 * WB, 2 * WB + 1 * BH, IW, BH, "Name");
 
64
      input[0]->value("lc");
 
65
      input[1] = new Fl_Input(2 * WB, 2 * WB + 2 * BH, IW, BH, "Value");
 
66
      input[1]->value("0.1");
 
67
      for(int i = 0; i < 2; i++) {
 
68
        input[i]->align(FL_ALIGN_RIGHT);
 
69
      }
 
70
      {
 
71
        Fl_Return_Button *o = new Fl_Return_Button
 
72
          (width - BB - 2 * WB, 2 * WB + 7 * BH, BB, BH, "Add");
 
73
        o->callback(con_geometry_define_parameter_cb);
 
74
      }
 
75
      group[0]->end();
 
76
    }
 
77
    // 1: Point
 
78
    {
 
79
      group[1] = new Fl_Group
 
80
        (WB, WB + BH, width - 2 * WB, height - 2 * WB - BH, "Point");
 
81
      input[2] = new Fl_Input(2 * WB, 2 * WB + 1 * BH, IW, BH, "X coordinate");
 
82
      input[2]->value("0");
 
83
      input[3] = new Fl_Input(2 * WB, 2 * WB + 2 * BH, IW, BH, "Y coordinate");
 
84
      input[3]->value("0");
 
85
      input[4] = new Fl_Input(2 * WB, 2 * WB + 3 * BH, IW, BH, "Z coordinate");
 
86
      input[4]->value("0");
 
87
      input[5] = new Fl_Input(2 * WB, 2 * WB + 4 * BH, IW, BH, "Characteristic length");
 
88
      input[5]->value("");
 
89
      for(int i = 2; i < 6; i++) {
 
90
        input[i]->align(FL_ALIGN_RIGHT);
 
91
      }
 
92
      value[0] = new Fl_Value_Input(2 * WB, 2 * WB + 5 * BH, IW/3, BH);
 
93
      value[1] = new Fl_Value_Input(2 * WB + IW/3, 2 * WB + 5 * BH, IW/3, BH);
 
94
      value[2] = new Fl_Value_Input(2 * WB + 2*IW/3, 2 * WB + 5 * BH, IW/3, BH,
 
95
                                    "Snapping grid spacing");
 
96
      for(int i = 0; i < 3; i++) {
 
97
        value[i]->align(FL_ALIGN_RIGHT);
 
98
        value[i]->callback(con_geometry_snap_cb);
 
99
      }
 
100
      {
 
101
        Fl_Return_Button *o = new Fl_Return_Button
 
102
          (width - BB - 2 * WB, 2 * WB + 7 * BH, BB, BH, "Add");
 
103
        o->callback(con_geometry_define_point_cb);
 
104
      }
 
105
      group[1]->end();
 
106
    }
 
107
    // 2: Translation
 
108
    {
 
109
      group[2] = new Fl_Group
 
110
        (WB, WB + BH, width - 2 * WB, height - 2 * WB - BH, "Translation");
 
111
      input[6] = new Fl_Input(2 * WB, 2 * WB + 1 * BH, IW, BH, "X component");
 
112
      input[6]->value("0");
 
113
      input[7] = new Fl_Input(2 * WB, 2 * WB + 2 * BH, IW, BH, "Y component");
 
114
      input[7]->value("0");
 
115
      input[8] = new Fl_Input(2 * WB, 2 * WB + 3 * BH, IW, BH, "Z component");
 
116
      input[8]->value("1");
 
117
      for(int i = 6; i < 9; i++) {
 
118
        input[i]->align(FL_ALIGN_RIGHT);
 
119
      }
 
120
      group[2]->end();
 
121
    }
 
122
    // 3: Rotation
 
123
    {
 
124
      group[3] = new Fl_Group
 
125
        (WB, WB + BH, width - 2 * WB, height - 2 * WB - BH, "Rotation");
 
126
      input[9] = new Fl_Input
 
127
        (2 * WB, 2 * WB + 1 * BH, IW, BH, "X coordinate of an axis point");
 
128
      input[9]->value("0");
 
129
      input[10] = new Fl_Input
 
130
        (2 * WB, 2 * WB + 2 * BH, IW, BH, "Y coordinate of an axis point");
 
131
      input[10]->value("0");
 
132
      input[11] = new Fl_Input
 
133
        (2 * WB, 2 * WB + 3 * BH, IW, BH, "Z coordinate of an axis point");
 
134
      input[11]->value("0");
 
135
      input[12] = new Fl_Input
 
136
        (2 * WB, 2 * WB + 4 * BH, IW, BH, "X component of axis direction");
 
137
      input[12]->value("0");
 
138
      input[13] = new Fl_Input
 
139
        (2 * WB, 2 * WB + 5 * BH, IW, BH, "Y component of axis direction");
 
140
      input[13]->value("1");
 
141
      input[14] = new Fl_Input
 
142
        (2 * WB, 2 * WB + 6 * BH, IW, BH, "Z component of axis direction");
 
143
      input[14]->value("0");
 
144
      input[15] = new Fl_Input
 
145
        (2 * WB, 2 * WB + 7 * BH, IW, BH, "Angle in radians");
 
146
      input[15]->value("Pi/4");
 
147
      for(int i = 9; i < 16; i++) {
 
148
        input[i]->align(FL_ALIGN_RIGHT);
 
149
      }
 
150
      group[3]->end();
 
151
    }
 
152
    // 4: Scale
 
153
    {
 
154
      group[4] = new Fl_Group
 
155
        (WB, WB + BH, width - 2 * WB, height - 2 * WB - BH, "Scale");
 
156
      input[16] = new Fl_Input
 
157
        (2 * WB, 2 * WB + 1 * BH, IW, BH, "X component of direction");
 
158
      input[16]->value("0");
 
159
      input[17] = new Fl_Input
 
160
        (2 * WB, 2 * WB + 2 * BH, IW, BH, "Y component of direction");
 
161
      input[17]->value("0");
 
162
      input[18] = new Fl_Input
 
163
        (2 * WB, 2 * WB + 3 * BH, IW, BH, "Z component of direction");
 
164
      input[18]->value("0");
 
165
      input[19] = new Fl_Input
 
166
        (2 * WB, 2 * WB + 4 * BH, IW, BH, "Factor");
 
167
      input[19]->value("0.5");
 
168
      for(int i = 16; i < 20; i++) {
 
169
        input[i]->align(FL_ALIGN_RIGHT);
 
170
      }
 
171
      group[4]->end();
 
172
    }
 
173
    // 5: Symmetry
 
174
    {
 
175
      group[5] = new Fl_Group
 
176
        (WB, WB + BH, width - 2 * WB, height - 2 * WB - BH, "Symmetry");
 
177
      input[20] = new Fl_Input(2 * WB, 2 * WB + 1 * BH, IW, BH, "A");
 
178
      input[20]->value("1");
 
179
      input[21] = new Fl_Input(2 * WB, 2 * WB + 2 * BH, IW, BH, "B");
 
180
      input[21]->value("0");
 
181
      input[22] = new Fl_Input(2 * WB, 2 * WB + 3 * BH, IW, BH, "C");
 
182
      input[22]->value("0");
 
183
      input[23] = new Fl_Input(2 * WB, 2 * WB + 4 * BH, IW, BH, "D");
 
184
      input[23]->value("1");
 
185
      for(int i = 20; i < 24; i++) {
 
186
        input[i]->align(FL_ALIGN_RIGHT);
 
187
      }
 
188
      group[5]->end();
 
189
    }
 
190
    o->end();
 
191
  }
 
192
 
 
193
  win->position(CTX.ctx_position[0], CTX.ctx_position[1]);
 
194
  win->end();
 
195
 
 
196
  FL_NORMAL_SIZE += deltaFontSize;
 
197
}
 
198
 
 
199
void geometryContextWindow::show(int pane)
 
200
{
 
201
  for(int i = 0; i < 6; i++)
 
202
    group[i]->hide();
 
203
  group[pane]->show();
 
204
  win->show();
 
205
}
 
206
 
 
207
meshContextWindow::meshContextWindow(int deltaFontSize)
 
208
{
 
209
  FL_NORMAL_SIZE -= deltaFontSize;
 
210
 
 
211
  static Fl_Menu menu_transfinite_dir[] = {
 
212
    {"Left", 0, 0, 0},
 
213
    {"Right", 0, 0, 0},
 
214
    {"Alternated", 0, 0, 0},
 
215
    {0}
 
216
  };
 
217
 
 
218
  int width = 29 * FL_NORMAL_SIZE;
 
219
  int height = 4 * WB + 4 * BH;
 
220
 
 
221
  win = new paletteWindow
 
222
    (width, height, CTX.non_modal_windows, "Contextual Mesh Definitions");
 
223
  win->box(GMSH_WINDOW_BOX);
 
224
  {
 
225
    Fl_Tabs *o = new Fl_Tabs(WB, WB, width - 2 * WB, height - 2 * WB);
 
226
    // 0: Characteristic length
 
227
    {
 
228
      group[0] = new Fl_Group
 
229
        (WB, WB + BH, width - 2 * WB, height - 2 * WB - BH, "Characteristic Length");
 
230
      input[0] = new Fl_Input(2 * WB, 2 * WB + 1 * BH, IW, BH, "Value");
 
231
      input[0]->value("0.1");
 
232
      input[0]->align(FL_ALIGN_RIGHT);
 
233
      group[0]->end();
 
234
    }
 
235
    // 1: Transfinite line
 
236
    {
 
237
      group[1] = new Fl_Group
 
238
        (WB, WB + BH, width - 2 * WB, height - 2 * WB - BH, "Transfinite Line");
 
239
      input[1] = new Fl_Input(2 * WB, 2 * WB + 1 * BH, IW, BH, "Number of points");
 
240
      input[1]->value("10");
 
241
      input[2] = new Fl_Input(2 * WB, 2 * WB + 3 * BH, IW, BH, "Parameter");
 
242
      input[2]->value("1");
 
243
      for(int i = 1; i < 3; i++) {
 
244
        input[i]->align(FL_ALIGN_RIGHT);
 
245
      }
 
246
      static Fl_Menu_Item menu_trsf_mesh[] = {
 
247
        {"Progression", 0, 0, 0},
 
248
        {"Bump", 0, 0, 0},
 
249
        {0}
 
250
      };
 
251
      choice[0] = new Fl_Choice(2 * WB, 2 * WB + 2 * BH, IW, BH, "Type");
 
252
      choice[0]->menu(menu_trsf_mesh);
 
253
      choice[0]->align(FL_ALIGN_RIGHT);
 
254
      group[1]->end();
 
255
    }
 
256
    
 
257
    // 2: Transfinite surface
 
258
    {
 
259
      group[2] = new Fl_Group
 
260
        (WB, WB + BH, width - 2 * WB, height - 2 * WB - BH, "Transfinite Surface");
 
261
 
 
262
      choice[1] = new Fl_Choice
 
263
        (2 * WB, 2 * WB + 1 * BH, IW, BH, "Transfinite Arrangement");
 
264
      choice[1]->menu(menu_transfinite_dir);
 
265
      choice[1]->align(FL_ALIGN_RIGHT);
 
266
 
 
267
      group[2]->end();
 
268
    }
 
269
    o->end();
 
270
  }
 
271
 
 
272
  win->position(CTX.ctx_position[0], CTX.ctx_position[1]);
 
273
  win->end();
 
274
 
 
275
  FL_NORMAL_SIZE += deltaFontSize;
 
276
}
 
277
 
 
278
void meshContextWindow::show(int pane)
 
279
{
 
280
  for(int i = 0; i < 3; i++)
 
281
    group[i]->hide();
 
282
  group[pane]->show();
 
283
  win->show();
 
284
}