00001
00002
00003
00004
00005
00006
00007
00008
00009
#include <qfile.h>
00010
#include <qtextstream.h>
00011
#include <qptrvector.h>
00012
#include <qdatetime.h>
00013
00014
00015
#include "Mesh.h"
00016
00017
00018
extern char* __delaunay_lib_version;
00019
00020
00021 Mesh::Mesh()
00022 {
00023 init();
00024 }
00025
00026
00027
void
00028 Mesh::init()
00029 {
00030 _vertices.setAutoDelete(
true);
00031 _triangles.setAutoDelete(
true);
00032 }
00033
00034
00035
00036
void
00037 Mesh::clear()
00038 {
00039 _vertices.clear();
00040 _triangles.clear();
00041 }
00042
00043
00044
00045
00046
00047
void
00048 Mesh::add_triangle(
Triangle* t)
00049 {
00050
#ifdef _DEBUG_
00051
fprintf(stderr,
"<Mesh::addTriangle()>\n");
00052
#endif
00053
00054 _triangles.insert(t->
get_ID(), t );
00055
00056
#ifdef _DEBUG_
00057
fprintf(stderr,
"</Mesh::addTriangle()>\n");
00058
#endif
00059
00060 }
00061
00062
00063
00064
void
00065 Mesh::add_vertex(
Vertex* p)
00066 {
00067 _vertices.insert(p->
ID(), p );
00068 }
00069
00070
00071
00072
00073
void
00074 Mesh::remove_triangle(
Triangle* t)
00075 {
00076 _triangles.remove( t->
get_ID() );
00077 }
00078
00079
00080
00081
void
00082 Mesh::remove_vertex(
Vertex* p)
00083 {
00084 _vertices.remove( p->
ID() );
00085 }
00086
00087
00088
00089
00090
00091
void
00092 Mesh::write_XML(
const QString& filename)
00093 {
00094 QFile f(filename);
00095
if(!f.open(IO_WriteOnly))
return;
00096 QTextStream* cout =
new QTextStream( &f );
00097
write_XML(*cout);
00098 }
00099
00100
00101
00102
void
00103 Mesh::write_XML(QTextStream &cout)
00104 {
00105
#ifdef _SOFISTIK_
00106
cout <<
"+PROG GENF M 40 \n";
00107 cout <<
" SYST RAUM GDIV 1000 GDIR ZZ OPTI NEIN \n\n";
00108 cout <<
" MAT 1 E 1000 \n\n";
00109
00110 QDictIterator<Vertex> point_it(_vertices);
00111
00112
for( ; point_it.current(); ++point_it ) {
00113
00114 cout <<
" KNOT " << point_it.current()->ID();
00115 cout <<
" X " << point_it.current()->x();
00116 cout <<
" Y " << point_it.current()->y();
00117 cout <<
" Z 0 \n";
00118
00119 }
00120
00121 cout <<
"\n\n\n";
00122
00123
00124 QDictIterator<Triangle> tri_it(_triangles);
00125
00126
for(; tri_it.current(); ++tri_it) {
00127
00128 cout <<
" QUAD " << tri_it.current()->get_ID();
00129 cout <<
" " << tri_it.current()->vertex_ID(0);
00130 cout <<
" " << tri_it.current()->vertex_ID(1);
00131 cout <<
" " << tri_it.current()->vertex_ID(2);
00132 cout <<
" MNR 1 D 1.0 \n";
00133 }
00134
00135 cout << endl;
00136
00137 cout <<
"ENDE\n\n\n";
00138
00139 cout <<
"+PROG ASE M 40 \n";
00140 cout <<
" SYST RAUM PROB LINE \n";
00141 cout <<
" STEU SOLV 2 \n";
00142 cout <<
" LF 1 EGY 0.0 \n";
00143 cout <<
" #include Lasten.inp \n";
00144 cout <<
"ENDE\n";
00145
#endif
00146
00147
00148 cout <<
"<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?>\n";
00149 cout <<
"<!-- created by delaunay mesh generator \n";
00150 cout <<
" " << __delaunay_lib_version << endl;
00151 cout <<
" " << QTime::currentTime().toString() <<
" -->\n";
00152 cout <<
"<objects>\n";
00153
00154
00155 QDictIterator<Vertex> point_it(_vertices);
00156
00157
for( ; point_it.current(); ++point_it )
00158 point_it.current()->write_XML(cout);
00159
00160
00161 QDictIterator<Triangle> tri_it(_triangles);
00162
00163
for(; tri_it.current(); ++tri_it)
00164 tri_it.current()->write_XML(cout);
00165
00166 cout <<
"</objects>\n";
00167
00168
00169 }
00170
00171
00172
00173