atomes 1.2.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-2025 by CNRS and University of Strasbourg */
15
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 1.00
51
55#define DEFAULT_METALLIC 0.35
56
60#define DEFAULT_ROUGHNESS 0.15
61
65#define DEFAULT_AMBIANT_OCCLUSION 1.00
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 10.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
157
163
176
177#define NUM_STYLES 7
178
189
191enum render {
192 FILL = 0,
193 LINE = 1,
194 PTS = 2
196
198enum action {
199 ROTATE = 0,
200 MOVE = 1,
201 SELECT = 2,
203 SPIN = 4
205
211
221
230
233 DISPL = 2,
235 REMOVE = 4,
236 INSERT = 5,
237 RANMOVE = 6
239
245
246/*enum material {
247 AMBIENT = 0,
248 DIFFUSE = 1,
249 SPECULAR = 2,
250 EMISSION = 3,
251 OPACITY = 4
252};*/
253
254extern GLfloat ** allocdGLfloat (int xal, int yal);
255extern GLfloat initlights[4][4];
256extern gboolean pick;
257extern glwin * wingl;
258extern project * proj_gl;
259extern coord_info * coord_gl;
260extern box_info * box_gl;
261extern cell_info * cell_gl;
262extern int proj_sp;
263extern int proj_at;
264extern image * plot;
265extern int qual;
266extern int acolorm;
267extern int pcolorm;
268extern int step;
269extern int gColorID[3];
270extern int field_object;
271extern GLenum ogl_texture;
272
273extern gboolean create_bond (int ac, int bid, int ba, int bb, int sel, double length);
274extern void draw_cylinder_bond (atom a, atom b, int bid, int ci, int bi);
275extern void draw_cylinder_bond_to_pick (atom a, atom b, int bid);
276extern void draw_wireframe_bond (atom a, atom b, int ci, int bi);
277extern gboolean create_atom (GLUquadricObj * quadric, int aid, int ac, int sp, int sel);
278
279extern void draw_vertices (int id);
280extern void draw_atom_to_pick (atom at);
281extern void draw_atom (atom at, double al);
282extern void draw_rings_gl (int se, int ge, int ta, int id);
283extern void draw_box ();
284extern void prepare_cuboid (vec3_t position, int id);
285extern void prepare_axis ();
286extern void draw (glwin * view);
287extern void render_all_strings (int glsl, int id);
288extern void prepare_string (char * text, int id, ColRGBA col, vec3_t pos, float lshift[3],
289 atom * at, atom * bt, atom * ct);
290
291ColRGBA init_color (int id, int numid);
293extern void sort (int dim, int * tab);
295void setup_bonds (glwin * view);
296void update (glwin * view);
297void center_this_molecule (glwin * view);
298G_MODULE_EXPORT void to_center_this_molecule (GtkWidget * widg, gpointer data);
299#ifdef GTK3
300G_MODULE_EXPORT gboolean on_lib_pressed (GtkWidget * widg, GdkEvent * event, gpointer data);
301G_MODULE_EXPORT gboolean on_glwin_button_event (GtkWidget * widg, GdkEvent * event, gpointer data);
302G_MODULE_EXPORT gboolean on_motion (GtkWidget * widg, GdkEvent * event, gpointer data);
303G_MODULE_EXPORT gboolean on_scrolled (GtkWidget * widg, GdkEvent * event, gpointer data);
304#else
305G_MODULE_EXPORT void on_lib_button_pressed (GtkGesture * gesture, int n_press, double x, double y, gpointer data);
306G_MODULE_EXPORT void on_lib_button_released (GtkGesture * gesture, int n_press, double x, double y, gpointer data);
307G_MODULE_EXPORT void on_glwin_button_pressed (GtkGesture * gesture, int n_press, double x, double y, gpointer data);
308G_MODULE_EXPORT void on_glwin_button_released (GtkGesture * gesture, int n_press, double x, double y, gpointer data);
309G_MODULE_EXPORT void on_glwin_pointer_motion (GtkEventControllerMotion * motion, gdouble x, gdouble y, gpointer data);
310G_MODULE_EXPORT gboolean on_glwin_pointer_scoll (GtkEventControllerScroll * event, gdouble dx, gdouble dy, gpointer data);
311#endif
312void reshape (glwin * view, int width, int height, gboolean use_ratio);
313void zoom (glwin * view, int delta);
314
315void init_opengl ();
316void init_camera (project * this_proj, gboolean get_depth);
317
318#ifdef GTKGLAREA
319 G_MODULE_EXPORT void on_realize (GtkGLArea * area, gpointer data);
320 G_MODULE_EXPORT gboolean on_expose (GtkGLArea * area, GdkGLContext * context, gpointer data);
321#else
322 G_MODULE_EXPORT void on_realize (GtkWidget * area, gpointer data);
323 G_MODULE_EXPORT gboolean on_expose (GtkWidget * widg, cairo_t * cr, gpointer data);
324#endif
325
326extern void debug_image (image img, int i);
327
328extern distance distance_2d (atom * at, atom * bt);
329extern distance distance_3d (cell_info * cell, int mdstep, atom * at, atom * bt);
330extern angle angle_2d (atom * at, atom * bt, atom * ct);
331extern angle angle_3d (cell_info * cell, int mdstep, atom * at, atom * bt, atom * ct);
332extern angle dihedral_3d (cell_info * cell, int mdstep, atom * at, atom * bt, atom * ct, atom * dt);
333
334extern atom * duplicate_atom (atom * at);
335extern void at_shift (atom * at, float * shift);
336extern void at_unshift (atom * at, float * shift);
337extern int check_label_numbers (project * this_proj, int types);
338
339extern mat4_t create_axis_matrices (int type);
341
342extern int nbs, nbl, nba;
343extern void re_create_all_md_shaders (glwin * view);
344extern void re_create_md_shaders (int nshaders, int shaders[nshaders], project * this_proj);
345extern void cleaning_shaders (glwin * view, int shader);
346extern void init_default_shaders (glwin * view);
347extern void init_shaders(glwin * view);
348
349extern glsl_program * init_shader_program (int object, int object_id,
350 const GLchar * vertex, const GLchar * geometry, const GLchar * fragment,
351 GLenum type_of_vertices, int narray, int nunif, gboolean lightning, object_3d * obj);
352
353extern void update_selection_list (atom_selection * at_list, atom * at, gboolean add);
354extern void update_all_selections (glwin * view, int pi);
355extern void save_all_selections (glwin * view, int pi);
356
357extern void process_selected_atom (project * this_proj, glwin * view, int id, int ac, int se, int pi);
358
359extern void update_selection_tree (glwin * view, int pi, int id);
360extern void update_all_menus (glwin * view, int nats);
361
362extern gboolean is_coord_in_menu (int id, project * this_proj);
363
364extern atom_search * free_this_search_data (atom_search * this_search);
365#ifdef GTK3
366extern G_MODULE_EXPORT void show_hide_clones (GtkWidget * widg, gpointer data);
367extern G_MODULE_EXPORT void set_rep (GtkWidget * widg, gpointer data);
368#else
369extern G_MODULE_EXPORT void show_hide_clones (GSimpleAction * action, GVariant * state, gpointer data);
370#endif
371
372extern void popup_selection (glwin * view, double ptx, double pty, int se, int pe, int ai, int bi, int ac);
373extern void popup_main_menu (glwin * view, double ptx, double pty);
374
377{
379 double x, y;
380 int pts[5];
381};
382
383extern gl_pop_info to_pop;
384
385#endif
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
double pi
Definition global.c:195
void motion(glwin *view, gint x, gint y, GdkModifierType state)
mouse motion in the OpenGL window
Definition glview.c:637
image * plot
Definition ogl_draw.c:70
int nba
Definition glview.h:342
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:241
@ SIMPLE_TEXT
Definition glview.h:242
@ BETTER_TEXT
Definition glview.h:243
atom_search * free_this_search_data(atom_search *this_search)
free atom search data structure
Definition popup.c:284
int field_object
Definition dlp_field.c:979
GLfloat ** allocdGLfloat(int xal, int yal)
allocate a GLfloat ** pointer
Definition glview.c:169
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:435
G_MODULE_EXPORT void to_center_this_molecule(GtkWidget *widg, gpointer data)
center this molecule menu item callback GTK4
Definition popup.c:3979
void draw(glwin *view)
main drawing subroutine for the OpenGL window
Definition ogl_draw.c:509
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
int gColorID[3]
Definition d_atoms.c:61
void at_unshift(atom *at, float *shift)
correct atomic coordinates modified to display image in cell replica
Definition ogl_draw.c:495
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:691
void update(glwin *view)
update the rendering of the OpenGL window
Definition glview.c:450
project * proj_gl
Definition ogl_draw.c:64
glwin * wingl
Definition ogl_draw.c:63
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:337
int check_label_numbers(project *this_proj, int types)
check how many atom label(s) are visible
Definition popup.c:1039
void popup_main_menu(glwin *view, double ptx, double pty)
create the OpenGL window popup menu
Definition popup.c:4136
mat4_t create_axis_matrices(int type)
create axis OpenGL rendering matrices
Definition d_axis.c:101
gchar * material_template[TEMPLATES]
Definition w_advance.c:97
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
GLenum ogl_texture
Definition glview.c:122
int proj_sp
Definition ogl_draw.c:65
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:480
void draw_wireframe_bond(atom a, atom b, int ci, int bi)
gl_pop_info to_pop
Definition glview.c:885
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:1787
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:879
void zoom(glwin *view, int delta)
zoom in or zoom out in the OpenGL window
Definition glview.c:1017
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:863
box_info * box_gl
Definition ogl_draw.c:68
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:1002
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:3671
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
int nbs
Definition d_atoms.c:165
void reshape(glwin *view, int width, int height, gboolean use_ratio)
reshape (resize) the OpenGL window
Definition glview.c:527
void init_opengl()
initialize OpenGL rendering parameters
Definition glview.c:1439
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:986
void init_camera(project *this_proj, gboolean get_depth)
void setup_bonds(glwin *view)
int qual
Definition ogl_draw.c:71
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
void draw_vertices(int id)
Draw OpenGL shader program.
int step
Definition ogl_draw.c:74
labels
Definition glview.h:223
@ ELEMENT_NAME
Definition glview.h:224
@ NUM
Definition glview.h:227
@ SYMBOL_AND_NUM
Definition glview.h:226
@ ID_IN_MOLECULE
Definition glview.h:228
@ SYMBOL
Definition glview.h:225
void update_selection_tree(glwin *view, int pi, int id)
update measurements tree view
Definition w_measures.c:381
int pcolorm
Definition ogl_draw.c:73
void render_all_strings(int glsl, int id)
render all string to be rendered for a label list
Definition ogl_text.c:549
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 nbl
Definition glview.h:342
int acolorm
Definition ogl_draw.c:72
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:809
void center_this_molecule(glwin *view)
center atomic coordinates around (0,0,0) and refresh shaders
Definition glview.c:1571
atom * duplicate_atom(atom *at)
copy (partially) an atom data structure
Definition ogl_draw.c:444
GLfloat template_parameters[TEMPLATES][5]
Definition w_advance.c:105
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:67
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:66
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:1066
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:738
cell_info * cell_gl
Definition ogl_draw.c:69
G_MODULE_EXPORT gboolean on_expose(GtkWidget *widg, cairo_t *cr, gpointer data)
OpenGL rendering widget expose event callback GTK3.
Definition glview.c:1844
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:391
actions
Definition glview.h:232
@ DISPL
Definition glview.h:233
@ RANMOVE
Definition glview.h:237
@ REPLACE
Definition glview.h:234
@ REMOVE
Definition glview.h:235
@ INSERT
Definition glview.h:236
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:599
GLUquadricObj * quadric
Definition ogl_draw.c:62
double z
Definition ogl_draw.c:61
double y
Definition ogl_draw.c:61
double x
Definition ogl_draw.c:61
Definition glwin.h:115
Definition global.h:891
int action
Definition glview.h:378
double y
Definition glview.h:379
int pts[5]
Definition glview.h:380
double x
Definition glview.h:379
Definition glwin.h:965
Definition glwin.h:365
int b
Definition tab-1.c:95
int a
Definition tab-1.c:95
gchar * al[3]
Definition w_axis.c:73
GtkWidget * img
Definition workspace.c:70