atomes 1.3.1
atomes: an atomic scale modeling tool box
Loading...
Searching...
No Matches
glview.h
Go to the documentation of this file.
1/* This file is part of the 'atomes' software
2
3'atomes' is free software: you can redistribute it and/or modify it under the terms
4of the GNU Affero General Public License as published by the Free Software Foundation,
5either version 3 of the License, or (at your option) any later version.
6
7'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
8without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
9See the GNU General Public License for more details.
10
11You should have received a copy of the GNU Affero General Public License along with 'atomes'.
12If not, see <https://www.gnu.org/licenses/>
13
14Copyright (C) 2022-2026 by CNRS and University of Strasbourg */
15
22
23/*
24* This header file: 'glview.h'
25*
26* Contains:
27
28 - Variable declarations related to the OpenGL window
29 - Function declaration related to the OpenGL window
30
31*/
32
33#ifndef GL_VIEW_H_
34#define GL_VIEW_H_
35
39#define QUALITY 30
43#define DEFAULT_STYLE 1
44
45#define DEFAULT_SIZE 1
46
50#define DEFAULT_LIGHTNING 5.00
51
55#define DEFAULT_METALLIC 0.35
56
60#define DEFAULT_ROUGHNESS 0.15
61
65#define DEFAULT_AMBIANT_OCCLUSION 0.99
66
70#define DEFAULT_GAMMA_CORRECTION 1.50
71
75#define DEFAULT_OPACITY 1.00
76
80#define TEMPLATES 7
81
82extern gchar * material_template[TEMPLATES];
83extern GLfloat template_parameters[TEMPLATES][5];
84
85// default light data
89#define MAX_LIGHTS 10
90
94#define DEFAULT_INTENSITY 30.0
95
99#define NEAR_PLANE 1.0
100
104#define FAR_PLANE 10.0
105
109#define CAMERA_ANGLE_X 5.0 // Pitch in degree
110
114#define CAMERA_ANGLE_Y -25.0 // Heading in degree
115
119#define CAMERA_ANGLE_Z 0.0
120
124#define ZOOM 1.5
125
129#define ZOOM_FACTOR 0.05
130
134#define ZOOM_MAX 0.001
135
139#define REFRESH 10
140
144#define MAX_IN_SELECTION 21
148#define COORD_MAX_MENU 20
149
151enum radii {
152 VDW = 0,
153 INC = 1,
154 COV = 2,
155 ION = 3
156};
157
163
176
177#define NUM_STYLES OGL_STYLES+FILLED_STYLES+1
178
189
191enum render {
192 FILL = 0,
193 LINE = 1,
194 PTS = 2
195};
196
198enum action {
199 ROTATE = 0,
200 MOVE = 1,
201 SELECT = 2,
203 SPIN = 4
204};
205
211
221
231
234 DISPL = 2,
236 REMOVE = 4,
237 INSERT = 5,
239};
240
246
247/*enum material {
248 AMBIENT = 0,
249 DIFFUSE = 1,
250 SPECULAR = 2,
251 EMISSION = 3,
252 OPACITY = 4
253};*/
254
255extern GLfloat ** allocdGLfloat (int xal, int yal);
256extern GLfloat initlights[4][4];
257extern gboolean pick;
258extern glwin * wingl;
259extern project * proj_gl;
260extern coord_info * coord_gl;
261extern box_info * box_gl;
262extern cell_info * cell_gl;
263extern int proj_sp;
264extern int proj_at;
265extern image * plot;
266extern int qual;
267extern int acolorm;
268extern int pcolorm;
269extern int step;
270extern int gColorID[3];
271extern int field_object;
272extern GLenum ogl_texture;
273
274extern int get_filled_id (int sid);
275extern gboolean create_bond (int ac, int bid, int ba, int bb, int sel, double length);
276extern void draw_cylinder_bond (atom a, atom b, int bid, int ci, int bi);
277extern void draw_cylinder_bond_to_pick (atom a, atom b, int bid);
278extern void draw_wireframe_bond (atom a, atom b, int ci, int bi);
279extern gboolean create_atom (GLUquadricObj * quadric, int aid, int ac, int sp, int sel);
280
281extern void draw_vertices (int id);
282extern void draw_atom_to_pick (atom at);
283extern void draw_atom (atom at, double al);
284extern void draw_rings_gl (int se, int ge, int ta, int id);
285extern void draw_box ();
286extern void prepare_cuboid (vec3_t position, int id);
287extern void prepare_axis ();
288extern void draw (glwin * view);
289extern void render_all_strings (int glsl, int id);
290extern void prepare_string (char * text, int id, ColRGBA col, vec3_t pos, float lshift[3],
291 atom * at, atom * bt, atom * ct);
292
293ColRGBA init_color (int id, int numid);
295extern void sort (int dim, int * tab);
297void setup_bonds (glwin * view);
298void update (glwin * view);
299void center_this_molecule (glwin * view);
300G_MODULE_EXPORT void to_center_this_molecule (GtkWidget * widg, gpointer data);
301#ifdef GTK3
302G_MODULE_EXPORT gboolean on_lib_pressed (GtkWidget * widg, GdkEvent * event, gpointer data);
303G_MODULE_EXPORT gboolean on_glwin_button_event (GtkWidget * widg, GdkEvent * event, gpointer data);
304G_MODULE_EXPORT gboolean on_motion (GtkWidget * widg, GdkEvent * event, gpointer data);
305G_MODULE_EXPORT gboolean on_scrolled (GtkWidget * widg, GdkEvent * event, gpointer data);
306#else
307G_MODULE_EXPORT void on_lib_button_pressed (GtkGesture * gesture, int n_press, double x, double y, gpointer data);
308G_MODULE_EXPORT void on_lib_button_released (GtkGesture * gesture, int n_press, double x, double y, gpointer data);
309G_MODULE_EXPORT void on_glwin_button_pressed (GtkGesture * gesture, int n_press, double x, double y, gpointer data);
310G_MODULE_EXPORT void on_glwin_button_released (GtkGesture * gesture, int n_press, double x, double y, gpointer data);
311G_MODULE_EXPORT void on_glwin_pointer_motion (GtkEventControllerMotion * motion, gdouble x, gdouble y, gpointer data);
312G_MODULE_EXPORT gboolean on_glwin_pointer_scoll (GtkEventControllerScroll * event, gdouble dx, gdouble dy, gpointer data);
313#endif
314void reshape (glwin * view, int width, int height, gboolean use_ratio);
315void zoom (glwin * view, int delta);
316
317void init_opengl ();
318void init_camera (project * this_proj);
319
320#ifdef GTKGLAREA
321 G_MODULE_EXPORT void on_realize (GtkGLArea * area, gpointer data);
322 G_MODULE_EXPORT gboolean on_expose (GtkGLArea * area, GdkGLContext * context, gpointer data);
323#else
324 G_MODULE_EXPORT void on_realize (GtkWidget * area, gpointer data);
325 G_MODULE_EXPORT gboolean on_expose (GtkWidget * widg, cairo_t * cr, gpointer data);
326#endif
327
328extern void debug_image (image img, int i);
329
330extern distance distance_2d (atom * at, atom * bt);
331extern distance distance_3d (cell_info * cell, int mdstep, atom * at, atom * bt);
332extern angle angle_2d (atom * at, atom * bt, atom * ct);
333extern angle angle_3d (cell_info * cell, int mdstep, atom * at, atom * bt, atom * ct);
334extern angle dihedral_3d (cell_info * cell, int mdstep, atom * at, atom * bt, atom * ct, atom * dt);
335
336extern atom * duplicate_atom (atom * at);
337extern atom * free_atom (atom * at);
338extern void at_shift (atom * at, float * shift);
339extern void at_unshift (atom * at, float * shift);
340extern int check_label_numbers (project * this_proj, int types);
341
342extern mat4_t create_axis_matrices (int type);
344
345extern int nbs, nbl, nba;
346extern void re_create_all_md_shaders (glwin * view);
347extern void re_create_md_shaders (int nshaders, int shaders[nshaders], project * this_proj);
348extern void cleaning_shaders (glwin * view, int shader);
349extern void init_default_shaders (glwin * view);
350extern void init_shaders(glwin * view);
351
352extern object_3d * free_object_3d (object_3d * obj);
353extern glsl_program * init_shader_program (int object, int object_id,
354 const GLchar * vertex, const GLchar * geometry, const GLchar * fragment,
355 GLenum type_of_vertices, int narray, int nunif, gboolean lightning, object_3d * obj);
356
357extern void update_selection_list (atom_selection * at_list, atom * at, gboolean add);
358extern void update_all_selections (glwin * view, int pi);
359extern void save_all_selections (glwin * view, int pi);
360
361extern void process_selected_atom (project * this_proj, glwin * view, int id, int ac, int se, int pi);
362
363extern void update_selection_tree (glwin * view, int pi, int id);
364extern void update_all_menus (glwin * view, int nats);
365
366extern gboolean is_coord_in_menu (int id, project * this_proj);
367
368extern atom_search * free_this_search_data (atom_search * this_search);
369#ifdef GTK3
370extern G_MODULE_EXPORT void show_hide_clones (GtkWidget * widg, gpointer data);
371extern G_MODULE_EXPORT void set_rep (GtkWidget * widg, gpointer data);
372#else
373extern G_MODULE_EXPORT void show_hide_clones (GSimpleAction * action, GVariant * state, gpointer data);
374#endif
375
376extern void popup_selection (glwin * view, double ptx, double pty, int se, int pe, int ai, int bi, int ac);
377extern void popup_main_menu (glwin * view, double ptx, double pty);
378
381{
383 double x, y;
384 int pts[5];
385};
386
387extern gl_pop_info to_pop;
388
389#endif
int nba
Definition d_atoms.c:165
int gColorID[3]
Definition d_atoms.c:61
int nbs
Definition d_atoms.c:165
int nbl
Definition d_atoms.c:165
ColRGBA col
Definition d_measures.c:77
atom * ta
Definition d_measures.c:70
int * shift
Definition d_measures.c:72
GtkTreeSelection * sel
Definition datab.c:102
gchar * text
Definition datab.c:105
int field_object
Definition dlp_field.c:1069
double pi
Definition global.c:202
GLenum ogl_texture
Definition glview.c:122
gl_pop_info to_pop
Definition glview.c:896
void motion(glwin *view, gint x, gint y, GdkModifierType state)
mouse motion in the OpenGL window
Definition glview.c:648
image * plot
Definition ogl_draw.c:72
angle dihedral_3d(cell_info *cell, int mdstep, atom *at, atom *bt, atom *ct, atom *dt)
dihedral between atom a, b, c and d in 3D
Definition ogl_utils.c:204
void re_create_all_md_shaders(glwin *view)
re-initialize all MD dependent OpenGL shaders
texts
Definition glview.h:242
@ SIMPLE_TEXT
Definition glview.h:243
@ BETTER_TEXT
Definition glview.h:244
atom_search * free_this_search_data(atom_search *this_search)
free atom search data structure
Definition popup.c:282
GLfloat ** allocdGLfloat(int xal, int yal)
allocate a GLfloat ** pointer
Definition glview.c:169
int get_filled_id(int sid)
retrieve filled ID number in FILLED_STYLES based on style ID
Definition m_style.c:184
axisposition
Definition glview.h:213
@ CENTER
Definition glview.h:218
@ BOTTOM_RIGHT
Definition glview.h:216
@ TOP_LEFT
Definition glview.h:215
@ BOTTOM_LEFT
Definition glview.h:217
@ CUSTOM
Definition glview.h:219
@ TOP_RIGHT
Definition glview.h:214
GLfloat initlights[4][4]
distance distance_2d(atom *at, atom *bt)
distance between atom a and b in 2D
Definition ogl_utils.c:60
void draw_atom(atom at, double al)
void prepare_cuboid(vec3_t position, int id)
OpenGL 3D light object rendering.
Definition d_box.c:440
G_MODULE_EXPORT void to_center_this_molecule(GtkWidget *widg, gpointer data)
center this molecule menu item callback GTK4
Definition popup.c:4019
void draw(glwin *view)
main drawing subroutine for the OpenGL window
Definition ogl_draw.c:528
void re_create_md_shaders(int nshaders, int shaders[nshaders], project *this_proj)
re-initialize some MD dependent OpenGL shaders
gboolean create_atom(GLUquadricObj *quadric, int aid, int ac, int sp, int sel)
action
Definition glview.h:198
@ SELECT
Definition glview.h:201
@ ROTATE
Definition glview.h:199
@ ZOOM_IN_OUT
Definition glview.h:202
@ MOVE
Definition glview.h:200
@ SPIN
Definition glview.h:203
void at_unshift(atom *at, float *shift)
correct atomic coordinates modified to display image in cell replica
Definition ogl_draw.c:514
void prepare_string(char *text, int id, ColRGBA col, vec3_t pos, float lshift[3], atom *at, atom *bt, atom *ct)
prepare a screen string to be rendered
Definition ogl_text.c:694
void update(glwin *view)
update the rendering of the OpenGL window
Definition glview.c:461
project * proj_gl
Definition ogl_draw.c:66
glwin * wingl
Definition ogl_draw.c:65
gboolean is_coord_in_menu(int id, project *this_proj)
is this coordination in a menu ?
Definition m_coord.c:74
gboolean pick
void update_all_menus(glwin *view, int nats)
update all menus of the OpenGL window
Definition glwindow.c:338
int check_label_numbers(project *this_proj, int types)
check how many atom label(s) are visible
Definition popup.c:1059
void popup_main_menu(glwin *view, double ptx, double pty)
create the OpenGL window popup menu
Definition popup.c:4178
mat4_t create_axis_matrices(int type)
create axis OpenGL rendering matrices
Definition d_axis.c:101
gchar * material_template[TEMPLATES]
void init_shaders(glwin *view)
initialize all the OpenGL shaders
radii
Definition glview.h:151
@ VDW
Definition glview.h:152
@ INC
Definition glview.h:153
@ COV
Definition glview.h:154
@ ION
Definition glview.h:155
void init_camera(project *this_proj)
initialize the OpenGL camera settings
Definition glview.c:1180
int proj_sp
Definition ogl_draw.c:67
angle angle_2d(atom *at, atom *bt, atom *ct)
angle between atom a, b and c in 2D
Definition ogl_utils.c:156
G_MODULE_EXPORT void show_hide_clones(GSimpleAction *action, GVariant *state, gpointer data)
show/hide clones menu item callback
Definition m_clones.c:139
void draw_cylinder_bond(atom a, atom b, int bid, int ci, int bi)
void at_shift(atom *at, float *shift)
modify atomic coordinates to display image in cell replica
Definition ogl_draw.c:499
void draw_wireframe_bond(atom a, atom b, int ci, int bi)
void draw_box()
void update_selection_list(atom_selection *at_list, atom *at, gboolean add)
update the selection list adding or removing an atom
Definition selection.c:445
ColRGBA init_color(int id, int numid)
initialize color based id number over total number of elements
Definition initcoord.c:81
G_MODULE_EXPORT void on_realize(GtkWidget *area, gpointer data)
realize event for the OpenGL widget
Definition glview.c:1797
G_MODULE_EXPORT void on_lib_button_released(GtkGesture *gesture, int n_press, double x, double y, gpointer data)
handle mouse button release event on the molecular library OpenGL window (limited interaction)
Definition glview.c:890
void zoom(glwin *view, int delta)
zoom in or zoom out in the OpenGL window
Definition glview.c:1028
modes
Definition glview.h:165
@ MOTION
Definition glview.h:168
@ LAAMPS
Definition glview.h:170
@ CPMD_AI
Definition glview.h:171
@ CP2K_MM
Definition glview.h:174
@ CP2K_QMMM
Definition glview.h:173
@ CP2K_AI
Definition glview.h:172
@ DL_POLY
Definition glview.h:169
@ ANALYZE
Definition glview.h:166
@ EDITION
Definition glview.h:167
void draw_rings_gl(int se, int ge, int ta, int id)
#define TEMPLATES
Number of material templates.
Definition glview.h:80
G_MODULE_EXPORT void on_lib_button_pressed(GtkGesture *gesture, int n_press, double x, double y, gpointer data)
handle mouse button press event on the molecular library OpenGL window (limited interaction)
Definition glview.c:874
box_info * box_gl
Definition ogl_draw.c:70
render
Definition glview.h:191
@ FILL
Definition glview.h:192
@ LINE
Definition glview.h:193
@ PTS
Definition glview.h:194
void prepare_axis()
G_MODULE_EXPORT void on_glwin_button_released(GtkGesture *gesture, int n_press, double x, double y, gpointer data)
mouse button released signal on the OpenGL window
Definition glview.c:1013
void popup_selection(glwin *view, double ptx, double pty, int se, int pe, int ai, int bi, int ac)
create the contextual popup menu, right click on atom or bond
Definition popup.c:3687
representation
Definition glview.h:159
@ PERSPECTIVE
Definition glview.h:161
@ ORTHOGRAPHIC
Definition glview.h:160
mouse_status
Definition glview.h:207
@ RELEASED
Definition glview.h:209
@ CLICKED
Definition glview.h:208
void reshape(glwin *view, int width, int height, gboolean use_ratio)
reshape (resize) the OpenGL window
Definition glview.c:538
void init_opengl()
initialize OpenGL rendering parameters
Definition glview.c:1440
void cleaning_shaders(glwin *view, int shader)
re-initialize an OpenGL shader
G_MODULE_EXPORT void on_glwin_button_pressed(GtkGesture *gesture, int n_press, double x, double y, gpointer data)
mouse button pressed signal on the OpenGL window
Definition glview.c:997
void setup_bonds(glwin *view)
int qual
Definition ogl_draw.c:73
mat4_t create_label_matrices()
create label projection matrices
Definition d_label.c:56
ColRGBA set_default_color(int z)
pick the default color for an atom
Definition glview.c:195
void process_selected_atom(project *this_proj, glwin *view, int id, int ac, int se, int pi)
process selected atom
Definition selection.c:514
atom * free_atom(atom *at)
free an atom data structure
Definition ogl_draw.c:484
void draw_vertices(int id)
Draw OpenGL shader program.
int step
Definition ogl_draw.c:76
labels
Definition glview.h:223
@ ELEMENT_NAME
Definition glview.h:224
@ NUM
Definition glview.h:228
@ SYMBOL_AND_NUM
Definition glview.h:226
@ SYMBOL_AND_IND
Definition glview.h:227
@ ID_IN_MOLECULE
Definition glview.h:229
@ SYMBOL
Definition glview.h:225
void update_selection_tree(glwin *view, int pi, int id)
update measurements tree view
Definition w_measures.c:376
int pcolorm
Definition ogl_draw.c:75
object_3d * free_object_3d(object_3d *obj)
free the memory allocated to create an object_3d data structure
void render_all_strings(int glsl, int id)
render all string to be rendered for a label list
Definition ogl_text.c:552
angle angle_3d(cell_info *cell, int mdstep, atom *at, atom *bt, atom *ct)
angle between atom a, b and c in 3D
Definition ogl_utils.c:179
int acolorm
Definition ogl_draw.c:74
gboolean create_bond(int ac, int bid, int ba, int bb, int sel, double length)
vec3_t get_insertion_coordinates(glwin *view)
get the insertion coordinates to insert object in the 3D window
Definition glwindow.c:806
void center_this_molecule(glwin *view)
center atomic coordinates around (0,0,0) and refresh shaders
Definition glview.c:1581
atom * duplicate_atom(atom *at)
copy (partially) an atom data structure
Definition ogl_draw.c:449
GLfloat template_parameters[TEMPLATES][5]
Definition w_advance.c:100
void update_all_selections(glwin *view, int pi)
update the selection data: bonds, angles and dihedrals
Definition selection.c:387
void save_all_selections(glwin *view, int pi)
save all selection data
Definition selection.c:372
coord_info * coord_gl
Definition ogl_draw.c:69
void debug_image(image img, int i)
glsl_program * init_shader_program(int object, int object_id, const GLchar *vertex, const GLchar *geometry, const GLchar *fragment, GLenum type_of_vertices, int narray, int nunif, gboolean lightning, object_3d *obj)
create an OpenGL shader program
void init_default_shaders(glwin *view)
re-initialize the default OpenGL shaders
int proj_at
Definition ogl_draw.c:68
G_MODULE_EXPORT gboolean on_glwin_pointer_scoll(GtkEventControllerScroll *event, gdouble dx, gdouble dy, gpointer data)
handle mouse scroll event on the OpenGL window
Definition glview.c:1077
G_MODULE_EXPORT void on_glwin_pointer_motion(GtkEventControllerMotion *motion, gdouble x, gdouble y, gpointer data)
handle mouse motion event in the OpenGL window GTK4
Definition glview.c:749
cell_info * cell_gl
Definition ogl_draw.c:71
G_MODULE_EXPORT gboolean on_expose(GtkWidget *widg, cairo_t *cr, gpointer data)
OpenGL rendering widget expose event callback GTK3.
Definition glview.c:1854
void draw_cylinder_bond_to_pick(atom a, atom b, int bid)
void sort(int dim, int *tab)
sort, nim to max, a table by integer value
Definition glview.c:402
actions
Definition glview.h:233
@ DISPL
Definition glview.h:234
@ RANMOVE
Definition glview.h:238
@ REPLACE
Definition glview.h:235
@ REMOVE
Definition glview.h:236
@ INSERT
Definition glview.h:237
styles
Definition glview.h:180
@ SPHERES
Definition glview.h:185
@ SPACEFILL
Definition glview.h:184
@ BALL_AND_STICK
Definition glview.h:182
@ CYLINDERS
Definition glview.h:186
@ WIREFRAME
Definition glview.h:183
@ NONE
Definition glview.h:181
@ PUNT
Definition glview.h:187
void draw_atom_to_pick(atom at)
distance distance_3d(cell_info *cell, int mdstep, atom *at, atom *bt)
distance between atom a and b in 3D
Definition ogl_utils.c:81
shaders
The different types of shaders in the atomes program.
Definition glwin.h:88
position
Definition m_proj.c:48
G_MODULE_EXPORT void set_rep(GtkWidget *widg, gpointer data)
change representation callback
Definition m_rep.c:600
GLUquadricObj * quadric
Definition ogl_draw.c:64
double z
Definition ogl_draw.c:63
double y
Definition ogl_draw.c:63
double x
Definition ogl_draw.c:63
Definition glwin.h:115
Definition global.h:964
int action
Definition glview.h:382
double y
Definition glview.h:383
int pts[5]
Definition glview.h:384
double x
Definition glview.h:383
Definition glwin.h:967
Definition glwin.h:364
GtkWidget * img
Definition workspace.c:70