diff --git a/Geo/fourierModel.cpp b/Geo/fourierModel.cpp new file mode 100644 index 0000000000000000000000000000000000000000..3bba29d23e7be20c131dd039327e9c53e27ca0fe --- /dev/null +++ b/Geo/fourierModel.cpp @@ -0,0 +1,94 @@ +#include "fourierModel.h" +#include "Message.h" + +#if defined(HAVE_FOURIER_MODEL) + +#include "model.h" + +static model *FM = 0; + +fourierModel::fourierModel(const std::string &name) + : GModel(name) +{ + FM = new model(name); + + Msg(INFO, "Fourier model created: %d patches", FM->GetNumPatches()); + + for(int i = 0; i < FM->GetNumPatches(); i++) + add(new fourierFace(this, i)); +} + +fourierModel::~fourierModel() +{ + delete FM; + FM = 0; +} + +fourierFace::fourierFace(GModel *m, int num) + : GFace(m, num) +{ + int M = 30, N = 30; + for(int i = 0; i < M; i++){ + for(int j = 0; j < N; j++){ + GPoint p = point(i/(double)(M - 1), j/(double)(N - 1)); + mesh_vertices.push_back(new MVertex(p.x(), p.y(), p.z(), this)); + } + } + for(int i = 0; i < M - 1; i++){ + for(int j = 0; j < N - 1; j++){ + quadrangles.push_back(new MQuadrangle(mesh_vertices[i * M + j], + mesh_vertices[i * M + (j + 1)], + mesh_vertices[(i + 1) * M + (j + 1)], + mesh_vertices[(i + 1) * M + j])); + } + } +} + +Range<double> fourierFace::parBounds(int i) const +{ + return Range<double>(0., 1.); +} + +GPoint fourierFace::point(double par1, double par2) const +{ + double x, y, z; + FM->GetPoint(tag(), par1, par2, x, y, z); + return GPoint(x, y, z); +} + +GPoint fourierFace::point(const SPoint2 &pt) const +{ + throw; +} + +GPoint fourierFace::closestPoint(const SPoint3 & queryPoint) +{ + throw; +} + +int fourierFace::containsPoint(const SPoint3 &pt) const +{ + throw; +} + +int fourierFace::containsParam(const SPoint2 &pt) const +{ + throw; +} + +SVector3 fourierFace::normal(const SPoint2 ¶m) const +{ + throw; +} + +GEntity::GeomType fourierFace::geomType() const +{ + return GEntity::DiscreteSurface; +} + +SPoint2 fourierFace::parFromPoint(const SPoint3 &) const +{ + throw; +} + +#endif