SALOME - SMESH
aptrte.h
Go to the documentation of this file.
1
// SMESH MEFISTO2 : algorithm for meshing
2
//
3
// Copyright (C) 2006-2015 CEA/DEN, EDF R&D, OPEN CASCADE
4
//
5
// This library is free software; you can redistribute it and/or
6
// modify it under the terms of the GNU Lesser General Public
7
// License as published by the Free Software Foundation; either
8
// version 2.1 of the License, or (at your option) any later version.
9
//
10
// This library is distributed in the hope that it will be useful,
11
// but WITHOUT ANY WARRANTY; without even the implied warranty of
12
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13
// Lesser General Public License for more details.
14
//
15
// You should have received a copy of the GNU Lesser General Public
16
// License along with this library; if not, write to the Free Software
17
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
18
//
19
// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
20
//
21
// File : aptrte.h
22
// Author : Alain PERRONNET
23
// Module : SMESH
24
// Date : 13 novembre 2006
25
26
#ifndef aptrte__h
27
#define aptrte__h
28
29
#include <climits>
// limites min max int long real ...
30
#ifndef WIN32
31
#include <unistd.h>
// gethostname, ...
32
#endif
33
#include <stdio.h>
34
#ifndef WIN32
35
#include <iostream>
// pour cout cin ...
36
#include <iomanip>
// pour le format des io setw, stx, setfill, ...
37
#endif
38
#include <string.h>
// pour les fonctions sur les chaines de caracteres
39
#include <ctype.h>
40
#include <stdlib.h>
41
#include <math.h>
// pour les fonctions mathematiques
42
#include <time.h>
43
44
#include <sys/types.h>
45
#ifndef WIN32
46
#include <sys/time.h>
47
#endif
48
49
#ifdef WIN32
50
#if defined MEFISTO2D_EXPORTS
51
#define MEFISTO2D_EXPORT __declspec( dllexport )
52
#else
53
#define MEFISTO2D_EXPORT __declspec( dllimport )
54
#endif
55
#define F2C_BUILD
56
#else
57
#define MEFISTO2D_EXPORT
58
#endif
59
60
61
MEFISTO2D_EXPORT
62
void
aptrte
(
Z
nutysu,
R
aretmx,
63
Z
nblf,
Z
*nudslf,
R2
*uvslf,
64
Z
nbpti,
R2
*uvpti,
65
Z
& nbst,
R2
* & uvst,
Z
& nbt,
Z
* & nust,
66
Z
& ierr );
67
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
68
// but : appel de la triangulation par un arbre-4 recouvrant
69
// ----- de triangles equilateraux
70
// le contour du domaine plan est defini par des lignes fermees
71
// la premiere ligne etant l'enveloppe de toutes les autres
72
// la fonction areteideale_(s,d) donne la taille d'arete
73
// au point s dans la direction d (direction inactive pour l'instant)
74
// des lors toute arete issue d'un sommet s devrait avoir une longueur
75
// comprise entre 0.65 areteideale_(s,d) et 1.3 areteideale_(s,d)
76
//
77
//Attention:
78
// Les tableaux uvslf et uvpti sont supposes ne pas avoir de sommets identiques!
79
// De meme, un sommet d'une ligne fermee ne peut appartenir a une autre ligne fermee
80
//
81
// entrees:
82
// --------
83
// nutysu : numero de traitement de areteideale_() selon le type de surface
84
// 0 pas d'emploi de la fonction areteideale_() et aretmx est active
85
// 1 il existe une fonction areteideale_(s,d)
86
// dont seules les 2 premieres composantes de uv sont actives
87
// ... autres options a definir ...
88
// aretmx : longueur maximale des aretes de la future triangulation
89
// nblf : nombre de lignes fermees de la surface
90
// nudslf : numero du dernier sommet de chacune des nblf lignes fermees
91
// nudslf(0)=0 pour permettre la difference sans test
92
// Attention le dernier sommet de chaque ligne est raccorde au premier
93
// tous les sommets et les points internes ont des coordonnees
94
// UV differentes <=> Pas de point double!
95
// uvslf : uv des nudslf(nblf) sommets des lignes fermees
96
// nbpti : nombre de points internes futurs sommets de la triangulation
97
// uvpti : uv des points internes futurs sommets de la triangulation
98
//
99
// sorties:
100
// --------
101
// nbst : nombre de sommets de la triangulation finale
102
// uvst : coordonnees uv des nbst sommets de la triangulation
103
// nbt : nombre de triangles de la triangulation finale
104
// nust : 3 numeros dans uvst des sommets des nbt triangles
105
// ierr : 0 si pas d'erreur
106
// > 0 sinon
107
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
108
// auteur : Alain Perronnet Analyse Numerique Paris UPMC decembre 2001
109
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
110
111
#if WIN32 & DFORTRAN
112
#define tempscpu TEMPSCPU
113
#define deltacpu DELTACPU
114
#define insoar INSOAR
115
#define azeroi AZEROI
116
#define fasoar FASOAR
117
#define teajte TEAJTE
118
#define tehote TEHOTE
119
#define tetrte TETRTE
120
#define aisoar AISOAR
121
#define tedela TEDELA
122
#define terefr TEREFR
123
#define tesuex TESUEX
124
#define teamqt TEAMQT
125
#define nusotr NUSOTR
126
#define qutr2d QUTR2D
127
#define surtd2 SURTD2
128
#define qualitetrte QUALITETRTE
129
130
#define areteideale ARETEIDEALE
131
132
#else
133
#define tempscpu tempscpu_
134
#define deltacpu deltacpu_
135
#define insoar insoar_
136
#define azeroi azeroi_
137
#define fasoar fasoar_
138
#define teajte teajte_
139
#define tehote tehote_
140
#define tetrte tetrte_
141
#define aisoar aisoar_
142
#define tedela tedela_
143
#define terefr terefr_
144
#define tesuex tesuex_
145
#define teamqt teamqt_
146
#define nusotr nusotr_
147
#define qutr2d qutr2d_
148
#define surtd2 surtd2_
149
#define qualitetrte qualitetrte_
150
151
#define areteideale areteideale_
152
153
#endif
154
155
156
extern
"C"
{
void
157
#ifdef WIN32
158
#ifdef F2C_BUILD
159
#else
160
__stdcall
161
#endif
162
#endif
163
qualitetrte
(
R3
*mnpxyd,
164
Z
& mosoar,
Z
& mxsoar,
Z
*mnsoar,
165
Z
& moartr,
Z
& mxartr,
Z
*mnartr,
166
Z
& nbtria,
R
& quamoy,
R
& quamin ); }
167
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
168
// but : calculer la qualite moyenne et minimale de la triangulation
169
// ----- actuelle definie par les tableaux nosoar et noartr
170
// entrees:
171
// --------
172
// mnpxyd : tableau des coordonnees 2d des points
173
// par point : x y distance_souhaitee
174
// mosoar : nombre maximal d'entiers par arete et
175
// indice dans nosoar de l'arete suivante dans le hachage
176
// mxsoar : nombre maximal d'aretes stockables dans le tableau nosoar
177
// attention: mxsoar>3*mxsomm obligatoire!
178
// nosoar : numero des 2 sommets , no ligne, 2 triangles de l'arete,
179
// chainage des aretes frontalieres, chainage du hachage des aretes
180
// hachage des aretes = nosoar(1)+nosoar(2)*2
181
// avec mxsoar>=3*mxsomm
182
// une arete i de nosoar est vide <=> nosoar(1,i)=0 et
183
// nosoar(2,arete vide)=l'arete vide qui precede
184
// nosoar(3,arete vide)=l'arete vide qui suit
185
// moartr : nombre maximal d'entiers par arete du tableau noartr
186
// mxartr : nombre maximal de triangles declarables
187
// noartr : les 3 aretes des triangles +-arete1, +-arete2, +-arete3
188
// arete1 = 0 si triangle vide => arete2 = triangle vide suivant
189
// sorties:
190
// --------
191
// nbtria : nombre de triangles internes au domaine
192
// quamoy : qualite moyenne des triangles actuels
193
// quamin : qualite minimale des triangles actuels
194
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
195
196
extern
"C"
{
void
197
#ifdef WIN32
198
#ifdef F2C_BUILD
199
#else
200
__stdcall
201
#endif
202
#endif
203
tempscpu
(
double
& tempsec );
204
}
205
206
//Retourne le temps CPU utilise en secondes
207
208
extern
"C"
{
void
209
#ifdef WIN32
210
#ifdef F2C_BUILD
211
#else
212
__stdcall
213
#endif
214
#endif
215
deltacpu
(
R
& dtcpu );
216
}
217
218
//Retourne le temps CPU utilise en secondes depuis le precedent appel
219
220
//initialiser le tableau mnsoar pour le hachage des aretes
221
extern
"C"
{
void
222
#ifdef WIN32
223
#ifdef F2C_BUILD
224
#else
225
__stdcall
226
#endif
227
#endif
228
insoar
(
Z
& mxsomm,
Z
& mosoar,
Z
& mxsoar,
Z
& n1soar,
Z
* mnsoar );
229
}
230
231
//mettre a zero les nb entiers de tab
232
extern
"C"
{
void
233
#ifdef WIN32
234
#ifdef F2C_BUILD
235
#else
236
__stdcall
237
#endif
238
#endif
239
azeroi
(
Z
& nb,
Z
* tab );
240
}
241
242
extern
"C"
{
void
243
#ifdef WIN32
244
#ifdef F2C_BUILD
245
#else
246
__stdcall
247
#endif
248
#endif
249
fasoar
(
Z
& ns1,
Z
& ns2,
Z
& nt1,
Z
& nt2,
Z
& nolign,
250
Z
& mosoar,
Z
& mxsoar,
Z
& n1soar,
Z
* mnsoar,
Z
* mnarst,
251
Z
& noar,
Z
& ierr );
252
}
253
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
254
// but : former l'arete de sommet ns1-ns2 dans le hachage du tableau
255
// ----- nosoar des aretes de la triangulation
256
// entrees:
257
// --------
258
// ns1 ns2: numero pxyd des 2 sommets de l'arete
259
// nt1 : numero du triangle auquel appartient l'arete
260
// nt1=-1 si numero inconnu
261
// nt2 : numero de l'eventuel second triangle de l'arete si connu
262
// nt2=-1 si numero inconnu
263
// nolign : numero de la ligne fermee de l'arete
264
// =0 si l'arete n'est une arete de ligne
265
// ce numero est ajoute seulement si l'arete est creee
266
// mosoar : nombre maximal d'entiers par arete du tableau nosoar
267
// mxsoar : nombre maximal d'aretes stockables dans le tableau nosoar
268
// modifies:
269
// ---------
270
// n1soar : numero de la premiere arete vide dans le tableau nosoar
271
// une arete i de nosoar est vide <=> nosoar(1,i)=0
272
// chainage des aretes vides amont et aval
273
// l'arete vide qui precede=nosoar(4,i)
274
// l'arete vide qui suit =nosoar(5,i)
275
// nosoar : numero des 2 sommets, no ligne, 2 triangles de l'arete,
276
// chainage momentan'e d'aretes, chainage du hachage des aretes
277
// hachage des aretes = min( nosoar(1), nosoar(2) )
278
// noarst : noarst(np) numero d'une arete du sommet np
279
280
// ierr : si < 0 en entree pas d'affichage en cas d'erreur du type
281
// "arete appartenant a plus de 2 triangles et a creer!"
282
// si >=0 en entree affichage de ce type d'erreur
283
// sorties:
284
// --------
285
// noar : >0 numero de l'arete retrouvee ou ajoutee
286
// ierr : =0 si pas d'erreur
287
// =1 si le tableau nosoar est sature
288
// =2 si arete a creer et appartenant a 2 triangles distincts
289
// des triangles nt1 et nt2
290
// =3 si arete appartenant a 2 triangles distincts
291
// differents des triangles nt1 et nt2
292
// =4 si arete appartenant a 2 triangles distincts
293
// dont le second n'est pas le triangle nt2
294
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
295
296
//initialisation du tableau letree et ajout dans letree des sommets 1 a nbsomm
297
extern
"C"
{
void
298
#ifdef WIN32
299
#ifdef F2C_BUILD
300
#else
301
__stdcall
302
#endif
303
#endif
304
teajte
(
Z
& mxsomm,
Z
& nbsomm,
R3
* mnpxyd,
R3
* comxmi,
305
R
& aretmx,
Z
& mxtree,
Z
* letree,
306
Z
& ierr );
307
}
308
309
extern
"C"
{
void
310
#ifdef WIN32
311
#ifdef F2C_BUILD
312
#else
313
__stdcall
314
#endif
315
#endif
316
tehote
(
Z
& nutysu,
Z
& nbarpi,
Z
& mxsomm,
Z
& nbsomm,
R3
* mnpxyd,
317
R3
* comxmi,
R
& aretmx,
318
Z
* letree,
Z
& mxqueu,
Z
* mnqueu,
319
Z
& ierr );
320
}
321
// homogeneisation de l'arbre des te a un saut de taille au plus
322
// prise en compte des tailles d'aretes souhaitees autour des sommets initiaux
323
324
extern
"C"
{
void
325
#ifdef WIN32
326
#ifdef F2C_BUILD
327
#else
328
__stdcall
329
#endif
330
#endif
331
tetrte
(
R3
* comxmi,
R
& aretmx,
Z
& nbarpi,
Z
& mxsomm,
R3
* mnpxyd,
332
Z
& mxqueu,
Z
* mnqueu,
Z
* mntree,
333
Z
& mosoar,
Z
& mxsoar,
Z
& n1soar,
Z
* mnsoar,
334
Z
& moartr,
Z
& mxartr,
Z
& n1artr,
Z
* mnartr,
Z
* mnarst,
335
Z
& ierr );
336
}
337
// trianguler les triangles equilateraux feuilles a partir de leurs 3 sommets
338
// et des points de la frontiere, des points internes imposes interieurs
339
340
extern
"C"
{
void
341
#ifdef WIN32
342
#ifdef F2C_BUILD
343
#else
344
__stdcall
345
#endif
346
#endif
347
aisoar
(
Z
& mosoar,
Z
& mxsoar,
Z
* mnsoar,
Z
& na );
348
}
349
// formation du chainage 6 des aretes internes a echanger eventuellement
350
351
extern
"C"
{
void
352
#ifdef WIN32
353
#ifdef F2C_BUILD
354
#else
355
__stdcall
356
#endif
357
#endif
358
tedela
(
R3
* mnpxyd,
Z
* mnarst,
359
Z
& mosoar,
Z
& mxsoar,
Z
& n1soar,
Z
* mnsoar,
Z
& na,
360
Z
& moartr,
Z
& mxartr,
Z
& n1artr,
Z
* mnartr,
Z
& n );
361
}
362
// boucle sur les aretes internes (non sur une ligne de la frontiere)
363
// avec echange des 2 diagonales afin de rendre la triangulation delaunay
364
365
extern
"C"
{
void
366
#ifdef WIN32
367
#ifdef F2C_BUILD
368
#else
369
__stdcall
370
#endif
371
#endif
372
terefr
(
Z
& nbarpi,
R3
* mnpxyd,
373
Z
& mosoar,
Z
& mxsoar,
Z
& n1soar,
Z
* mnsoar,
374
Z
& moartr,
Z
& mxartr,
Z
& n1artr,
Z
* mnartr,
Z
* mnarst,
375
Z
& mxarcf,
Z
* mnarc1,
Z
* mnarc2,
376
Z
* mnarc3,
Z
* mnarc4,
377
Z
& n,
Z
& ierr );
378
}
379
// detection des aretes frontalieres initiales perdues
380
// triangulation frontale pour les restaurer
381
382
extern
"C"
{
void
383
#ifdef WIN32
384
#ifdef F2C_BUILD
385
#else
386
__stdcall
387
#endif
388
#endif
389
tesuex
(
Z
& nblf,
Z
* nulftr,
390
Z
& ndtri0,
Z
& nbsomm,
R3
* mnpxyd,
Z
* mnslig,
391
Z
& mosoar,
Z
& mxsoar,
Z
* mnsoar,
392
Z
& moartr,
Z
& mxartr,
Z
& n1artr,
Z
* mnartr,
Z
* mnarst,
393
Z
& nbtria,
Z
* mntrsu,
Z
& ierr );
394
}
395
// suppression des triangles externes a la surface
396
397
extern
"C"
{
void
398
#ifdef WIN32
399
#ifdef F2C_BUILD
400
#else
401
__stdcall
402
#endif
403
#endif
404
teamqt
(
Z
& nutysu,
R
& aretmx,
R
& airemx,
405
Z
* mnarst,
Z
& mosoar,
Z
& mxsoar,
Z
& n1soar,
Z
* mnsoar,
406
Z
& moartr,
Z
& mxartr,
Z
& n1artr,
Z
* mnartr,
407
Z
& mxarcf,
Z
* mntrcf,
Z
* mnstbo,
408
Z
* n1arcf,
Z
* mnarcf,
Z
* mnarc1,
409
Z
& nbarpi,
Z
& nbsomm,
Z
& mxsomm,
410
R3
* mnpxyd,
Z
* mnslig,
411
Z
& ierr );
412
}
413
// amelioration de la qualite de la triangulation par
414
// barycentrage des sommets internes a la triangulation
415
// suppression des aretes trop longues ou trop courtes
416
// modification de la topologie des groupes de triangles
417
// mise en delaunay de la triangulation
418
419
extern
"C"
{
void
420
#ifdef WIN32
421
#ifdef F2C_BUILD
422
#else
423
__stdcall
424
#endif
425
#endif
426
nusotr
(
Z
& nt,
Z
& mosoar,
Z
* mnsoar,
Z
& moartr,
Z
* mnartr,
Z
* nosotr );
427
}
428
//retrouver les numero des 3 sommets du triangle nt
429
430
extern
"C"
{
void
431
#ifdef WIN32
432
#ifdef F2C_BUILD
433
#else
434
__stdcall
435
#endif
436
#endif
437
qutr2d
(
R3
& p1,
R3
& p2,
R3
& p3,
R
& qualite );
438
}
439
//calculer la qualite d'un triangle de R2 de sommets p1, p2, p3
440
441
extern
"C"
{
R
442
#ifdef WIN32
443
#ifdef F2C_BUILD
444
#else
445
__stdcall
446
#endif
447
#endif
448
surtd2
(
R3
& p1,
R3
& p2,
R3
& p3 );
449
}
450
//calcul de la surface d'un triangle defini par 3 points de r**2
451
452
#endif
teajte
#define teajte
Definition:
aptrte.h:138
tetrte
#define tetrte
Definition:
aptrte.h:140
teamqt
#define teamqt
Definition:
aptrte.h:145
aptrte
void aptrte(Z nutysu, R aretmx, Z nblf, Z *nudslf, R2 *uvslf, Z nbpti, R2 *uvpti, Z &nbst, R2 *&uvst, Z &nbt, Z *&nust, Z &ierr)
R2
Definition:
Rn.h:87
surtd2
#define surtd2
Definition:
aptrte.h:148
terefr
#define terefr
Definition:
aptrte.h:143
tehote
#define tehote
Definition:
aptrte.h:139
aisoar
#define aisoar
Definition:
aptrte.h:141
qutr2d
#define qutr2d
Definition:
aptrte.h:147
Z
long int Z
Definition:
Rn.h:72
tesuex
#define tesuex
Definition:
aptrte.h:144
tempscpu
#define tempscpu
Definition:
aptrte.h:133
fasoar
#define fasoar
Definition:
aptrte.h:137
azeroi
#define azeroi
Definition:
aptrte.h:136
R3
Definition:
Rn.h:126
nusotr
#define nusotr
Definition:
aptrte.h:146
qualitetrte
#define qualitetrte
Definition:
aptrte.h:149
R
double R
Definition:
Rn.h:79
MEFISTO2D_EXPORT
#define MEFISTO2D_EXPORT
Definition:
aptrte.h:57
insoar
#define insoar
Definition:
aptrte.h:135
deltacpu
#define deltacpu
Definition:
aptrte.h:134
tedela
#define tedela
Definition:
aptrte.h:142
inc
aptrte.h
Generated by
1.8.13