diff --git a/Common/DefaultOptions.h b/Common/DefaultOptions.h index 5773fb07ba4d0ab7fe44fadb6c4c22e05b837653..e1f0ddf2993d5fd83945a655acfecadbe079c48a 100644 --- a/Common/DefaultOptions.h +++ b/Common/DefaultOptions.h @@ -1045,8 +1045,8 @@ StringXNumber ViewOptions_Number[] = { { F|O, "PositionY" , opt_view_position1 , 50. , "Vertical position (in pixels) of the upper left corner of the scale or 2D graph" }, - { F|O, "RaisedScalarView" , opt_view_raised_scalar_view , 0. , - "Index of the scalar view raised by the displacement field" }, + { F|O, "RaisedView" , opt_view_raised_view , 0. , + "Index of the view raised by the displacement field" }, { F, "RaiseX" , opt_view_raise0 , 0. , "Elevation of the view along X-axis (in model coordinates)" }, { F, "RaiseY" , opt_view_raise1 , 0. , @@ -1076,7 +1076,7 @@ StringXNumber ViewOptions_Number[] = { "Type of graph (1=3D, 2=2D-space, 3=2D-time)" }, { F|O, "VectorType" , opt_view_vector_type , DRAW_POST_ARROW3D , - "Vector display type (1=segment, 2=arrow, 3=pyramid, 4=3D arrow, 5=displacement, 6=raised scalar view)" }, + "Vector display type (1=segment, 2=arrow, 3=pyramid, 4=3D arrow, 5=displacement, 6=raised view)" }, { F, "Visible" , opt_view_visible , 1. , "Is the view visible?" }, diff --git a/Common/Options.cpp b/Common/Options.cpp index 022e82ed38cae641aa6eaf52029af83cea9dff9b..e8422d65144afb689d11aafad3ebd3fc37f0d097 100644 --- a/Common/Options.cpp +++ b/Common/Options.cpp @@ -1,4 +1,4 @@ -// $Id: Options.cpp,v 1.191 2004-10-20 14:38:56 remacle Exp $ +// $Id: Options.cpp,v 1.192 2004-10-21 17:02:25 geuzaine Exp $ // // Copyright (C) 1997-2004 C. Geuzaine, J.-F. Remacle // @@ -5193,18 +5193,18 @@ double opt_view_alpha_channel(OPT_ARGS_NUM) return v->AlphaChannel; } -double opt_view_raised_scalar_view(OPT_ARGS_NUM) +double opt_view_raised_view(OPT_ARGS_NUM) { GET_VIEW(0.); if(action & GMSH_SET) { - v->RaisedScalarView = (int)val; + v->RaisedView = (int)val; v->Changed = 1; } #if defined(HAVE_FLTK) if(_gui_action_valid(action, num)) - WID->view_value[64]->value(v->RaisedScalarView); + WID->view_value[64]->value(v->RaisedView); #endif - return v->RaisedScalarView; + return v->RaisedView; } double opt_print_format(OPT_ARGS_NUM) diff --git a/Common/Options.h b/Common/Options.h index dc3570b1f7b170b629e1b5da5ad601e856e3d729..a2491f8314bc933f2072734f7ac3b5661e4e3f7c 100644 --- a/Common/Options.h +++ b/Common/Options.h @@ -461,7 +461,7 @@ double opt_view_intervals_type(OPT_ARGS_NUM); double opt_view_saturate_values(OPT_ARGS_NUM); double opt_view_global_zoom(OPT_ARGS_NUM); double opt_view_alpha_channel(OPT_ARGS_NUM); -double opt_view_raised_scalar_view(OPT_ARGS_NUM); +double opt_view_raised_view(OPT_ARGS_NUM); double opt_view_type(OPT_ARGS_NUM); double opt_view_grid(OPT_ARGS_NUM); double opt_view_position0(OPT_ARGS_NUM); diff --git a/Common/Views.cpp b/Common/Views.cpp index 67bd37e8f02e46d184e150be775493c0b638e268..20e13713149de94b2551b2f6b83bb18e727818b5 100644 --- a/Common/Views.cpp +++ b/Common/Views.cpp @@ -1,4 +1,4 @@ -// $Id: Views.cpp,v 1.140 2004-10-20 15:32:59 geuzaine Exp $ +// $Id: Views.cpp,v 1.141 2004-10-21 17:02:25 geuzaine Exp $ // // Copyright (C) 1997-2004 C. Geuzaine, J.-F. Remacle // @@ -662,7 +662,7 @@ void CopyViewOptions(Post_View * src, Post_View * dest) dest->PointType = src->PointType; dest->LineType = src->LineType; dest->Grid = src->Grid; - dest->RaisedScalarView = src->RaisedScalarView; + dest->RaisedView = src->RaisedView; ColorTable_Copy(&src->CT); ColorTable_Paste(&dest->CT); } diff --git a/Common/Views.h b/Common/Views.h index 81ba0e70e5fab8c63b4b37d37a225f66542a74e3..34b4862290180a0c879fad284e9ed7ab718f9d37 100644 --- a/Common/Views.h +++ b/Common/Views.h @@ -165,7 +165,7 @@ class Post_View{ int Boundary, Grid, PointType, LineType; double PointSize, LineWidth; GmshColorTable CT; - int RaisedScalarView; + int RaisedView; // dynamic double (*GVFI) (double min, double max, int nb, int index); diff --git a/Fltk/Callbacks.cpp b/Fltk/Callbacks.cpp index 4bff90e565ae8e36a664e8f7b92d62b4535c18e4..d786bd4125a3760ef1e3fa05057c783429d927ea 100644 --- a/Fltk/Callbacks.cpp +++ b/Fltk/Callbacks.cpp @@ -1,4 +1,4 @@ -// $Id: Callbacks.cpp,v 1.286 2004-10-20 15:32:59 geuzaine Exp $ +// $Id: Callbacks.cpp,v 1.287 2004-10-21 17:02:25 geuzaine Exp $ // // Copyright (C) 1997-2004 C. Geuzaine, J.-F. Remacle // @@ -3427,7 +3427,7 @@ void view_options_ok_cb(CALLBACK_ARGS) double timestep = opt_view_timestep(current, GMSH_GET, 0); double arrow_size = opt_view_arrow_size(current, GMSH_GET, 0); double displacement_factor = opt_view_displacement_factor(current, GMSH_GET, 0); - double raised_scalar_view = opt_view_raised_scalar_view(current, GMSH_GET, 0); + double raised_view = opt_view_raised_view(current, GMSH_GET, 0); double point_size = opt_view_point_size(current, GMSH_GET, 0); double line_width = opt_view_line_width(current, GMSH_GET, 0); double explode = opt_view_explode(current, GMSH_GET, 0); @@ -3708,8 +3708,8 @@ void view_options_ok_cb(CALLBACK_ARGS) opt_view_displacement_factor(i, GMSH_SET, val); val = WID->view_value[64]->value(); - if(force || (val != raised_scalar_view)) - opt_view_raised_scalar_view(i, GMSH_SET, val); + if(force || (val != raised_view)) + opt_view_raised_view(i, GMSH_SET, val); val = WID->view_value[61]->value(); if(force || (val != point_size)) diff --git a/Fltk/GUI.cpp b/Fltk/GUI.cpp index 4ac9ea03659f19aa8b9f6eddf864c0cecd35371f..65e3a029afc50679558e3039b2d945ef26e47519 100644 --- a/Fltk/GUI.cpp +++ b/Fltk/GUI.cpp @@ -1,4 +1,4 @@ -// $Id: GUI.cpp,v 1.366 2004-10-20 15:32:59 geuzaine Exp $ +// $Id: GUI.cpp,v 1.367 2004-10-21 17:02:25 geuzaine Exp $ // // Copyright (C) 1997-2004 C. Geuzaine, J.-F. Remacle // @@ -2612,7 +2612,7 @@ void GUI::create_option_window() {"Pyramid", 0, 0, 0}, {"3D arrow", 0, 0, 0}, {"Displacement", 0, 0, 0}, - {"Raised scalar view", 0, 0, 0}, + {"Raised view", 0, 0, 0}, {0} }; view_choice[2] = new Fl_Choice(L + 2 * WB, 2 * WB + 6 * BH, IW, BH, "Vector display"); @@ -2633,7 +2633,7 @@ void GUI::create_option_window() view_value[63]->step(0.01); view_value[63]->align(FL_ALIGN_RIGHT); - view_value[64] = new Fl_Value_Input(L + 2 * WB, 2 * WB + 9 * BH, IW, BH, "Raised scalar view number"); + view_value[64] = new Fl_Value_Input(L + 2 * WB, 2 * WB + 9 * BH, IW, BH, "Raised view number"); view_value[64]->minimum(0); view_value[64]->maximum(10); view_value[64]->step(1); @@ -2850,7 +2850,7 @@ void GUI::update_view_window(int num) view_value[63]->step(val3/100.); view_value[63]->maximum(val3); - opt_view_raised_scalar_view(num, GMSH_GUI, 0); + opt_view_raised_view(num, GMSH_GUI, 0); opt_view_arrow_location(num, GMSH_GUI, 0); //opt_view_tensor_type(num, GMSH_GUI, 0); view_push_butt[0]->callback(view_arrow_param_cb, (void*)num); diff --git a/Graphics/Post.cpp b/Graphics/Post.cpp index 1387a7b83396dc36b1a1b0f3d724300e63401db8..09b9a23bae92e08389921a14a173ae064bcdf1a1 100644 --- a/Graphics/Post.cpp +++ b/Graphics/Post.cpp @@ -1,4 +1,4 @@ -// $Id: Post.cpp,v 1.79 2004-10-11 19:18:59 geuzaine Exp $ +// $Id: Post.cpp,v 1.80 2004-10-21 17:02:26 geuzaine Exp $ // // Copyright (C) 1997-2004 C. Geuzaine, J.-F. Remacle // @@ -243,7 +243,7 @@ void Draw_List(Post_View * v, double ValMin, double ValMax, nb = List_Nbr(list) / nbelm; v->ViewForDisplacement = - (Post_View*)List_Pointer_Test(CTX.post.list, v->RaisedScalarView); + (Post_View*)List_Pointer_Test(CTX.post.list, v->RaisedView); if(v->Light && v->SmoothNormals && v->Changed) { Msg(DEBUG, "Preprocessing of normals in View[%d]", v->Index); diff --git a/Graphics/PostElement.cpp b/Graphics/PostElement.cpp index 074f4578ac8da8fdc38ec8aeb2699a155a2c181f..9789b1d852b31e47b9b0b4e0ff4ff909e7a61fac 100644 --- a/Graphics/PostElement.cpp +++ b/Graphics/PostElement.cpp @@ -1,4 +1,4 @@ -// $Id: PostElement.cpp,v 1.44 2004-10-11 19:18:59 geuzaine Exp $ +// $Id: PostElement.cpp,v 1.45 2004-10-21 17:02:26 geuzaine Exp $ // // Copyright (C) 1997-2004 C. Geuzaine, J.-F. Remacle // @@ -862,7 +862,8 @@ void Draw_ScalarPyramid(Post_View * View, int preproNormals, } -int GetScalarDataFromOtherView(int type, int nbnod, Post_View *v, double *d) +int GetDataFromOtherView(int type, int nbnod, Post_View *v, int *nbcomp, + double *norm, double **vals, int *vectype) { static int error1 = -1; static int error2 = -1; @@ -877,17 +878,49 @@ int GetScalarDataFromOtherView(int type, int nbnod, Post_View *v, double *d) return 0; } - int nbelm = 0; + int nbelm = 0, comp = 0; List_T *l; switch (type) { - case POINT: if(v->NbVP == v2->NbSP){ nbelm = v2->NbSP; l = v2->SP; } break; - case LINE: if(v->NbVL == v2->NbSL){ nbelm = v2->NbSL; l = v2->SL; } break; - case TRIANGLE: if(v->NbVT == v2->NbST){ nbelm = v2->NbST; l = v2->ST; } break; - case QUADRANGLE: if(v->NbVQ == v2->NbSQ){ nbelm = v2->NbSQ; l = v2->SQ; } break; - case TETRAHEDRON: if(v->NbVS == v2->NbSS){ nbelm = v2->NbSS; l = v2->SS; } break; - case HEXAHEDRON: if(v->NbVH == v2->NbSH){ nbelm = v2->NbSH; l = v2->SH; } break; - case PRISM: if(v->NbVI == v2->NbSI){ nbelm = v2->NbSI; l = v2->SI; } break; - case PYRAMID: if(v->NbVY == v2->NbSY){ nbelm = v2->NbSY; l = v2->SY; } break; + case POINT: + if(v->NbVP == v2->NbSP){ nbelm = v2->NbSP; l = v2->SP; comp = 1; } + else if(v->NbVP == v2->NbVP){ nbelm = v2->NbVP; l = v2->VP; comp = 3; } + else if(v->NbVP == v2->NbTP){ nbelm = v2->NbTP; l = v2->TP; comp = 9; } + break; + case LINE: + if(v->NbVL == v2->NbSL){ nbelm = v2->NbSL; l = v2->SL; comp = 1; } + else if(v->NbVL == v2->NbVL){ nbelm = v2->NbVL; l = v2->VL; comp = 3; } + else if(v->NbVL == v2->NbTL){ nbelm = v2->NbTL; l = v2->TL; comp = 9; } + break; + case TRIANGLE: + if(v->NbVT == v2->NbST){ nbelm = v2->NbST; l = v2->ST; comp = 1; } + else if(v->NbVT == v2->NbVT){ nbelm = v2->NbVT; l = v2->VT; comp = 3; } + else if(v->NbVT == v2->NbTT){ nbelm = v2->NbTT; l = v2->TT; comp = 9; } + break; + case QUADRANGLE: + if(v->NbVQ == v2->NbSQ){ nbelm = v2->NbSQ; l = v2->SQ; comp = 1; } + else if(v->NbVQ == v2->NbVQ){ nbelm = v2->NbVQ; l = v2->VQ; comp = 3; } + else if(v->NbVQ == v2->NbTQ){ nbelm = v2->NbTQ; l = v2->TQ; comp = 9; } + break; + case TETRAHEDRON: + if(v->NbVS == v2->NbSS){ nbelm = v2->NbSS; l = v2->SS; comp = 1; } + else if(v->NbVS == v2->NbVS){ nbelm = v2->NbVS; l = v2->VS; comp = 3; } + else if(v->NbVS == v2->NbTS){ nbelm = v2->NbTS; l = v2->TS; comp = 9; } + break; + case HEXAHEDRON: + if(v->NbVH == v2->NbSH){ nbelm = v2->NbSH; l = v2->SH; comp = 1; } + else if(v->NbVH == v2->NbVH){ nbelm = v2->NbVH; l = v2->VH; comp = 3; } + else if(v->NbVH == v2->NbTH){ nbelm = v2->NbTH; l = v2->TH; comp = 9; } + break; + case PRISM: + if(v->NbVI == v2->NbSI){ nbelm = v2->NbSI; l = v2->SI; comp = 1; } + else if(v->NbVI == v2->NbVI){ nbelm = v2->NbVI; l = v2->VI; comp = 3; } + else if(v->NbVI == v2->NbTI){ nbelm = v2->NbTI; l = v2->TI; comp = 9; } + break; + case PYRAMID: + if(v->NbVY == v2->NbSY){ nbelm = v2->NbSY; l = v2->SY; comp = 1; } + else if(v->NbVY == v2->NbVY){ nbelm = v2->NbVY; l = v2->VY; comp = 3; } + else if(v->NbVY == v2->NbTY){ nbelm = v2->NbTY; l = v2->TY; comp = 9; } + break; } if(!nbelm || num < 0 || v2->NbTimeStep != v->NbTimeStep){ @@ -899,10 +932,21 @@ int GetScalarDataFromOtherView(int type, int nbnod, Post_View *v, double *d) } int nb = List_Nbr(l) / nbelm; - double *val = (double *)List_Pointer_Fast(l, num * nb + 3 * nbnod); - for(int k = 0; k < nbnod; k++) - d[k] = val[nbnod * v->TimeStep + k]; + double *vv = (double *)List_Pointer(l, num * nb + 3 * nbnod + + comp * nbnod * v->TimeStep); + for(int k = 0; k < nbnod; k++){ + if(comp == 1) + norm[k] = vv[k]; + else if(comp == 3) + norm[k] = sqrt(vv[3*k] * vv[3*k] + + vv[3*k+1] * vv[3*k+1] + + vv[3*k+2] * vv[3*k+2]); + else if(comp == 9) + norm[k] = ComputeVonMises(vv + 9*k); + } + *vals = vv; + switch (v->RangeType) { case DRAW_POST_RANGE_DEFAULT: v->MinForDisplacement = v2->Min; @@ -924,6 +968,15 @@ int GetScalarDataFromOtherView(int type, int nbnod, Post_View *v, double *d) break; } + if(comp == 3){ + if(v2->VectorType == DRAW_POST_DISPLACEMENT_EXTERNAL) + *vectype = DRAW_POST_ARROW3D; // avoid infinite recursion + else + *vectype = v2->VectorType; + } + + *nbcomp = comp; + return 1; } @@ -935,7 +988,7 @@ void Draw_VectorElement(int type, Post_View * View, int preproNormals, { int nbnod = 0; double fact, xx[8], yy[8], zz[8], xc = 0., yc = 0., zc = 0.; - double Val[8][3], d[8]; + double Val[8][3], norm[8]; double dx = 0., dy = 0., dz = 0., dd; char Num[100]; @@ -954,11 +1007,13 @@ void Draw_VectorElement(int type, Post_View * View, int preproNormals, Val[k][0] = V[3 * nbnod * View->TimeStep + 3 * k]; Val[k][1] = V[3 * nbnod * View->TimeStep + 3 * k + 1]; Val[k][2] = V[3 * nbnod * View->TimeStep + 3 * k + 2]; - d[k] = sqrt(Val[k][0] * Val[k][0] + Val[k][1] * Val[k][1] + Val[k][2] * Val[k][2]); + norm[k] = sqrt(Val[k][0] * Val[k][0] + Val[k][1] * Val[k][1] + Val[k][2] * Val[k][2]); } + double *ext_vals; + int nbcomp = 1, ext_vectype = 0; if(View->VectorType == DRAW_POST_DISPLACEMENT_EXTERNAL){ - GetScalarDataFromOtherView(type, nbnod, View, d); + GetDataFromOtherView(type, nbnod, View, &nbcomp, norm, &ext_vals, &ext_vectype); ValMin = View->MinForDisplacement; ValMax = View->MaxForDisplacement; } @@ -966,88 +1021,134 @@ void Draw_VectorElement(int type, Post_View * View, int preproNormals, double Raise[3][8]; for(int i = 0; i < 3; i++) for(int k = 0; k < nbnod; k++) - Raise[i][k] = View->Raise[i] * d[k]; + Raise[i][k] = View->Raise[i] * norm[k]; if(View->VectorType == DRAW_POST_DISPLACEMENT || View->VectorType == DRAW_POST_DISPLACEMENT_EXTERNAL){ - + fact = View->DisplacementFactor; for(int k = 0; k < nbnod; k++) { xx[k] = X[k] + fact * Val[k][0] + Raise[0][k]; yy[k] = Y[k] + fact * Val[k][1] + Raise[1][k]; zz[k] = Z[k] + fact * Val[k][2] + Raise[2][k]; } - + int ts = View->TimeStep; View->TimeStep = 0; + int vt = View->VectorType; + View->VectorType = ext_vectype; + switch (type) { case POINT: - Draw_ScalarPoint(View, preproNormals, ValMin, ValMax, xx, yy, zz, d); - if(ts) { //draw trajectory - if(View->LineType) { - double dx2, dy2, dz2, XX[2], YY[2], ZZ[2]; - // warning, warning... - Raise[0][1] = Raise[0][0]; - Raise[1][1] = Raise[1][0]; - Raise[2][1] = Raise[2][0]; - for(int j = 0; j < ts; j++) { - dx = V[3 * (ts - j)]; - dy = V[3 * (ts - j) + 1]; - dz = V[3 * (ts - j) + 2]; - dx2 = V[3 * (ts - j - 1)]; - dy2 = V[3 * (ts - j - 1) + 1]; - dz2 = V[3 * (ts - j - 1) + 2]; - dd = sqrt(dx * dx + dy * dy + dz * dz); - // not perfect... - PaletteContinuous(View, ValMin, ValMax, dd); - XX[0] = X[0] + fact * dx; - XX[1] = X[0] + fact * dx2; - YY[0] = Y[0] + fact * dy; - YY[1] = Y[0] + fact * dy2; - ZZ[0] = Z[0] + fact * dz; - ZZ[1] = Z[0] + fact * dz2; - Draw_Line(View->LineType, View->LineWidth, XX, YY, ZZ, Raise, View->Light); - } - } - else { - glBegin(GL_LINE_STRIP); - for(int j = 0; j < ts + 1; j++) { - dx = V[3 * (ts - j)]; - dy = V[3 * (ts - j) + 1]; - dz = V[3 * (ts - j) + 2]; - dd = sqrt(dx * dx + dy * dy + dz * dz); - PaletteContinuous(View, ValMin, ValMax, dd); - glVertex3d(X[0] + fact * dx + Raise[0][0], - Y[0] + fact * dy + Raise[1][0], - Z[0] + fact * dz + Raise[2][0]); - } - glEnd(); - } + if(nbcomp == 1){ + Draw_ScalarPoint(View, preproNormals, ValMin, ValMax, xx, yy, zz, norm); + if(ts) { //draw trajectory + if(View->LineType) { + double dx2, dy2, dz2, XX[2], YY[2], ZZ[2]; + // warning, warning... + Raise[0][1] = Raise[0][0]; + Raise[1][1] = Raise[1][0]; + Raise[2][1] = Raise[2][0]; + for(int j = 0; j < ts; j++) { + dx = V[3 * (ts - j)]; + dy = V[3 * (ts - j) + 1]; + dz = V[3 * (ts - j) + 2]; + dx2 = V[3 * (ts - j - 1)]; + dy2 = V[3 * (ts - j - 1) + 1]; + dz2 = V[3 * (ts - j - 1) + 2]; + dd = sqrt(dx * dx + dy * dy + dz * dz); + // not perfect... + PaletteContinuous(View, ValMin, ValMax, dd); + XX[0] = X[0] + fact * dx; + XX[1] = X[0] + fact * dx2; + YY[0] = Y[0] + fact * dy; + YY[1] = Y[0] + fact * dy2; + ZZ[0] = Z[0] + fact * dz; + ZZ[1] = Z[0] + fact * dz2; + Draw_Line(View->LineType, View->LineWidth, XX, YY, ZZ, Raise, View->Light); + } + } + else { + glBegin(GL_LINE_STRIP); + for(int j = 0; j < ts + 1; j++) { + dx = V[3 * (ts - j)]; + dy = V[3 * (ts - j) + 1]; + dz = V[3 * (ts - j) + 2]; + dd = sqrt(dx * dx + dy * dy + dz * dz); + PaletteContinuous(View, ValMin, ValMax, dd); + glVertex3d(X[0] + fact * dx + Raise[0][0], + Y[0] + fact * dy + Raise[1][0], + Z[0] + fact * dz + Raise[2][0]); + } + glEnd(); + } + } } + else if(nbcomp == 3) + Draw_VectorPoint(View, preproNormals, ValMin, ValMax, xx, yy, zz, ext_vals); + else if(nbcomp == 9) + Draw_TensorPoint(View, preproNormals, ValMin, ValMax, xx, yy, zz, ext_vals); break; case LINE: - Draw_ScalarLine(View, preproNormals, ValMin, ValMax, xx, yy, zz, d); + if(nbcomp == 1) + Draw_ScalarLine(View, preproNormals, ValMin, ValMax, xx, yy, zz, norm); + else if(nbcomp == 3) + Draw_VectorLine(View, preproNormals, ValMin, ValMax, xx, yy, zz, ext_vals); + else if(nbcomp == 9) + Draw_TensorLine(View, preproNormals, ValMin, ValMax, xx, yy, zz, ext_vals); break; case TRIANGLE: - Draw_ScalarTriangle(View, preproNormals, ValMin, ValMax, xx, yy, zz, d); + if(nbcomp == 1) + Draw_ScalarTriangle(View, preproNormals, ValMin, ValMax, xx, yy, zz, norm); + else if(nbcomp == 3) + Draw_VectorTriangle(View, preproNormals, ValMin, ValMax, xx, yy, zz, ext_vals); + else if(nbcomp == 9) + Draw_TensorTriangle(View, preproNormals, ValMin, ValMax, xx, yy, zz, ext_vals); break; case TETRAHEDRON: - Draw_ScalarTetrahedron(View, preproNormals, ValMin, ValMax, xx, yy, zz, d); + if(nbcomp == 1) + Draw_ScalarTetrahedron(View, preproNormals, ValMin, ValMax, xx, yy, zz, norm); + else if(nbcomp == 3) + Draw_VectorTetrahedron(View, preproNormals, ValMin, ValMax, xx, yy, zz, ext_vals); + else if(nbcomp == 9) + Draw_TensorTetrahedron(View, preproNormals, ValMin, ValMax, xx, yy, zz, ext_vals); break; case QUADRANGLE: - Draw_ScalarQuadrangle(View, preproNormals, ValMin, ValMax, xx, yy, zz, d); + if(nbcomp == 1) + Draw_ScalarQuadrangle(View, preproNormals, ValMin, ValMax, xx, yy, zz, norm); + else if(nbcomp == 3) + Draw_VectorQuadrangle(View, preproNormals, ValMin, ValMax, xx, yy, zz, ext_vals); + else if(nbcomp == 9) + Draw_TensorQuadrangle(View, preproNormals, ValMin, ValMax, xx, yy, zz, ext_vals); break; case HEXAHEDRON: - Draw_ScalarHexahedron(View, preproNormals, ValMin, ValMax, xx, yy, zz, d); + if(nbcomp == 1) + Draw_ScalarHexahedron(View, preproNormals, ValMin, ValMax, xx, yy, zz, norm); + else if(nbcomp == 3) + Draw_VectorHexahedron(View, preproNormals, ValMin, ValMax, xx, yy, zz, ext_vals); + else if(nbcomp == 9) + Draw_TensorHexahedron(View, preproNormals, ValMin, ValMax, xx, yy, zz, ext_vals); break; case PRISM: - Draw_ScalarPrism(View, preproNormals, ValMin, ValMax, xx, yy, zz, d); + if(nbcomp == 1) + Draw_ScalarPrism(View, preproNormals, ValMin, ValMax, xx, yy, zz, norm); + else if(nbcomp == 3) + Draw_VectorPrism(View, preproNormals, ValMin, ValMax, xx, yy, zz, ext_vals); + else if(nbcomp == 9) + Draw_TensorPrism(View, preproNormals, ValMin, ValMax, xx, yy, zz, ext_vals); break; case PYRAMID: - Draw_ScalarPyramid(View, preproNormals, ValMin, ValMax, xx, yy, zz, d); + if(nbcomp == 1) + Draw_ScalarPyramid(View, preproNormals, ValMin, ValMax, xx, yy, zz, norm); + else if(nbcomp == 3) + Draw_VectorPyramid(View, preproNormals, ValMin, ValMax, xx, yy, zz, ext_vals); + else if(nbcomp == 9) + Draw_TensorPyramid(View, preproNormals, ValMin, ValMax, xx, yy, zz, ext_vals); break; } + View->TimeStep = ts; + View->VectorType = vt; return; } @@ -1107,24 +1208,24 @@ void Draw_VectorElement(int type, Post_View * View, int preproNormals, } else { for(int k = 0; k < nbnod; k++) { - if(d[k] != 0.0 && d[k] >= ValMin && d[k] <= ValMax) { + if(norm[k] != 0.0 && norm[k] >= ValMin && norm[k] <= ValMax) { if(View->IntervalsType == DRAW_POST_CONTINUOUS) - PaletteContinuous(View, ValMin, ValMax, d[k]); + PaletteContinuous(View, ValMin, ValMax, norm[k]); else PaletteDiscrete(View, View->NbIso, - View->GIFV(ValMin, ValMax, View->NbIso, d[k])); + View->GIFV(ValMin, ValMax, View->NbIso, norm[k])); fact = CTX.pixel_equiv_x / CTX.s[0] * View->ArrowSize / ValMax; if(View->ScaleType == DRAW_POST_LOGARITHMIC && ValMin > 0) { - Val[k][0] /= d[k]; - Val[k][1] /= d[k]; - Val[k][2] /= d[k]; - d[k] = log10(d[k] / ValMin); - Val[k][0] *= d[k]; - Val[k][1] *= d[k]; - Val[k][2] *= d[k]; + Val[k][0] /= norm[k]; + Val[k][1] /= norm[k]; + Val[k][2] /= norm[k]; + norm[k] = log10(norm[k] / ValMin); + Val[k][0] *= norm[k]; + Val[k][1] *= norm[k]; + Val[k][2] *= norm[k]; } for(int i = 0; i < 3; i++) - Raise[i][0] = View->Raise[i] * d[k]; + Raise[i][0] = View->Raise[i] * norm[k]; Draw_Vector(View->VectorType, View->IntervalsType != DRAW_POST_ISO, View->ArrowRelHeadRadius, View->ArrowRelStemLength, View->ArrowRelStemRadius, X[k], Y[k], Z[k], diff --git a/doc/VERSIONS b/doc/VERSIONS index 9a6a379b3efed8e68a47dd25a89085cd57198af3..6e4385858c53bc449a9ca13de1a66f9234418e29 100644 --- a/doc/VERSIONS +++ b/doc/VERSIONS @@ -1,4 +1,7 @@ -$Id: VERSIONS,v 1.255 2004-10-17 01:54:16 geuzaine Exp $ +$Id: VERSIONS,v 1.256 2004-10-21 17:02:27 geuzaine Exp $ + +New since 1.56: generalized 'raised view' for displacement maps of +arbitrary view types; new adaptive high order visualization mode; New in 1.56: new post-processing option to draw a scalar view raised by a displacement view without using Plugin(DisplacementRaise) (makes