diff --git a/Fltk/GUI.cpp b/Fltk/GUI.cpp index 8d21799c9869505360f80ab80a32451c5367dd79..1e56f3503a7ac2aa82e00544556555beeb98324c 100644 --- a/Fltk/GUI.cpp +++ b/Fltk/GUI.cpp @@ -1,4 +1,4 @@ -// $Id: GUI.cpp,v 1.319 2004-06-30 07:51:07 geuzaine Exp $ +// $Id: GUI.cpp,v 1.320 2004-06-30 16:38:58 geuzaine Exp $ // // Copyright (C) 1997-2004 C. Geuzaine, J.-F. Remacle // @@ -285,11 +285,11 @@ Context_Item menu_mesh[] = { { "1D", (Fl_Callback *)mesh_1d_cb } , { "2D", (Fl_Callback *)mesh_2d_cb } , { "3D", (Fl_Callback *)mesh_3d_cb } , - { "First order", (Fl_Callback *)mesh_degree_cb, (void*)1 } , - { "Second order", (Fl_Callback *)mesh_degree_cb, (void*)2 } , #if defined(HAVE_NETGEN) { "Optimize 3D", (Fl_Callback *)mesh_optimize_cb } , #endif + { "First order", (Fl_Callback *)mesh_degree_cb, (void*)1 } , + { "Second order", (Fl_Callback *)mesh_degree_cb, (void*)2 } , { "Save", (Fl_Callback *)mesh_save_cb } , { NULL } }; diff --git a/Mesh/3D_Mesh_Netgen.cpp b/Mesh/3D_Mesh_Netgen.cpp index b56929e6462f6b1a5bc48b63f5521d8e038e3baa..149e121d4c289bb7088832d43f6887e0cb79b524 100644 --- a/Mesh/3D_Mesh_Netgen.cpp +++ b/Mesh/3D_Mesh_Netgen.cpp @@ -1,4 +1,4 @@ -// $Id: 3D_Mesh_Netgen.cpp,v 1.7 2004-06-30 07:27:19 geuzaine Exp $ +// $Id: 3D_Mesh_Netgen.cpp,v 1.8 2004-06-30 16:38:58 geuzaine Exp $ // // Copyright (C) 1997-2004 C. Geuzaine, J.-F. Remacle // @@ -69,7 +69,8 @@ Netgen::Netgen(Volume *vol, int importVolumeMesh) : _volverts(0), _vol(vol) { // creates Netgen mesh structure - Ng_Init(); + //Ng_Init(); + NgAddOn_Init(); _ngmesh = Ng_NewMesh(); // Get all surface vertices (the same vertex can belong to several @@ -194,6 +195,9 @@ void Netgen::TransferVolumeMesh() { // Gets total number of vertices of Netgen's mesh int nbv = Ng_GetNP(_ngmesh); + + if(!nbv) return; + Vertex **vtable = (Vertex **)Malloc(nbv * sizeof(Vertex*)); // Get existing unmodified surface vertices @@ -276,6 +280,12 @@ int Mesh_Netgen(Volume * v) void Optimize_Netgen(Volume * v) { + // abort of we don't have real volumes (volume is "dirty", or has no + // surface loop w/ oriented surfaces) or if there are no simplices + // to optimize + if(v->Dirty || Extrude_Mesh(v) || !Tree_Nbr(v->Simplexes)) + return; + Msg(STATUS3, "Optimizing volume %d", v->Num); Netgen ng(v, 1); ng.OptimizeVolume(); diff --git a/Netgen/Makefile b/Netgen/Makefile index 29e0c73238cf3840b675e219c0deaf295373cfda..6865e6275beee4321983d765185a1a28c7d60c31 100644 --- a/Netgen/Makefile +++ b/Netgen/Makefile @@ -1,4 +1,4 @@ -# $Id: Makefile,v 1.2 2004-06-28 19:00:22 geuzaine Exp $ +# $Id: Makefile,v 1.3 2004-06-30 16:38:58 geuzaine Exp $ # # Copyright (C) 1997-2004 C. Geuzaine, J.-F. Remacle # @@ -22,7 +22,7 @@ include ../variables LIB = ../lib/libGmshNetgen.a -INCLUDE = -Ilibsrc/include +INCLUDE = -I../Common -Ilibsrc/include -Ilibsrc/interface CFLAGS = ${OPTIM} ${INCLUDE} -DNO_PARALLEL_THREADS SRC = libsrc/opti/linopt.cpp \ diff --git a/Netgen/nglib_addon.cpp b/Netgen/nglib_addon.cpp index 51d379a965d8a599cdac3625a593d0c3a4408d42..f6107330479e412bb0a9365ec78232217105a3a2 100644 --- a/Netgen/nglib_addon.cpp +++ b/Netgen/nglib_addon.cpp @@ -1,10 +1,63 @@ // small addition(s) to the netgen interface library -#include <meshing.hpp> -#include "libsrc/interface/nglib.h" +#include "meshing.hpp" +#include "mystdlib.h" +#include "nglib.h" using namespace netgen; +#include <iostream.h> +#include "Message.h" + +class mystreambuf: public streambuf +{ + int index; + char txt[1024]; + public: + mystreambuf() { + index = 0; + } + int sync(){ + txt[index] = '\0'; + if(!index || + (index == 1 && (txt[0] == '.' || txt[0] == '+' || txt[0] == ' '))){ + // ignore these messages + } + else{ + Msg(INFO, txt); + } + index = 0; + return 0; + } + int overflow(int ch){ + if(index < 1023){ + txt[index] = ch; + if(txt[index] == '\n') txt[index] = ' '; + if(!index && txt[0] == ' '){ + // skip initial spaces + } + else{ + index++; + } + } + return 0; + } +}; + +// replaces the standard Ng_Init +void NgAddOn_Init () +{ + //mycout = &cout; + //myerr = &cerr; + //testout = new ofstream ("test.out"); + + mycout = new ostream(new mystreambuf()); + myerr = new ostream(new mystreambuf()); + testout = new ofstream ("/dev/null"); +} + +// optimizes an existing 3D mesh + Ng_Result NgAddOn_OptimizeVolumeMesh (Ng_Mesh * mesh, Ng_Meshing_Parameters * mp) { Mesh * m = (Mesh*)mesh; diff --git a/Netgen/nglib_addon.h b/Netgen/nglib_addon.h index 9f1f84f51baef8697b14dd28b9c654415061783d..b8e56d32ef3b3ad8cfa32ba98ff55f7eae06343f 100644 --- a/Netgen/nglib_addon.h +++ b/Netgen/nglib_addon.h @@ -1,6 +1,7 @@ #ifndef _NGLIB_ADDON_H_ #define _NGLIB_ADDON_H_ -Ng_Result NgAddOn_OptimizeVolumeMesh (Ng_Mesh * mesh, Ng_Meshing_Parameters * mp); +void NgAddOn_Init(); +Ng_Result NgAddOn_OptimizeVolumeMesh(Ng_Mesh * mesh, Ng_Meshing_Parameters * mp); #endif