Skip to content
Snippets Groups Projects
Commit 67f73aea authored by Christophe Geuzaine's avatar Christophe Geuzaine
Browse files

polish

parent b865bc38
No related branches found
No related tags found
No related merge requests found
......@@ -110,12 +110,11 @@ StringXString MeshOptions_String[] = {
} ;
StringXString SolverOptions_String[] = {
{ F|O, "SocketName" , opt_solver_socket_name ,
#if defined(WIN32) && !defined(__CYGWIN__)
// use TCP/IP sockets by default on "pure" Windows
{ F|O, "SocketName" , opt_solver_socket_name , "127.0.0.1:44122" ,
"127.0.0.1:44122" , // use TCP/IP sockets by default on "pure" Windows
#else
// use Unix sockets by default otherwise
{ F|O, "SocketName" , opt_solver_socket_name , ".gmshsock" ,
".gmshsock" , // otherwise use Unix sockets by default
#endif
"Name of socket (TCP/IP if it contains the `:' character, UNIX otherwise)" },
......@@ -839,7 +838,12 @@ StringXNumber GeometryOptions_Number[] = {
StringXNumber MeshOptions_Number[] = {
{ F|O, "Algorithm" , opt_mesh_algo2d , DELAUNAY_ISO ,
"2D mesh algorithm (1=isotropic, 2=anisotropic, 3=triangle)" },
{ F|O, "Algorithm3D" , opt_mesh_algo3d , DELAUNAY_ISO /* FRONTAL_NETGEN */ ,
{ F|O, "Algorithm3D" , opt_mesh_algo3d ,
#if defined(HAVE_TETGEN)
DELAUNAY_ISO,
#else
FRONTAL_NETGEN,
#endif
"3D mesh algorithm (1=isotropic, 4=netgen, 5=tetgen)" },
{ F|O, "AngleSmoothNormals" , opt_mesh_angle_smooth_normals , 30.0 ,
"Threshold angle below which normals are not smoothed" },
......
// $Id: DivideAndConquer.cpp,v 1.7 2006-12-01 16:16:50 remacle Exp $
// $Id: DivideAndConquer.cpp,v 1.8 2007-01-08 16:42:42 geuzaine Exp $
//
// Copyright (C) 1997-2007 C. Geuzaine, J.-F. Remacle
//
......@@ -22,33 +22,22 @@
/*
A L G O R I T H M E D I V I D E A N D C O N Q U E R
le noeud de cette methode est de pouvoir fusionner
deux triangulations de Delaunay en une seule (routine merge)
on procede alors recursivement en separant les points en deux
groupes puis en separant les groupes en 2 ... jusqu'a n'obtenir
que 1 2 ou 3 points (la triangulation est alors triviale)
le noeud de cette methode est de pouvoir fusionner deux
triangulations de Delaunay en une seule (routine merge) on procede
alors recursivement en separant les points en deux groupes puis en
separant les groupes en 2 ... jusqu'a n'obtenir que 1 2 ou 3 points
(la triangulation est alors triviale)
Dans le mailleur, on utilise cet algorithme pour construire
le maillage initial
Dans le mailleur, on utilise cet algorithme pour construire le
maillage initial
!!! il faut PERTURBER les points d'une faible valeur aleatoire
pour eviter d'avoir 3 points alignes ou 4 points cocycliques !!!
doc : structure contenant la triangulation
!!! il faut PERTURBER les points d'une faible valeur aleatoire pour
eviter d'avoir 3 points alignes ou 4 points cocycliques !!!
*/
#include "Gmsh.h"
#include "Numeric.h"
#include "DivideAndConquer.h"
#include "Context.h"
#define EXTERN 1
#define INTERN 2
#define NOTTOLINK 1
#define TOLINK 2
extern Context_T CTX;
static PointRecord *pPointArray;
......@@ -114,8 +103,10 @@ int Is_left_of(PointNumero x, PointNumero y, PointNumero check)
double pa[2] = {(double)pPointArray[x].where.h, (double)pPointArray[x].where.v};
double pb[2] = {(double)pPointArray[y].where.h, (double)pPointArray[y].where.v};
double pc[2] = {(double)pPointArray[check].where.h, (double)pPointArray[check].where.v};
// we use robust predicates here
double result = gmsh::orient2d(pa, pb, pc);
return result > 0;
}
......@@ -129,8 +120,8 @@ Segment LowerCommonTangent(DT vl, DT vr)
PointNumero x, y, z, z1, z2, temp;
Segment s;
x = vl.end; /* vu le tri, c'est le point le + a droite */
y = vr.begin; /* idem, le + a gauche */
x = vl.end; // vu le tri, c'est le point le + a droite
y = vr.begin; // idem, le + a gauche
z = First(y);
z1 = First(x);
z2 = Predecessor(x, z1);
......@@ -158,8 +149,8 @@ Segment UpperCommonTangent(DT vl, DT vr)
PointNumero x, y, z, z1, z2, temp;
Segment s;
x = vl.end; /* vu le tri, c'est le point le + a droite */
y = vr.begin; /* idem, le + a gauche */
x = vl.end; // vu le tri, c'est le point le + a droite
y = vr.begin; // idem, le + a gauche
z = First(y);
z1 = First(x);
z2 = Predecessor(y, z);
......@@ -182,13 +173,12 @@ Segment UpperCommonTangent(DT vl, DT vr)
}
}
/* return 1 if the point k is NOT in the circumcircle of triangle
hij */
// return 1 if the point k is NOT in the circumcircle of triangle hij
int Qtest(PointNumero h, PointNumero i, PointNumero j, PointNumero k)
{
if((h == i) && (h == j) && (h == k)) {
Msg(GERROR, "3 identical points in Qtest");
return 0; /* returning 1 will cause looping for ever */
return 0;
}
double pa[2] = {(double)pPointArray[h].where.h, (double)pPointArray[h].where.v};
......@@ -210,8 +200,8 @@ int merge(DT vl, DT vr)
bt = LowerCommonTangent(vl, vr);
ut = UpperCommonTangent(vl, vr);
l = bt.from; /* left endpoint of BT */
r = bt.to; /* right endpoint of BT */
l = bt.from; // left endpoint of BT
r = bt.to; // right endpoint of BT
while((l != ut.from) || (r != ut.to)) {
a = b = 0;
......@@ -296,20 +286,20 @@ DT recur_trig(PointNumero left, PointNumero right)
dt.begin = left;
dt.end = right;
n = right - left + 1; /* nombre de points a triangulariser */
n = right - left + 1; // nombre de points a triangulariser
switch (n) {
case 0:
case 1:
/* 0 ou 1 points -> rien a faire */
// 0 ou 1 points -> rien a faire
break;
case 2: /* deux points : cas trivial */
case 2: // deux points : cas trivial
Insert(left, right);
FixFirst(left, right);
FixFirst(right, left);
break;
case 3: /* trois points : cas trivial */
case 3: // trois points : cas trivial
Insert(left, right);
Insert(left, left + 1);
Insert(left + 1, right);
......@@ -325,10 +315,9 @@ DT recur_trig(PointNumero left, PointNumero right)
}
break;
default: /* plus de trois points : cas recursif */
default: // plus de trois points : cas recursif
m = (left + right) >> 1;
if(!merge(recur_trig(left, m), recur_trig(m + 1, right)))
break;
}
return dt;
......@@ -347,8 +336,8 @@ int comparePoints(const void *i, const void *j)
return (x < 0.) ? -1 : 1;
}
/* this fonction builds the delaunay triangulation and the voronoi
for a window. All error handling is done here. */
// this fonction builds the delaunay triangulation and the voronoi for
// a window. All error handling is done here
int DelaunayAndVoronoi(DocPeek doc)
{
pPointArray = doc->points;
......@@ -362,8 +351,8 @@ int DelaunayAndVoronoi(DocPeek doc)
return 1;
}
/* This routine insert the point 'newPoint' in the list dlist,
respecting the clock-wise orientation. */
// This routine insert the point 'newPoint' in the list dlist,
// respecting the clock-wise orientation
int DListInsert(DListRecord ** dlist, MPoint center, PointNumero newPoint)
{
DListRecord *p, *newp;
......@@ -386,18 +375,19 @@ int DListInsert(DListRecord ** dlist, MPoint center, PointNumero newPoint)
Succ(newp) = *dlist;
return 1;
}
/* If we are here, the double-linked circular list has 2 or more
elements, so we have to calculate where to put the new one. */
// If we are here, the double-linked circular list has 2 or more
// elements, so we have to calculate where to put the new one
p = *dlist;
first = p->point_num;
/* first, compute polar coord. of the first point. */
// first, compute polar coord. of the first point
yy = (double)(pPointArray[first].where.v - center.v);
xx = (double)(pPointArray[first].where.h - center.h);
alpha1 = atan2(yy, xx);
/* compute polar coord of the point to insert. */
// compute polar coord of the point to insert
yy = (double)(pPointArray[newPoint].where.v - center.v);
xx = (double)(pPointArray[newPoint].where.h - center.h);
beta = atan2(yy, xx) - alpha1;
......@@ -420,20 +410,16 @@ int DListInsert(DListRecord ** dlist, MPoint center, PointNumero newPoint)
p = Succ(p);
} while(p != *dlist);
/* never here! */
// never here!
return 0;
}
// This routine inserts the point 'a' in the adjency list of 'b' and
// the point 'b' in the adjency list of 'a'
int Insert(PointNumero a, PointNumero b)
{
int rslt;
/* This routine inserts the point 'a' in the adjency list of 'b' and
the point 'b' in the adjency list of 'a'. */
rslt = DListInsert(&pPointArray[a].adjacent, pPointArray[a].where, b);
int rslt = DListInsert(&pPointArray[a].adjacent, pPointArray[a].where, b);
rslt &= DListInsert(&pPointArray[b].adjacent, pPointArray[b].where, a);
return rslt;
}
......@@ -469,21 +455,16 @@ int DListDelete(DListPeek * dlist, PointNumero oldPoint)
return 0;
}
/* This routine removes the point 'a' in the adjency list of 'b' and
the point 'b' in the adjency list of 'a'. */
// This routine removes the point 'a' in the adjency list of 'b' and
// the point 'b' in the adjency list of 'a'
int Delete(PointNumero a, PointNumero b)
{
int rslt;
rslt = DListDelete(&pPointArray[a].adjacent, b);
int rslt = DListDelete(&pPointArray[a].adjacent, b);
rslt &= DListDelete(&pPointArray[b].adjacent, a);
return rslt;
}
/* compte les points sur le polygone convexe */
// compte les points sur le polygone convexe
int CountPointsOnHull(int n, PointRecord * pPointArray)
{
PointNumero p, p2, temp;
......@@ -541,11 +522,10 @@ void filldel(Delaunay * deladd, int aa, int bb, int cc,
deladd->v.voisin3 = NULL;
}
/* Convertir les listes d'adjacence en triangles */
// Convertir les listes d'adjacence en triangles
int Conversion(DocPeek doc)
{
/* on suppose que n >= 3 gPointArray est suppose OK. */
// on suppose que n >= 3. gPointArray est suppose OK.
Striangle *striangle;
int n, i, j;
......@@ -559,7 +539,7 @@ int Conversion(DocPeek doc)
striangle = (Striangle *) Malloc(n * sizeof(Striangle));
count2 = (int)CountPointsOnHull(n, doc->points);
/* nombre de triangles que l'on doit obtenir */
// nombre de triangles que l'on doit obtenir
count2 = 2 * (n - 1) - count2;
if(doc->delaunay)
......@@ -568,14 +548,15 @@ int Conversion(DocPeek doc)
doc->delaunay = (Delaunay *) Malloc(2 * count2 * sizeof(Delaunay));
for(i = 0; i < n; i++) {
/* on cree une liste de points connectes au point i (t) + nombre de points (t_length) */
striangle[i].t =
ConvertDlistToArray(&gPointArray[i].adjacent, &striangle[i].t_length);
// on cree une liste de points connectes au point i (t) + nombre
// de points (t_length)
striangle[i].t = ConvertDlistToArray(&gPointArray[i].adjacent,
&striangle[i].t_length);
striangle[i].info = NULL;
striangle[i].info_length = 0;
}
/* on balaye les noeuds de gauche a droite -> on cree les triangles */
// on balaye les noeuds de gauche a droite -> on cree les triangles
count = 0;
for(i = 0; i < n; i++) {
for(j = 0; j < striangle[i].t_length; j++) {
......@@ -597,8 +578,7 @@ int Conversion(DocPeek doc)
return 1;
}
/* Cette routine efface toutes les listes d'adjacence du pPointArray. */
// Cette routine efface toutes les listes d'adjacence du pPointArray
void remove_all_dlist(int n, PointRecord * pPointArray)
{
int i;
......
// $Id: CutMap.cpp,v 1.51 2006-11-27 22:22:32 geuzaine Exp $
// $Id: CutMap.cpp,v 1.52 2007-01-08 16:42:42 geuzaine Exp $
//
// Copyright (C) 1997-2007 C. Geuzaine, J.-F. Remacle
//
......@@ -176,5 +176,3 @@ Post_View *GMSH_CutMapPlugin::execute(Post_View * v)
return GMSH_LevelsetPlugin::execute(v1);
}
// $Id: CutPlane.cpp,v 1.50 2006-11-27 22:22:32 geuzaine Exp $
// $Id: CutPlane.cpp,v 1.51 2007-01-08 16:42:42 geuzaine Exp $
//
// Copyright (C) 1997-2007 C. Geuzaine, J.-F. Remacle
//
......@@ -176,20 +176,18 @@ double GMSH_CutPlanePlugin::levelset(double x, double y, double z, double val) c
CutPlaneOptions_Number[2].def * z + CutPlaneOptions_Number[3].def;
}
bool GMSH_CutPlanePlugin::geometrical_filter ( Double_Matrix * geometrical_nodes_positions ) const
bool GMSH_CutPlanePlugin::geometrical_filter(Double_Matrix *geometrical_nodes_positions) const
{
const double l0 = levelset((*geometrical_nodes_positions)(0,0),
(*geometrical_nodes_positions)(0,1),
(*geometrical_nodes_positions)(0,2),1);
for (int i=1;i<geometrical_nodes_positions->size1();i++)
if (levelset((*geometrical_nodes_positions)(i,0),
(*geometrical_nodes_positions)(i,1),
(*geometrical_nodes_positions)(i,2),1) * l0 < 0) return true;
return false;
const double l0 = levelset((*geometrical_nodes_positions)(0,0),
(*geometrical_nodes_positions)(0,1),
(*geometrical_nodes_positions)(0,2),1);
for (int i=1;i<geometrical_nodes_positions->size1();i++)
if (levelset((*geometrical_nodes_positions)(i,0),
(*geometrical_nodes_positions)(i,1),
(*geometrical_nodes_positions)(i,2),1) * l0 < 0) return true;
return false;
}
Post_View *GMSH_CutPlanePlugin::execute(Post_View * v)
{
int iView = (int)CutPlaneOptions_Number[7].def;
......@@ -205,11 +203,11 @@ Post_View *GMSH_CutPlanePlugin::execute(Post_View * v)
_targetError = CutPlaneOptions_Number[6].def;
if(iView < 0)
iView = v ? v->Index : 0;
iView = v ? v->Index : 0;
if(!List_Pointer_Test(CTX.post.list, iView)) {
Msg(GERROR, "View[%d] does not exist", iView);
return v;
Msg(GERROR, "View[%d] does not exist", iView);
return v;
}
Post_View *v1 = *(Post_View **)List_Pointer(CTX.post.list, iView);
......
......@@ -52,7 +52,10 @@ For jj In {1:nn}
EndFor
Coherence;
//BoundingBox;
//FIXME: this is buggy -- investigate
//Coherence;
b = rayon ;
L = 2*nn ;
......
......@@ -124,5 +124,5 @@ Coherence;
Extrude Surface {35, {0,0.0,19}}
{
//Layers { {3,3,3}, {100,200,300}, {.1,.9,1.}} ;
Layers { {3,3,3}, {100,200,300}, {.1,.9,1.}} ;
};
$Id: TODO,v 1.34 2006-12-16 01:25:58 geuzaine Exp $
$Id: TODO,v 1.35 2007-01-08 16:42:42 geuzaine Exp $
********************************************************************
......@@ -6,15 +6,20 @@ introduce Right/Left/Alternate for extruded meshes
********************************************************************
test isSeam() dans le second ordre -- si oui, interpo lineaireemnt
transfinite 3 curves
subdivision of extrusion
bug : ruled surface mesh generation
reclassify volumes in new 3D mesh
fix second order mesh for periodic surfaces
********************************************************************
bug: quads orientation is wrong after recombine
reimplement subdivision of extruded meshes
********************************************************************
reclassify volumes in new/tetgen 3D mesh
********************************************************************
bug: quads orientation is wrong after recombine + quads wrong in some
cases
********************************************************************
......@@ -59,12 +64,6 @@ along a parametric curve
********************************************************************
Mac: system("open 'http://google.com/'");
Linux: system("htmlview 'http://google.com' &");
Windows: ShellExecute(NULL, "open", "http://google.com/", NULL, NULL,SW_SHOWNORMAL);
********************************************************************
Custom range on "filled iso" 3D views produces ugly plots, where one
sees inside the cut elements. (In the meantime, one can use
Plugin(CutMap) with "ExtractVolume" set to 1 (or -1): this will
......
$Id: VERSIONS,v 1.369 2006-11-29 03:11:20 geuzaine Exp $
$Id: VERSIONS,v 1.370 2007-01-08 16:42:42 geuzaine Exp $
2.0: new geometry and mesh databases, with support for STEP and IGES
input via OpenCascade; complete rewrite of geometry and mesh drawing
code; complete rewrite of the input/output code (with new native
binary MSH format and full support for import/export of I-deas UNV,
Nastran BDF, STL, Medit MESH and VRML 1.0 files); added support for
incomplete second order elements; new 2D mesh algorithm; removed
anisotropic algorithm (as well as attractors); removed explicit region
number specification in extrusions; option changes in the graphical
interface are now applied instantenously; added support for offscreen
rendering using OSMesa; added support for SVG output; added string
labels for Physical entities; lots of other improvements all over the
place.
code; complete rewrite of mesh I/O layer (with new native binary MSH
format and support for import/export of I-deas UNV, Nastran BDF, STL,
Medit MESH and VRML 1.0 files); added support for incomplete second
order elements; new 2D mesh algorithm; removed anisotropic algorithm
(as well as attractors); removed explicit region number specification
in extrusions; option changes in the graphical interface are now
applied instantaneously; added support for offscreen rendering using
OSMesa; added support for SVG output; added string labels for Physical
entities; lots of other improvements all over the place.
1.65 (May 15, 2006): new Plugin(ExtractEdges); fixed compilation
errors with gcc4.1; replaced Plugin(DisplacementRaise) and
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment