00001 #include "surffind.h"
00002 #include "oblasti.h"
00003
00004 using std::ostream;
00005
00006 SurfFind::SurfFind(const long nn, const long ne,
00007 const long *nadjelel, const long **adjelel,
00008 const long *nnod, const long **nodes,
00009 const double **xyz)
00010
00011 {
00012 SpolecnaData sd( nn, ne, nadjelel, adjelel, nnod, nodes, xyz );
00013 setgsurface(sd);
00014 }
00015
00016
00017 SurfFind::~SurfFind()
00018 {
00019 long i,j;
00020 FOR(i,surfaces)
00021 {
00022 FOR(j,nae[i]/2)delete [] nv[i][j];
00023 delete [] nv[i];
00024 delete [] nlists1[i];
00025 delete [] nlists2[i];
00026 delete [] adjels[i];
00027 }
00028 delete [] nn;
00029 delete [] nae;
00030 delete [] nv;
00031 delete [] nlists1;
00032 delete [] nlists2;
00033 delete [] adjels;
00034 }
00035
00036
00037 void SurfFind::setgsurface(SpolecnaData & sd)
00038 {
00039 Oblasti o(sd);
00040 o.vyhledejOblasti();
00041 o.hledejStycnePlochy();
00042 size_t i;
00043 long j, pocetVektoru;
00044 surfaces = (long)o.nlists.size();
00045 nn = new long[surfaces];
00046 nae = new long[surfaces];
00047 nlists1 = new long*[surfaces];
00048 nlists2 = new long*[surfaces];
00049 adjels = new long*[surfaces];
00050 nv = new double**[surfaces];
00051 FOR(i,o.nlists.size()){
00052 nn[i] = (long) o.nlists[i].size();
00053 nae[i] = (long) o.adjels[i].size();
00054 nlists1[i] = new long [nn[i]];
00055 nlists2[i] = new long [nn[i]];
00056 pocetVektoru = nae[i] / 2;
00057 nv[i] = new double *[pocetVektoru];
00058 j = 0;
00059 for(set<MyPair, Less>::iterator it = o.nlists[i].begin(); it != o.nlists[i].end(); it++)
00060 {
00061 nlists1[i][j] = (*it).node1;
00062 nlists2[i][j] = (*it).node2;
00063 j++;
00064 }
00065 adjels[i] = new long[nae[i]];
00066 FOR(j,nae[i])adjels[i][j] = o.adjels[i][j];
00067 FOR(j,pocetVektoru)nv[i][j] = o.nvectors[i][j];
00068 }
00069
00070 }
00071
00072
00073 ostream& operator<<(ostream &os, SurfFind &sf)
00074 {
00075 for (long i = 0; i < sf.surfaces; i++ )
00076 {
00077 os << "Stycna plocha " << i << "\n-------------\n\n";
00078 os << "Pocet prvku [nae] : " << sf.nae[i] << "\n\n";
00079 os << "Prvky [adjel] : ";
00080 for(long j = 0; j < sf.nae[i]; j++)
00081 os << sf.adjels[i][j]+1 << " ";
00082 os << "\n\n";
00083 os << "Pocet bodu [nn] : " << sf.nn[i] << "\n\n";
00084 os << "Dvojice stycnych bodu [nlist1 nlist2 |] : ";
00085 for(long j = 0; j < sf.nn[i]; j++)
00086 os << sf.nlists1[i][j]+1 << " " << sf.nlists2[i][j]+1 << " | ";
00087 os << "\n\n";
00088 os << "Vektory (x,y,z)| : ";
00089 for(long j = 0; j < sf.nae[i] / 2; j++)
00090 {
00091 os << "(";
00092 for (short k = 0; k < 3; k++) os << sf.nv[i][j][k] << ",";
00093 os << ")| ";
00094
00095 }
00096 os << "\n\n\n\n";
00097 }
00098 return os;
00099 }
00100