00001 #ifndef __J2K__Maille_CPP__
00002 #define __J2K__Maille_CPP__
00003
00004
00005
00006 #include <j2k/Fred/3d/Maille.hpp>
00007
00008
00009
00010
00011
00012 const RArcD& ArcD::operator=( const ArcD& a ) {
00013 sini = a.sini;
00014 sfin = a.sfin;
00015 return *this;
00016 }
00017
00018
00019
00020
00021 istream& operator>>( istream& in, const Face& f )
00022 {
00023 in>>f.card;
00024
00025 UINT i = 0;
00026 for( ; i != f.count(); i ++ ) {
00027 in >> f.data[i];
00028 }
00029
00030 return in;
00031 }
00032
00033 ostream& operator << ( ostream& out, const Face& f )
00034 {
00035 out << f.count();
00036
00037 UINT i = 0;
00038 for( ; i != f.count(); i ++ ) {
00039 out << ' ' << f.data[i];
00040 }
00041
00042 return out << '\n';
00043 }
00044
00045
00046
00047
00048
00049 void Maillage3DH::init( int s, int a, int f ) {
00050
00051 if( s ) {
00052 flush ( TRUE, FALSE, FALSE );
00053 sommets = new Sommet3DH[s];
00054 cardsommets = s;
00055 }
00056
00057 if( a ) {
00058 flush ( FALSE, TRUE, FALSE );
00059 arcs = new ArcD[a];
00060 cardarcs = a;
00061 }
00062
00063 if( f ) {
00064 flush ( FALSE, FALSE, TRUE );
00065
00066 faces = new FaceC[f];
00067 normales = new Sommet3DH[f];
00068 cardfaces = f;
00069 cardnormales = f;
00070 }
00071
00072 }
00073
00074
00075 void Maillage3DH::flush(BOOL s, BOOL a, BOOL f, BOOL n ) {
00076
00077 if ( s && cardsommets && sommets ) {
00078 if (sommets) delete [] sommets;
00079 if (normales) delete [] normales;
00080 cardsommets = 0;
00081 sommets = normales = NULL;
00082 }
00083
00084 if ( n && cardnormales && normales ) {
00085 if (normales) delete [] normales;
00086 cardnormales = 0;
00087 normales = NULL;
00088 }
00089
00090 if ( a && cardarcs && arcs ) {
00091 delete [] arcs;
00092 cardarcs = 0;
00093 arcs = NULL;
00094 }
00095
00096 if ( f && cardfaces && faces ) {
00097 delete [] faces;
00098 cardfaces = 0;
00099 faces = NULL;
00100 }
00101
00102 }
00103
00104 istream& operator>>( istream& in, const Maillage3DH& m ) {
00105 UINT card, i;
00106 char tag[50];
00107
00108 in >> tag;
00109
00110
00111 in >> tag >> card;
00112
00113 m.init( card,0,0 );
00114
00115 for( i = 0; i != m.cardsommets; i++ ) {
00116 in >> (Sommet3D&)m.sommets[i];
00117 }
00118
00119 in>>tag;
00120
00121
00122 in >>tag>>card;
00123 m.init( 0, card,0 );
00124 for( i = 0; i != m.cardarcs; i ++ ) {
00125 in >> m.arcs[i];
00126 }
00127
00128 in>>tag;
00129
00130
00131 in >>tag>>card;
00132 m.init( 0, 0, card );
00133 for( i = 0; i != m.cardfaces; i++ ) {
00134 in >> m.faces[i];
00135 }
00136
00137 in >> tag;
00138
00139 in >> tag;
00140
00141 return in;
00142 }
00143
00144 ostream& operator<<( ostream& out, const Maillage3DH& m ) {
00145 UINT i;
00146
00147 out << "<3DMesh>\n";
00148
00149
00150 out << "<VertexArray> " << m.cardsommets << '\n';
00151 for( i = 0; i != m.cardsommets; i ++ )
00152 out << (Sommet3D&)m.sommets[i];
00153
00154 out << "</VertexArray>\n";
00155
00156
00157 out << "<ArcArray> " << m.cardarcs << '\n';
00158 for ( i = 0; i != m.cardarcs; i ++ )
00159 out << m.arcs[i];
00160
00161 out << "</ArcArray>\n";
00162
00163
00164 out << "<FaceArray> " << m.cardfaces << '\n';
00165 for( i = 0; i != m.cardfaces; i ++ ) {
00166 out << m.faces[i];
00167 }
00168
00169 out << "</FaceArray>\n</3DMesh>\n";
00170
00171 return out;
00172 }
00173
00174 #endif