diff --git a/Geo/MLine.cpp b/Geo/MLine.cpp index 7b33b69a68010be237e2cfd8e11513d6a1a8e711..42766c6031bf19b0520fcfa9d7a0b91d072c1c35 100644 --- a/Geo/MLine.cpp +++ b/Geo/MLine.cpp @@ -72,3 +72,37 @@ double MLine::getVolume() { return getLength(); } + +int MLine3::getNumEdgesRep() +{ + return CTX::instance()->mesh.numSubEdges; +} + +void MLine3::getEdgeRep(int num, double *x, double *y, double *z, SVector3 *n) +{ + int numSubEdges = CTX::instance()->mesh.numSubEdges; + SPoint3 pnt1, pnt2; + pnt(-1. + 2 * (double)num / numSubEdges, 0., 0., pnt1); + pnt(-1. + 2 * (double)(num + 1) / numSubEdges, 0., 0, pnt2); + x[0] = pnt1.x(); x[1] = pnt2.x(); + y[0] = pnt1.y(); y[1] = pnt2.y(); + z[0] = pnt1.z(); z[1] = pnt2.z(); + n[0] = n[1] = MEdge(_v[0], _v[1]).normal(); +} + +int MLineN::getNumEdgesRep() +{ + return CTX::instance()->mesh.numSubEdges; +} + +void MLineN::getEdgeRep(int num, double *x, double *y, double *z, SVector3 *n) +{ + int numSubEdges = CTX::instance()->mesh.numSubEdges; + SPoint3 pnt1, pnt2; + pnt(-1. + 2 * (double)num / numSubEdges, 0., 0., pnt1); + pnt(-1. + 2 * (double)(num + 1) / numSubEdges, 0., 0, pnt2); + x[0] = pnt1.x(); x[1] = pnt2.x(); + y[0] = pnt1.y(); y[1] = pnt2.y(); + z[0] = pnt1.z(); z[1] = pnt2.z(); + n[0] = n[1] = MEdge(_v[0], _v[1]).normal(); +} diff --git a/Geo/MLine.h b/Geo/MLine.h index d4ebc09a9b6ced78d4a3ef642aa0f97144cc2b73..1cb90314eb26197eb84d8ad77358abf465098a8b 100644 --- a/Geo/MLine.h +++ b/Geo/MLine.h @@ -133,14 +133,8 @@ class MLine3 : public MLine { } virtual MVertex *getVertexINP(int num){ return getVertexUNV(num); } virtual int getNumEdgeVertices() const { return 1; } - virtual int getNumEdgesRep(){ return 2; } - virtual void getEdgeRep(int num, double *x, double *y, double *z, SVector3 *n) - { - static const int e[2][2] = { - {0, 2}, {2, 1} - }; - _getEdgeRep(getVertex(e[num][0]), getVertex(e[num][1]), x, y, z, n); - } + virtual int getNumEdgesRep(); + virtual void getEdgeRep(int num, double *x, double *y, double *z, SVector3 *n); virtual void getEdgeVertices(const int num, std::vector<MVertex*> &v) const { v.resize(3); @@ -188,13 +182,8 @@ class MLineN : public MLine { virtual MVertex *getVertex(int num){ return num < 2 ? _v[num] : _vs[num - 2]; } virtual const MVertex *getVertex(int num) const{ return num < 2 ? _v[num] : _vs[num - 2]; } virtual int getNumEdgeVertices() const { return _vs.size(); } - virtual int getNumEdgesRep(){ return _vs.size() + 1; } - virtual void getEdgeRep(int num, double *x, double *y, double *z, SVector3 *n) - { - _getEdgeRep(getVertex((num == 0) ? 0 : num + 1), - getVertex((num == getNumEdgesRep() - 1) ? 1 : num + 2), - x, y, z, n); - } + virtual int getNumEdgesRep(); + virtual void getEdgeRep(int num, double *x, double *y, double *z, SVector3 *n); virtual void getEdgeVertices(const int num, std::vector<MVertex*> &v) const { v.resize(2 + _vs.size());