From 27c62db209d15693ce6062394ce71e67101d4c71 Mon Sep 17 00:00:00 2001 From: Christophe Geuzaine <cgeuzaine@ulg.ac.be> Date: Sat, 29 May 2004 10:11:13 +0000 Subject: [PATCH] - generalized vertex array class to use reallocatable arrays - introduced vertex arrays in post for all triangles: this speeds things up tremendously for ALL scalar views: 2d scalar views of course, but also for 3d isos (tets, hexas, etc.) and all smooth normals. The costly computations (compute the isos, get the normals) are only done ONCE each time the view is changed. Then we just pass the vertex array to OpenGL everytime we need to redraw (e.g. when we rotate the scene) - removed the display list code alltogether: it's completely blown away by the new vertex array code! for the record: with the new drawing code, you can - rotate 500,000 triangles in real time on a 3-year old linux PC (tested with a boing 747 surface mesh from CU: 10 times faster than old code) - display and rotate in real time 10 transparent+smooth shaded 3D isos for a 1 million tet mesh (about 1 frame per second with the new code; took tens of seconds with the old one) Awesome :-) --- Common/CommandLine.cpp | 11 +- Common/Context.h | 2 +- Common/DefaultOptions.h | 6 +- Common/Makefile | 38 +-- Common/Options.cpp | 41 +-- Common/Options.h | 2 +- Common/VertexArray.cpp | 127 ++++++++++ Common/VertexArray.h | 36 +++ Common/Views.cpp | 9 +- Common/Views.h | 7 +- Fltk/Callbacks.cpp | 7 +- Fltk/GUI.cpp | 19 +- Fltk/Makefile | 43 ++-- Geo/Makefile | 36 +-- Graphics/Draw.h | 10 +- Graphics/Entity.cpp | 71 +----- Graphics/Iso.cpp | 69 +++-- Graphics/Iso.h | 27 +- Graphics/Makefile | 71 +++--- Graphics/Mesh.cpp | 39 +-- Graphics/Post.cpp | 384 ++++++++++++++-------------- Graphics/PostElement.cpp | 465 +++++++++++++++++++--------------- Graphics/Scale.cpp | 3 +- Mesh/Makefile | 142 ++++++----- Mesh/Mesh.h | 19 +- Parser/Makefile | 35 +-- Plugin/Makefile | 80 +++--- doc/FAQ | 7 +- doc/VERSIONS | 27 +- doc/gmsh.1 | 5 +- doc/texinfo/command_line.texi | 2 - doc/texinfo/opt_general.texi | 4 +- doc/texinfo/opt_post.texi | 10 +- 33 files changed, 1005 insertions(+), 849 deletions(-) create mode 100644 Common/VertexArray.cpp create mode 100644 Common/VertexArray.h diff --git a/Common/CommandLine.cpp b/Common/CommandLine.cpp index e05fc0bda5..21f3f622dc 100644 --- a/Common/CommandLine.cpp +++ b/Common/CommandLine.cpp @@ -1,4 +1,4 @@ -// $Id: CommandLine.cpp,v 1.39 2004-05-17 18:04:53 geuzaine Exp $ +// $Id: CommandLine.cpp,v 1.40 2004-05-29 10:11:10 geuzaine Exp $ // // Copyright (C) 1997-2004 C. Geuzaine, J.-F. Remacle // @@ -89,7 +89,6 @@ void Print_Usage(char *name){ #if defined(HAVE_FLTK) Msg(DIRECT, " -interactive display 2D mesh construction interactively"); Msg(DIRECT, "Post-processing options:"); - Msg(DIRECT, " -dl enable display lists"); Msg(DIRECT, " -noview hide all views on startup"); Msg(DIRECT, " -link int select link mode between views (default: 0)"); Msg(DIRECT, " -smoothview smooth views"); @@ -543,14 +542,6 @@ void Get_Options(int argc, char *argv[], int *nbfiles) CTX.db = 0; i++; } - else if(!strcmp(argv[i] + 1, "dl")) { - CTX.post.display_lists = 1; - i++; - } - else if(!strcmp(argv[i] + 1, "nodl")) { - CTX.post.display_lists = 0; - i++; - } else if(!strcmp(argv[i] + 1, "fontsize")) { i++; if(argv[i] != NULL) { diff --git a/Common/Context.h b/Common/Context.h index 7adc194874..7b31ed1e89 100644 --- a/Common/Context.h +++ b/Common/Context.h @@ -185,7 +185,7 @@ public : // post processing options struct{ List_T *list ; - int force_num, compute_bb, display_lists; + int force_num, compute_bb, vertex_arrays; int draw, scales, link ; int smooth, anim_cycle, combine_time ; double anim_delay ; diff --git a/Common/DefaultOptions.h b/Common/DefaultOptions.h index 2526e78b95..5d591e1b9c 100644 --- a/Common/DefaultOptions.h +++ b/Common/DefaultOptions.h @@ -878,9 +878,6 @@ StringXNumber PostProcessingOptions_Number[] = { { F|O, "AnimationCycle" , opt_post_anim_cycle , 0. , "Cycle through views instead of time steps in automatic animation mode" }, - { F|O, "DisplayLists" , opt_post_display_lists , 0. , - "Use OpenGL display lists for drawing post-processing views" }, - { F|O, "Link" , opt_post_link , 0. , "Link post-processing views (0=none, 1,2=changes in visible/all, 3,4=everything in visible/all)" }, @@ -892,6 +889,9 @@ StringXNumber PostProcessingOptions_Number[] = { { F|O, "Smoothing" , opt_post_smooth , 0. , "Apply (non-reversible) smoothing to post-processing view when merged" }, + { F|O, "VertexArrays" , opt_post_vertex_arrays , 1. , + "Use OpenGL vertex arrays to draw triangles in post-processing views?" }, + { 0, NULL , NULL , 0. } } ; diff --git a/Common/Makefile b/Common/Makefile index 27d9a8b595..265405943d 100644 --- a/Common/Makefile +++ b/Common/Makefile @@ -1,4 +1,4 @@ -# $Id: Makefile,v 1.56 2004-05-25 23:16:25 geuzaine Exp $ +# $Id: Makefile,v 1.57 2004-05-29 10:11:10 geuzaine Exp $ # # Copyright (C) 1997-2004 C. Geuzaine, J.-F. Remacle # @@ -34,6 +34,7 @@ SRC = Context.cpp\ ColorTable.cpp\ Visibility.cpp\ Trackball.cpp\ + VertexArray.cpp\ License.cpp OBJ = ${SRC:.cpp=.o} @@ -63,28 +64,30 @@ Context.o: Context.cpp Gmsh.h Message.h ../DataStr/Malloc.h \ ../DataStr/List.h ../DataStr/Tree.h ../DataStr/avl.h ../DataStr/Tools.h \ ../Numeric/Numeric.h ../Geo/Geo.h ../Mesh/Mesh.h ../Mesh/Vertex.h \ ../Mesh/Element.h ../Mesh/Simplex.h ../Mesh/Face.h ../Mesh/Edge.h \ - ../Geo/ExtrudeParams.h ../Mesh/STL.h ../Mesh/Metric.h ../Mesh/Matrix.h \ - ../Graphics/Draw.h ../Common/Views.h ../Common/ColorTable.h Context.h \ - Options.h DefaultOptions.h Trackball.h + ../Geo/ExtrudeParams.h ../Mesh/STL.h ../Common/VertexArray.h \ + ../Mesh/Metric.h ../Mesh/Matrix.h ../Graphics/Draw.h ../Common/Views.h \ + ../Common/ColorTable.h Context.h Options.h DefaultOptions.h Trackball.h Views.o: Views.cpp Gmsh.h Message.h ../DataStr/Malloc.h ../DataStr/List.h \ ../DataStr/Tree.h ../DataStr/avl.h ../DataStr/Tools.h \ - ../Numeric/Numeric.h Views.h ColorTable.h Context.h Options.h + ../Numeric/Numeric.h Views.h ColorTable.h VertexArray.h Context.h \ + Options.h Options.o: Options.cpp ../Plugin/PluginManager.h ../Plugin/Plugin.h \ ../Common/Options.h ../Common/Message.h ../Common/Views.h \ - ../Common/ColorTable.h ../DataStr/List.h Gmsh.h ../DataStr/Malloc.h \ - ../DataStr/Tree.h ../DataStr/avl.h ../DataStr/Tools.h GmshUI.h \ - ../Geo/Geo.h ../Mesh/Mesh.h ../Mesh/Vertex.h ../Mesh/Element.h \ - ../Mesh/Simplex.h ../Mesh/Face.h ../Mesh/Edge.h ../Geo/ExtrudeParams.h \ - ../Mesh/STL.h ../Mesh/Metric.h ../Mesh/Matrix.h ../Graphics/Draw.h \ - Context.h ../Fltk/Solvers.h ../Fltk/GUI.h ../Fltk/Opengl_Window.h \ - ../Fltk/Colorbar_Window.h + ../Common/ColorTable.h ../DataStr/List.h ../Common/VertexArray.h Gmsh.h \ + ../DataStr/Malloc.h ../DataStr/Tree.h ../DataStr/avl.h \ + ../DataStr/Tools.h GmshUI.h ../Geo/Geo.h ../Mesh/Mesh.h \ + ../Mesh/Vertex.h ../Mesh/Element.h ../Mesh/Simplex.h ../Mesh/Face.h \ + ../Mesh/Edge.h ../Geo/ExtrudeParams.h ../Mesh/STL.h ../Mesh/Metric.h \ + ../Mesh/Matrix.h ../Graphics/Draw.h Context.h ../Fltk/Solvers.h \ + ../Fltk/GUI.h ../Fltk/Opengl_Window.h ../Fltk/Colorbar_Window.h CommandLine.o: CommandLine.cpp Gmsh.h Message.h ../DataStr/Malloc.h \ ../DataStr/List.h ../DataStr/Tree.h ../DataStr/avl.h ../DataStr/Tools.h \ GmshUI.h GmshVersion.h CommandLine.h ../Numeric/Numeric.h Context.h \ Options.h ../Geo/Geo.h ../Mesh/Mesh.h ../Mesh/Vertex.h \ ../Mesh/Element.h ../Mesh/Simplex.h ../Mesh/Face.h ../Mesh/Edge.h \ - ../Geo/ExtrudeParams.h ../Mesh/STL.h ../Mesh/Metric.h ../Mesh/Matrix.h \ - Views.h ColorTable.h ../Parser/OpenFile.h ../Parser/Parser.h + ../Geo/ExtrudeParams.h ../Mesh/STL.h ../Common/VertexArray.h \ + ../Mesh/Metric.h ../Mesh/Matrix.h Views.h ColorTable.h \ + ../Parser/OpenFile.h ../Parser/Parser.h Timer.o: Timer.cpp ColorTable.o: ColorTable.cpp Gmsh.h Message.h ../DataStr/Malloc.h \ ../DataStr/List.h ../DataStr/Tree.h ../DataStr/avl.h ../DataStr/Tools.h \ @@ -93,8 +96,11 @@ Visibility.o: Visibility.cpp Gmsh.h Message.h ../DataStr/Malloc.h \ ../DataStr/List.h ../DataStr/Tree.h ../DataStr/avl.h ../DataStr/Tools.h \ ../Geo/Geo.h ../Geo/CAD.h ../Mesh/Mesh.h ../Mesh/Vertex.h \ ../Mesh/Element.h ../Mesh/Simplex.h ../Mesh/Face.h ../Mesh/Edge.h \ - ../Geo/ExtrudeParams.h ../Mesh/STL.h ../Mesh/Metric.h ../Mesh/Matrix.h \ - ../Parser/Parser.h Visibility.h + ../Geo/ExtrudeParams.h ../Mesh/STL.h ../Common/VertexArray.h \ + ../Mesh/Metric.h ../Mesh/Matrix.h ../Parser/Parser.h Visibility.h Trackball.o: Trackball.cpp Trackball.h +VertexArray.o: VertexArray.cpp Gmsh.h Message.h ../DataStr/Malloc.h \ + ../DataStr/List.h ../DataStr/Tree.h ../DataStr/avl.h ../DataStr/Tools.h \ + VertexArray.h Context.h License.o: License.cpp Gmsh.h Message.h ../DataStr/Malloc.h \ ../DataStr/List.h ../DataStr/Tree.h ../DataStr/avl.h ../DataStr/Tools.h diff --git a/Common/Options.cpp b/Common/Options.cpp index bcfac165cf..a0786da787 100644 --- a/Common/Options.cpp +++ b/Common/Options.cpp @@ -1,4 +1,4 @@ -// $Id: Options.cpp,v 1.158 2004-05-28 23:11:56 geuzaine Exp $ +// $Id: Options.cpp,v 1.159 2004-05-29 10:11:10 geuzaine Exp $ // // Copyright (C) 1997-2004 C. Geuzaine, J.-F. Remacle // @@ -2320,7 +2320,7 @@ double opt_general_alpha_blending(OPT_ARGS_NUM) CTX.alpha = (int)val; #if defined(HAVE_FLTK) if(WID && (action & GMSH_GUI)) - WID->gen_butt[5]->value(CTX.alpha); + WID->gen_butt[4]->value(CTX.alpha); #endif return CTX.alpha; } @@ -2403,7 +2403,7 @@ double opt_general_trackball(OPT_ARGS_NUM) CTX.useTrackball = (int)val; #if defined(HAVE_FLTK) if(WID && (action & GMSH_GUI)) - WID->gen_butt[6]->value(CTX.useTrackball); + WID->gen_butt[5]->value(CTX.useTrackball); #endif return CTX.useTrackball; } @@ -3817,20 +3817,12 @@ double opt_solver_merge_views4(OPT_ARGS_NUM) return opt_solver_merge_views(4, action, val); } -double opt_post_display_lists(OPT_ARGS_NUM) +double opt_post_vertex_arrays(OPT_ARGS_NUM) { - int i; if(action & GMSH_SET) { - CTX.post.display_lists = (int)val; - if(CTX.post.display_lists) - for(i = 0; i < List_Nbr(CTX.post.list); i++) - ((Post_View *) List_Pointer_Test(CTX.post.list, i))->Changed = 1; + CTX.post.vertex_arrays = (int)val; } -#if defined(HAVE_FLTK) - if(WID && (action & GMSH_GUI)) - WID->gen_butt[4]->value(CTX.post.display_lists); -#endif - return CTX.post.display_lists; + return CTX.post.vertex_arrays; } double opt_post_scales(OPT_ARGS_NUM) @@ -4066,7 +4058,6 @@ double opt_view_arrow_size(OPT_ARGS_NUM) GET_VIEW(0.); if(action & GMSH_SET) { v->ArrowSize = val; - v->Changed = 1; } #if defined(HAVE_FLTK) if(_gui_action_valid(action, num)) @@ -4082,7 +4073,6 @@ double opt_view_arrow_head_radius(OPT_ARGS_NUM) if(val < 0.) val = 0.; if(val > 1.) val = 1.; v->ArrowRelHeadRadius = val; - v->Changed = 1; } return v->ArrowRelHeadRadius; } @@ -4094,7 +4084,6 @@ double opt_view_arrow_stem_length(OPT_ARGS_NUM) if(val < 0.) val = 0.; if(val > 1.) val = 1.; v->ArrowRelStemLength = val; - v->Changed = 1; } return v->ArrowRelStemLength; } @@ -4106,7 +4095,6 @@ double opt_view_arrow_stem_radius(OPT_ARGS_NUM) if(val < 0.) val = 0.; if(val > 1.) val = 1.; v->ArrowRelStemRadius = val; - v->Changed = 1; } return v->ArrowRelStemRadius; } @@ -4240,7 +4228,6 @@ double opt_view_position0(OPT_ARGS_NUM) GET_VIEW(0.); if(action & GMSH_SET) { v->Position[0] = (int)val; - v->Changed = 1; } #if defined(HAVE_FLTK) if(_gui_action_valid(action, num)) @@ -4254,7 +4241,6 @@ double opt_view_position1(OPT_ARGS_NUM) GET_VIEW(0.); if(action & GMSH_SET) { v->Position[1] = (int)val; - v->Changed = 1; } #if defined(HAVE_FLTK) if(_gui_action_valid(action, num)) @@ -4268,7 +4254,6 @@ double opt_view_auto_position(OPT_ARGS_NUM) GET_VIEW(0.); if(action & GMSH_SET) { v->AutoPosition = (int)val; - v->Changed = 1; } #if defined(HAVE_FLTK) if(_gui_action_valid(action, num)) { @@ -4283,7 +4268,6 @@ double opt_view_size0(OPT_ARGS_NUM) GET_VIEW(0.); if(action & GMSH_SET) { v->Size[0] = (int)val; - v->Changed = 1; } #if defined(HAVE_FLTK) if(_gui_action_valid(action, num)) @@ -4297,7 +4281,6 @@ double opt_view_size1(OPT_ARGS_NUM) GET_VIEW(0.); if(action & GMSH_SET) { v->Size[1] = (int)val; - v->Changed = 1; } #if defined(HAVE_FLTK) if(_gui_action_valid(action, num)) @@ -4311,7 +4294,6 @@ double opt_view_grid(OPT_ARGS_NUM) GET_VIEW(0.); if(action & GMSH_SET) { v->Grid = (int)val; - v->Changed = 1; } #if defined(HAVE_FLTK) if(_gui_action_valid(action, num)) { @@ -4326,7 +4308,6 @@ double opt_view_nb_abscissa(OPT_ARGS_NUM) GET_VIEW(0.); if(action & GMSH_SET) { v->NbAbscissa = (int)val; - v->Changed = 1; } #if defined(HAVE_FLTK) if(_gui_action_valid(action, num)) { @@ -4370,7 +4351,6 @@ double opt_view_light(OPT_ARGS_NUM) GET_VIEW(0.); if(action & GMSH_SET) { v->Light = (int)val; - v->Changed = 1; } #if defined(HAVE_FLTK) if(_gui_action_valid(action, num)) @@ -4412,7 +4392,6 @@ double opt_view_show_element(OPT_ARGS_NUM) GET_VIEW(0.); if(action & GMSH_SET) { v->ShowElement = (int)val; - v->Changed = 1; } #if defined(HAVE_FLTK) if(_gui_action_valid(action, num)) @@ -4452,7 +4431,6 @@ double opt_view_draw_strings(OPT_ARGS_NUM) GET_VIEW(0.); if(action & GMSH_SET) { v->DrawStrings = (int)val; - v->Changed = 1; } #if defined(HAVE_FLTK) if(_gui_action_valid(action, num)) @@ -4466,7 +4444,6 @@ double opt_view_draw_points(OPT_ARGS_NUM) GET_VIEW(0.); if(action & GMSH_SET) { v->DrawPoints = (int)val; - v->Changed = 1; } #if defined(HAVE_FLTK) if(_gui_action_valid(action, num)) @@ -4480,7 +4457,6 @@ double opt_view_draw_lines(OPT_ARGS_NUM) GET_VIEW(0.); if(action & GMSH_SET) { v->DrawLines = (int)val; - v->Changed = 1; } #if defined(HAVE_FLTK) if(_gui_action_valid(action, num)) @@ -4748,7 +4724,6 @@ double opt_view_arrow_location(OPT_ARGS_NUM) GET_VIEW(0.); if(action & GMSH_SET) { v->ArrowLocation = (int)val; - v->Changed = 1; } #if defined(HAVE_FLTK) if(_gui_action_valid(action, num)) { @@ -4771,7 +4746,6 @@ double opt_view_point_size(OPT_ARGS_NUM) GET_VIEW(0.); if(action & GMSH_SET) { v->PointSize = val; - v->Changed = 1; } #if defined(HAVE_FLTK) if(_gui_action_valid(action, num)) @@ -4785,7 +4759,6 @@ double opt_view_line_width(OPT_ARGS_NUM) GET_VIEW(0.); if(action & GMSH_SET) { v->LineWidth = val; - v->Changed = 1; } #if defined(HAVE_FLTK) if(_gui_action_valid(action, num)) @@ -4799,7 +4772,6 @@ double opt_view_point_type(OPT_ARGS_NUM) GET_VIEW(0.); if(action & GMSH_SET) { v->PointType = (int)val; - v->Changed = 1; } #if defined(HAVE_FLTK) if(_gui_action_valid(action, num)) { @@ -4814,7 +4786,6 @@ double opt_view_line_type(OPT_ARGS_NUM) GET_VIEW(0.); if(action & GMSH_SET) { v->LineType = (int)val; - v->Changed = 1; } #if defined(HAVE_FLTK) if(_gui_action_valid(action, num)) { diff --git a/Common/Options.h b/Common/Options.h index ea9f379496..2c68529ec2 100644 --- a/Common/Options.h +++ b/Common/Options.h @@ -409,7 +409,7 @@ double opt_solver_merge_views1(OPT_ARGS_NUM); double opt_solver_merge_views2(OPT_ARGS_NUM); double opt_solver_merge_views3(OPT_ARGS_NUM); double opt_solver_merge_views4(OPT_ARGS_NUM); -double opt_post_display_lists(OPT_ARGS_NUM); +double opt_post_vertex_arrays(OPT_ARGS_NUM); double opt_post_scales(OPT_ARGS_NUM); double opt_post_link(OPT_ARGS_NUM); double opt_post_smooth(OPT_ARGS_NUM); diff --git a/Common/VertexArray.cpp b/Common/VertexArray.cpp new file mode 100644 index 0000000000..59b98f978f --- /dev/null +++ b/Common/VertexArray.cpp @@ -0,0 +1,127 @@ +// $Id: VertexArray.cpp,v 1.1 2004-05-29 10:11:10 geuzaine Exp $ +// +// Copyright (C) 1997-2004 C. Geuzaine, J.-F. Remacle +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 +// USA. +// +// Please report all bugs and problems to <gmsh@geuz.org>. + +#include "Gmsh.h" +#include "VertexArray.h" +#include "Context.h" +#include "Numeric.h" + +triangleVertexArray::triangleVertexArray(int nb) +{ + num_triangles = 0; + vertices = List_Create(nb * 3 * 3, 9000, sizeof(float)); + normals = List_Create(nb * 3 * 3, 9000, sizeof(float)); + colors = List_Create(nb * 3 * 4, 12000, sizeof(unsigned char)); +} + +triangleVertexArray::~triangleVertexArray() +{ + List_Delete(vertices); + List_Delete(normals); + List_Delete(colors); +} + +void triangleVertexArray::add(float x, float y, float z, float n0, + float n1, float n2, unsigned int col) +{ + unsigned char r = UNPACK_RED(col); + unsigned char g = UNPACK_GREEN(col); + unsigned char b = UNPACK_BLUE(col); + unsigned char a = UNPACK_ALPHA(col); + List_Add(vertices, &x); + List_Add(vertices, &y); + List_Add(vertices, &z); + List_Add(normals, &n0); + List_Add(normals, &n1); + List_Add(normals, &n2); + List_Add(colors, &r); + List_Add(colors, &g); + List_Add(colors, &b); + List_Add(colors, &a); +} + +static double theeye[3]; + +int compareTriEye(const void *a, const void *b) +{ + float *q = (float*)a; + float *w = (float*)b; + double d, dq, dw, cgq[3] = { 0., 0., 0. }, cgw[3] = { 0., 0., 0.}; + for(int i = 0; i < 3; i++) { + cgq[0] += q[3*i]; + cgq[1] += q[3*i + 1]; + cgq[2] += q[3*i + 2]; + cgw[0] += w[3*i]; + cgw[1] += w[3*i + 1]; + cgw[2] += w[3*i + 2]; + } + prosca(theeye, cgq, &dq); + prosca(theeye, cgw, &dw); + d = dq - dw; + if(d > 0) + return 1; + if(d < 0) + return -1; + return 0; +} + +void triangleVertexArray::sort(double eye[3]) +{ + theeye[0] = eye[0]; + theeye[1] = eye[1]; + theeye[2] = eye[2]; + + int nb = List_Nbr(vertices) + List_Nbr(normals) + List_Nbr(colors); + float *tmp = new float[nb]; + + int iv = 0, in = 0, ic = 0, k = 0; + for(int i = 0; i < num_triangles; i++){ + for(int j = 0; j < 9; j++) + List_Read(vertices, iv++, &tmp[k++]); + for(int j = 0; j < 9; j++) + List_Read(normals, in++, &tmp[k++]); + for(int j = 0; j < 12; j++){ + unsigned char c; + List_Read(colors, ic++, &c); + tmp[k++] = c; + } + } + + List_Reset(vertices); + List_Reset(normals); + List_Reset(colors); + + qsort(tmp, num_triangles, (9+9+12)*sizeof(float), compareTriEye); + + k = 0; + for(int i = 0; i < num_triangles; i++){ + for(int j = 0; j < 9; j++) + List_Add(vertices, &tmp[k++]); + for(int j = 0; j < 9; j++) + List_Add(normals, &tmp[k++]); + for(int j = 0; j < 12; j++){ + unsigned char c = (unsigned char)tmp[k++]; + List_Add(colors, &c); + } + } + + delete [] tmp; +} diff --git a/Common/VertexArray.h b/Common/VertexArray.h new file mode 100644 index 0000000000..2b621972b5 --- /dev/null +++ b/Common/VertexArray.h @@ -0,0 +1,36 @@ +#ifndef _VERTEX_ARRAY_H_ +#define _VERTEX_ARRAY_H_ + +// Copyright (C) 1997-2004 C. Geuzaine, J.-F. Remacle +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 +// USA. +// +// Please report all bugs and problems to <gmsh@geuz.org>. + +#include "List.h" + +class triangleVertexArray{ + public: + int num_triangles; + List_T *vertices, *normals, *colors; + triangleVertexArray(int nb); + ~triangleVertexArray(); + void add(float x, float y, float z, float n0, + float n1, float n2, unsigned int col); + void sort(double eye[3]); +}; + +#endif diff --git a/Common/Views.cpp b/Common/Views.cpp index 2f151c0b41..0e8874778d 100644 --- a/Common/Views.cpp +++ b/Common/Views.cpp @@ -1,4 +1,4 @@ -// $Id: Views.cpp,v 1.118 2004-05-22 01:24:16 geuzaine Exp $ +// $Id: Views.cpp,v 1.119 2004-05-29 10:11:10 geuzaine Exp $ // // Copyright (C) 1997-2004 C. Geuzaine, J.-F. Remacle // @@ -72,7 +72,9 @@ Post_View *BeginView(int allocate) v->Index = i; v->Dirty = 1; - v->DisplayListNum = -1; + v->VertexArray = NULL; + v->FillVertexArray = 0; + v->UseVertexArray = 0; v->NbTimeStep = 0; v->TimeStepMin = NULL; v->TimeStepMax = NULL; @@ -594,6 +596,9 @@ void FreeView(Post_View * v) v->T2D = v->T2C = NULL; v->T3D = v->T3C = NULL; v->reset_normals(); + if(v->VertexArray) + delete v->VertexArray; + v->VertexArray = NULL; } } diff --git a/Common/Views.h b/Common/Views.h index 53ca4e01d6..f39a3af4d4 100644 --- a/Common/Views.h +++ b/Common/Views.h @@ -22,6 +22,7 @@ #include "ColorTable.h" #include "List.h" +#include "VertexArray.h" #define VIEW_NB_ELEMENT_TYPES (8*3) #define VIEW_MAX_ELEMENT_NODES 8 @@ -32,7 +33,7 @@ class smooth_container; class Post_View{ public : // intrinsic to a view - int Num, Index, Changed, DuplicateOf, Links, Dirty, DisplayListNum; + int Num, Index, Changed, DuplicateOf, Links, Dirty; char FileName[256], Name[256], AbscissaName[256]; // the data @@ -59,6 +60,10 @@ class Post_View{ int NbT2, NbT3; List_T *T2D, *T2C, *T3D, *T3C; // 2D and 3D text strings + // a vertex array to draw triangles efficiently + triangleVertexArray *VertexArray; + int FillVertexArray, UseVertexArray; + // options int Type, Position[2], AutoPosition, Size[2]; char Format[256], AbscissaFormat[256]; diff --git a/Fltk/Callbacks.cpp b/Fltk/Callbacks.cpp index 5107ee1287..1a1704f66a 100644 --- a/Fltk/Callbacks.cpp +++ b/Fltk/Callbacks.cpp @@ -1,4 +1,4 @@ -// $Id: Callbacks.cpp,v 1.241 2004-05-28 19:22:12 geuzaine Exp $ +// $Id: Callbacks.cpp,v 1.242 2004-05-29 10:11:11 geuzaine Exp $ // // Copyright (C) 1997-2004 C. Geuzaine, J.-F. Remacle // @@ -853,9 +853,8 @@ void general_options_ok_cb(CALLBACK_ARGS) opt_general_fast_redraw(0, GMSH_SET, WID->gen_butt[2]->value()); if(opt_general_double_buffer(0, GMSH_GET, 0) != WID->gen_butt[3]->value()) opt_general_double_buffer(0, GMSH_SET, WID->gen_butt[3]->value()); - opt_post_display_lists(0, GMSH_SET, WID->gen_butt[4]->value()); //this has to move - opt_general_alpha_blending(0, GMSH_SET, WID->gen_butt[5]->value()); - opt_general_trackball(0, GMSH_SET, WID->gen_butt[6]->value()); + opt_general_alpha_blending(0, GMSH_SET, WID->gen_butt[4]->value()); + opt_general_trackball(0, GMSH_SET, WID->gen_butt[5]->value()); opt_general_terminal(0, GMSH_SET, WID->gen_butt[7]->value()); double sessionrc = opt_general_session_save(0, GMSH_GET, 0); opt_general_session_save(0, GMSH_SET, WID->gen_butt[8]->value()); diff --git a/Fltk/GUI.cpp b/Fltk/GUI.cpp index 4db3fe1b5c..89ceee76c0 100644 --- a/Fltk/GUI.cpp +++ b/Fltk/GUI.cpp @@ -1,4 +1,4 @@ -// $Id: GUI.cpp,v 1.307 2004-05-27 06:23:48 geuzaine Exp $ +// $Id: GUI.cpp,v 1.308 2004-05-29 10:11:11 geuzaine Exp $ // // Copyright (C) 1997-2004 C. Geuzaine, J.-F. Remacle // @@ -1439,27 +1439,26 @@ void GUI::create_option_window() gen_butt[1] = new Fl_Check_Button(2 * WB, 2 * WB + 3 * BH, BW, BH, "Show small axes"); gen_butt[2] = new Fl_Check_Button(2 * WB, 2 * WB + 4 * BH, BW, BH, "Enable fast redraw"); gen_butt[3] = new Fl_Check_Button(2 * WB, 2 * WB + 5 * BH, BW, BH, "Enable double buffering"); - gen_butt[4] = new Fl_Check_Button(2 * WB, 2 * WB + 6 * BH, BW, BH, "Use display lists"); - gen_butt[5] = new Fl_Check_Button(2 * WB, 2 * WB + 7 * BH, BW, BH, "Enable alpha blending"); - gen_butt[6] = new Fl_Check_Button(2 * WB, 2 * WB + 8 * BH, BW, BH, "Use trackball rotation mode"); - for(i = 0; i < 7; i++) { + gen_butt[4] = new Fl_Check_Button(2 * WB, 2 * WB + 6 * BH, BW, BH, "Enable alpha blending"); + gen_butt[5] = new Fl_Check_Button(2 * WB, 2 * WB + 7 * BH, BW, BH, "Use trackball rotation mode"); + for(i = 0; i < 6; i++) { gen_butt[i]->type(FL_TOGGLE_BUTTON); gen_butt[i]->down_box(TOGGLE_BOX); gen_butt[i]->selection_color(TOGGLE_COLOR); } - gen_butt[15] = new Fl_Check_Button(2 * WB, 2 * WB + 9 * BH, BW, BH, "Rotate around pseudo center of gravity"); + gen_butt[15] = new Fl_Check_Button(2 * WB, 2 * WB + 8 * BH, BW, BH, "Rotate around pseudo center of gravity"); gen_butt[15]->type(FL_TOGGLE_BUTTON); gen_butt[15]->down_box(TOGGLE_BOX); gen_butt[15]->selection_color(TOGGLE_COLOR); gen_butt[15]->callback(general_options_rotation_center_cb); - gen_push_butt[0] = new Fl_Button(2 * IW - 2 * WB, 2 * WB + 10 * BH, BB, BH, "Select"); + gen_push_butt[0] = new Fl_Button(2 * IW - 2 * WB, 2 * WB + 9 * BH, BB, BH, "Select"); gen_push_butt[0]->callback(general_options_rotation_center_select_cb); - gen_value[8] = new Fl_Value_Input(2 * WB, 2 * WB + 10 * BH, IW / 3, BH); - gen_value[9] = new Fl_Value_Input(2 * WB + IW / 3, 2 * WB + 10 * BH, IW / 3, BH); - gen_value[10] = new Fl_Value_Input(2 * WB + 2 * IW / 3, 2 * WB + 10 * BH, IW / 3, BH, "Rotation center"); + gen_value[8] = new Fl_Value_Input(2 * WB, 2 * WB + 9 * BH, IW / 3, BH); + gen_value[9] = new Fl_Value_Input(2 * WB + IW / 3, 2 * WB + 9 * BH, IW / 3, BH); + gen_value[10] = new Fl_Value_Input(2 * WB + 2 * IW / 3, 2 * WB + 9 * BH, IW / 3, BH, "Rotation center"); gen_value[10]->align(FL_ALIGN_RIGHT); o->end(); diff --git a/Fltk/Makefile b/Fltk/Makefile index cfd7bd82dd..8d79ed1cbc 100644 --- a/Fltk/Makefile +++ b/Fltk/Makefile @@ -1,4 +1,4 @@ -# $Id: Makefile,v 1.53 2004-05-25 23:16:25 geuzaine Exp $ +# $Id: Makefile,v 1.54 2004-05-29 10:11:11 geuzaine Exp $ # # Copyright (C) 1997-2004 C. Geuzaine, J.-F. Remacle # @@ -65,8 +65,8 @@ depend: # DO NOT DELETE THIS LINE Main.o: Main.cpp ../Plugin/PluginManager.h ../Plugin/Plugin.h \ ../Common/Options.h ../Common/Message.h ../Common/Views.h \ - ../Common/ColorTable.h ../DataStr/List.h ../Common/Gmsh.h \ - ../DataStr/Malloc.h ../DataStr/Tree.h ../DataStr/avl.h \ + ../Common/ColorTable.h ../DataStr/List.h ../Common/VertexArray.h \ + ../Common/Gmsh.h ../DataStr/Malloc.h ../DataStr/Tree.h ../DataStr/avl.h \ ../DataStr/Tools.h ../Common/GmshUI.h ../Common/GmshVersion.h \ ../Geo/Geo.h ../Mesh/Mesh.h ../Mesh/Vertex.h ../Mesh/Element.h \ ../Mesh/Simplex.h ../Mesh/Face.h ../Mesh/Edge.h ../Geo/ExtrudeParams.h \ @@ -81,8 +81,8 @@ Message.o: Message.cpp ../Common/Gmsh.h ../Common/Message.h \ Opengl_Window.h Colorbar_Window.h ../Common/ColorTable.h GUI.o: GUI.cpp ../Plugin/PluginManager.h ../Plugin/Plugin.h \ ../Common/Options.h ../Common/Message.h ../Common/Views.h \ - ../Common/ColorTable.h ../DataStr/List.h ../Common/Gmsh.h \ - ../DataStr/Malloc.h ../DataStr/Tree.h ../DataStr/avl.h \ + ../Common/ColorTable.h ../DataStr/List.h ../Common/VertexArray.h \ + ../Common/Gmsh.h ../DataStr/Malloc.h ../DataStr/Tree.h ../DataStr/avl.h \ ../DataStr/Tools.h ../Common/GmshUI.h ../Numeric/Numeric.h \ ../Common/GmshVersion.h ../Common/Context.h ../Geo/Geo.h ../Mesh/Mesh.h \ ../Mesh/Vertex.h ../Mesh/Element.h ../Mesh/Simplex.h ../Mesh/Face.h \ @@ -95,29 +95,30 @@ Callbacks.o: Callbacks.cpp ../Common/Gmsh.h ../Common/Message.h \ ../DataStr/avl.h ../DataStr/Tools.h ../Common/GmshUI.h ../Geo/Geo.h \ ../Geo/CAD.h ../Mesh/Mesh.h ../Mesh/Vertex.h ../Mesh/Element.h \ ../Mesh/Simplex.h ../Mesh/Face.h ../Mesh/Edge.h ../Geo/ExtrudeParams.h \ - ../Mesh/STL.h ../Mesh/Metric.h ../Mesh/Matrix.h ../Geo/ExtractContour.h \ - ../Graphics/Draw.h ../Common/Views.h ../Common/ColorTable.h \ - ../Common/Timer.h ../Graphics/CreateFile.h ../Parser/OpenFile.h \ - ../Common/CommandLine.h ../Common/Context.h ../Common/Options.h GUI.h \ - Opengl_Window.h Colorbar_Window.h Callbacks.h ../Plugin/Plugin.h \ - ../Common/Visibility.h ../Geo/MinMax.h Solvers.h + ../Mesh/STL.h ../Common/VertexArray.h ../Mesh/Metric.h ../Mesh/Matrix.h \ + ../Geo/ExtractContour.h ../Graphics/Draw.h ../Common/Views.h \ + ../Common/ColorTable.h ../Common/Timer.h ../Graphics/CreateFile.h \ + ../Parser/OpenFile.h ../Common/CommandLine.h ../Common/Context.h \ + ../Common/Options.h GUI.h Opengl_Window.h Colorbar_Window.h Callbacks.h \ + ../Plugin/Plugin.h ../Common/Visibility.h ../Geo/MinMax.h Solvers.h Opengl.o: Opengl.cpp ../Common/Gmsh.h ../Common/Message.h \ ../DataStr/Malloc.h ../DataStr/List.h ../DataStr/Tree.h \ ../DataStr/avl.h ../DataStr/Tools.h ../Common/GmshUI.h \ ../Numeric/Numeric.h ../Common/Context.h ../Geo/Geo.h ../Mesh/Mesh.h \ ../Mesh/Vertex.h ../Mesh/Element.h ../Mesh/Simplex.h ../Mesh/Face.h \ - ../Mesh/Edge.h ../Geo/ExtrudeParams.h ../Mesh/STL.h ../Mesh/Metric.h \ - ../Mesh/Matrix.h ../Graphics/Draw.h ../Common/Views.h \ - ../Common/ColorTable.h GUI.h Opengl_Window.h Colorbar_Window.h \ - ../Graphics/gl2ps.h + ../Mesh/Edge.h ../Geo/ExtrudeParams.h ../Mesh/STL.h \ + ../Common/VertexArray.h ../Mesh/Metric.h ../Mesh/Matrix.h \ + ../Graphics/Draw.h ../Common/Views.h ../Common/ColorTable.h GUI.h \ + Opengl_Window.h Colorbar_Window.h ../Graphics/gl2ps.h Opengl_Window.o: Opengl_Window.cpp ../Common/Gmsh.h ../Common/Message.h \ ../DataStr/Malloc.h ../DataStr/List.h ../DataStr/Tree.h \ ../DataStr/avl.h ../DataStr/Tools.h ../Numeric/Numeric.h \ ../Common/GmshUI.h ../Common/Context.h ../Geo/Geo.h ../Mesh/Mesh.h \ ../Mesh/Vertex.h ../Mesh/Element.h ../Mesh/Simplex.h ../Mesh/Face.h \ - ../Mesh/Edge.h ../Geo/ExtrudeParams.h ../Mesh/STL.h ../Mesh/Metric.h \ - ../Mesh/Matrix.h ../Graphics/Draw.h ../Common/Views.h \ - ../Common/ColorTable.h GUI.h Opengl_Window.h Colorbar_Window.h + ../Mesh/Edge.h ../Geo/ExtrudeParams.h ../Mesh/STL.h \ + ../Common/VertexArray.h ../Mesh/Metric.h ../Mesh/Matrix.h \ + ../Graphics/Draw.h ../Common/Views.h ../Common/ColorTable.h GUI.h \ + Opengl_Window.h Colorbar_Window.h Colorbar_Window.o: Colorbar_Window.cpp ../Common/Gmsh.h \ ../Common/Message.h ../DataStr/Malloc.h ../DataStr/List.h \ ../DataStr/Tree.h ../DataStr/avl.h ../DataStr/Tools.h \ @@ -130,6 +131,6 @@ Solvers.o: Solvers.cpp ../Common/Gmsh.h ../Common/Message.h \ GmshServer.h ../Parser/OpenFile.h Solvers.h ../Common/GmshUI.h GUI.h \ Opengl_Window.h Colorbar_Window.h ../Common/ColorTable.h ../Mesh/Mesh.h \ ../Mesh/Vertex.h ../Mesh/Element.h ../Mesh/Simplex.h ../Mesh/Face.h \ - ../Mesh/Edge.h ../Geo/ExtrudeParams.h ../Mesh/STL.h ../Mesh/Metric.h \ - ../Mesh/Matrix.h ../Graphics/Draw.h ../Common/Views.h \ - ../Common/Context.h + ../Mesh/Edge.h ../Geo/ExtrudeParams.h ../Mesh/STL.h \ + ../Common/VertexArray.h ../Mesh/Metric.h ../Mesh/Matrix.h \ + ../Graphics/Draw.h ../Common/Views.h ../Common/Context.h diff --git a/Geo/Makefile b/Geo/Makefile index d8dd984abc..6493635d17 100644 --- a/Geo/Makefile +++ b/Geo/Makefile @@ -1,4 +1,4 @@ -# $Id: Makefile,v 1.50 2004-05-25 23:16:26 geuzaine Exp $ +# $Id: Makefile,v 1.51 2004-05-29 10:11:12 geuzaine Exp $ # # Copyright (C) 1997-2004 C. Geuzaine, J.-F. Remacle # @@ -62,9 +62,9 @@ CAD.o: CAD.cpp ../Common/Gmsh.h ../Common/Message.h ../DataStr/Malloc.h \ ../DataStr/List.h ../DataStr/Tree.h ../DataStr/avl.h ../DataStr/Tools.h \ ../Numeric/Numeric.h Geo.h ../Mesh/Mesh.h ../Mesh/Vertex.h \ ../Mesh/Element.h ../Mesh/Simplex.h ../Mesh/Face.h ../Mesh/Edge.h \ - ../Geo/ExtrudeParams.h ../Mesh/STL.h ../Mesh/Metric.h ../Mesh/Matrix.h \ - ../Mesh/Interpolation.h ../Mesh/Create.h CAD.h ../Common/Visibility.h \ - ../Common/Context.h + ../Geo/ExtrudeParams.h ../Mesh/STL.h ../Common/VertexArray.h \ + ../Mesh/Metric.h ../Mesh/Matrix.h ../Mesh/Interpolation.h \ + ../Mesh/Create.h CAD.h ../Common/Visibility.h ../Common/Context.h MinMax.o: MinMax.cpp ../Common/Gmsh.h ../Common/Message.h \ ../DataStr/Malloc.h ../DataStr/List.h ../DataStr/Tree.h \ ../DataStr/avl.h ../DataStr/Tools.h ../Numeric/Numeric.h \ @@ -73,37 +73,39 @@ ExtrudeParams.o: ExtrudeParams.cpp ../Common/Gmsh.h ../Common/Message.h \ ../DataStr/Malloc.h ../DataStr/List.h ../DataStr/Tree.h \ ../DataStr/avl.h ../DataStr/Tools.h Geo.h CAD.h ../Mesh/Mesh.h \ ../Mesh/Vertex.h ../Mesh/Element.h ../Mesh/Simplex.h ../Mesh/Face.h \ - ../Mesh/Edge.h ../Geo/ExtrudeParams.h ../Mesh/STL.h ../Mesh/Metric.h \ - ../Mesh/Matrix.h + ../Mesh/Edge.h ../Geo/ExtrudeParams.h ../Mesh/STL.h \ + ../Common/VertexArray.h ../Mesh/Metric.h ../Mesh/Matrix.h Geo.o: Geo.cpp ../Common/Gmsh.h ../Common/Message.h ../DataStr/Malloc.h \ ../DataStr/List.h ../DataStr/Tree.h ../DataStr/avl.h ../DataStr/Tools.h \ ../Numeric/Numeric.h Geo.h CAD.h ../Mesh/Mesh.h ../Mesh/Vertex.h \ ../Mesh/Element.h ../Mesh/Simplex.h ../Mesh/Face.h ../Mesh/Edge.h \ - ../Geo/ExtrudeParams.h ../Mesh/STL.h ../Mesh/Metric.h ../Mesh/Matrix.h \ - ../Parser/Parser.h ../Common/Context.h + ../Geo/ExtrudeParams.h ../Mesh/STL.h ../Common/VertexArray.h \ + ../Mesh/Metric.h ../Mesh/Matrix.h ../Parser/Parser.h \ + ../Common/Context.h GeoUtils.o: GeoUtils.cpp ../Common/Gmsh.h ../Common/Message.h \ ../DataStr/Malloc.h ../DataStr/List.h ../DataStr/Tree.h \ ../DataStr/avl.h ../DataStr/Tools.h Geo.h CAD.h ../Mesh/Mesh.h \ ../Mesh/Vertex.h ../Mesh/Element.h ../Mesh/Simplex.h ../Mesh/Face.h \ - ../Mesh/Edge.h ../Geo/ExtrudeParams.h ../Mesh/STL.h ../Mesh/Metric.h \ - ../Mesh/Matrix.h + ../Mesh/Edge.h ../Geo/ExtrudeParams.h ../Mesh/STL.h \ + ../Common/VertexArray.h ../Mesh/Metric.h ../Mesh/Matrix.h StepGeomDatabase.o: StepGeomDatabase.cpp ../Common/Gmsh.h \ ../Common/Message.h ../DataStr/Malloc.h ../DataStr/List.h \ ../DataStr/Tree.h ../DataStr/avl.h ../DataStr/Tools.h \ ../Numeric/Numeric.h Geo.h GeoUtils.h ../Mesh/Mesh.h ../Mesh/Vertex.h \ ../Mesh/Element.h ../Mesh/Simplex.h ../Mesh/Face.h ../Mesh/Edge.h \ - ../Geo/ExtrudeParams.h ../Mesh/STL.h ../Mesh/Metric.h ../Mesh/Matrix.h \ - ../Mesh/Nurbs.h CAD.h StepGeomDatabase.h ../Mesh/Create.h \ - ../Common/Context.h + ../Geo/ExtrudeParams.h ../Mesh/STL.h ../Common/VertexArray.h \ + ../Mesh/Metric.h ../Mesh/Matrix.h ../Mesh/Nurbs.h CAD.h \ + StepGeomDatabase.h ../Mesh/Create.h ../Common/Context.h ExtractContour.o: ExtractContour.cpp ../Common/Gmsh.h ../Common/Message.h \ ../DataStr/Malloc.h ../DataStr/List.h ../DataStr/Tree.h \ ../DataStr/avl.h ../DataStr/Tools.h Geo.h GeoUtils.h ../Mesh/Mesh.h \ ../Mesh/Vertex.h ../Mesh/Element.h ../Mesh/Simplex.h ../Mesh/Face.h \ - ../Mesh/Edge.h ../Geo/ExtrudeParams.h ../Mesh/STL.h ../Mesh/Metric.h \ - ../Mesh/Matrix.h CAD.h + ../Mesh/Edge.h ../Geo/ExtrudeParams.h ../Mesh/STL.h \ + ../Common/VertexArray.h ../Mesh/Metric.h ../Mesh/Matrix.h CAD.h Print_Geo.o: Print_Geo.cpp ../Common/Gmsh.h ../Common/Message.h \ ../DataStr/Malloc.h ../DataStr/List.h ../DataStr/Tree.h \ ../DataStr/avl.h ../DataStr/Tools.h Geo.h ../Mesh/Mesh.h \ ../Mesh/Vertex.h ../Mesh/Element.h ../Mesh/Simplex.h ../Mesh/Face.h \ - ../Mesh/Edge.h ../Geo/ExtrudeParams.h ../Mesh/STL.h ../Mesh/Metric.h \ - ../Mesh/Matrix.h CAD.h ../Common/Context.h + ../Mesh/Edge.h ../Geo/ExtrudeParams.h ../Mesh/STL.h \ + ../Common/VertexArray.h ../Mesh/Metric.h ../Mesh/Matrix.h CAD.h \ + ../Common/Context.h diff --git a/Graphics/Draw.h b/Graphics/Draw.h index 1ddd6237a4..57bcc2b60f 100644 --- a/Graphics/Draw.h +++ b/Graphics/Draw.h @@ -42,9 +42,9 @@ void set_r(int i, double val); void set_t(int i, double val); void set_s(int i, double val); -void PaletteContinuous(Post_View * View, double min, double max, double val); -void PaletteContinuousLinear(Post_View * v, double min, double max, double val); -void PaletteDiscrete(Post_View * View, int nbi, int i); +unsigned int PaletteContinuous(Post_View * View, double min, double max, double val); +unsigned int PaletteContinuousLinear(Post_View * v, double min, double max, double val); +unsigned int PaletteDiscrete(Post_View * View, int nbi, int i); char SelectEntity(int type, Vertex **v, Curve **c, Surface **s); void HighlightEntity(Vertex *v,Curve *c, Surface *s, int permanent); @@ -72,10 +72,6 @@ void Draw_Point(int type, double size, double *x, double *y, double *z, double Raise[3][8], int light); void Draw_Line(int type, double width, double *x, double *y, double *z, double Raise[3][8], int light); -void Draw_Triangle(double *x, double *y, double *z,double *n, - double Raise[3][8], int light, bool polygon_offset); -void Draw_Quadrangle(double *x, double *y, double *z, double *n, - double Raise[3][8], int light, bool polygon_offset); void Draw_Vector(int Type, int Fill, double relHeadRadius, double relStemLength, double relStemRadius, double x, double y, double z, double dx, double dy, double dz, diff --git a/Graphics/Entity.cpp b/Graphics/Entity.cpp index a91a6c5d7c..abfb0179fa 100644 --- a/Graphics/Entity.cpp +++ b/Graphics/Entity.cpp @@ -1,4 +1,4 @@ -// $Id: Entity.cpp,v 1.40 2004-05-28 21:06:11 geuzaine Exp $ +// $Id: Entity.cpp,v 1.41 2004-05-29 10:11:12 geuzaine Exp $ // // Copyright (C) 1997-2004 C. Geuzaine, J.-F. Remacle // @@ -125,75 +125,6 @@ void Draw_Line(int type, double width, double *x, double *y, double *z, } } -void Draw_Triangle(double *x, double *y, double *z, double *n, - double Raise[3][8], int light, bool polygon_offset) -{ - double x1x0, y1y0, z1z0, x2x0, y2y0, z2z0, nn[3]; - - if(light) glEnable(GL_LIGHTING); - if(polygon_offset) glEnable(GL_POLYGON_OFFSET_FILL); - - glBegin(GL_TRIANGLES); - if(light) { - if(!n) { - x1x0 = (x[1] + Raise[0][1]) - (x[0] + Raise[0][0]); - y1y0 = (y[1] + Raise[1][1]) - (y[0] + Raise[1][0]); - z1z0 = (z[1] + Raise[2][1]) - (z[0] + Raise[2][0]); - x2x0 = (x[2] + Raise[0][2]) - (x[0] + Raise[0][0]); - y2y0 = (y[2] + Raise[1][2]) - (y[0] + Raise[1][0]); - z2z0 = (z[2] + Raise[2][2]) - (z[0] + Raise[2][0]); - nn[0] = y1y0 * z2z0 - z1z0 * y2y0; - nn[1] = z1z0 * x2x0 - x1x0 * z2z0; - nn[2] = x1x0 * y2y0 - y1y0 * x2x0; - norme(nn); - glNormal3dv(nn); - } - else - glNormal3dv(&n[0]); - } - - glVertex3d(x[0] + Raise[0][0], y[0] + Raise[1][0], z[0] + Raise[2][0]); - - if(light && n) - glNormal3dv(&n[3]); - - glVertex3d(x[1] + Raise[0][1], y[1] + Raise[1][1], z[1] + Raise[2][1]); - - if(light && n) - glNormal3dv(&n[6]); - - glVertex3d(x[2] + Raise[0][2], y[2] + Raise[1][2], z[2] + Raise[2][2]); - glEnd(); - - glDisable(GL_POLYGON_OFFSET_FILL); - glDisable(GL_LIGHTING); -} - -void Draw_Quadrangle(double *x, double *y, double *z, double *n, - double Raise[3][8], int light, bool polygon_offset) -{ - double x2[3] = { x[2], x[3], x[0] }; - double y2[3] = { y[2], y[3], y[0] }; - double z2[3] = { z[2], z[3], z[0] }; - - Draw_Triangle(x, y, z, n, Raise, light, polygon_offset); - if(n) { - double n2[9]; - n2[0] = n[6]; - n2[1] = n[7]; - n2[2] = n[8]; - n2[3] = n[9]; - n2[4] = n[10]; - n2[5] = n[11]; - n2[6] = n[0]; - n2[7] = n[1]; - n2[8] = n[2]; - Draw_Triangle(x2, y2, z2, n2, Raise, light, polygon_offset); - } - else - Draw_Triangle(x2, y2, z2, n, Raise, light, polygon_offset); -} - void Draw_SimpleVector(int arrow, int fill, double relHeadRadius, double relStemLength, double relStemRadius, double x, double y, double z, diff --git a/Graphics/Iso.cpp b/Graphics/Iso.cpp index 8bde4007cb..e69d3e51c1 100644 --- a/Graphics/Iso.cpp +++ b/Graphics/Iso.cpp @@ -1,4 +1,4 @@ -// $Id: Iso.cpp,v 1.23 2004-05-08 00:19:47 geuzaine Exp $ +// $Id: Iso.cpp,v 1.24 2004-05-29 10:11:12 geuzaine Exp $ // // Copyright (C) 1997-2004 C. Geuzaine, J.-F. Remacle // @@ -48,7 +48,6 @@ void CutTriangle1D(double *X, double *Y, double *Z, double *Val, InterpolateIso(X, Y, Z, Val, V, 1, 2, &Xp[*nb], &Yp[*nb], &Zp[*nb]); (*nb)++; } - } // Contour computation for triangles @@ -281,7 +280,6 @@ void CutLine1D(double *X, double *Y, double *Z, double *Val, Vp2[1] = V2; InterpolateIso(X, Y, Z, Val, V2, io[0], io[1], &Xp2[1], &Yp2[1], &Zp2[1]); } - } // compute the gradient of a linear interpolation in a tetrahedron @@ -328,11 +326,6 @@ void EnhanceSimplexPolygon(Post_View * View, int nb, // nb of points in polyg v = unknown field we wanna draw */ - if(!View->Light) { - norms = NULL; // we don't need to compute these - return; - } - double v1[3] = { Xp[2] - Xp[0], Yp[2] - Yp[0], Zp[2] - Zp[0] }; double v2[3] = { Xp[1] - Xp[0], Yp[1] - Yp[0], Zp[1] - Zp[0] }; double gr[3]; @@ -372,11 +365,8 @@ void EnhanceSimplexPolygon(Post_View * View, int nb, // nb of points in polyg norms[3 * i] = n[0]; norms[3 * i + 1] = n[1]; norms[3 * i + 2] = n[2]; - if(!View-> - get_normal(Xp[i], Yp[i], Zp[i], norms[3 * i], norms[3 * i + 1], - norms[3 * i + 2])) { - //Msg(WARNING, "Oups, did not find smoothed normal"); - } + View->get_normal + (Xp[i], Yp[i], Zp[i], norms[3 * i], norms[3 * i + 1], norms[3 * i + 2]); } } } @@ -387,13 +377,11 @@ void EnhanceSimplexPolygon(Post_View * View, int nb, // nb of points in polyg norms[3 * i + 2] = n[2]; } } - } -void IsoSimplex(Post_View * View, - int preproNormals, +void IsoSimplex(Post_View * View, int preproNormals, double *X, double *Y, double *Z, double *Val, - double V) + double V, unsigned int color) { int nb; double Xp[6], Yp[6], Zp[6], PVals[6]; @@ -434,13 +422,42 @@ void IsoSimplex(Post_View * View, if(preproNormals) return; - double Raise[3][8]; - for(int i = 0; i < 3; i++) - for(int k = 0; k < nb; k++) - Raise[i][k] = View->Raise[i] * V; - - if(nb == 3) - Draw_Triangle(Xp, Yp, Zp, norms, Raise, View->Light, false); - else if(nb == 4) - Draw_Quadrangle(Xp, Yp, Zp, norms, Raise, View->Light, false); + if(View->FillVertexArray){ + for(int i = 2; i < nb; i++){ + View->VertexArray->add(Xp[0] + View->Raise[0] * V, + Yp[0] + View->Raise[1] * V, + Zp[0] + View->Raise[2] * V, + norms[0], norms[1], norms[2], color); + View->VertexArray->add(Xp[i-1] + View->Raise[0] * V, + Yp[i-1] + View->Raise[1] * V, + Zp[i-1] + View->Raise[2] * V, + norms[3*(i-1)], norms[3*(i-1)+1], norms[3*(i-1)+2], color); + View->VertexArray->add(Xp[i] + View->Raise[0] * V, + Yp[i] + View->Raise[1] * V, + Zp[i] + View->Raise[2] * V, + norms[3*i], norms[3*i+1], norms[3*i+2], color); + View->VertexArray->num_triangles++; + } + } + else{ + if(View->Light) glEnable(GL_LIGHTING); + glColor4ubv((GLubyte *) & color); + glBegin(GL_TRIANGLES); + for(int i = 2; i < nb; i++){ + if(View->Light) glNormal3dv(&norms[0]); + glVertex3d(Xp[0] + View->Raise[0] * V, + Yp[0] + View->Raise[1] * V, + Zp[0] + View->Raise[2] * V); + if(View->Light) glNormal3dv(&norms[3*(i-1)]); + glVertex3d(Xp[i-1] + View->Raise[0] * V, + Yp[i-1] + View->Raise[1] * V, + Zp[i-1] + View->Raise[2] * V); + if(View->Light) glNormal3dv(&norms[3*i]); + glVertex3d(Xp[i] + View->Raise[0] * V, + Yp[i] + View->Raise[1] * V, + Zp[i] + View->Raise[2] * V); + } + glEnd(); + glDisable(GL_LIGHTING); + } } diff --git a/Graphics/Iso.h b/Graphics/Iso.h index f661d7266a..4b39adda5a 100644 --- a/Graphics/Iso.h +++ b/Graphics/Iso.h @@ -22,23 +22,22 @@ #include "Views.h" -void CutTriangle1D (double *X, double *Y, double *Z, double *Val, - double V, double *Xp, double *Yp, double *Zp, int *nb); +void CutTriangle1D(double *X, double *Y, double *Z, double *Val, + double V, double *Xp, double *Yp, double *Zp, int *nb); -void CutTriangle2D (double *X, double *Y, double *Z, double *Val, - double V1, double V2, double *Xp, double *Yp, double *Zp, - int *nb, double *value); +void CutTriangle2D(double *X, double *Y, double *Z, double *Val, + double V1, double V2, double *Xp, double *Yp, double *Zp, + int *nb, double *value); -void CutLine0D (double *X, double *Y, double *Z, double *Val, - double V, double *Xp, double *Yp, double *Zp, int *nb); +void CutLine0D(double *X, double *Y, double *Z, double *Val, + double V, double *Xp, double *Yp, double *Zp, int *nb); -void CutLine1D (double *X, double *Y, double *Z, double *Val, - double V1, double V2, double *Xp, double *Yp, double *Zp, - int *nb, double *value); +void CutLine1D(double *X, double *Y, double *Z, double *Val, + double V1, double V2, double *Xp, double *Yp, double *Zp, + int *nb, double *value); -void IsoSimplex (Post_View *View, - int preproNormals, - double *X, double *Y, double *Z, double *Val, - double V); +void IsoSimplex(Post_View *View, int preproNormals, + double *X, double *Y, double *Z, double *Val, double V, + unsigned int color); #endif diff --git a/Graphics/Makefile b/Graphics/Makefile index 2dab2cbc3a..38f1072e62 100644 --- a/Graphics/Makefile +++ b/Graphics/Makefile @@ -1,4 +1,4 @@ -# $Id: Makefile,v 1.58 2004-05-25 23:16:26 geuzaine Exp $ +# $Id: Makefile,v 1.59 2004-05-29 10:11:12 geuzaine Exp $ # # Copyright (C) 1997-2004 C. Geuzaine, J.-F. Remacle # @@ -73,86 +73,91 @@ Draw.o: Draw.cpp ../Common/Gmsh.h ../Common/Message.h ../DataStr/Malloc.h \ ../DataStr/List.h ../DataStr/Tree.h ../DataStr/avl.h ../DataStr/Tools.h \ ../Common/GmshUI.h ../Geo/Geo.h ../Geo/CAD.h ../Mesh/Mesh.h \ ../Mesh/Vertex.h ../Mesh/Element.h ../Mesh/Simplex.h ../Mesh/Face.h \ - ../Mesh/Edge.h ../Geo/ExtrudeParams.h ../Mesh/STL.h ../Mesh/Metric.h \ - ../Mesh/Matrix.h Draw.h ../Common/Views.h ../Common/ColorTable.h \ - ../Common/Context.h ../Geo/MinMax.h ../Numeric/Numeric.h + ../Mesh/Edge.h ../Geo/ExtrudeParams.h ../Mesh/STL.h \ + ../Common/VertexArray.h ../Mesh/Metric.h ../Mesh/Matrix.h Draw.h \ + ../Common/Views.h ../Common/ColorTable.h ../Common/Context.h \ + ../Geo/MinMax.h ../Numeric/Numeric.h Mesh.o: Mesh.cpp ../Common/Gmsh.h ../Common/Message.h ../DataStr/Malloc.h \ ../DataStr/List.h ../DataStr/Tree.h ../DataStr/avl.h ../DataStr/Tools.h \ ../Common/GmshUI.h ../Geo/Geo.h ../Geo/CAD.h ../Mesh/Mesh.h \ ../Mesh/Vertex.h ../Mesh/Element.h ../Mesh/Simplex.h ../Mesh/Face.h \ - ../Mesh/Edge.h ../Geo/ExtrudeParams.h ../Mesh/STL.h ../Mesh/Metric.h \ - ../Mesh/Matrix.h Draw.h ../Common/Views.h ../Common/ColorTable.h \ - ../Common/Context.h ../Geo/MinMax.h gl2ps.h ../Numeric/Numeric.h + ../Mesh/Edge.h ../Geo/ExtrudeParams.h ../Mesh/STL.h \ + ../Common/VertexArray.h ../Mesh/Metric.h ../Mesh/Matrix.h Draw.h \ + ../Common/Views.h ../Common/ColorTable.h ../Common/Context.h \ + ../Geo/MinMax.h gl2ps.h ../Numeric/Numeric.h Geom.o: Geom.cpp ../Common/Gmsh.h ../Common/Message.h ../DataStr/Malloc.h \ ../DataStr/List.h ../DataStr/Tree.h ../DataStr/avl.h ../DataStr/Tools.h \ ../Common/GmshUI.h ../Numeric/Numeric.h ../Geo/Geo.h ../Geo/CAD.h \ ../Mesh/Mesh.h ../Mesh/Vertex.h ../Mesh/Element.h ../Mesh/Simplex.h \ ../Mesh/Face.h ../Mesh/Edge.h ../Geo/ExtrudeParams.h ../Mesh/STL.h \ - ../Mesh/Metric.h ../Mesh/Matrix.h ../Mesh/Utils.h Draw.h \ - ../Common/Views.h ../Common/ColorTable.h ../Common/Context.h \ - ../Mesh/Interpolation.h gl2ps.h + ../Common/VertexArray.h ../Mesh/Metric.h ../Mesh/Matrix.h \ + ../Mesh/Utils.h Draw.h ../Common/Views.h ../Common/ColorTable.h \ + ../Common/Context.h ../Mesh/Interpolation.h gl2ps.h Post.o: Post.cpp ../Common/Gmsh.h ../Common/Message.h ../DataStr/Malloc.h \ ../DataStr/List.h ../DataStr/Tree.h ../DataStr/avl.h ../DataStr/Tools.h \ ../Common/GmshUI.h ../Numeric/Numeric.h ../Geo/Geo.h ../Mesh/Mesh.h \ ../Mesh/Vertex.h ../Mesh/Element.h ../Mesh/Simplex.h ../Mesh/Face.h \ - ../Mesh/Edge.h ../Geo/ExtrudeParams.h ../Mesh/STL.h ../Mesh/Metric.h \ - ../Mesh/Matrix.h Draw.h ../Common/Views.h ../Common/ColorTable.h \ - ../Common/Context.h gl2ps.h + ../Mesh/Edge.h ../Geo/ExtrudeParams.h ../Mesh/STL.h \ + ../Common/VertexArray.h ../Mesh/Metric.h ../Mesh/Matrix.h Draw.h \ + ../Common/Views.h ../Common/ColorTable.h ../Common/Context.h gl2ps.h PostElement.o: PostElement.cpp ../Common/Gmsh.h ../Common/Message.h \ ../DataStr/Malloc.h ../DataStr/List.h ../DataStr/Tree.h \ ../DataStr/avl.h ../DataStr/Tools.h ../Common/GmshUI.h ../Geo/Geo.h \ ../Mesh/Mesh.h ../Mesh/Vertex.h ../Mesh/Element.h ../Mesh/Simplex.h \ ../Mesh/Face.h ../Mesh/Edge.h ../Geo/ExtrudeParams.h ../Mesh/STL.h \ - ../Mesh/Metric.h ../Mesh/Matrix.h Draw.h ../Common/Views.h \ - ../Common/ColorTable.h Iso.h ../Common/Context.h ../Numeric/Numeric.h + ../Common/VertexArray.h ../Mesh/Metric.h ../Mesh/Matrix.h Draw.h \ + ../Common/Views.h ../Common/ColorTable.h Iso.h ../Common/Context.h \ + ../Numeric/Numeric.h Iso.o: Iso.cpp ../Common/Gmsh.h ../Common/Message.h ../DataStr/Malloc.h \ ../DataStr/List.h ../DataStr/Tree.h ../DataStr/avl.h ../DataStr/Tools.h \ ../Common/GmshUI.h ../Geo/Geo.h ../Mesh/Mesh.h ../Mesh/Vertex.h \ ../Mesh/Element.h ../Mesh/Simplex.h ../Mesh/Face.h ../Mesh/Edge.h \ - ../Geo/ExtrudeParams.h ../Mesh/STL.h ../Mesh/Metric.h ../Mesh/Matrix.h \ - Draw.h ../Common/Views.h ../Common/ColorTable.h ../Common/Context.h \ - ../Numeric/Numeric.h + ../Geo/ExtrudeParams.h ../Mesh/STL.h ../Common/VertexArray.h \ + ../Mesh/Metric.h ../Mesh/Matrix.h Draw.h ../Common/Views.h \ + ../Common/ColorTable.h ../Common/Context.h ../Numeric/Numeric.h Entity.o: Entity.cpp ../Common/Gmsh.h ../Common/Message.h \ ../DataStr/Malloc.h ../DataStr/List.h ../DataStr/Tree.h \ ../DataStr/avl.h ../DataStr/Tools.h ../Common/GmshUI.h \ ../Numeric/Numeric.h ../Mesh/Mesh.h ../Mesh/Vertex.h ../Mesh/Element.h \ ../Mesh/Simplex.h ../Mesh/Face.h ../Mesh/Edge.h ../Geo/ExtrudeParams.h \ - ../Mesh/STL.h ../Mesh/Metric.h ../Mesh/Matrix.h Draw.h \ - ../Common/Views.h ../Common/ColorTable.h ../Common/Context.h + ../Mesh/STL.h ../Common/VertexArray.h ../Mesh/Metric.h ../Mesh/Matrix.h \ + Draw.h ../Common/Views.h ../Common/ColorTable.h ../Common/Context.h ReadImg.o: ReadImg.cpp ReadImg.h ../Common/Gmsh.h ../Common/Message.h \ ../DataStr/Malloc.h ../DataStr/List.h ../DataStr/Tree.h \ ../DataStr/avl.h ../DataStr/Tools.h ../Common/GmshUI.h \ - ../Common/Views.h ../Common/ColorTable.h + ../Common/Views.h ../Common/ColorTable.h ../Common/VertexArray.h Scale.o: Scale.cpp ../Common/Gmsh.h ../Common/Message.h \ ../DataStr/Malloc.h ../DataStr/List.h ../DataStr/Tree.h \ ../DataStr/avl.h ../DataStr/Tools.h ../Common/GmshUI.h \ ../Numeric/Numeric.h ../Mesh/Mesh.h ../Mesh/Vertex.h ../Mesh/Element.h \ ../Mesh/Simplex.h ../Mesh/Face.h ../Mesh/Edge.h ../Geo/ExtrudeParams.h \ - ../Mesh/STL.h ../Mesh/Metric.h ../Mesh/Matrix.h Draw.h \ - ../Common/Views.h ../Common/ColorTable.h ../Common/Context.h gl2ps.h + ../Mesh/STL.h ../Common/VertexArray.h ../Mesh/Metric.h ../Mesh/Matrix.h \ + Draw.h ../Common/Views.h ../Common/ColorTable.h ../Common/Context.h \ + gl2ps.h Graph2D.o: Graph2D.cpp ../Common/Gmsh.h ../Common/Message.h \ ../DataStr/Malloc.h ../DataStr/List.h ../DataStr/Tree.h \ ../DataStr/avl.h ../DataStr/Tools.h ../Common/GmshUI.h \ ../Common/Context.h ../Numeric/Numeric.h ../Mesh/Mesh.h \ ../Mesh/Vertex.h ../Mesh/Element.h ../Mesh/Simplex.h ../Mesh/Face.h \ - ../Mesh/Edge.h ../Geo/ExtrudeParams.h ../Mesh/STL.h ../Mesh/Metric.h \ - ../Mesh/Matrix.h Draw.h ../Common/Views.h ../Common/ColorTable.h \ - gl2ps.h + ../Mesh/Edge.h ../Geo/ExtrudeParams.h ../Mesh/STL.h \ + ../Common/VertexArray.h ../Mesh/Metric.h ../Mesh/Matrix.h Draw.h \ + ../Common/Views.h ../Common/ColorTable.h gl2ps.h Axes.o: Axes.cpp ../Common/Gmsh.h ../Common/Message.h ../DataStr/Malloc.h \ ../DataStr/List.h ../DataStr/Tree.h ../DataStr/avl.h ../DataStr/Tools.h \ ../Common/GmshUI.h ../Numeric/Numeric.h ../Mesh/Mesh.h ../Mesh/Vertex.h \ ../Mesh/Element.h ../Mesh/Simplex.h ../Mesh/Face.h ../Mesh/Edge.h \ - ../Geo/ExtrudeParams.h ../Mesh/STL.h ../Mesh/Metric.h ../Mesh/Matrix.h \ - Draw.h ../Common/Views.h ../Common/ColorTable.h ../Common/Context.h \ - gl2ps.h + ../Geo/ExtrudeParams.h ../Mesh/STL.h ../Common/VertexArray.h \ + ../Mesh/Metric.h ../Mesh/Matrix.h Draw.h ../Common/Views.h \ + ../Common/ColorTable.h ../Common/Context.h gl2ps.h CreateFile.o: CreateFile.cpp ../Common/Gmsh.h ../Common/Message.h \ ../DataStr/Malloc.h ../DataStr/List.h ../DataStr/Tree.h \ ../DataStr/avl.h ../DataStr/Tools.h ../Common/GmshUI.h ../Mesh/Mesh.h \ ../Mesh/Vertex.h ../Mesh/Element.h ../Mesh/Simplex.h ../Mesh/Face.h \ - ../Mesh/Edge.h ../Geo/ExtrudeParams.h ../Mesh/STL.h ../Mesh/Metric.h \ - ../Mesh/Matrix.h ../Parser/OpenFile.h Draw.h ../Common/Views.h \ - ../Common/ColorTable.h ../Common/Context.h ../Common/Options.h gl2ps.h \ - gl2gif.h gl2jpeg.h gl2png.h gl2ppm.h gl2yuv.h + ../Mesh/Edge.h ../Geo/ExtrudeParams.h ../Mesh/STL.h \ + ../Common/VertexArray.h ../Mesh/Metric.h ../Mesh/Matrix.h \ + ../Parser/OpenFile.h Draw.h ../Common/Views.h ../Common/ColorTable.h \ + ../Common/Context.h ../Common/Options.h gl2ps.h gl2gif.h gl2jpeg.h \ + gl2png.h gl2ppm.h gl2yuv.h gl2ps.o: gl2ps.cpp gl2ps.h gl2gif.o: gl2gif.cpp ../Common/Gmsh.h ../Common/Message.h \ ../DataStr/Malloc.h ../DataStr/List.h ../DataStr/Tree.h \ diff --git a/Graphics/Mesh.cpp b/Graphics/Mesh.cpp index e09027d067..3aa0f8b145 100644 --- a/Graphics/Mesh.cpp +++ b/Graphics/Mesh.cpp @@ -1,4 +1,4 @@ -// $Id: Mesh.cpp,v 1.88 2004-05-28 21:06:11 geuzaine Exp $ +// $Id: Mesh.cpp,v 1.89 2004-05-29 10:11:12 geuzaine Exp $ // // Copyright (C) 1997-2004 C. Geuzaine, J.-F. Remacle // @@ -232,7 +232,7 @@ void Draw_Mesh_Surface(void *a, void *b) if(CTX.mesh.vertex_arrays && Tree_Nbr(s->Simplexes) && !CTX.threads_lock){ CTX.threads_lock = 1; if(CTX.mesh.changed){ - printf("generate vertex array\n"); + Msg(DEBUG, "regenerate mesh vertex array"); if(s->vertexArray) delete s->vertexArray; s->vertexArray = new triangleVertexArray(Tree_Nbr(s->Simplexes)); theVertexArray = s->vertexArray; @@ -536,20 +536,23 @@ void Draw_Mesh_Triangle(void *a, void *b) X[2], Y[2], Z[2], n); if(fillTheVertexArray && !s->VSUP){ - int iv = theVertexArray->num_triangles * 9; - int in = theVertexArray->num_triangles * 9; - int ic = theVertexArray->num_triangles * 12; for(int i = 0; i < 3; i++) { - theVertexArray->vertices[iv++] = X[i]; - theVertexArray->vertices[iv++] = Y[i]; - theVertexArray->vertices[iv++] = Z[i]; - theVertexArray->normals[in++] = n[0]; - theVertexArray->normals[in++] = n[1]; - theVertexArray->normals[in++] = n[2]; - theVertexArray->colors[ic++] = UNPACK_RED(col); - theVertexArray->colors[ic++] = UNPACK_GREEN(col); - theVertexArray->colors[ic++] = UNPACK_BLUE(col); - theVertexArray->colors[ic++] = UNPACK_ALPHA(col); + float x = X[i], y = Y[i], z = Z[i]; + float n0 = n[0], n1 = n[1], n2 = n[2]; + unsigned char r = UNPACK_RED(col); + unsigned char g = UNPACK_GREEN(col); + unsigned char b = UNPACK_BLUE(col); + unsigned char a = UNPACK_ALPHA(col); + List_Add(theVertexArray->vertices, &x); + List_Add(theVertexArray->vertices, &y); + List_Add(theVertexArray->vertices, &z); + List_Add(theVertexArray->normals, &n0); + List_Add(theVertexArray->normals, &n1); + List_Add(theVertexArray->normals, &n2); + List_Add(theVertexArray->colors, &r); + List_Add(theVertexArray->colors, &g); + List_Add(theVertexArray->colors, &b); + List_Add(theVertexArray->colors, &a); } theVertexArray->num_triangles++; } @@ -630,9 +633,9 @@ void Draw_Mesh_Triangle_Array(triangleVertexArray *va) if(!va->num_triangles) return; - glVertexPointer(3, GL_FLOAT, 0, va->vertices); - glNormalPointer(GL_FLOAT, 0, va->normals); - glColorPointer(4, GL_UNSIGNED_BYTE, 0, va->colors); + glVertexPointer(3, GL_FLOAT, 0, va->vertices->array); + glNormalPointer(GL_FLOAT, 0, va->normals->array); + glColorPointer(4, GL_UNSIGNED_BYTE, 0, va->colors->array); glEnableClientState(GL_VERTEX_ARRAY); glEnableClientState(GL_COLOR_ARRAY); diff --git a/Graphics/Post.cpp b/Graphics/Post.cpp index 11536af24b..6eacb485c5 100644 --- a/Graphics/Post.cpp +++ b/Graphics/Post.cpp @@ -1,4 +1,4 @@ -// $Id: Post.cpp,v 1.60 2004-04-27 00:11:55 geuzaine Exp $ +// $Id: Post.cpp,v 1.61 2004-05-29 10:11:12 geuzaine Exp $ // // Copyright (C) 1997-2004 C. Geuzaine, J.-F. Remacle // @@ -101,19 +101,21 @@ int GiveIndexFromValue_DoubleLog(double ValMin, double ValMax, int NbIso, // Color Palette -void PaletteContinuous(Post_View * v, double min, double max, double val) +unsigned int PaletteContinuous(Post_View * v, double min, double max, double val) { /* val in [min,max] */ int index = v->GIFV(min, max, v->CT.size, val); glColor4ubv((GLubyte *) & v->CT.table[index]); + return v->CT.table[index]; } -void PaletteContinuousLinear(Post_View * v, double min, double max, double val) +unsigned int PaletteContinuousLinear(Post_View * v, double min, double max, double val) { /* val in [min,max] */ int index = GiveIndexFromValue_Lin(min, max, v->CT.size, val); glColor4ubv((GLubyte *) & v->CT.table[index]); + return v->CT.table[index]; } -void PaletteDiscrete(Post_View * v, int nbi, int i) +unsigned int PaletteDiscrete(Post_View * v, int nbi, int i) { /* i in [0,nbi-1] */ int index; @@ -121,6 +123,7 @@ void PaletteDiscrete(Post_View * v, int nbi, int i) v->CT.size / 2 : (int)(i / (double)(nbi - 1) * (v->CT.size - 1) + 0.5); glColor4ubv((GLubyte *) & v->CT.table[index]); + return v->CT.table[index]; } // Compute node coordinates taking Offset and Explode into account @@ -266,7 +269,7 @@ void Draw_ScalarList(Post_View * v, double ValMin, double ValMax, } void Draw_VectorList(Post_View * v, double ValMin, double ValMax, - List_T * list, int nbelm, int nbnod, + List_T * list, int nbelm, int nbnod, void (*draw) (Post_View *, double, double, double *, double *, double *, double *)) { @@ -287,7 +290,7 @@ void Draw_VectorList(Post_View * v, double ValMin, double ValMax, } void Draw_TensorList(Post_View * v, double ValMin, double ValMax, - List_T * list, int nbelm, int nbnod, + List_T * list, int nbelm, int nbnod, void (*draw) (Post_View *, double, double, double *, double *, double *, double *)) { @@ -367,195 +370,198 @@ void Draw_Post(void) if(v->Visible && !v->Dirty) { - // Sort the data % eye for transparency. Hybrid views (e.g. tri - // + qua) or multiple views will be sorted incorrectly... You - // can use Plugin(DecomposeInSimplex) and/or View->Combine for - // this. - - if(CTX.alpha && ColorTable_IsAlpha(&v->CT) && - (changedEye() || v->Changed)) { - Msg(DEBUG, "Sorting view %d", v->Num); - - if(v->DrawScalars) { - - if(v->IntervalsType != DRAW_POST_ISO) { - - if(v->NbST && v->DrawTriangles) { - nb = List_Nbr(v->ST) / v->NbST; - qsort(v->ST->array, v->NbST, nb * sizeof(double), compareEye3Nodes); - v->Changed = 1; - } - if(v->NbSQ && v->DrawQuadrangles) { - nb = List_Nbr(v->SQ) / v->NbSQ; - qsort(v->SQ->array, v->NbSQ, nb * sizeof(double), compareEye4Nodes); - v->Changed = 1; - } - - } - - // The following is of course not rigorous: we should store - // the triangles generated during the iso computation, and - // sort these... But this is better than doing nothing. If - // you want a rigorous sorting of the iso-surfaces, just use - // Plugin(CutMap). - - if(v->NbSS && v->DrawTetrahedra) { - nb = List_Nbr(v->SS) / v->NbSS; - qsort(v->SS->array, v->NbSS, nb * sizeof(double), compareEye4Nodes); - v->Changed = 1; - } - if(v->NbSH && v->DrawHexahedra) { - nb = List_Nbr(v->SH) / v->NbSH; - qsort(v->SH->array, v->NbSH, nb * sizeof(double), compareEye8Nodes); - v->Changed = 1; - } - if(v->NbSI && v->DrawPrisms) { - nb = List_Nbr(v->SI) / v->NbSI; - qsort(v->SI->array, v->NbSI, nb * sizeof(double), compareEye6Nodes); - v->Changed = 1; - } - if(v->NbSY && v->DrawPyramids) { - nb = List_Nbr(v->SY) / v->NbSY; - qsort(v->SY->array, v->NbSY, nb * sizeof(double), compareEye5Nodes); - v->Changed = 1; - } - - } - + glPointSize(v->PointSize); + gl2psPointSize(v->PointSize * CTX.print.eps_point_size_factor); + + glLineWidth(v->LineWidth); + gl2psLineWidth(v->LineWidth * CTX.print.eps_line_width_factor); + + switch (v->RangeType) { + case DRAW_POST_RANGE_DEFAULT: + ValMin = v->Min; + ValMax = v->Max; + break; + case DRAW_POST_RANGE_CUSTOM: + ValMin = v->CustomMin; + ValMax = v->CustomMax; + break; + case DRAW_POST_RANGE_PER_STEP: + ValMin = v->TimeStepMin[v->TimeStep]; + ValMax = v->TimeStepMax[v->TimeStep]; + break; + } + + switch (v->ScaleType) { + case DRAW_POST_LINEAR: + v->GIFV = GiveIndexFromValue_Lin; + v->GVFI = GiveValueFromIndex_Lin; + break; + case DRAW_POST_LOGARITHMIC: + v->GIFV = GiveIndexFromValue_Log; + v->GVFI = GiveValueFromIndex_Log; + break; + case DRAW_POST_DOUBLELOGARITHMIC: + v->GIFV = GiveIndexFromValue_DoubleLog; + v->GVFI = GiveValueFromIndex_DoubleLog; + break; } - if(CTX.post.display_lists && !v->Changed && v->DisplayListNum > 0) { - - Msg(DEBUG, "Call display List %d", v->DisplayListNum); - glCallList(v->DisplayListNum); + // if we don't use vertex arrays, do a simple sort of + // transparent views (hybrid views will be sorted incorrectly; + // use Plugin(DecomposeInSimplex) and View->Combine to do remedy + // this limitation) + if(!CTX.post.vertex_arrays && CTX.alpha && ColorTable_IsAlpha(&v->CT) && + v->DrawScalars && (changedEye() || v->Changed)) { + Msg(DEBUG, "Sorting for transparency (NO vertex array)"); + if(v->IntervalsType != DRAW_POST_ISO) { + if(v->NbST && v->DrawTriangles) { + nb = List_Nbr(v->ST) / v->NbST; + qsort(v->ST->array, v->NbST, nb * sizeof(double), compareEye3Nodes); + } + if(v->NbSQ && v->DrawQuadrangles) { + nb = List_Nbr(v->SQ) / v->NbSQ; + qsort(v->SQ->array, v->NbSQ, nb * sizeof(double), compareEye4Nodes); + } + } + if(v->NbSS && v->DrawTetrahedra) { + nb = List_Nbr(v->SS) / v->NbSS; + qsort(v->SS->array, v->NbSS, nb * sizeof(double), compareEye4Nodes); + } + if(v->NbSH && v->DrawHexahedra) { + nb = List_Nbr(v->SH) / v->NbSH; + qsort(v->SH->array, v->NbSH, nb * sizeof(double), compareEye8Nodes); + } + if(v->NbSI && v->DrawPrisms) { + nb = List_Nbr(v->SI) / v->NbSI; + qsort(v->SI->array, v->NbSI, nb * sizeof(double), compareEye6Nodes); + } + if(v->NbSY && v->DrawPyramids) { + nb = List_Nbr(v->SY) / v->NbSY; + qsort(v->SY->array, v->NbSY, nb * sizeof(double), compareEye5Nodes); + } + } + + if(v->DrawPoints) { + if(v->Type == DRAW_POST_3D) + Draw_ScalarList(v, ValMin, ValMax, v->SP, v->NbSP, 1, 0, Draw_ScalarPoint); + Draw_VectorList(v, ValMin, ValMax, v->VP, v->NbVP, 1, Draw_VectorPoint); + Draw_TensorList(v, ValMin, ValMax, v->TP, v->NbTP, 1, Draw_TensorPoint); + } + if(v->DrawLines) { + Draw_ScalarList(v, ValMin, ValMax, v->SL, v->NbSL, 2, 0, Draw_ScalarLine); + Draw_VectorList(v, ValMin, ValMax, v->VL, v->NbVL, 2, Draw_VectorLine); + Draw_TensorList(v, ValMin, ValMax, v->TL, v->NbTL, 2, Draw_TensorLine); + } + for(int p = 0; p < 2; p++){ // two-passes for vertex arrays + int skip_2d = 0, skip_3d = 0; + if(p == 0){ + if(CTX.post.vertex_arrays && !CTX.threads_lock){ + CTX.threads_lock = 1; + if(v->Changed){ + Msg(DEBUG, "regenerate View[%d] vertex array", v->Num); + if(v->VertexArray) delete v->VertexArray; + v->VertexArray = new triangleVertexArray(10000); + v->FillVertexArray = 1; + } + else + goto pass2; + } + else + goto pass2; + } + if(p == 1){ + if(CTX.post.vertex_arrays && v->VertexArray){ + v->UseVertexArray = 1; + if(v->Boundary < 1 && !v->ShowElement && + v->IntervalsType != DRAW_POST_NUMERIC && v->IntervalsType != DRAW_POST_ISO) + skip_2d = 1; + if(v->Boundary < 2 && !v->ShowElement && + v->IntervalsType != DRAW_POST_NUMERIC) + skip_3d = 1; + } + } + + if(v->DrawTriangles) { + if(!skip_2d) + Draw_ScalarList(v, ValMin, ValMax, v->ST, v->NbST, 3, 1, Draw_ScalarTriangle); + Draw_VectorList(v, ValMin, ValMax, v->VT, v->NbVT, 3, Draw_VectorTriangle); + Draw_TensorList(v, ValMin, ValMax, v->TT, v->NbTT, 3, Draw_TensorTriangle); + } + if(v->DrawQuadrangles) { + if(!skip_2d) + Draw_ScalarList(v, ValMin, ValMax, v->SQ, v->NbSQ, 4, 1, Draw_ScalarQuadrangle); + Draw_VectorList(v, ValMin, ValMax, v->VQ, v->NbVQ, 4, Draw_VectorQuadrangle); + Draw_TensorList(v, ValMin, ValMax, v->TQ, v->NbTQ, 4, Draw_TensorQuadrangle); + } + if(v->DrawTetrahedra) { + if(!skip_3d) + Draw_ScalarList(v, ValMin, ValMax, v->SS, v->NbSS, 4, 1, Draw_ScalarTetrahedron); + Draw_VectorList(v, ValMin, ValMax, v->VS, v->NbVS, 4, Draw_VectorTetrahedron); + Draw_TensorList(v, ValMin, ValMax, v->TS, v->NbTS, 4, Draw_TensorTetrahedron); + } + if(v->DrawHexahedra) { + if(!skip_3d) + Draw_ScalarList(v, ValMin, ValMax, v->SH, v->NbSH, 8, 1, Draw_ScalarHexahedron); + Draw_VectorList(v, ValMin, ValMax, v->VH, v->NbVH, 8, Draw_VectorHexahedron); + Draw_TensorList(v, ValMin, ValMax, v->TH, v->NbTH, 8, Draw_TensorHexahedron); + } + if(v->DrawPrisms) { + if(!skip_3d) + Draw_ScalarList(v, ValMin, ValMax, v->SI, v->NbSI, 6, 1, Draw_ScalarPrism); + Draw_VectorList(v, ValMin, ValMax, v->VI, v->NbVI, 6, Draw_VectorPrism); + Draw_TensorList(v, ValMin, ValMax, v->TI, v->NbTI, 6, Draw_TensorPrism); + } + if(v->DrawPyramids) { + if(!skip_3d) + Draw_ScalarList(v, ValMin, ValMax, v->SY, v->NbSY, 5, 1, Draw_ScalarPyramid); + Draw_VectorList(v, ValMin, ValMax, v->VY, v->NbVY, 5, Draw_VectorPyramid); + Draw_TensorList(v, ValMin, ValMax, v->TY, v->NbTY, 5, Draw_TensorPyramid); + } + + pass2: + v->FillVertexArray = 0; + v->UseVertexArray = 0; + CTX.threads_lock = 0; } - else { - - if(CTX.post.display_lists) { - if(v->DisplayListNum > 0) { - Msg(DEBUG, "Delete display List %d", v->DisplayListNum); - glDeleteLists(v->DisplayListNum, 1); - } - else { - v->DisplayListNum = glGenLists(1); - Msg(DEBUG, "Gen display list -> %d", v->DisplayListNum); - } - - if(v->DisplayListNum > 0) { - Msg(DEBUG, "New display List %d", v->DisplayListNum); - glNewList(v->DisplayListNum, GL_COMPILE_AND_EXECUTE); - } - else - Msg(GERROR, "Unable to create display list"); - } - - glPointSize(v->PointSize); - gl2psPointSize(v->PointSize * CTX.print.eps_point_size_factor); - - glLineWidth(v->LineWidth); - gl2psLineWidth(v->LineWidth * CTX.print.eps_line_width_factor); - - switch (v->RangeType) { - case DRAW_POST_RANGE_DEFAULT: - ValMin = v->Min; - ValMax = v->Max; - break; - case DRAW_POST_RANGE_CUSTOM: - ValMin = v->CustomMin; - ValMax = v->CustomMax; - break; - case DRAW_POST_RANGE_PER_STEP: - ValMin = v->TimeStepMin[v->TimeStep]; - ValMax = v->TimeStepMax[v->TimeStep]; - break; - } - - switch (v->ScaleType) { - case DRAW_POST_LINEAR: - v->GIFV = GiveIndexFromValue_Lin; - v->GVFI = GiveValueFromIndex_Lin; - break; - case DRAW_POST_LOGARITHMIC: - v->GIFV = GiveIndexFromValue_Log; - v->GVFI = GiveValueFromIndex_Log; - break; - case DRAW_POST_DOUBLELOGARITHMIC: - v->GIFV = GiveIndexFromValue_DoubleLog; - v->GVFI = GiveValueFromIndex_DoubleLog; - break; - } - - // Points - if(v->DrawPoints) { - if(v->Type == DRAW_POST_3D) - Draw_ScalarList(v, ValMin, ValMax, v->SP, v->NbSP, 1, 0, Draw_ScalarPoint); - Draw_VectorList(v, ValMin, ValMax, v->VP, v->NbVP, 1, Draw_VectorPoint); - Draw_TensorList(v, ValMin, ValMax, v->TP, v->NbTP, 1, Draw_TensorPoint); - } - - // Lines - if(v->DrawLines) { - Draw_ScalarList(v, ValMin, ValMax, v->SL, v->NbSL, 2, 0, Draw_ScalarLine); - Draw_VectorList(v, ValMin, ValMax, v->VL, v->NbVL, 2, Draw_VectorLine); - Draw_TensorList(v, ValMin, ValMax, v->TL, v->NbTL, 2, Draw_TensorLine); - } - - // Triangles - if(v->DrawTriangles) { - Draw_ScalarList(v, ValMin, ValMax, v->ST, v->NbST, 3, 1, Draw_ScalarTriangle); - Draw_VectorList(v, ValMin, ValMax, v->VT, v->NbVT, 3, Draw_VectorTriangle); - Draw_TensorList(v, ValMin, ValMax, v->TT, v->NbTT, 3, Draw_TensorTriangle); - } - - // Quadrangles - if(v->DrawQuadrangles) { - Draw_ScalarList(v, ValMin, ValMax, v->SQ, v->NbSQ, 4, 1, Draw_ScalarQuadrangle); - Draw_VectorList(v, ValMin, ValMax, v->VQ, v->NbVQ, 4, Draw_VectorQuadrangle); - Draw_TensorList(v, ValMin, ValMax, v->TQ, v->NbTQ, 4, Draw_TensorQuadrangle); - } - - // Tetrahedra - if(v->DrawTetrahedra) { - Draw_ScalarList(v, ValMin, ValMax, v->SS, v->NbSS, 4, 1, Draw_ScalarTetrahedron); - Draw_VectorList(v, ValMin, ValMax, v->VS, v->NbVS, 4, Draw_VectorTetrahedron); - Draw_TensorList(v, ValMin, ValMax, v->TS, v->NbTS, 4, Draw_TensorTetrahedron); - } - - // Hexahedra - if(v->DrawHexahedra) { - Draw_ScalarList(v, ValMin, ValMax, v->SH, v->NbSH, 8, 1, Draw_ScalarHexahedron); - Draw_VectorList(v, ValMin, ValMax, v->VH, v->NbVH, 8, Draw_VectorHexahedron); - Draw_TensorList(v, ValMin, ValMax, v->TH, v->NbTH, 8, Draw_TensorHexahedron); - } - - // Prisms - if(v->DrawPrisms) { - Draw_ScalarList(v, ValMin, ValMax, v->SI, v->NbSI, 6, 1, Draw_ScalarPrism); - Draw_VectorList(v, ValMin, ValMax, v->VI, v->NbVI, 6, Draw_VectorPrism); - Draw_TensorList(v, ValMin, ValMax, v->TI, v->NbTI, 6, Draw_TensorPrism); - } - - // Pyramids - if(v->DrawPyramids) { - Draw_ScalarList(v, ValMin, ValMax, v->SY, v->NbSY, 5, 1, Draw_ScalarPyramid); - Draw_VectorList(v, ValMin, ValMax, v->VY, v->NbVY, 5, Draw_VectorPyramid); - Draw_TensorList(v, ValMin, ValMax, v->TY, v->NbTY, 5, Draw_TensorPyramid); - } - - // Strings - if(v->DrawStrings) { - glColor4ubv((GLubyte *) & CTX.color.text); - Draw_Text2D3D(3, v->TimeStep, v->NbT3, v->T3D, v->T3C); - } - - if(CTX.post.display_lists) - glEndList(); - - v->Changed = 0; + + if(CTX.post.vertex_arrays && v->VertexArray){ + if(v->VertexArray->num_triangles){ + + if(CTX.alpha && ColorTable_IsAlpha(&v->CT) && (changedEye() || v->Changed)){ + Msg(DEBUG, "Sorting for transparency (WITH vertex array)"); + v->VertexArray->sort(storedEye); + } + + glVertexPointer(3, GL_FLOAT, 0, v->VertexArray->vertices->array); + glNormalPointer(GL_FLOAT, 0, v->VertexArray->normals->array); + glColorPointer(4, GL_UNSIGNED_BYTE, 0, v->VertexArray->colors->array); + + glEnableClientState(GL_VERTEX_ARRAY); + glEnableClientState(GL_COLOR_ARRAY); + glEnableClientState(GL_NORMAL_ARRAY); + + if(v->Light) + glEnable(GL_LIGHTING); + else + glDisableClientState(GL_NORMAL_ARRAY); + glEnable(GL_POLYGON_OFFSET_FILL); + glDrawArrays(GL_TRIANGLES, 0, 3 * v->VertexArray->num_triangles); + glDisable(GL_POLYGON_OFFSET_FILL); + glDisable(GL_LIGHTING); + } + + glDisableClientState(GL_VERTEX_ARRAY); + glDisableClientState(GL_COLOR_ARRAY); + glDisableClientState(GL_NORMAL_ARRAY); } + if(v->DrawStrings) { + glColor4ubv((GLubyte *) & CTX.color.text); + Draw_Text2D3D(3, v->TimeStep, v->NbT3, v->T3D, v->T3C); + } + + v->Changed = 0; } - } } diff --git a/Graphics/PostElement.cpp b/Graphics/PostElement.cpp index 635afd3f79..140e79dade 100644 --- a/Graphics/PostElement.cpp +++ b/Graphics/PostElement.cpp @@ -1,4 +1,4 @@ -// $Id: PostElement.cpp,v 1.30 2004-05-29 00:47:06 geuzaine Exp $ +// $Id: PostElement.cpp,v 1.31 2004-05-29 10:11:12 geuzaine Exp $ // // Copyright (C) 1997-2004 C. Geuzaine, J.-F. Remacle // @@ -275,8 +275,8 @@ void Draw_ScalarLine(Post_View * View, int preproNormals, View->Boundary--; int ts = View->TimeStep; View->TimeStep = 0; - Draw_ScalarPoint(View, 0, ValMin, ValMax, &X[0], &Y[0], &Z[0], &vv[0]); //0 - Draw_ScalarPoint(View, 0, ValMin, ValMax, &X[1], &Y[1], &Z[1], &vv[1]); //1 + Draw_ScalarPoint(View, 0, ValMin, ValMax, &X[0], &Y[0], &Z[0], &vv[0]); // 0 + Draw_ScalarPoint(View, 0, ValMin, ValMax, &X[1], &Y[1], &Z[1], &vv[1]); // 1 View->TimeStep = ts; View->Boundary++; return; @@ -293,9 +293,7 @@ void Draw_ScalarLine(Post_View * View, int preproNormals, Draw_ElementBoundary(LINE, View, X, Y, Z, Raise); if(View->IntervalsType == DRAW_POST_NUMERIC) { - d = (Val[0] + Val[1]) / 2.; - if(d >= ValMin && d <= ValMax) { PaletteContinuous(View, ValMin, ValMax, d); sprintf(Num, View->Format, d); @@ -304,61 +302,63 @@ void Draw_ScalarLine(Post_View * View, int preproNormals, (Z[0] + Raise[2][0] + Z[1] + Raise[2][1]) / 2.); Draw_String(Num); } - } - else { - - if(View->IntervalsType == DRAW_POST_CONTINUOUS) { - if(Val[0] >= ValMin && Val[0] <= ValMax && - Val[1] >= ValMin && Val[1] <= ValMax) { - if(View->LineType) { - // not perfect... - PaletteContinuous(View, ValMin, ValMax, Val[0]); - Draw_Line(View->LineType, View->LineWidth, X, Y, Z, Raise, View->Light); - } - else { - glBegin(GL_LINES); - PaletteContinuous(View, ValMin, ValMax, Val[0]); - glVertex3d(X[0] + Raise[0][0], Y[0] + Raise[1][0], Z[0] + Raise[2][0]); - PaletteContinuous(View, ValMin, ValMax, Val[1]); - glVertex3d(X[1] + Raise[0][1], Y[1] + Raise[1][1], Z[1] + Raise[2][1]); - glEnd(); - } + if(View->IntervalsType == DRAW_POST_CONTINUOUS) { + if(Val[0] >= ValMin && Val[0] <= ValMax && + Val[1] >= ValMin && Val[1] <= ValMax) { + if(View->LineType) { + // not perfect... + PaletteContinuous(View, ValMin, ValMax, Val[0]); + Draw_Line(View->LineType, View->LineWidth, X, Y, Z, Raise, View->Light); } else { - //todo + glBegin(GL_LINES); + PaletteContinuous(View, ValMin, ValMax, Val[0]); + glVertex3d(X[0] + Raise[0][0], Y[0] + Raise[1][0], Z[0] + Raise[2][0]); + PaletteContinuous(View, ValMin, ValMax, Val[1]); + glVertex3d(X[1] + Raise[0][1], Y[1] + Raise[1][1], Z[1] + Raise[2][1]); + glEnd(); } - } else { - for(int k = 0; k < View->NbIso; k++) { - PaletteDiscrete(View, View->NbIso, k); - if(View->IntervalsType == DRAW_POST_DISCRETE) { - CutLine1D(X, Y, Z, &Val[0], - View->GVFI(ValMin, ValMax, View->NbIso + 1, k), - View->GVFI(ValMin, ValMax, View->NbIso + 1, k + 1), - Xp, Yp, Zp, &nb, value); - if(nb == 2) { - for(int i = 0; i < 3; i++) - for(int l = 0; l < 2; l++) - Raise[i][l] = View->Raise[i] * value[l]; - Draw_Line(View->LineType, View->LineWidth, Xp, Yp, Zp, Raise, View->Light); - } - } - else { - thev = View->GVFI(ValMin, ValMax, View->NbIso, k); - CutLine0D(X, Y, Z, &Val[0], thev, Xp, Yp, Zp, &nb); - if(nb) { - for(int i = 0; i < 3; i++) - Raise[i][0] = View->Raise[i] * thev; - Draw_Point(View->PointType, View->PointSize, Xp, Yp, Zp, Raise, View->Light); - } - } + // FIXME: todo + } + } + + if(View->IntervalsType == DRAW_POST_DISCRETE) { + for(int k = 0; k < View->NbIso; k++) { + PaletteDiscrete(View, View->NbIso, k); + CutLine1D(X, Y, Z, &Val[0], + View->GVFI(ValMin, ValMax, View->NbIso + 1, k), + View->GVFI(ValMin, ValMax, View->NbIso + 1, k + 1), + Xp, Yp, Zp, &nb, value); + if(nb == 2) { + for(int i = 0; i < 3; i++) + for(int l = 0; l < 2; l++) + Raise[i][l] = View->Raise[i] * value[l]; + Draw_Line(View->LineType, View->LineWidth, Xp, Yp, Zp, Raise, View->Light); } + if(ValMin == ValMax) + break; } + } + if(View->IntervalsType == DRAW_POST_ISO) { + for(int k = 0; k < View->NbIso; k++) { + PaletteDiscrete(View, View->NbIso, k); + thev = View->GVFI(ValMin, ValMax, View->NbIso, k); + CutLine0D(X, Y, Z, &Val[0], thev, Xp, Yp, Zp, &nb); + if(nb) { + for(int i = 0; i < 3; i++) + Raise[i][0] = View->Raise[i] * thev; + Draw_Point(View->PointType, View->PointSize, Xp, Yp, Zp, Raise, View->Light); + } + if(ValMin == ValMax) + break; + } } + } void Draw_ScalarTriangle(Post_View * View, int preproNormals, @@ -377,10 +377,10 @@ void Draw_ScalarTriangle(Post_View * View, int preproNormals, View->Boundary--; int ts = View->TimeStep; View->TimeStep = 0; - Draw_ScalarLine(View, 0, ValMin, ValMax, &X[0], &Y[0], &Z[0], &vv[0]); //01 - Draw_ScalarLine(View, 0, ValMin, ValMax, &X[1], &Y[1], &Z[1], &vv[1]); //12 + Draw_ScalarLine(View, 0, ValMin, ValMax, &X[0], &Y[0], &Z[0], &vv[0]); // 01 + Draw_ScalarLine(View, 0, ValMin, ValMax, &X[1], &Y[1], &Z[1], &vv[1]); // 12 REORDER2(0, 2); - Draw_ScalarLine(View, 0, ValMin, ValMax, Xp, Yp, Zp, Val); //02 + Draw_ScalarLine(View, 0, ValMin, ValMax, Xp, Yp, Zp, Val); // 02 View->TimeStep = ts; View->Boundary++; return; @@ -393,8 +393,7 @@ void Draw_ScalarTriangle(Post_View * View, int preproNormals, for(int k = 0; k < 3; k++) Raise[i][k] = View->Raise[i] * Val[k]; - if(View->Light) { - + if(!View->UseVertexArray && View->Light || View->FillVertexArray) { x1x0 = (X[1] + Raise[0][1]) - (X[0] + Raise[0][0]); y1y0 = (Y[1] + Raise[1][1]) - (Y[0] + Raise[1][0]); z1z0 = (Z[1] + Raise[2][1]) - (Z[0] + Raise[2][0]); @@ -405,12 +404,12 @@ void Draw_ScalarTriangle(Post_View * View, int preproNormals, nn[1] = z1z0 * x2x0 - x1x0 * z2z0; nn[2] = x1x0 * y2y0 - y1y0 * x2x0; norme(nn); - if(View->SmoothNormals) { if(preproNormals) { for(int i = 0; i < 3; i++) { - View->add_normal(X[i] + Raise[0][i], Y[i] + Raise[1][i], - Z[i] + Raise[2][i], nn[0], nn[1], nn[2]); + View->add_normal + (X[i] + Raise[0][i], Y[i] + Raise[1][i], Z[i] + Raise[2][i], + nn[0], nn[1], nn[2]); } return; } @@ -419,13 +418,10 @@ void Draw_ScalarTriangle(Post_View * View, int preproNormals, norms[3 * i] = nn[0]; norms[3 * i + 1] = nn[1]; norms[3 * i + 2] = nn[2]; - if(!View->get_normal(X[i] + Raise[0][i], Y[i] + Raise[1][i], - Z[i] + Raise[2][i], norms[3 * i], norms[3 * i + 1], - norms[3 * i + 2])) { - //don't print this (unless we fix draw_vector_triangle with displacement) - //Msg(WARNING, "Oups, did not find smoothed normal"); - } - } + View->get_normal + (X[i] + Raise[0][i], Y[i] + Raise[1][i], Z[i] + Raise[2][i], + norms[3 * i], norms[3 * i + 1], norms[3 * i + 2]); + } } } else { @@ -445,7 +441,6 @@ void Draw_ScalarTriangle(Post_View * View, int preproNormals, Draw_ElementBoundary(TRIANGLE, View, X, Y, Z, Raise); if(View->IntervalsType == DRAW_POST_NUMERIC) { - d = (Val[0] + Val[1] + Val[2]) / 3.; if(d >= ValMin && d <= ValMax) { PaletteContinuous(View, ValMin, ValMax, d); @@ -455,83 +450,145 @@ void Draw_ScalarTriangle(Post_View * View, int preproNormals, (Z[0] + Raise[2][0] + Z[1] + Raise[2][1] + Z[2] + Raise[2][2]) / 3.); Draw_String(Num); } - } - else { - if(View->IntervalsType == DRAW_POST_CONTINUOUS) { - if(Val[0] >= ValMin && Val[0] <= ValMax && - Val[1] >= ValMin && Val[1] <= ValMax && - Val[2] >= ValMin && Val[2] <= ValMax) { + if(!View->UseVertexArray && View->IntervalsType == DRAW_POST_CONTINUOUS) { + if(Val[0] >= ValMin && Val[0] <= ValMax && + Val[1] >= ValMin && Val[1] <= ValMax && + Val[2] >= ValMin && Val[2] <= ValMax) { + if(View->FillVertexArray){ + unsigned int col; + col = PaletteContinuous(View, ValMin, ValMax, Val[0]); + View->VertexArray->add(X[0] + Raise[0][0], Y[0] + Raise[1][0], Z[0] + Raise[2][0], + norms[0], norms[1], norms[2], col); + col = PaletteContinuous(View, ValMin, ValMax, Val[1]); + View->VertexArray->add(X[1] + Raise[0][1], Y[1] + Raise[1][1], Z[1] + Raise[2][1], + norms[3], norms[4], norms[5], col); + col = PaletteContinuous(View, ValMin, ValMax, Val[2]); + View->VertexArray->add(X[2] + Raise[0][2], Y[2] + Raise[1][2], Z[2] + Raise[2][2], + norms[6], norms[7], norms[8], col); + View->VertexArray->num_triangles++; + } + else{ if(View->Light) glEnable(GL_LIGHTING); glEnable(GL_POLYGON_OFFSET_FILL); - glBegin(GL_TRIANGLES); - PaletteContinuous(View, ValMin, ValMax, Val[0]); - glNormal3dv(&norms[0]); - glVertex3d(X[0] + Raise[0][0], Y[0] + Raise[1][0], Z[0] + Raise[2][0]); - PaletteContinuous(View, ValMin, ValMax, Val[1]); - glNormal3dv(&norms[3]); - glVertex3d(X[1] + Raise[0][1], Y[1] + Raise[1][1], Z[1] + Raise[2][1]); - PaletteContinuous(View, ValMin, ValMax, Val[2]); - glNormal3dv(&norms[6]); - glVertex3d(X[2] + Raise[0][2], Y[2] + Raise[1][2], Z[2] + Raise[2][2]); - glEnd(); + glBegin(GL_TRIANGLES); + PaletteContinuous(View, ValMin, ValMax, Val[0]); + glNormal3dv(&norms[0]); + glVertex3d(X[0] + Raise[0][0], Y[0] + Raise[1][0], Z[0] + Raise[2][0]); + PaletteContinuous(View, ValMin, ValMax, Val[1]); + glNormal3dv(&norms[3]); + glVertex3d(X[1] + Raise[0][1], Y[1] + Raise[1][1], Z[1] + Raise[2][1]); + PaletteContinuous(View, ValMin, ValMax, Val[2]); + glNormal3dv(&norms[6]); + glVertex3d(X[2] + Raise[0][2], Y[2] + Raise[1][2], Z[2] + Raise[2][2]); + glEnd(); glDisable(GL_POLYGON_OFFSET_FILL); glDisable(GL_LIGHTING); } - else { - CutTriangle2D(X, Y, Z, Val, ValMin, ValMax, Xp, Yp, Zp, &nb, value); - if(nb >= 3) { + } + else { + CutTriangle2D(X, Y, Z, Val, ValMin, ValMax, Xp, Yp, Zp, &nb, value); + if(nb >= 3) { + if(View->FillVertexArray){ + for(int i = 2; i < nb; i++) { + unsigned int col; + col = PaletteContinuous(View, ValMin, ValMax, value[0]); + View->VertexArray->add(Xp[0] + View->Raise[0] * value[0], + Yp[0] + View->Raise[1] * value[0], + Zp[0] + View->Raise[2] * value[0], + norms[0], norms[1], norms[2], col); + col = PaletteContinuous(View, ValMin, ValMax, value[i-1]); + View->VertexArray->add(Xp[i-1] + View->Raise[0] * value[i-1], + Yp[i-1] + View->Raise[1] * value[i-1], + Zp[i-1] + View->Raise[2] * value[i-1], + norms[0], norms[1], norms[2], col); + col = PaletteContinuous(View, ValMin, ValMax, value[i]); + View->VertexArray->add(Xp[i] + View->Raise[0] * value[i], + Yp[i] + View->Raise[1] * value[i], + Zp[i] + View->Raise[2] * value[i], + norms[0], norms[1], norms[2], col); + View->VertexArray->num_triangles++; + } + } + else{ if(View->Light) glEnable(GL_LIGHTING); glEnable(GL_POLYGON_OFFSET_FILL); - glBegin(GL_POLYGON); - for(int i = 0; i < nb; i++) { - PaletteContinuous(View, ValMin, ValMax, value[i]); - glVertex3d(Xp[i] + View->Raise[0] * value[i], + glBegin(GL_POLYGON); + for(int i = 0; i < nb; i++) { + PaletteContinuous(View, ValMin, ValMax, value[i]); + glVertex3d(Xp[i] + View->Raise[0] * value[i], Yp[i] + View->Raise[1] * value[i], Zp[i] + View->Raise[2] * value[i]); - } - glEnd(); + } + glEnd(); glDisable(GL_POLYGON_OFFSET_FILL); glDisable(GL_LIGHTING); - } + } } } - else { - for(int k = 0; k < View->NbIso; k++) { - PaletteDiscrete(View, View->NbIso, k); - if(View->IntervalsType == DRAW_POST_DISCRETE) { - CutTriangle2D(X, Y, Z, Val, - View->GVFI(ValMin, ValMax, View->NbIso + 1, k), - View->GVFI(ValMin, ValMax, View->NbIso + 1, k + 1), - Xp, Yp, Zp, &nb, value); - if(nb >= 3) { - if(View->Light) glEnable(GL_LIGHTING); - glEnable(GL_POLYGON_OFFSET_FILL); - glBegin(GL_POLYGON); - for(int i = 0; i < nb; i++) - glVertex3d(Xp[i] + View->Raise[0] * value[i], - Yp[i] + View->Raise[1] * value[i], - Zp[i] + View->Raise[2] * value[i]); - glEnd(); - glDisable(GL_POLYGON_OFFSET_FILL); - glDisable(GL_LIGHTING); - } - } - else { - thev = View->GVFI(ValMin, ValMax, View->NbIso, k); - CutTriangle1D(X, Y, Z, Val, thev, Xp, Yp, Zp, &nb); - if(nb == 2) { - for(int i = 0; i < 3; i++) - for(int l = 0; l < 2; l++) - Raise[i][l] = View->Raise[i] * thev; - Draw_Line(View->LineType, View->LineWidth, Xp, Yp, Zp, Raise, View->Light); - } - } + } + + if(!View->UseVertexArray && View->IntervalsType == DRAW_POST_DISCRETE) { + for(int k = 0; k < View->NbIso; k++) { + unsigned int col = PaletteDiscrete(View, View->NbIso, k); + CutTriangle2D(X, Y, Z, Val, + View->GVFI(ValMin, ValMax, View->NbIso + 1, k), + View->GVFI(ValMin, ValMax, View->NbIso + 1, k + 1), + Xp, Yp, Zp, &nb, value); + if(nb >= 3) { + if(View->FillVertexArray){ + for(int i = 2; i < nb; i++) { + View->VertexArray->add(Xp[0] + View->Raise[0] * value[0], + Yp[0] + View->Raise[1] * value[0], + Zp[0] + View->Raise[2] * value[0], + norms[0], norms[1], norms[2], col); + View->VertexArray->add(Xp[i-1] + View->Raise[0] * value[i-1], + Yp[i-1] + View->Raise[1] * value[i-1], + Zp[i-1] + View->Raise[2] * value[i-1], + norms[0], norms[1], norms[2], col); + View->VertexArray->add(Xp[i] + View->Raise[0] * value[i], + Yp[i] + View->Raise[1] * value[i], + Zp[i] + View->Raise[2] * value[i], + norms[0], norms[1], norms[2], col); + View->VertexArray->num_triangles++; + } + } + else{ + if(View->Light) glEnable(GL_LIGHTING); + glEnable(GL_POLYGON_OFFSET_FILL); + glBegin(GL_POLYGON); + for(int i = 0; i < nb; i++) + glVertex3d(Xp[i] + View->Raise[0] * value[i], + Yp[i] + View->Raise[1] * value[i], + Zp[i] + View->Raise[2] * value[i]); + glEnd(); + glDisable(GL_POLYGON_OFFSET_FILL); + glDisable(GL_LIGHTING); + } + } + if(ValMin == ValMax) + break; + } + } + + if(View->IntervalsType == DRAW_POST_ISO) { + for(int k = 0; k < View->NbIso; k++) { + PaletteDiscrete(View, View->NbIso, k); + thev = View->GVFI(ValMin, ValMax, View->NbIso, k); + CutTriangle1D(X, Y, Z, Val, thev, Xp, Yp, Zp, &nb); + if(nb == 2) { + for(int i = 0; i < 3; i++) + for(int l = 0; l < 2; l++) + Raise[i][l] = View->Raise[i] * thev; + Draw_Line(View->LineType, View->LineWidth, Xp, Yp, Zp, + Raise, View->Light); } + if(ValMin == ValMax) + break; } - } + } void Draw_ScalarTetrahedron(Post_View * View, int preproNormals, @@ -548,15 +605,15 @@ void Draw_ScalarTetrahedron(Post_View * View, int preproNormals, View->Boundary--; int ts = View->TimeStep; View->TimeStep = 0; - Draw_ScalarTriangle(View, 0, ValMin, ValMax, &X[0], &Y[0], &Z[0], &vv[0]); //012 - Draw_ScalarTriangle(View, 0, ValMin, ValMax, &X[1], &Y[1], &Z[1], &vv[1]); //123 + Draw_ScalarTriangle(View, 0, ValMin, ValMax, &X[0], &Y[0], &Z[0], &vv[0]); // 012 + Draw_ScalarTriangle(View, 0, ValMin, ValMax, &X[1], &Y[1], &Z[1], &vv[1]); // 123 REORDER3(0, 1, 3); - Draw_ScalarTriangle(View, 0, ValMin, ValMax, Xp, Yp, Zp, Val); //013 + Draw_ScalarTriangle(View, 0, ValMin, ValMax, Xp, Yp, Zp, Val); // 013 Xp[1] = X[2]; Yp[1] = Y[2]; Zp[1] = Z[2]; Val[1] = vv[2]; - Draw_ScalarTriangle(View, 0, ValMin, ValMax, Xp, Yp, Zp, Val); //023 + Draw_ScalarTriangle(View, 0, ValMin, ValMax, Xp, Yp, Zp, Val); // 023 View->TimeStep = ts; View->Boundary++; return; @@ -573,7 +630,6 @@ void Draw_ScalarTetrahedron(Post_View * View, int preproNormals, Draw_ElementBoundary(TETRAHEDRON, View, X, Y, Z, Raise); if(!preproNormals && View->IntervalsType == DRAW_POST_NUMERIC) { - d = 0.25 * (Val[0] + Val[1] + Val[2] + Val[3]); if(d >= ValMin && d <= ValMax) { PaletteContinuous(View, ValMin, ValMax, d); @@ -586,16 +642,15 @@ void Draw_ScalarTetrahedron(Post_View * View, int preproNormals, Z[2] + Raise[2][2] + Z[3] + Raise[2][3])); Draw_String(Num); } - } - else { + else if(!View->UseVertexArray){ for(int k = 0; k < View->NbIso; k++) { - if(!preproNormals) - PaletteDiscrete(View, View->NbIso, k); + unsigned int col = PaletteDiscrete(View, View->NbIso, k); IsoSimplex(View, preproNormals, X, Y, Z, Val, - View->GVFI(ValMin, ValMax, View->NbIso, k)); + View->GVFI(ValMin, ValMax, View->NbIso, k), col); + if(ValMin == ValMax) + break; } - } } @@ -612,11 +667,11 @@ void Draw_ScalarQuadrangle(Post_View * View, int preproNormals, if(!preproNormals && View->Boundary > 0) { View->Boundary--; - Draw_ScalarLine(View, 0, ValMin, ValMax, &X[0], &Y[0], &Z[0], &vv[0]); //01 - Draw_ScalarLine(View, 0, ValMin, ValMax, &X[1], &Y[1], &Z[1], &vv[1]); //12 - Draw_ScalarLine(View, 0, ValMin, ValMax, &X[2], &Y[2], &Z[2], &vv[2]); //23 + Draw_ScalarLine(View, 0, ValMin, ValMax, &X[0], &Y[0], &Z[0], &vv[0]); // 01 + Draw_ScalarLine(View, 0, ValMin, ValMax, &X[1], &Y[1], &Z[1], &vv[1]); // 12 + Draw_ScalarLine(View, 0, ValMin, ValMax, &X[2], &Y[2], &Z[2], &vv[2]); // 23 REORDER2(0, 3); - Draw_ScalarLine(View, 0, ValMin, ValMax, Xp, Yp, Zp, Val); //03 + Draw_ScalarLine(View, 0, ValMin, ValMax, Xp, Yp, Zp, Val); // 03 View->TimeStep = ts; View->Boundary++; return; @@ -634,9 +689,9 @@ void Draw_ScalarQuadrangle(Post_View * View, int preproNormals, Draw_ElementBoundary(QUADRANGLE, View, X, Y, Z, Raise); } - Draw_ScalarTriangle(View, preproNormals, ValMin, ValMax, X, Y, Z, vv); //012 + Draw_ScalarTriangle(View, preproNormals, ValMin, ValMax, X, Y, Z, vv); // 012 REORDER3(0, 2, 3); - Draw_ScalarTriangle(View, preproNormals, ValMin, ValMax, Xp, Yp, Zp, Val); //023 + Draw_ScalarTriangle(View, preproNormals, ValMin, ValMax, Xp, Yp, Zp, Val); // 023 View->TimeStep = ts; View->ShowElement = show; @@ -656,16 +711,16 @@ void Draw_ScalarHexahedron(Post_View * View, int preproNormals, if(!preproNormals && View->Boundary > 0) { View->Boundary--; REORDER4(0, 1, 5, 4); - Draw_ScalarQuadrangle(View, 0, ValMin, ValMax, Xp, Yp, Zp, Val); //0154 + Draw_ScalarQuadrangle(View, 0, ValMin, ValMax, Xp, Yp, Zp, Val); // 0154 REORDER4(0, 3, 2, 1); - Draw_ScalarQuadrangle(View, 0, ValMin, ValMax, Xp, Yp, Zp, Val); //0321 + Draw_ScalarQuadrangle(View, 0, ValMin, ValMax, Xp, Yp, Zp, Val); // 0321 REORDER4(0, 4, 7, 3); - Draw_ScalarQuadrangle(View, 0, ValMin, ValMax, Xp, Yp, Zp, Val); //0473 + Draw_ScalarQuadrangle(View, 0, ValMin, ValMax, Xp, Yp, Zp, Val); // 0473 REORDER4(1, 2, 6, 5); - Draw_ScalarQuadrangle(View, 0, ValMin, ValMax, Xp, Yp, Zp, Val); //1265 + Draw_ScalarQuadrangle(View, 0, ValMin, ValMax, Xp, Yp, Zp, Val); // 1265 REORDER4(2, 3, 7, 6); - Draw_ScalarQuadrangle(View, 0, ValMin, ValMax, Xp, Yp, Zp, Val); //2376 - Draw_ScalarQuadrangle(View, 0, ValMin, ValMax, &X[4], &Y[4], &Z[4], &vv[4]); //4567 + Draw_ScalarQuadrangle(View, 0, ValMin, ValMax, Xp, Yp, Zp, Val); // 2376 + Draw_ScalarQuadrangle(View, 0, ValMin, ValMax, &X[4], &Y[4], &Z[4], &vv[4]); // 4567 View->TimeStep = ts; View->Boundary++; return; @@ -731,11 +786,11 @@ void Draw_ScalarPrism(Post_View * View, int preproNormals, Draw_ElementBoundary(PRISM, View, X, Y, Z, Raise); } - Draw_ScalarTetrahedron(View, preproNormals, ValMin, ValMax, X, Y, Z, vv); //0123 + Draw_ScalarTetrahedron(View, preproNormals, ValMin, ValMax, X, Y, Z, vv); // 0123 REORDER4(3, 4, 5, 2); - Draw_ScalarTetrahedron(View, preproNormals, ValMin, ValMax, Xp, Yp, Zp, Val); //3452 + Draw_ScalarTetrahedron(View, preproNormals, ValMin, ValMax, Xp, Yp, Zp, Val); // 3452 REORDER4(1, 2, 4, 3); - Draw_ScalarTetrahedron(View, preproNormals, ValMin, ValMax, Xp, Yp, Zp, Val); //1243 + Draw_ScalarTetrahedron(View, preproNormals, ValMin, ValMax, Xp, Yp, Zp, Val); // 1243 View->TimeStep = ts; View->ShowElement = show; @@ -745,11 +800,49 @@ void Draw_ScalarPyramid(Post_View * View, int preproNormals, double ValMin, double ValMax, double *X, double *Y, double *Z, double *V) { - static int error = 0; - if(!error) { - error = 1; - Msg(WARNING, "Pyramid drawing not implemented yet..."); + int ts, show = 0; + double Val[5], Xp[5], Yp[5], Zp[5]; + double *vv = &V[5 * View->TimeStep]; + + ts = View->TimeStep; + View->TimeStep = 0; + + if(!preproNormals && View->Boundary > 0) { + View->Boundary--; + REORDER4(0, 3, 2, 1); + Draw_ScalarQuadrangle(View, 0, ValMin, ValMax, Xp, Yp, Zp, Val); + REORDER3(0, 1, 4); + Draw_ScalarTriangle(View, 0, ValMin, ValMax, Xp, Yp, Zp, Val); + REORDER3(1, 2, 4); + Draw_ScalarTriangle(View, 0, ValMin, ValMax, Xp, Yp, Zp, Val); + REORDER3(2, 3, 4); + Draw_ScalarTriangle(View, 0, ValMin, ValMax, Xp, Yp, Zp, Val); + REORDER3(3, 0, 4); + Draw_ScalarTriangle(View, 0, ValMin, ValMax, Xp, Yp, Zp, Val); + View->TimeStep = ts; + View->Boundary++; + return; + } + + show = View->ShowElement; + View->ShowElement = 0; + + if(!preproNormals && show) { + SaturateValues(View->SaturateValues, ValMin, ValMax, vv, Val, 6); + double Raise[3][8]; + for(int i = 0; i < 3; i++) + for(int k = 0; k < 5; k++) + Raise[i][k] = View->Raise[i] * Val[k]; + Draw_ElementBoundary(PYRAMID, View, X, Y, Z, Raise); } + + REORDER4(0, 1, 2, 4); + Draw_ScalarTetrahedron(View, preproNormals, ValMin, ValMax, Xp, Yp, Zp, Val); + REORDER4(2, 3, 0, 4); + Draw_ScalarTetrahedron(View, preproNormals, ValMin, ValMax, Xp, Yp, Zp, Val); + + View->TimeStep = ts; + View->ShowElement = show; } // Vector Elements @@ -765,30 +858,14 @@ void Draw_VectorElement(int type, Post_View * View, char Num[100]; switch (type) { - case POINT: - nbnod = 1; - break; - case LINE: - nbnod = 2; - break; - case TRIANGLE: - nbnod = 3; - break; - case QUADRANGLE: - nbnod = 4; - break; - case TETRAHEDRON: - nbnod = 4; - break; - case HEXAHEDRON: - nbnod = 8; - break; - case PRISM: - nbnod = 6; - break; - case PYRAMID: - nbnod = 5; - break; + case POINT: nbnod = 1; break; + case LINE: nbnod = 2; break; + case TRIANGLE: nbnod = 3; break; + case QUADRANGLE: nbnod = 4; break; + case TETRAHEDRON: nbnod = 4; break; + case HEXAHEDRON: nbnod = 8; break; + case PRISM: nbnod = 6; break; + case PYRAMID: nbnod = 5; break; } for(int k = 0; k < nbnod; k++) { @@ -1023,30 +1100,14 @@ void Draw_TensorElement(int type, Post_View * View, int nbnod = 0; switch (type) { - case POINT: - nbnod = 1; - break; - case LINE: - nbnod = 2; - break; - case TRIANGLE: - nbnod = 3; - break; - case QUADRANGLE: - nbnod = 4; - break; - case TETRAHEDRON: - nbnod = 4; - break; - case HEXAHEDRON: - nbnod = 8; - break; - case PRISM: - nbnod = 6; - break; - case PYRAMID: - nbnod = 5; - break; + case POINT: nbnod = 1; break; + case LINE: nbnod = 2; break; + case TRIANGLE: nbnod = 3; break; + case QUADRANGLE: nbnod = 4; break; + case TETRAHEDRON: nbnod = 4; break; + case HEXAHEDRON: nbnod = 8; break; + case PRISM: nbnod = 6; break; + case PYRAMID: nbnod = 5; break; } /// By lack of any current better solution, tensors are displayed as diff --git a/Graphics/Scale.cpp b/Graphics/Scale.cpp index 27fc30acb0..7478fa8d00 100644 --- a/Graphics/Scale.cpp +++ b/Graphics/Scale.cpp @@ -1,4 +1,4 @@ -// $Id: Scale.cpp,v 1.42 2004-04-27 00:11:55 geuzaine Exp $ +// $Id: Scale.cpp,v 1.43 2004-05-29 10:11:12 geuzaine Exp $ // // Copyright (C) 1997-2004 C. Geuzaine, J.-F. Remacle // @@ -141,7 +141,6 @@ void draw_scale(Post_View * v, glColor4ubv((GLubyte *) & CTX.color.text); - if(nbv < 0) { // only min and max if not enough room if(v->IntervalsType == DRAW_POST_DISCRETE || v->IntervalsType == DRAW_POST_CONTINUOUS) { diff --git a/Mesh/Makefile b/Mesh/Makefile index c76625ad5e..c4a799bb1d 100644 --- a/Mesh/Makefile +++ b/Mesh/Makefile @@ -1,4 +1,4 @@ -# $Id: Makefile,v 1.64 2004-05-27 20:49:03 geuzaine Exp $ +# $Id: Makefile,v 1.65 2004-05-29 10:11:12 geuzaine Exp $ # # Copyright (C) 1997-2004 C. Geuzaine, J.-F. Remacle # @@ -102,238 +102,250 @@ depend: ../DataStr/Malloc.h ../DataStr/List.h ../DataStr/Tree.h \ ../DataStr/avl.h ../DataStr/Tools.h ../Numeric/Numeric.h ../Geo/Geo.h \ Mesh.h Vertex.h Element.h Simplex.h Face.h Edge.h \ - ../Geo/ExtrudeParams.h STL.h Metric.h Matrix.h Utils.h \ - ../Common/Context.h Interpolation.h + ../Geo/ExtrudeParams.h STL.h ../Common/VertexArray.h Metric.h Matrix.h \ + Utils.h ../Common/Context.h Interpolation.h 2D_Mesh.o: 2D_Mesh.cpp ../Common/Gmsh.h ../Common/Message.h \ ../DataStr/Malloc.h ../DataStr/List.h ../DataStr/Tree.h \ ../DataStr/avl.h ../DataStr/Tools.h ../Numeric/Numeric.h ../Geo/Geo.h \ ../Geo/CAD.h ../Mesh/Mesh.h ../Mesh/Vertex.h ../Mesh/Element.h \ ../Mesh/Simplex.h ../Mesh/Face.h ../Mesh/Edge.h ../Geo/ExtrudeParams.h \ - ../Mesh/STL.h ../Mesh/Metric.h ../Mesh/Matrix.h Utils.h Create.h \ - 2D_Mesh.h ../Common/Context.h + ../Mesh/STL.h ../Common/VertexArray.h ../Mesh/Metric.h ../Mesh/Matrix.h \ + Utils.h Create.h 2D_Mesh.h ../Common/Context.h 2D_Transfinite.o: 2D_Transfinite.cpp ../Common/Gmsh.h ../Common/Message.h \ ../DataStr/Malloc.h ../DataStr/List.h ../DataStr/Tree.h \ ../DataStr/avl.h ../DataStr/Tools.h ../Geo/Geo.h Mesh.h Vertex.h \ - Element.h Simplex.h Face.h Edge.h ../Geo/ExtrudeParams.h STL.h Metric.h \ - Matrix.h ../Numeric/Numeric.h Interpolation.h + Element.h Simplex.h Face.h Edge.h ../Geo/ExtrudeParams.h STL.h \ + ../Common/VertexArray.h Metric.h Matrix.h ../Numeric/Numeric.h \ + Interpolation.h 2D_Elliptic.o: 2D_Elliptic.cpp ../Common/Gmsh.h ../Common/Message.h \ ../DataStr/Malloc.h ../DataStr/List.h ../DataStr/Tree.h \ ../DataStr/avl.h ../DataStr/Tools.h ../Numeric/Numeric.h ../Geo/Geo.h \ ../Geo/CAD.h ../Mesh/Mesh.h ../Mesh/Vertex.h ../Mesh/Element.h \ ../Mesh/Simplex.h ../Mesh/Face.h ../Mesh/Edge.h ../Geo/ExtrudeParams.h \ - ../Mesh/STL.h ../Mesh/Metric.h ../Mesh/Matrix.h + ../Mesh/STL.h ../Common/VertexArray.h ../Mesh/Metric.h ../Mesh/Matrix.h 2D_BGMesh.o: 2D_BGMesh.cpp ../Common/Gmsh.h ../Common/Message.h \ ../DataStr/Malloc.h ../DataStr/List.h ../DataStr/Tree.h \ ../DataStr/avl.h ../DataStr/Tools.h ../Numeric/Numeric.h Mesh.h \ Vertex.h Element.h Simplex.h Face.h Edge.h ../Geo/ExtrudeParams.h STL.h \ - Metric.h Matrix.h 2D_Mesh.h + ../Common/VertexArray.h Metric.h Matrix.h 2D_Mesh.h 2D_Recombine.o: 2D_Recombine.cpp ../Common/Gmsh.h ../Common/Message.h \ ../DataStr/Malloc.h ../DataStr/List.h ../DataStr/Tree.h \ ../DataStr/avl.h ../DataStr/Tools.h ../Numeric/Numeric.h Mesh.h \ Vertex.h Element.h Simplex.h Face.h Edge.h ../Geo/ExtrudeParams.h STL.h \ - Metric.h Matrix.h Utils.h 2D_Mesh.h Create.h ../Common/Context.h + ../Common/VertexArray.h Metric.h Matrix.h Utils.h 2D_Mesh.h Create.h \ + ../Common/Context.h 2D_InitMesh.o: 2D_InitMesh.cpp ../Common/Gmsh.h ../Common/Message.h \ ../DataStr/Malloc.h ../DataStr/List.h ../DataStr/Tree.h \ ../DataStr/avl.h ../DataStr/Tools.h ../Numeric/Numeric.h Mesh.h \ Vertex.h Element.h Simplex.h Face.h Edge.h ../Geo/ExtrudeParams.h STL.h \ - Metric.h Matrix.h 2D_Mesh.h + ../Common/VertexArray.h Metric.h Matrix.h 2D_Mesh.h 2D_Bowyer.o: 2D_Bowyer.cpp ../Common/Gmsh.h ../Common/Message.h \ ../DataStr/Malloc.h ../DataStr/List.h ../DataStr/Tree.h \ ../DataStr/avl.h ../DataStr/Tools.h ../Numeric/Numeric.h Mesh.h \ Vertex.h Element.h Simplex.h Face.h Edge.h ../Geo/ExtrudeParams.h STL.h \ - Metric.h Matrix.h 2D_Mesh.h + ../Common/VertexArray.h Metric.h Matrix.h 2D_Mesh.h 2D_Bricks.o: 2D_Bricks.cpp ../Common/Gmsh.h ../Common/Message.h \ ../DataStr/Malloc.h ../DataStr/List.h ../DataStr/Tree.h \ ../DataStr/avl.h ../DataStr/Tools.h ../Numeric/Numeric.h Mesh.h \ Vertex.h Element.h Simplex.h Face.h Edge.h ../Geo/ExtrudeParams.h STL.h \ - Metric.h Matrix.h 2D_Mesh.h + ../Common/VertexArray.h Metric.h Matrix.h 2D_Mesh.h 2D_DivAndConq.o: 2D_DivAndConq.cpp ../Common/Gmsh.h ../Common/Message.h \ ../DataStr/Malloc.h ../DataStr/List.h ../DataStr/Tree.h \ ../DataStr/avl.h ../DataStr/Tools.h ../Numeric/Numeric.h Mesh.h \ Vertex.h Element.h Simplex.h Face.h Edge.h ../Geo/ExtrudeParams.h STL.h \ - Metric.h Matrix.h 2D_Mesh.h + ../Common/VertexArray.h Metric.h Matrix.h 2D_Mesh.h 2D_Util.o: 2D_Util.cpp ../Common/Gmsh.h ../Common/Message.h \ ../DataStr/Malloc.h ../DataStr/List.h ../DataStr/Tree.h \ ../DataStr/avl.h ../DataStr/Tools.h ../Numeric/Numeric.h Mesh.h \ Vertex.h Element.h Simplex.h Face.h Edge.h ../Geo/ExtrudeParams.h STL.h \ - Metric.h Matrix.h 2D_Mesh.h ../Common/Context.h + ../Common/VertexArray.h Metric.h Matrix.h 2D_Mesh.h ../Common/Context.h 2D_Links.o: 2D_Links.cpp ../Common/Gmsh.h ../Common/Message.h \ ../DataStr/Malloc.h ../DataStr/List.h ../DataStr/Tree.h \ ../DataStr/avl.h ../DataStr/Tools.h ../Numeric/Numeric.h Mesh.h \ Vertex.h Element.h Simplex.h Face.h Edge.h ../Geo/ExtrudeParams.h STL.h \ - Metric.h Matrix.h 2D_Mesh.h ../Common/Context.h + ../Common/VertexArray.h Metric.h Matrix.h 2D_Mesh.h ../Common/Context.h 2D_Tree.o: 2D_Tree.cpp ../Common/Gmsh.h ../Common/Message.h \ ../DataStr/Malloc.h ../DataStr/List.h ../DataStr/Tree.h \ ../DataStr/avl.h ../DataStr/Tools.h Mesh.h Vertex.h Element.h Simplex.h \ - Face.h Edge.h ../Geo/ExtrudeParams.h STL.h Metric.h Matrix.h 2D_Mesh.h + Face.h Edge.h ../Geo/ExtrudeParams.h STL.h ../Common/VertexArray.h \ + Metric.h Matrix.h 2D_Mesh.h 2D_Cylindrical.o: 2D_Cylindrical.cpp ../Common/Gmsh.h ../Common/Message.h \ ../DataStr/Malloc.h ../DataStr/List.h ../DataStr/Tree.h \ ../DataStr/avl.h ../DataStr/Tools.h ../Numeric/Numeric.h Mesh.h \ Vertex.h Element.h Simplex.h Face.h Edge.h ../Geo/ExtrudeParams.h STL.h \ - Metric.h Matrix.h ../Common/Context.h + ../Common/VertexArray.h Metric.h Matrix.h ../Common/Context.h 2D_Parametric.o: 2D_Parametric.cpp ../Common/Gmsh.h ../Common/Message.h \ ../DataStr/Malloc.h ../DataStr/List.h ../DataStr/Tree.h \ ../DataStr/avl.h ../DataStr/Tools.h ../Numeric/Numeric.h ../Geo/Geo.h \ ../Geo/CAD.h ../Mesh/Mesh.h ../Mesh/Vertex.h ../Mesh/Element.h \ ../Mesh/Simplex.h ../Mesh/Face.h ../Mesh/Edge.h ../Geo/ExtrudeParams.h \ - ../Mesh/STL.h ../Mesh/Metric.h ../Mesh/Matrix.h Interpolation.h \ - 2D_Mesh.h Create.h ../Common/Context.h + ../Mesh/STL.h ../Common/VertexArray.h ../Mesh/Metric.h ../Mesh/Matrix.h \ + Interpolation.h 2D_Mesh.h Create.h ../Common/Context.h 2D_Mesh_Aniso.o: 2D_Mesh_Aniso.cpp ../Common/Gmsh.h ../Common/Message.h \ ../DataStr/Malloc.h ../DataStr/List.h ../DataStr/Tree.h \ ../DataStr/avl.h ../DataStr/Tools.h ../Numeric/Numeric.h ../Geo/Geo.h \ ../Geo/CAD.h ../Mesh/Mesh.h ../Mesh/Vertex.h ../Mesh/Element.h \ ../Mesh/Simplex.h ../Mesh/Face.h ../Mesh/Edge.h ../Geo/ExtrudeParams.h \ - ../Mesh/STL.h ../Mesh/Metric.h ../Mesh/Matrix.h Interpolation.h \ - Create.h ../Common/Context.h + ../Mesh/STL.h ../Common/VertexArray.h ../Mesh/Metric.h ../Mesh/Matrix.h \ + Interpolation.h Create.h ../Common/Context.h 2D_Mesh_Triangle.o: 2D_Mesh_Triangle.cpp ../Common/Gmsh.h \ ../Common/Message.h ../DataStr/Malloc.h ../DataStr/List.h \ ../DataStr/Tree.h ../DataStr/avl.h ../DataStr/Tools.h Mesh.h Vertex.h \ - Element.h Simplex.h Face.h Edge.h ../Geo/ExtrudeParams.h STL.h Metric.h \ - Matrix.h ../Numeric/Numeric.h ../Common/Context.h + Element.h Simplex.h Face.h Edge.h ../Geo/ExtrudeParams.h STL.h \ + ../Common/VertexArray.h Metric.h Matrix.h ../Numeric/Numeric.h \ + ../Common/Context.h 3D_Mesh.o: 3D_Mesh.cpp ../Common/Gmsh.h ../Common/Message.h \ ../DataStr/Malloc.h ../DataStr/List.h ../DataStr/Tree.h \ ../DataStr/avl.h ../DataStr/Tools.h ../Numeric/Numeric.h Mesh.h \ Vertex.h Element.h Simplex.h Face.h Edge.h ../Geo/ExtrudeParams.h STL.h \ - Metric.h Matrix.h 3D_Mesh.h Create.h ../Common/Context.h + ../Common/VertexArray.h Metric.h Matrix.h 3D_Mesh.h Create.h \ + ../Common/Context.h 3D_Transfinite.o: 3D_Transfinite.cpp ../Common/Gmsh.h ../Common/Message.h \ ../DataStr/Malloc.h ../DataStr/List.h ../DataStr/Tree.h \ ../DataStr/avl.h ../DataStr/Tools.h Mesh.h Vertex.h Element.h Simplex.h \ - Face.h Edge.h ../Geo/ExtrudeParams.h STL.h Metric.h Matrix.h \ - Interpolation.h Create.h + Face.h Edge.h ../Geo/ExtrudeParams.h STL.h ../Common/VertexArray.h \ + Metric.h Matrix.h Interpolation.h Create.h 3D_BGMesh.o: 3D_BGMesh.cpp ../Common/Gmsh.h ../Common/Message.h \ ../DataStr/Malloc.h ../DataStr/List.h ../DataStr/Tree.h \ ../DataStr/avl.h ../DataStr/Tools.h Mesh.h Vertex.h Element.h Simplex.h \ - Face.h Edge.h ../Geo/ExtrudeParams.h STL.h Metric.h Matrix.h 2D_Mesh.h \ - 3D_Mesh.h ../Common/Views.h ../Common/ColorTable.h ../Numeric/Numeric.h \ - ../Common/Context.h + Face.h Edge.h ../Geo/ExtrudeParams.h STL.h ../Common/VertexArray.h \ + Metric.h Matrix.h 2D_Mesh.h 3D_Mesh.h ../Common/Views.h \ + ../Common/ColorTable.h ../Numeric/Numeric.h ../Common/Context.h 3D_Extrude.o: 3D_Extrude.cpp ../Common/Gmsh.h ../Common/Message.h \ ../DataStr/Malloc.h ../DataStr/List.h ../DataStr/Tree.h \ ../DataStr/avl.h ../DataStr/Tools.h ../Numeric/Numeric.h ../Geo/Geo.h \ ../Geo/CAD.h ../Mesh/Mesh.h ../Mesh/Vertex.h ../Mesh/Element.h \ ../Mesh/Simplex.h ../Mesh/Face.h ../Mesh/Edge.h ../Geo/ExtrudeParams.h \ - ../Mesh/STL.h ../Mesh/Metric.h ../Mesh/Matrix.h ../Common/Context.h \ - Create.h + ../Mesh/STL.h ../Common/VertexArray.h ../Mesh/Metric.h ../Mesh/Matrix.h \ + ../Common/Context.h Create.h 3D_Extrude_Old.o: 3D_Extrude_Old.cpp ../Common/Gmsh.h ../Common/Message.h \ ../DataStr/Malloc.h ../DataStr/List.h ../DataStr/Tree.h \ ../DataStr/avl.h ../DataStr/Tools.h ../Numeric/Numeric.h ../Geo/Geo.h \ ../Geo/CAD.h ../Mesh/Mesh.h ../Mesh/Vertex.h ../Mesh/Element.h \ ../Mesh/Simplex.h ../Mesh/Face.h ../Mesh/Edge.h ../Geo/ExtrudeParams.h \ - ../Mesh/STL.h ../Mesh/Metric.h ../Mesh/Matrix.h ../Common/Context.h \ - Create.h + ../Mesh/STL.h ../Common/VertexArray.h ../Mesh/Metric.h ../Mesh/Matrix.h \ + ../Common/Context.h Create.h 3D_Coherence.o: 3D_Coherence.cpp ../Common/Gmsh.h ../Common/Message.h \ ../DataStr/Malloc.h ../DataStr/List.h ../DataStr/Tree.h \ ../DataStr/avl.h ../DataStr/Tools.h ../Numeric/Numeric.h ../Geo/Geo.h \ Mesh.h Vertex.h Element.h Simplex.h Face.h Edge.h \ - ../Geo/ExtrudeParams.h STL.h Metric.h Matrix.h 3D_Mesh.h Create.h + ../Geo/ExtrudeParams.h STL.h ../Common/VertexArray.h Metric.h Matrix.h \ + 3D_Mesh.h Create.h 3D_Divide.o: 3D_Divide.cpp ../Common/Gmsh.h ../Common/Message.h \ ../DataStr/Malloc.h ../DataStr/List.h ../DataStr/Tree.h \ ../DataStr/avl.h ../DataStr/Tools.h ../Numeric/Numeric.h Mesh.h \ Vertex.h Element.h Simplex.h Face.h Edge.h ../Geo/ExtrudeParams.h STL.h \ - Metric.h Matrix.h + ../Common/VertexArray.h Metric.h Matrix.h 3D_Bricks.o: 3D_Bricks.cpp ../Common/Gmsh.h ../Common/Message.h \ ../DataStr/Malloc.h ../DataStr/List.h ../DataStr/Tree.h \ ../DataStr/avl.h ../DataStr/Tools.h ../Numeric/Numeric.h Mesh.h \ Vertex.h Element.h Simplex.h Face.h Edge.h ../Geo/ExtrudeParams.h STL.h \ - Metric.h Matrix.h + ../Common/VertexArray.h Metric.h Matrix.h MeshQuality.o: MeshQuality.cpp ../Common/Gmsh.h ../Common/Message.h \ ../DataStr/Malloc.h ../DataStr/List.h ../DataStr/Tree.h \ ../DataStr/avl.h ../DataStr/Tools.h ../Numeric/Numeric.h Mesh.h \ Vertex.h Element.h Simplex.h Face.h Edge.h ../Geo/ExtrudeParams.h STL.h \ - Metric.h Matrix.h + ../Common/VertexArray.h Metric.h Matrix.h Create.o: Create.cpp ../Common/Gmsh.h ../Common/Message.h \ ../DataStr/Malloc.h ../DataStr/List.h ../DataStr/Tree.h \ ../DataStr/avl.h ../DataStr/Tools.h ../Numeric/Numeric.h ../Geo/Geo.h \ ../Geo/CAD.h ../Mesh/Mesh.h ../Mesh/Vertex.h ../Mesh/Element.h \ ../Mesh/Simplex.h ../Mesh/Face.h ../Mesh/Edge.h ../Geo/ExtrudeParams.h \ - ../Mesh/STL.h ../Mesh/Metric.h ../Mesh/Matrix.h Utils.h \ - ../Common/Context.h Create.h + ../Mesh/STL.h ../Common/VertexArray.h ../Mesh/Metric.h ../Mesh/Matrix.h \ + Utils.h ../Common/Context.h Create.h Generator.o: Generator.cpp ../Common/Gmsh.h ../Common/Message.h \ ../DataStr/Malloc.h ../DataStr/List.h ../DataStr/Tree.h \ ../DataStr/avl.h ../DataStr/Tools.h ../Numeric/Numeric.h Mesh.h \ Vertex.h Element.h Simplex.h Face.h Edge.h ../Geo/ExtrudeParams.h STL.h \ - Metric.h Matrix.h Create.h ../Common/Context.h ../Parser/OpenFile.h \ - ../Common/Views.h ../Common/ColorTable.h + ../Common/VertexArray.h Metric.h Matrix.h Create.h ../Common/Context.h \ + ../Parser/OpenFile.h ../Common/Views.h ../Common/ColorTable.h Print_Mesh.o: Print_Mesh.cpp ../Common/Gmsh.h ../Common/Message.h \ ../DataStr/Malloc.h ../DataStr/List.h ../DataStr/Tree.h \ ../DataStr/avl.h ../DataStr/Tools.h ../Numeric/Numeric.h ../Geo/Geo.h \ ../Geo/CAD.h ../Mesh/Mesh.h ../Mesh/Vertex.h ../Mesh/Element.h \ ../Mesh/Simplex.h ../Mesh/Face.h ../Mesh/Edge.h ../Geo/ExtrudeParams.h \ - ../Mesh/STL.h ../Mesh/Metric.h ../Mesh/Matrix.h Create.h \ - ../Common/Context.h + ../Mesh/STL.h ../Common/VertexArray.h ../Mesh/Metric.h ../Mesh/Matrix.h \ + Create.h ../Common/Context.h Read_Mesh.o: Read_Mesh.cpp ../Common/Gmsh.h ../Common/Message.h \ ../DataStr/Malloc.h ../DataStr/List.h ../DataStr/Tree.h \ ../DataStr/avl.h ../DataStr/Tools.h ../Geo/Geo.h ../Geo/CAD.h \ ../Mesh/Mesh.h ../Mesh/Vertex.h ../Mesh/Element.h ../Mesh/Simplex.h \ ../Mesh/Face.h ../Mesh/Edge.h ../Geo/ExtrudeParams.h ../Mesh/STL.h \ - ../Mesh/Metric.h ../Mesh/Matrix.h 3D_Mesh.h Create.h ../Geo/MinMax.h \ - ../Common/Context.h + ../Common/VertexArray.h ../Mesh/Metric.h ../Mesh/Matrix.h 3D_Mesh.h \ + Create.h ../Geo/MinMax.h ../Common/Context.h STL.o: STL.cpp ../Common/Gmsh.h ../Common/Message.h ../DataStr/Malloc.h \ ../DataStr/List.h ../DataStr/Tree.h ../DataStr/avl.h ../DataStr/Tools.h \ ../Numeric/Numeric.h Mesh.h Vertex.h Element.h Simplex.h Face.h Edge.h \ - ../Geo/ExtrudeParams.h STL.h Metric.h Matrix.h ../Geo/CAD.h \ - ../Geo/Geo.h Create.h Interpolation.h ../Common/Context.h + ../Geo/ExtrudeParams.h STL.h ../Common/VertexArray.h Metric.h Matrix.h \ + ../Geo/CAD.h ../Geo/Geo.h Create.h Interpolation.h ../Common/Context.h SwapEdge.o: SwapEdge.cpp ../Common/Gmsh.h ../Common/Message.h \ ../DataStr/Malloc.h ../DataStr/List.h ../DataStr/Tree.h \ ../DataStr/avl.h ../DataStr/Tools.h ../Numeric/Numeric.h Mesh.h \ Vertex.h Element.h Simplex.h Face.h Edge.h ../Geo/ExtrudeParams.h STL.h \ - Metric.h Matrix.h SwapPatterns.h + ../Common/VertexArray.h Metric.h Matrix.h SwapPatterns.h Utils.o: Utils.cpp ../Common/Gmsh.h ../Common/Message.h \ ../DataStr/Malloc.h ../DataStr/List.h ../DataStr/Tree.h \ ../DataStr/avl.h ../DataStr/Tools.h ../Numeric/Numeric.h ../Geo/Geo.h \ ../Geo/CAD.h ../Mesh/Mesh.h ../Mesh/Vertex.h ../Mesh/Element.h \ ../Mesh/Simplex.h ../Mesh/Face.h ../Mesh/Edge.h ../Geo/ExtrudeParams.h \ - ../Mesh/STL.h ../Mesh/Metric.h ../Mesh/Matrix.h Interpolation.h \ - ../Common/Context.h + ../Mesh/STL.h ../Common/VertexArray.h ../Mesh/Metric.h ../Mesh/Matrix.h \ + Interpolation.h ../Common/Context.h Metric.o: Metric.cpp ../Common/Gmsh.h ../Common/Message.h \ ../DataStr/Malloc.h ../DataStr/List.h ../DataStr/Tree.h \ ../DataStr/avl.h ../DataStr/Tools.h ../Numeric/Numeric.h ../Geo/Geo.h \ ../Geo/CAD.h ../Mesh/Mesh.h ../Mesh/Vertex.h ../Mesh/Element.h \ ../Mesh/Simplex.h ../Mesh/Face.h ../Mesh/Edge.h ../Geo/ExtrudeParams.h \ - ../Mesh/STL.h ../Mesh/Metric.h ../Mesh/Matrix.h Interpolation.h + ../Mesh/STL.h ../Common/VertexArray.h ../Mesh/Metric.h ../Mesh/Matrix.h \ + Interpolation.h Nurbs.o: Nurbs.cpp ../Common/Gmsh.h ../Common/Message.h \ ../DataStr/Malloc.h ../DataStr/List.h ../DataStr/Tree.h \ ../DataStr/avl.h ../DataStr/Tools.h Nurbs.h Vertex.h Mesh.h Element.h \ - Simplex.h Face.h Edge.h ../Geo/ExtrudeParams.h STL.h Metric.h Matrix.h \ - ../Geo/Geo.h ../Geo/GeoUtils.h Create.h ../Geo/CAD.h + Simplex.h Face.h Edge.h ../Geo/ExtrudeParams.h STL.h \ + ../Common/VertexArray.h Metric.h Matrix.h ../Geo/Geo.h \ + ../Geo/GeoUtils.h Create.h ../Geo/CAD.h Interpolation.o: Interpolation.cpp ../Common/Gmsh.h ../Common/Message.h \ ../DataStr/Malloc.h ../DataStr/List.h ../DataStr/Tree.h \ ../DataStr/avl.h ../DataStr/Tools.h ../Numeric/Numeric.h ../Geo/Geo.h \ Nurbs.h Vertex.h Mesh.h Element.h Simplex.h Face.h Edge.h \ - ../Geo/ExtrudeParams.h STL.h Metric.h Matrix.h ../Geo/CAD.h Utils.h \ - Interpolation.h + ../Geo/ExtrudeParams.h STL.h ../Common/VertexArray.h Metric.h Matrix.h \ + ../Geo/CAD.h Utils.h Interpolation.h SecondOrder.o: SecondOrder.cpp ../Common/Gmsh.h ../Common/Message.h \ ../DataStr/Malloc.h ../DataStr/List.h ../DataStr/Tree.h \ ../DataStr/avl.h ../DataStr/Tools.h ../Geo/Geo.h Mesh.h Vertex.h \ - Element.h Simplex.h Face.h Edge.h ../Geo/ExtrudeParams.h STL.h Metric.h \ - Matrix.h Utils.h Interpolation.h ../Numeric/Numeric.h + Element.h Simplex.h Face.h Edge.h ../Geo/ExtrudeParams.h STL.h \ + ../Common/VertexArray.h Metric.h Matrix.h Utils.h Interpolation.h \ + ../Numeric/Numeric.h Smoothing.o: Smoothing.cpp ../Common/Gmsh.h ../Common/Message.h \ ../DataStr/Malloc.h ../DataStr/List.h ../DataStr/Tree.h \ ../DataStr/avl.h ../DataStr/Tools.h ../Numeric/Numeric.h Mesh.h \ Vertex.h Element.h Simplex.h Face.h Edge.h ../Geo/ExtrudeParams.h STL.h \ - Metric.h Matrix.h + ../Common/VertexArray.h Metric.h Matrix.h CrossData.o: CrossData.cpp ../Common/Gmsh.h ../Common/Message.h \ ../DataStr/Malloc.h ../DataStr/List.h ../DataStr/Tree.h \ ../DataStr/avl.h ../DataStr/Tools.h Mesh.h Vertex.h Element.h Simplex.h \ - Face.h Edge.h ../Geo/ExtrudeParams.h STL.h Metric.h Matrix.h + Face.h Edge.h ../Geo/ExtrudeParams.h STL.h ../Common/VertexArray.h \ + Metric.h Matrix.h Vertex.o: Vertex.cpp ../Common/Gmsh.h ../Common/Message.h \ ../DataStr/Malloc.h ../DataStr/List.h ../DataStr/Tree.h \ ../DataStr/avl.h ../DataStr/Tools.h ../Numeric/Numeric.h Vertex.h \ Mesh.h Element.h Simplex.h Face.h Edge.h ../Geo/ExtrudeParams.h STL.h \ - Metric.h Matrix.h ../Common/Context.h + ../Common/VertexArray.h Metric.h Matrix.h ../Common/Context.h Edge.o: Edge.cpp ../Common/Gmsh.h ../Common/Message.h ../DataStr/Malloc.h \ ../DataStr/List.h ../DataStr/Tree.h ../DataStr/avl.h ../DataStr/Tools.h \ ../Numeric/Numeric.h Mesh.h Vertex.h Element.h Simplex.h Face.h Edge.h \ - ../Geo/ExtrudeParams.h STL.h Metric.h Matrix.h + ../Geo/ExtrudeParams.h STL.h ../Common/VertexArray.h Metric.h Matrix.h Face.o: Face.cpp ../Common/Gmsh.h ../Common/Message.h ../DataStr/Malloc.h \ ../DataStr/List.h ../DataStr/Tree.h ../DataStr/avl.h ../DataStr/Tools.h \ ../Numeric/Numeric.h Mesh.h Vertex.h Element.h Simplex.h Face.h Edge.h \ - ../Geo/ExtrudeParams.h STL.h Metric.h Matrix.h + ../Geo/ExtrudeParams.h STL.h ../Common/VertexArray.h Metric.h Matrix.h Element.o: Element.cpp ../Common/Gmsh.h ../Common/Message.h \ ../DataStr/Malloc.h ../DataStr/List.h ../DataStr/Tree.h \ ../DataStr/avl.h ../DataStr/Tools.h Mesh.h Vertex.h Element.h Simplex.h \ - Face.h Edge.h ../Geo/ExtrudeParams.h STL.h Metric.h Matrix.h + Face.h Edge.h ../Geo/ExtrudeParams.h STL.h ../Common/VertexArray.h \ + Metric.h Matrix.h Simplex.o: Simplex.cpp ../Common/Gmsh.h ../Common/Message.h \ ../DataStr/Malloc.h ../DataStr/List.h ../DataStr/Tree.h \ ../DataStr/avl.h ../DataStr/Tools.h ../Numeric/Numeric.h ../Geo/Geo.h \ Mesh.h Vertex.h Element.h Simplex.h Face.h Edge.h \ - ../Geo/ExtrudeParams.h STL.h Metric.h Matrix.h ../Common/Context.h + ../Geo/ExtrudeParams.h STL.h ../Common/VertexArray.h Metric.h Matrix.h \ + ../Common/Context.h diff --git a/Mesh/Mesh.h b/Mesh/Mesh.h index 6b86c99591..f9fad0f17a 100644 --- a/Mesh/Mesh.h +++ b/Mesh/Mesh.h @@ -28,6 +28,7 @@ #include "Edge.h" #include "ExtrudeParams.h" #include "STL.h" +#include "VertexArray.h" #define FORMAT_MSH 1 #define FORMAT_UNV 2 @@ -223,24 +224,6 @@ class DrawingColor{ unsigned int geom, mesh; }; -class triangleVertexArray{ - public: - int num_triangles; - float *vertices, *normals; - unsigned char *colors; - triangleVertexArray(int nb){ - num_triangles = 0; - vertices = new float[nb * 3 * 3]; - normals = new float[nb * 3 * 3]; - colors = new unsigned char[nb * 3 * 4]; - } - ~triangleVertexArray(){ - delete [] vertices; - delete [] normals; - delete [] colors; - } -}; - struct _Surf{ int Num; int Typ; diff --git a/Parser/Makefile b/Parser/Makefile index 527e0db3b9..192d5c4b22 100644 --- a/Parser/Makefile +++ b/Parser/Makefile @@ -1,4 +1,4 @@ -# $Id: Makefile,v 1.58 2004-05-25 23:16:32 geuzaine Exp $ +# $Id: Makefile,v 1.59 2004-05-29 10:11:12 geuzaine Exp $ # # Copyright (C) 1997-2004 C. Geuzaine, J.-F. Remacle # @@ -64,27 +64,30 @@ Gmsh.yy.o: Gmsh.yy.cpp ../Common/Gmsh.h ../Common/Message.h \ ../DataStr/avl.h ../DataStr/Tools.h ../Numeric/Numeric.h ../Geo/Geo.h \ ../Geo/CAD.h ../Mesh/Mesh.h ../Mesh/Vertex.h ../Mesh/Element.h \ ../Mesh/Simplex.h ../Mesh/Face.h ../Mesh/Edge.h ../Geo/ExtrudeParams.h \ - ../Mesh/STL.h ../Mesh/Metric.h ../Mesh/Matrix.h Gmsh.tab.hpp + ../Mesh/STL.h ../Common/VertexArray.h ../Mesh/Metric.h ../Mesh/Matrix.h \ + Gmsh.tab.hpp Gmsh.tab.o: Gmsh.tab.cpp ../Plugin/PluginManager.h ../Plugin/Plugin.h \ ../Common/Options.h ../Common/Message.h ../Common/Views.h \ - ../Common/ColorTable.h ../DataStr/List.h ../Parallel/ParUtil.h \ - ../Common/Gmsh.h ../DataStr/Malloc.h ../DataStr/Tree.h ../DataStr/avl.h \ - ../DataStr/Tools.h ../Numeric/Numeric.h ../Common/Context.h \ - ../Geo/Geo.h ../Geo/GeoUtils.h ../Mesh/Mesh.h ../Mesh/Vertex.h \ - ../Mesh/Element.h ../Mesh/Simplex.h ../Mesh/Face.h ../Mesh/Edge.h \ - ../Geo/ExtrudeParams.h ../Mesh/STL.h ../Mesh/Metric.h ../Mesh/Matrix.h \ - ../Mesh/Nurbs.h ../Geo/CAD.h ../Graphics/Draw.h ../Mesh/Create.h \ - ../Geo/StepGeomDatabase.h ../Common/Colors.h Parser.h OpenFile.h \ - ../Common/CommandLine.h FunctionManager.h ../Common/Timer.h \ - ../Graphics/CreateFile.h ../Common/Visibility.h + ../Common/ColorTable.h ../DataStr/List.h ../Common/VertexArray.h \ + ../Parallel/ParUtil.h ../Common/Gmsh.h ../DataStr/Malloc.h \ + ../DataStr/Tree.h ../DataStr/avl.h ../DataStr/Tools.h \ + ../Numeric/Numeric.h ../Common/Context.h ../Geo/Geo.h ../Geo/GeoUtils.h \ + ../Mesh/Mesh.h ../Mesh/Vertex.h ../Mesh/Element.h ../Mesh/Simplex.h \ + ../Mesh/Face.h ../Mesh/Edge.h ../Geo/ExtrudeParams.h ../Mesh/STL.h \ + ../Mesh/Metric.h ../Mesh/Matrix.h ../Mesh/Nurbs.h ../Geo/CAD.h \ + ../Graphics/Draw.h ../Mesh/Create.h ../Geo/StepGeomDatabase.h \ + ../Common/Colors.h Parser.h OpenFile.h ../Common/CommandLine.h \ + FunctionManager.h ../Common/Timer.h ../Graphics/CreateFile.h \ + ../Common/Visibility.h OpenFile.o: OpenFile.cpp ../Common/Gmsh.h ../Common/Message.h \ ../DataStr/Malloc.h ../DataStr/List.h ../DataStr/Tree.h \ ../DataStr/avl.h ../DataStr/Tools.h ../Numeric/Numeric.h \ ../Common/Context.h Parser.h OpenFile.h ../Common/CommandLine.h \ ../Geo/Geo.h ../Mesh/Mesh.h ../Mesh/Vertex.h ../Mesh/Element.h \ ../Mesh/Simplex.h ../Mesh/Face.h ../Mesh/Edge.h ../Geo/ExtrudeParams.h \ - ../Mesh/STL.h ../Mesh/Metric.h ../Mesh/Matrix.h ../Common/Views.h \ - ../Common/ColorTable.h ../Geo/MinMax.h ../Common/Visibility.h \ - ../Graphics/ReadImg.h ../Common/GmshUI.h ../Graphics/Draw.h \ - ../Fltk/GUI.h ../Fltk/Opengl_Window.h ../Fltk/Colorbar_Window.h + ../Mesh/STL.h ../Common/VertexArray.h ../Mesh/Metric.h ../Mesh/Matrix.h \ + ../Common/Views.h ../Common/ColorTable.h ../Geo/MinMax.h \ + ../Common/Visibility.h ../Graphics/ReadImg.h ../Common/GmshUI.h \ + ../Graphics/Draw.h ../Fltk/GUI.h ../Fltk/Opengl_Window.h \ + ../Fltk/Colorbar_Window.h FunctionManager.o: FunctionManager.cpp FunctionManager.h diff --git a/Plugin/Makefile b/Plugin/Makefile index deb4f971ef..94d6493c49 100644 --- a/Plugin/Makefile +++ b/Plugin/Makefile @@ -1,4 +1,4 @@ -# $Id: Makefile,v 1.48 2004-05-25 23:16:32 geuzaine Exp $ +# $Id: Makefile,v 1.49 2004-05-29 10:11:12 geuzaine Exp $ # # Copyright (C) 1997-2004 C. Geuzaine, J.-F. Remacle # @@ -67,74 +67,82 @@ depend: # DO NOT DELETE THIS LINE Plugin.o: Plugin.cpp Plugin.h ../Common/Options.h ../Common/Message.h \ ../Common/Views.h ../Common/ColorTable.h ../DataStr/List.h \ - PluginManager.h CutMap.h Levelset.h CutGrid.h StreamLines.h CutPlane.h \ - CutSphere.h Skin.h ../DataStr/Tree.h ../DataStr/avl.h Extract.h \ - Harmonic2Time.h DecomposeInSimplex.h Smooth.h Transform.h Triangulate.h \ - SphericalRaise.h DisplacementRaise.h Evaluate.h + ../Common/VertexArray.h PluginManager.h CutMap.h Levelset.h CutGrid.h \ + StreamLines.h CutPlane.h CutSphere.h Skin.h ../DataStr/Tree.h \ + ../DataStr/avl.h Extract.h Harmonic2Time.h DecomposeInSimplex.h \ + Smooth.h Transform.h Triangulate.h SphericalRaise.h DisplacementRaise.h \ + Evaluate.h Levelset.o: Levelset.cpp Levelset.h Plugin.h ../Common/Options.h \ ../Common/Message.h ../Common/Views.h ../Common/ColorTable.h \ - ../DataStr/List.h DecomposeInSimplex.h ../DataStr/Tools.h \ - ../DataStr/Tree.h ../DataStr/avl.h ../Graphics/Iso.h \ + ../DataStr/List.h ../Common/VertexArray.h DecomposeInSimplex.h \ + ../DataStr/Tools.h ../DataStr/Tree.h ../DataStr/avl.h ../Graphics/Iso.h \ ../Numeric/Numeric.h ../Common/Context.h ../DataStr/Malloc.h CutPlane.o: CutPlane.cpp CutPlane.h Levelset.h Plugin.h \ ../Common/Options.h ../Common/Message.h ../Common/Views.h \ - ../Common/ColorTable.h ../DataStr/List.h ../Common/Context.h + ../Common/ColorTable.h ../DataStr/List.h ../Common/VertexArray.h \ + ../Common/Context.h CutSphere.o: CutSphere.cpp CutSphere.h Levelset.h Plugin.h \ ../Common/Options.h ../Common/Message.h ../Common/Views.h \ - ../Common/ColorTable.h ../DataStr/List.h ../Common/Context.h + ../Common/ColorTable.h ../DataStr/List.h ../Common/VertexArray.h \ + ../Common/Context.h CutMap.o: CutMap.cpp CutMap.h Levelset.h Plugin.h ../Common/Options.h \ ../Common/Message.h ../Common/Views.h ../Common/ColorTable.h \ - ../DataStr/List.h ../Common/Context.h + ../DataStr/List.h ../Common/VertexArray.h ../Common/Context.h Smooth.o: Smooth.cpp Plugin.h ../Common/Options.h ../Common/Message.h \ - ../Common/Views.h ../Common/ColorTable.h ../DataStr/List.h Smooth.h \ - ../Common/Context.h + ../Common/Views.h ../Common/ColorTable.h ../DataStr/List.h \ + ../Common/VertexArray.h Smooth.h ../Common/Context.h Octree.o: Octree.cpp Octree.h OctreeInternals.h OctreeInternals.o: OctreeInternals.cpp ../Common/Message.h \ OctreeInternals.h OctreePost.o: OctreePost.cpp Octree.h OctreeInternals.h OctreePost.h \ ../DataStr/List.h ../Common/Views.h ../Common/ColorTable.h \ - ../Numeric/Numeric.h ../Common/Message.h + ../Common/VertexArray.h ../Numeric/Numeric.h ../Common/Message.h StreamLines.o: StreamLines.cpp OctreePost.h Octree.h OctreeInternals.h \ StreamLines.h Plugin.h ../Common/Options.h ../Common/Message.h \ ../Common/Views.h ../Common/ColorTable.h ../DataStr/List.h \ - ../Common/Context.h + ../Common/VertexArray.h ../Common/Context.h CutGrid.o: CutGrid.cpp OctreePost.h Octree.h OctreeInternals.h CutGrid.h \ Plugin.h ../Common/Options.h ../Common/Message.h ../Common/Views.h \ - ../Common/ColorTable.h ../DataStr/List.h ../Common/Context.h + ../Common/ColorTable.h ../DataStr/List.h ../Common/VertexArray.h \ + ../Common/Context.h Transform.o: Transform.cpp Plugin.h ../Common/Options.h \ ../Common/Message.h ../Common/Views.h ../Common/ColorTable.h \ - ../DataStr/List.h Transform.h ../Common/Context.h + ../DataStr/List.h ../Common/VertexArray.h Transform.h \ + ../Common/Context.h Triangulate.o: Triangulate.cpp ../Common/Gmsh.h ../Common/Message.h \ ../DataStr/Malloc.h ../DataStr/List.h ../DataStr/Tree.h \ ../DataStr/avl.h ../DataStr/Tools.h Plugin.h ../Common/Options.h \ - ../Common/Views.h ../Common/ColorTable.h Triangulate.h \ - ../Common/Context.h ../Geo/Geo.h ../Mesh/Mesh.h ../Mesh/Vertex.h \ - ../Mesh/Element.h ../Mesh/Simplex.h ../Mesh/Face.h ../Mesh/Edge.h \ - ../Geo/ExtrudeParams.h ../Mesh/STL.h ../Mesh/Metric.h ../Mesh/Matrix.h \ - ../Mesh/Utils.h ../Mesh/Create.h + ../Common/Views.h ../Common/ColorTable.h ../Common/VertexArray.h \ + Triangulate.h ../Common/Context.h ../Geo/Geo.h ../Mesh/Mesh.h \ + ../Mesh/Vertex.h ../Mesh/Element.h ../Mesh/Simplex.h ../Mesh/Face.h \ + ../Mesh/Edge.h ../Geo/ExtrudeParams.h ../Mesh/STL.h ../Mesh/Metric.h \ + ../Mesh/Matrix.h ../Mesh/Utils.h ../Mesh/Create.h SphericalRaise.o: SphericalRaise.cpp Plugin.h ../Common/Options.h \ ../Common/Message.h ../Common/Views.h ../Common/ColorTable.h \ - ../DataStr/List.h SphericalRaise.h ../Common/Context.h \ - ../Numeric/Numeric.h + ../DataStr/List.h ../Common/VertexArray.h SphericalRaise.h \ + ../Common/Context.h ../Numeric/Numeric.h DisplacementRaise.o: DisplacementRaise.cpp Plugin.h ../Common/Options.h \ ../Common/Message.h ../Common/Views.h ../Common/ColorTable.h \ - ../DataStr/List.h DisplacementRaise.h ../Common/Context.h \ - ../Numeric/Numeric.h + ../DataStr/List.h ../Common/VertexArray.h DisplacementRaise.h \ + ../Common/Context.h ../Numeric/Numeric.h Skin.o: Skin.cpp Plugin.h ../Common/Options.h ../Common/Message.h \ - ../Common/Views.h ../Common/ColorTable.h ../DataStr/List.h Skin.h \ - ../DataStr/Tree.h ../DataStr/avl.h ../Common/Context.h \ - ../DataStr/Malloc.h -Extract.o: Extract.cpp Plugin.h ../Common/Options.h ../Common/Message.h \ - ../Common/Views.h ../Common/ColorTable.h ../DataStr/List.h Extract.h \ + ../Common/Views.h ../Common/ColorTable.h ../DataStr/List.h \ + ../Common/VertexArray.h Skin.h ../DataStr/Tree.h ../DataStr/avl.h \ ../Common/Context.h ../DataStr/Malloc.h +Extract.o: Extract.cpp Plugin.h ../Common/Options.h ../Common/Message.h \ + ../Common/Views.h ../Common/ColorTable.h ../DataStr/List.h \ + ../Common/VertexArray.h Extract.h ../Common/Context.h \ + ../DataStr/Malloc.h DecomposeInSimplex.o: DecomposeInSimplex.cpp Plugin.h ../Common/Options.h \ ../Common/Message.h ../Common/Views.h ../Common/ColorTable.h \ - ../DataStr/List.h DecomposeInSimplex.h ../DataStr/Tree.h \ - ../DataStr/avl.h ../Common/Context.h ../DataStr/Malloc.h + ../DataStr/List.h ../Common/VertexArray.h DecomposeInSimplex.h \ + ../DataStr/Tree.h ../DataStr/avl.h ../Common/Context.h \ + ../DataStr/Malloc.h Evaluate.o: Evaluate.cpp Plugin.h ../Common/Options.h ../Common/Message.h \ - ../Common/Views.h ../Common/ColorTable.h ../DataStr/List.h Evaluate.h \ - ../Common/Context.h ../Numeric/Numeric.h + ../Common/Views.h ../Common/ColorTable.h ../DataStr/List.h \ + ../Common/VertexArray.h Evaluate.h ../Common/Context.h \ + ../Numeric/Numeric.h Harmonic2Time.o: Harmonic2Time.cpp Plugin.h ../Common/Options.h \ ../Common/Message.h ../Common/Views.h ../Common/ColorTable.h \ - ../DataStr/List.h Harmonic2Time.h ../Common/Context.h \ - ../Numeric/Numeric.h + ../DataStr/List.h ../Common/VertexArray.h Harmonic2Time.h \ + ../Common/Context.h ../Numeric/Numeric.h diff --git a/doc/FAQ b/doc/FAQ index a3187a209e..1ccba56da0 100644 --- a/doc/FAQ +++ b/doc/FAQ @@ -1,4 +1,4 @@ -$Id: FAQ,v 1.36 2004-05-25 04:10:10 geuzaine Exp $ +$Id: FAQ,v 1.37 2004-05-29 10:11:12 geuzaine Exp $ This is the Gmsh FAQ @@ -215,8 +215,3 @@ Section 7: Post-processing module Are you are executing Gmsh from a remote host (via the network) without GLX? You should turn double buffering off (with the -nodb command line option). -* 7.2 Big post-processing scenes are slow to display. - -Try display lists (Tools->Options->Display->Use display lists). - - diff --git a/doc/VERSIONS b/doc/VERSIONS index 3a07b70cea..bb111ba288 100644 --- a/doc/VERSIONS +++ b/doc/VERSIONS @@ -1,19 +1,20 @@ -$Id: VERSIONS,v 1.213 2004-05-28 21:20:48 geuzaine Exp $ +$Id: VERSIONS,v 1.214 2004-05-29 10:11:12 geuzaine Exp $ New in 1.53: completed support for second order elements (lines, triangles, quadrangles, tetrahedra, hexahedra, prisms and pyramids); -various background mesh fixes and enhancements; new Plugin(Evaluate) -to evaluate arbitrary expressions on post-processing views; -generalized Plugin(Extract) to handle any combination of components; -generalized "Coherence" to handle transfinite surface/volume -attributes; plugin options can now be set in the option file (like all -other options); added "undo" capability during geometry creation; -rewrote the contour guessing routines so that entities can be selected -in an arbitrary order; Mac users can now double click on geo/msh/pos -files in the Finder to launch Gmsh; removed support for fltk 1.0; -rewrote most of the code related to quadrangles; fixed 2d elliptic -algorithm; experimental use of vertex arrays in mesh drawing code -(triangles only) to sped up the rendering; many code cleanups; +various background mesh fixes and enhancements; major performance +improvements for mesh and post-processing drawing speed (OpenGL vertex +arrays for triangles); new Plugin(Evaluate) to evaluate arbitrary +expressions on post-processing views; generalized Plugin(Extract) to +handle any combination of components; generalized "Coherence" to +handle transfinite surface/volume attributes; plugin options can now +be set in the option file (like all other options); added "undo" +capability during geometry creation; rewrote the contour guessing +routines so that entities can be selected in an arbitrary order; Mac +users can now double click on geo/msh/pos files in the Finder to +launch Gmsh; removed support for fltk 1.0; rewrote most of the code +related to quadrangles; fixed 2d elliptic algorithm; removed all +OpenGL display list code and options; many code cleanups; New in 1.52: new raster ("bitmap") PostScript/EPS/PDF output formats; new Plugin(Extract) to extract a given component from a diff --git a/doc/gmsh.1 b/doc/gmsh.1 index 55abb91b51..290d6e82b0 100644 --- a/doc/gmsh.1 +++ b/doc/gmsh.1 @@ -1,4 +1,4 @@ -.\" $Id: gmsh.1,v 1.52 2004-05-25 04:10:10 geuzaine Exp $ +.\" $Id: gmsh.1,v 1.53 2004-05-29 10:11:12 geuzaine Exp $ .TH Gmsh 1 "14 June 2003" "Gmsh 1.45" "Gmsh Manual Pages" .UC 4 .\" ******************************************************************** @@ -96,9 +96,6 @@ algorithm is selected. .\" ******************************************************************** .SH POST-PROCESSING OPTIONS .TP 4 -.B \-dl -enable OpenGL display lists. -.TP 4 .B \-noview hide all views at startup. .TP 4 diff --git a/doc/texinfo/command_line.texi b/doc/texinfo/command_line.texi index 5152c8b8c4..03cf4c0f7e 100644 --- a/doc/texinfo/command_line.texi +++ b/doc/texinfo/command_line.texi @@ -51,8 +51,6 @@ display 2D mesh construction interactively @noindent Post-processing options: @ftable @code -@item -dl -enable display lists @item -noview hide all views on startup @item -link int diff --git a/doc/texinfo/opt_general.texi b/doc/texinfo/opt_general.texi index 49a3f94f9a..2751cd6cc4 100644 --- a/doc/texinfo/opt_general.texi +++ b/doc/texinfo/opt_general.texi @@ -36,7 +36,7 @@ Saved in: @code{General.SessionFileName} @item General.TextEditor System command to launch a text editor@* -Default value: @code{"emacs %s &"}@* +Default value: @code{"open -e %s"}@* Saved in: @code{General.OptionsFileName} @item General.TmpFileName @@ -46,7 +46,7 @@ Saved in: @code{General.SessionFileName} @item General.WebBrowser System command to launch a web browser@* -Default value: @code{"if [[ $(ps -e|grep mozilla|grep -v grep) ]]; then mozilla -remote 'openurl(%s)' ; else mozilla %s ; fi &"}@* +Default value: @code{"open %s"}@* Saved in: @code{General.OptionsFileName} @item General.AlphaBlending diff --git a/doc/texinfo/opt_post.texi b/doc/texinfo/opt_post.texi index b229e3dda8..dbe60cd774 100644 --- a/doc/texinfo/opt_post.texi +++ b/doc/texinfo/opt_post.texi @@ -9,11 +9,6 @@ Cycle through views instead of time steps in automatic animation mode@* Default value: @code{0}@* Saved in: @code{General.OptionsFileName} -@item PostProcessing.DisplayLists -Use OpenGL display lists for drawing post-processing views@* -Default value: @code{0}@* -Saved in: @code{General.OptionsFileName} - @item PostProcessing.Link Link post-processing views (0=none, 1,2=changes in visible/all, 3,4=everything in visible/all)@* Default value: @code{0}@* @@ -34,4 +29,9 @@ Apply (non-reversible) smoothing to post-processing view when merged@* Default value: @code{0}@* Saved in: @code{General.OptionsFileName} +@item PostProcessing.VertexArrays +Use OpenGL vertex arrays to draw triangles in post-processing views?@* +Default value: @code{1}@* +Saved in: @code{General.OptionsFileName} + @end ftable -- GitLab