Skip to content
Snippets Groups Projects
Commit bf3dc102 authored by Christophe Geuzaine's avatar Christophe Geuzaine
Browse files

pp

parent fad13778
Branches
Tags
No related merge requests found
#ifndef _PARAMCOORD_H_ #ifndef _PARAMCOORD_H_
#define _PARAMCOORD_H_ #define _PARAMCOORD_H_
class ParamCoord class ParamCoord
{ {
public: public:
virtual void exportParamCoord(MVertex *v, const SPoint3 &uvw) {}; virtual void exportParamCoord(MVertex *v, const SPoint3 &uvw) {};
virtual int nCoord(MVertex* vert) = 0; // Number of parametric coordinates for vertex // Number of parametric coordinates for vertex
virtual SPoint3 getUvw(MVertex* vert) = 0; // Get parametric coordinates of vertex virtual int nCoord(MVertex* vert) = 0;
virtual SPoint3 uvw2Xyz(MVertex* vert, const SPoint3 &uvw) = 0; // Calculate physical coordinates from parametric coordinates of vertex // Get parametric coordinates of vertex
virtual void gXyz2gUvw(MVertex* vert, const SPoint3 &uvw, const SPoint3 &gXyz, SPoint3 &gUvw) = 0; // Calculate derivatives w.r.t parametric coordinates virtual SPoint3 getUvw(MVertex* vert) = 0;
virtual void gXyz2gUvw(MVertex* vert, const SPoint3 &uvw, const std::vector<SPoint3> &gXyz, std::vector<SPoint3> &gUvw) = 0; // Calculate derivatives w.r.t parametric coordinates // Calculate physical coordinates from parametric coordinates of vertex
virtual SPoint3 uvw2Xyz(MVertex* vert, const SPoint3 &uvw) = 0;
// Calculate derivatives w.r.t parametric coordinates
virtual void gXyz2gUvw(MVertex* vert, const SPoint3 &uvw,
const SPoint3 &gXyz, SPoint3 &gUvw) = 0;
// Calculate derivatives w.r.t parametric coordinates
virtual void gXyz2gUvw(MVertex* vert, const SPoint3 &uvw,
const std::vector<SPoint3> &gXyz, std::vector<SPoint3> &gUvw) = 0;
virtual ~ParamCoord() {} virtual ~ParamCoord() {}
}; };
class ParamCoordPhys3D : public ParamCoord class ParamCoordPhys3D : public ParamCoord
{ {
public: public:
int nCoord(MVertex* vert) { return 3; } int nCoord(MVertex* vert) { return 3; }
virtual SPoint3 getUvw(MVertex* vert) { return vert->point(); } virtual SPoint3 getUvw(MVertex* vert) { return vert->point(); }
virtual SPoint3 uvw2Xyz(MVertex* vert, const SPoint3 &uvw) { return uvw; } virtual SPoint3 uvw2Xyz(MVertex* vert, const SPoint3 &uvw) { return uvw; }
virtual void gXyz2gUvw(MVertex* vert, const SPoint3 &uvw, const SPoint3 &gXyz, SPoint3 &gUvw) { gUvw = gXyz; } virtual void gXyz2gUvw(MVertex* vert, const SPoint3 &uvw, const SPoint3 &gXyz,
virtual void gXyz2gUvw(MVertex* vert, const SPoint3 &uvw, const std::vector<SPoint3> &gXyz, std::vector<SPoint3> &gUvw) SPoint3 &gUvw){ gUvw = gXyz; }
virtual void gXyz2gUvw(MVertex* vert, const SPoint3 &uvw,
const std::vector<SPoint3> &gXyz, std::vector<SPoint3> &gUvw)
{ {
std::vector<SPoint3>::iterator itUvw=gUvw.begin(); std::vector<SPoint3>::iterator itUvw=gUvw.begin();
for (std::vector<SPoint3>::const_iterator itXyz=gXyz.begin(); itXyz != gXyz.end(); itXyz++) { for (std::vector<SPoint3>::const_iterator itXyz=gXyz.begin(); itXyz != gXyz.end();
itXyz++) {
*itUvw = *itXyz; *itUvw = *itXyz;
itUvw++; itUvw++;
} }
} }
}; };
class ParamCoordPhys2D : public ParamCoord class ParamCoordPhys2D : public ParamCoord
{ {
public: public:
int nCoord(MVertex* vert) { return 2; } int nCoord(MVertex* vert) { return 2; }
virtual SPoint3 getUvw(MVertex* vert) { return vert->point(); } virtual SPoint3 getUvw(MVertex* vert) { return vert->point(); }
virtual SPoint3 uvw2Xyz(MVertex* vert, const SPoint3 &uvw) { return uvw; } virtual SPoint3 uvw2Xyz(MVertex* vert, const SPoint3 &uvw) { return uvw; }
virtual void gXyz2gUvw(MVertex* vert, const SPoint3 &uvw, const SPoint3 &gXyz, SPoint3 &gUvw) { gUvw = gXyz; } virtual void gXyz2gUvw(MVertex* vert, const SPoint3 &uvw, const SPoint3 &gXyz,
virtual void gXyz2gUvw(MVertex* vert, const SPoint3 &uvw, const std::vector<SPoint3> &gXyz, std::vector<SPoint3> &gUvw) SPoint3 &gUvw) { gUvw = gXyz; }
virtual void gXyz2gUvw(MVertex* vert, const SPoint3 &uvw,
const std::vector<SPoint3> &gXyz, std::vector<SPoint3> &gUvw)
{ {
std::vector<SPoint3>::iterator itUvw=gUvw.begin(); std::vector<SPoint3>::iterator itUvw=gUvw.begin();
for (std::vector<SPoint3>::const_iterator itXyz=gXyz.begin(); itXyz != gXyz.end(); itXyz++) { for (std::vector<SPoint3>::const_iterator itXyz=gXyz.begin(); itXyz != gXyz.end();
itXyz++) {
*itUvw = *itXyz; *itUvw = *itXyz;
itUvw++; itUvw++;
} }
} }
}; };
class ParamCoordParent : public ParamCoord class ParamCoordParent : public ParamCoord
{ {
public: public:
int nCoord(MVertex* vert) { return vert->onWhat()->dim(); } int nCoord(MVertex* vert) { return vert->onWhat()->dim(); }
virtual void exportParamCoord(MVertex *v, const SPoint3 &uvw); virtual void exportParamCoord(MVertex *v, const SPoint3 &uvw);
virtual SPoint3 getUvw(MVertex* vert); virtual SPoint3 getUvw(MVertex* vert);
virtual SPoint3 uvw2Xyz(MVertex* vert, const SPoint3 &uvw); virtual SPoint3 uvw2Xyz(MVertex* vert, const SPoint3 &uvw);
virtual void gXyz2gUvw(MVertex* vert, const SPoint3 &uvw, const SPoint3 &gXyz, SPoint3 &gUvw); virtual void gXyz2gUvw(MVertex* vert, const SPoint3 &uvw, const SPoint3 &gXyz,
virtual void gXyz2gUvw(MVertex* vert, const SPoint3 &uvw, const std::vector<SPoint3> &gXyz, std::vector<SPoint3> &gUvw); SPoint3 &gUvw);
virtual void gXyz2gUvw(MVertex* vert, const SPoint3 &uvw,
const std::vector<SPoint3> &gXyz, std::vector<SPoint3> &gUvw);
}; };
#endif #endif
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment