From 04fa66f92d2130b10f4db41266f74cc47df9d849 Mon Sep 17 00:00:00 2001 From: abd Date: Tue, 25 Apr 2006 12:52:08 +0000 Subject: [PATCH] *** empty log message *** --- src/MEFISTO2/aptrte.cxx | 80 +++++++- src/MEFISTO2/aptrte.h | 174 ++++++++++++++++-- src/SMDS/SMDS_Iterator.hxx | 4 +- src/SMDS/SMDS_MeshElement.hxx | 4 +- ...IndexedDataMapOfShapeIndexedMapOfShape.hxx | 9 +- 5 files changed, 240 insertions(+), 31 deletions(-) diff --git a/src/MEFISTO2/aptrte.cxx b/src/MEFISTO2/aptrte.cxx index 3464c8f7e..8562631a6 100755 --- a/src/MEFISTO2/aptrte.cxx +++ b/src/MEFISTO2/aptrte.cxx @@ -190,14 +190,23 @@ void aptrte( Z nutysu, R aretmx, mnsoar = new Z[mosoar*mxsoar]; if( mnsoar==NULL ) goto ERREUR; //initialiser le tableau mnsoar pour le hachage des aretes +#ifdef DFORTRAN + INSOAR( mxsomm, mosoar, mxsoar, n1soar, mnsoar ); +#else insoar_( mxsomm, mosoar, mxsoar, n1soar, mnsoar ); +#endif // mnarst( mxsomm ) numero mnsoar d'une arete pour chacun des sommets if( mnarst!=NULL ) delete [] mnarst; mnarst = new Z[1+mxsomm]; if( mnarst==NULL ) goto ERREUR; n = 1+mxsomm; + +#ifdef DFORTRAN + AZEROI( n, mnarst ); +#else azeroi_( n, mnarst ); +#endif // mnslig( mxsomm ) no de sommet dans sa ligne pour chaque sommet frontalier // ou no du point si interne forc'e par l'utilisateur @@ -205,7 +214,11 @@ void aptrte( Z nutysu, R aretmx, if( mnslig!=NULL ) delete [] mnslig; mnslig = new Z[mxsomm]; if( mnslig==NULL ) goto ERREUR; +#ifdef DFORTRAN + AZEROI( mxsomm, mnslig ); +#else azeroi_( mxsomm, mnslig ); +#endif // initialisation des aretes frontalieres de la triangulation future // renumerotation des sommets des aretes des lignes pour la triangulation @@ -230,8 +243,8 @@ void aptrte( Z nutysu, R aretmx, // << " " << mnpxyd[ns0].y << " longueur arete=" << mnpxyd[ns0].z); //carre de la longueur de l'arete 1 de la ligne fermee n - d = pow( uvslf[ns0+1].x - uvslf[ns0].x, 2 ) - + pow( uvslf[ns0+1].y - uvslf[ns0].y, 2 ) ; + d = pow( uvslf[ns0+1].x - uvslf[ns0].x, 2 ); + d = d + pow( uvslf[ns0+1].y - uvslf[ns0].y, 2 ) ; aremin = Min( aremin, d ); aremax = Max( aremax, d ); @@ -247,7 +260,11 @@ void aptrte( Z nutysu, R aretmx, //le numero n de la ligne du sommet et son numero ns1 dans la ligne mnslig[ns0-1] = 1000000 * n + ns1-nudslf[n-1]; +#ifdef DFORTRAN + FASOAR( ns1, ns2, moins1, moins1, n, +#else fasoar_( ns1, ns2, moins1, moins1, n, +#endif mosoar, mxsoar, n1soar, mnsoar, mnarst, noar0, ierr ); //pas de test sur ierr car pas de saturation possible a ce niveau @@ -282,8 +299,8 @@ void aptrte( Z nutysu, R aretmx, // << " " << mnpxyd[ns].y << " longueur arete=" << mnpxyd[ns].z); //carre de la longueur de l'arete - d = pow( uvslf[ns2-1].x - uvslf[ns1-1].x, 2) - + pow( uvslf[ns2-1].y - uvslf[ns1-1].y, 2); + d = pow( uvslf[ns2-1].x - uvslf[ns1-1].x, 2); + d = d + pow( uvslf[ns2-1].y - uvslf[ns1-1].y, 2); aremin = Min( aremin, d ); aremax = Max( aremax, d ); @@ -291,7 +308,11 @@ void aptrte( Z nutysu, R aretmx, mnslig[ns] = 1000000 * n + ns1-nudslf[n-1]; //ajout de l'arete dans la liste +#ifdef DFORTRAN + FASOAR( ns1, ns2, moins1, moins1, n, +#else fasoar_( ns1, ns2, moins1, moins1, n, +#endif mosoar, mxsoar, n1soar, mnsoar, mnarst, noar, ierr ); //pas de test sur ierr car pas de saturation possible a ce niveau @@ -359,7 +380,11 @@ void aptrte( Z nutysu, R aretmx, if( mntree==NULL ) goto ERREUR; //initialisation du tableau letree et ajout dans letree des sommets 1 a nbsomm +#ifdef DFORTRAN + TEAJTE( mxsomm, nbsomm, mnpxyd, comxmi, aretmx, mxtree, mntree, ierr ); +#else teajte_( mxsomm, nbsomm, mnpxyd, comxmi, aretmx, mxtree, mntree, ierr ); +#endif comxmi[0].z=0; comxmi[1].z=0; @@ -387,7 +412,11 @@ void aptrte( Z nutysu, R aretmx, mnqueu = new Z[mxqueu]; if( mnqueu==NULL) goto ERREUR; +#ifdef DFORTRAN + TEHOTE( nutysu, nbarpi, mxsomm, nbsomm, mnpxyd, +#else tehote_( nutysu, nbarpi, mxsomm, nbsomm, mnpxyd, +#endif comxmi, aretmx, mntree, mxqueu, mnqueu, ierr ); @@ -414,7 +443,11 @@ void aptrte( Z nutysu, R aretmx, // trianguler les triangles equilateraux feuilles a partir de leurs 3 sommets // et des points de la frontiere, des points internes imposes interieurs // ========================================================================== +#ifdef DFORTRAN + TETRTE( comxmi, aretmx, nbarpi, mxsomm, mnpxyd, +#else tetrte_( comxmi, aretmx, nbarpi, mxsomm, mnpxyd, +#endif mxqueu, mnqueu, mntree, mosoar, mxsoar, n1soar, mnsoar, moartr, mxartr, n1artr, mnartr, mnarst, ierr ); @@ -443,8 +476,14 @@ void aptrte( Z nutysu, R aretmx, // avec echange des 2 diagonales afin de rendre la triangulation delaunay // ====================================================================== // formation du chainage 6 des aretes internes a echanger eventuellement +#ifdef DFORTRAN + AISOAR( mosoar, mxsoar, mnsoar, na ); + TEDELA( mnpxyd, mnarst, +#else aisoar_( mosoar, mxsoar, mnsoar, na ); tedela_( mnpxyd, mnarst, +#endif + mosoar, mxsoar, n1soar, mnsoar, na, moartr, mxartr, n1artr, mnartr, n ); @@ -475,7 +514,11 @@ void aptrte( Z nutysu, R aretmx, mnarcf2 = new Z[mxarcf]; if( mnarcf2 == NULL ) goto ERREUR; +#ifdef DFORTRAN + TEREFR( nbarpi, mnpxyd, +#else terefr_( nbarpi, mnpxyd, +#endif mosoar, mxsoar, n1soar, mnsoar, moartr, n1artr, mnartr, mnarst, mxarcf, mn1arcf, mnarcf, mnarcf1, mnarcf2, @@ -516,7 +559,11 @@ void aptrte( Z nutysu, R aretmx, for (n=0; n nosotr numero de ses 3 sommets +#ifdef DFORTRAN + NUSOTR( i, mosoar, mnsoar, moartr, mnartr, nosotr ); +#else nusotr_( i, mosoar, mnsoar, moartr, mnartr, nosotr ); +#endif nust[nbt++] = mnarst[ nosotr[0] ]; nust[nbt++] = mnarst[ nosotr[1] ]; nust[nbt++] = mnarst[ nosotr[2] ]; @@ -747,10 +806,18 @@ void qualitetrte( R3 *mnpxyd, nbtria++; //le numero des 3 sommets du triangle nt +#ifdef DFORTRAN + NUSOTR( nt, mosoar, mnsoar, moartr, mnartr, nosotr ); +#else nusotr_( nt, mosoar, mnsoar, moartr, mnartr, nosotr ); +#endif //la qualite du triangle ns1 ns2 ns3 +#ifdef DFORTRAN + QUTR2D( mnpxyd[nosotr[0]-1], mnpxyd[nosotr[1]-1], mnpxyd[nosotr[2]-1], +#else qutr2d_( mnpxyd[nosotr[0]-1], mnpxyd[nosotr[1]-1], mnpxyd[nosotr[2]-1], +#endif qualite ); //la qualite moyenne @@ -760,7 +827,12 @@ void qualitetrte( R3 *mnpxyd, quamin = Min( quamin, qualite ); //aire signee du triangle nt +#ifdef DFORTRAN + d = SURTD2( mnpxyd[nosotr[0]-1], mnpxyd[nosotr[1]-1], mnpxyd[nosotr[2]-1] ); +#else d = surtd2_( mnpxyd[nosotr[0]-1], mnpxyd[nosotr[1]-1], mnpxyd[nosotr[2]-1] ); +#endif + if( d<0 ) { //un triangle d'aire negative de plus diff --git a/src/MEFISTO2/aptrte.h b/src/MEFISTO2/aptrte.h index 8d664a10a..f12d9b969 100755 --- a/src/MEFISTO2/aptrte.h +++ b/src/MEFISTO2/aptrte.h @@ -141,19 +141,61 @@ MEFISTO2D_EXPORT // auteur : Alain Perronnet Analyse Numerique Paris UPMC decembre 2001 //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -extern "C" { void tempscpu_( double & tempsec ); } +extern "C" { void +#ifdef WIN32 + __stdcall +#endif +#ifdef DFORTRAN + TEMPSCPU( double & tempsec ); } +#else + tempscpu_( double & tempsec ); } +#endif + //Retourne le temps CPU utilise en secondes -extern "C" { void deltacpu_( R & dtcpu ); } +extern "C" { void +#ifdef WIN32 + __stdcall +#endif +#ifdef DFORTRAN + DELTACPU( R & dtcpu ); } +#else + deltacpu_( R & dtcpu ); } +#endif + //Retourne le temps CPU utilise en secondes depuis le precedent appel //initialiser le tableau mnsoar pour le hachage des aretes -extern "C" {void insoar_( Z & mxsomm, Z & mosoar, Z & mxsoar, Z & n1soar, Z * mnsoar );} +extern "C" {void +#ifdef WIN32 + __stdcall +#endif +#ifdef DFORTRAN + INSOAR( Z & mxsomm, Z & mosoar, Z & mxsoar, Z & n1soar, Z * mnsoar );} +#else + insoar_( Z & mxsomm, Z & mosoar, Z & mxsoar, Z & n1soar, Z * mnsoar );} +#endif //mettre a zero les nb entiers de tab -extern "C" {void azeroi_( Z & nb, Z * tab );} +extern "C" {void +#ifdef WIN32 + __stdcall +#endif +#ifdef DFORTRAN + AZEROI( Z & nb, Z * tab );} +#else + azeroi_( Z & nb, Z * tab );} +#endif -extern "C" {void fasoar_( Z & ns1, Z & ns2, Z & nt1, Z & nt2, Z & nolign, +extern "C" {void +#ifdef WIN32 + __stdcall +#endif +#ifdef DFORTRAN + FASOAR( Z & ns1, Z & ns2, Z & nt1, Z & nt2, Z & nolign, +#else + fasoar_( Z & ns1, Z & ns2, Z & nt1, Z & nt2, Z & nolign, +#endif Z & mosoar, Z & mxsoar, Z & n1soar, Z * mnsoar, Z * mnarst, Z & noar, Z & ierr );} //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ @@ -200,19 +242,46 @@ extern "C" {void fasoar_( Z & ns1, Z & ns2, Z & nt1, Z & nt2, Z & nolign, //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ //initialisation du tableau letree et ajout dans letree des sommets 1 a nbsomm -extern "C" {void teajte_( Z & mxsomm, Z & nbsomm, R3 * mnpxyd, R3 * comxmi, +extern "C" {void +#ifdef WIN32 + __stdcall +#endif +#ifdef DFORTRAN + TEAJTE +#else + teajte_ +#endif + ( Z & mxsomm, Z & nbsomm, R3 * mnpxyd, R3 * comxmi, R & aretmx, Z & mxtree, Z * letree, Z & ierr );} -extern "C" {void tehote_( Z & nutysu, Z & nbarpi, Z & mxsomm, Z & nbsomm, R3 * mnpxyd, +extern "C" {void +#ifdef WIN32 + __stdcall +#endif +#ifdef DFORTRAN + TEHOTE +#else + tehote_ +#endif + ( Z & nutysu, Z & nbarpi, Z & mxsomm, Z & nbsomm, R3 * mnpxyd, R3 * comxmi, R & aretmx, Z * letree, Z & mxqueu, Z * mnqueu, Z & ierr );} // homogeneisation de l'arbre des te a un saut de taille au plus // prise en compte des tailles d'aretes souhaitees autour des sommets initiaux -extern "C" {void tetrte_( R3 * comxmi, R & aretmx, Z & nbarpi, Z & mxsomm, R3 * mnpxyd, +extern "C" {void +#ifdef WIN32 + __stdcall +#endif +#ifdef DFORTRAN + TETRTE +#else + tetrte_ +#endif + ( R3 * comxmi, R & aretmx, Z & nbarpi, Z & mxsomm, R3 * mnpxyd, Z & mxqueu, Z * mnqueu, Z * mntree, Z & mosoar, Z & mxsoar, Z & n1soar, Z * mnsoar, Z & moartr, Z & mxartr, Z & n1artr, Z * mnartr, Z * mnarst, @@ -220,16 +289,43 @@ extern "C" {void tetrte_( R3 * comxmi, R & aretmx, Z & nbarpi, Z & mxsomm, R3 * // trianguler les triangles equilateraux feuilles a partir de leurs 3 sommets // et des points de la frontiere, des points internes imposes interieurs -extern "C" {void aisoar_( Z & mosoar, Z & mxsoar, Z * mnsoar, Z & na );} +extern "C" {void +#ifdef WIN32 + __stdcall +#endif +#ifdef DFORTRAN + AISOAR +#else + aisoar_ +#endif + ( Z & mosoar, Z & mxsoar, Z * mnsoar, Z & na );} // formation du chainage 6 des aretes internes a echanger eventuellement -extern "C" {void tedela_( R3 * mnpxyd, Z * mnarst, +extern "C" {void +#ifdef WIN32 + __stdcall +#endif +#ifdef DFORTRAN + TEDELA +#else + tedela_ +#endif + ( R3 * mnpxyd, Z * mnarst, Z & mosoar, Z & mxsoar, Z & n1soar, Z * mnsoar, Z & na, Z & moartr, Z & mxartr, Z & n1artr, Z * mnartr, Z & n );} // boucle sur les aretes internes (non sur une ligne de la frontiere) // avec echange des 2 diagonales afin de rendre la triangulation delaunay -extern "C" {void terefr_( Z & nbarpi, R3 * mnpxyd, +extern "C" {void +#ifdef WIN32 + __stdcall +#endif +#ifdef DFORTRAN + TEREFR +#else + terefr_ +#endif + ( Z & nbarpi, R3 * mnpxyd, Z & mosoar, Z & mxsoar, Z & n1soar, Z * mnsoar, Z & moartr, Z & n1artr, Z * mnartr, Z * mnarst, Z & mxarcf, Z * mnarc1, Z * mnarc2, @@ -238,14 +334,32 @@ extern "C" {void terefr_( Z & nbarpi, R3 * mnpxyd, // detection des aretes frontalieres initiales perdues // triangulation frontale pour les restaurer -extern "C" {void tesuex_( Z & nblf, Z * nulftr, +extern "C" {void +#ifdef WIN32 + __stdcall +#endif +#ifdef DFORTRAN + TESUEX +#else + tesuex_ +#endif + ( Z & nblf, Z * nulftr, Z & ndtri0, Z & nbsomm, R3 * mnpxyd, Z * mnslig, Z & mosoar, Z & mxsoar, Z * mnsoar, Z & moartr, Z & mxartr, Z & n1artr, Z * mnartr, Z * mnarst, Z & nbtria, Z * mntrsu, Z & ierr );} // suppression des triangles externes a la surface -extern "C" {void teamqt_( Z & nutysu, +extern "C" {void +#ifdef WIN32 + __stdcall +#endif +#ifdef DFORTRAN + TEAMQT +#else + teamqt_ +#endif + ( Z & nutysu, Z * mnarst, Z & mosoar, Z & mxsoar, Z & n1soar, Z * mnsoar, Z & moartr, Z & mxartr, Z & n1artr, Z * mnartr, Z & mxarcf, Z * mntrcf, Z * mnstbo, @@ -259,14 +373,40 @@ extern "C" {void teamqt_( Z & nutysu, // modification de la topologie des groupes de triangles // mise en delaunay de la triangulation -extern "C" {void nusotr_( Z & nt, Z & mosoar, Z * mnsoar, Z & moartr, Z * mnartr, - Z * nosotr );} +extern "C" {void +#ifdef WIN32 + __stdcall +#endif +#ifdef DFORTRAN + NUSOTR +#else + nusotr_ +#endif + ( Z & nt, Z & mosoar, Z * mnsoar, Z & moartr, Z * mnartr,Z * nosotr );} //retrouver les numero des 3 sommets du triangle nt -extern "C" {void qutr2d_( R3 & p1, R3 & p2, R3 & p3, R & qualite );} +extern "C" {void +#ifdef WIN32 + __stdcall +#endif +#ifdef DFORTRAN + QUTR2D +#else + qutr2d_ +#endif + ( R3 & p1, R3 & p2, R3 & p3, R & qualite );} //calculer la qualite d'un triangle de R2 de sommets p1, p2, p3 -extern "C" { R surtd2_( R3 & p1, R3 & p2, R3 & p3 ); } +extern "C" { R +#ifdef WIN32 + __stdcall +#endif +#ifdef DFORTRAN + SURTD2 +#else + surtd2_ +#endif + ( R3 & p1, R3 & p2, R3 & p3 ); } //calcul de la surface d'un triangle defini par 3 points de r**2 #endif diff --git a/src/SMDS/SMDS_Iterator.hxx b/src/SMDS/SMDS_Iterator.hxx index 264438c7d..21824c1e7 100644 --- a/src/SMDS/SMDS_Iterator.hxx +++ b/src/SMDS/SMDS_Iterator.hxx @@ -22,11 +22,13 @@ #ifndef _SMDS_Iterator_HeaderFile #define _SMDS_Iterator_HeaderFile +#include "SMESH_SMDS.hxx" + /////////////////////////////////////////////////////////////////////////////// ///Abstract class for iterators ///@author Jerome Robert /////////////////////////////////////////////////////////////////////////////// -template class SMDS_Iterator +template class SMDS_EXPORT SMDS_Iterator { public: /// Return true if and only if there are other object in this iterator diff --git a/src/SMDS/SMDS_MeshElement.hxx b/src/SMDS/SMDS_MeshElement.hxx index 0b774cda1..b3de99645 100644 --- a/src/SMDS/SMDS_MeshElement.hxx +++ b/src/SMDS/SMDS_MeshElement.hxx @@ -63,8 +63,8 @@ class SMDS_EXPORT SMDS_MeshElement:public SMDS_MeshObject virtual SMDSAbs_ElementType GetType() const = 0; virtual bool IsPoly() const { return false; }; - friend std::ostream & operator <<(std::ostream & OS, const SMDS_MeshElement *); - friend bool SMDS_MeshElementIDFactory::BindID(int ID,SMDS_MeshElement*elem); + friend SMDS_EXPORT std::ostream & operator <<(std::ostream & OS, const SMDS_MeshElement *); + friend SMDS_EXPORT bool SMDS_MeshElementIDFactory::BindID(int ID,SMDS_MeshElement*elem); protected: SMDS_MeshElement(int ID=-1); diff --git a/src/SMESH/SMESH_IndexedDataMapOfShapeIndexedMapOfShape.hxx b/src/SMESH/SMESH_IndexedDataMapOfShapeIndexedMapOfShape.hxx index 4fc35195f..838d1f6a8 100644 --- a/src/SMESH/SMESH_IndexedDataMapOfShapeIndexedMapOfShape.hxx +++ b/src/SMESH/SMESH_IndexedDataMapOfShapeIndexedMapOfShape.hxx @@ -28,17 +28,12 @@ #include "SMESH_SMESH.hxx" +#include "SMESHDS_DataMapOfShape.hxx" + #include #include -SMESH_EXPORT -inline Standard_Boolean IsEqual(const TopoDS_Shape& S1, - const TopoDS_Shape& S2) -{ - return S1.IsSame(S2); -} - /// Class SMESH_IndexedMapOfShape DEFINE_BASECOLLECTION (SMESH_BaseCollectionShape, TopoDS_Shape) -- 2.30.2