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

pp

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