Skip to content
Snippets Groups Projects
Commit 92b12811 authored by Akash Anand's avatar Akash Anand
Browse files

*** empty log message ***

parent df6e7108
No related branches found
No related tags found
No related merge requests found
...@@ -30,6 +30,12 @@ class FM_Edge { ...@@ -30,6 +30,12 @@ class FM_Edge {
inline void SetEndPoint(double x, double y, double z) { inline void SetEndPoint(double x, double y, double z) {
_EP = new FM_Vertex(x,y,z); _EP = new FM_Vertex(x,y,z);
} }
inline bool IsPhysical() {
if (_curve)
return true;
else
false;
}
void F(double t, double &x, double &y, double &z); void F(double t, double &x, double &y, double &z);
bool Inverse(double x,double y,double z,double &t); bool Inverse(double x,double y,double z,double &t);
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
#include "Message.h" #include "Message.h"
void FM_Face::F(double u, double v, double &x, double &y, double &z) { void FM_Face::F(double u, double v, double &x, double &y, double &z) {
if (_edge.size() == 0) { if (_edge.size() == 4) {
_patch->F(u,v,x,y,z); _patch->F(u,v,x,y,z);
} }
else if (_edge.size() == 1) { else if (_edge.size() == 1) {
...@@ -15,17 +15,23 @@ void FM_Face::F(double u, double v, double &x, double &y, double &z) { ...@@ -15,17 +15,23 @@ void FM_Face::F(double u, double v, double &x, double &y, double &z) {
_patch->F(u*R,v,x,y,z); _patch->F(u*R,v,x,y,z);
} }
else if (_edge.size() == 4) { else if (_edge.size() == 4) {
double xD, yD, zD, uD, vD; bool isPhysical = (_edge[0]->IsPhysical()) && (_edge[1]->IsPhysical()) &&
double xU, yU, zU, uU, vU; (_edge[2]->IsPhysical()) && (_edge[3]->IsPhysical());
_edge[0]->F(v,xD,yD,zD); if (isPhysical)
_patch->Inverse(xD,yD,zD,uD,vD); _patch->F(u,v,x,y,z);
_edge[2]->F(1.-v,xU,yU,zU); else {
_patch->Inverse(xU,yU,zU,uU,vU); double xD, yD, zD, uD, vD;
double xU, yU, zU, uU, vU;
double U = uD + u * (uU - uD); _edge[0]->F(v,xD,yD,zD);
double V = vD; _patch->Inverse(xD,yD,zD,uD,vD);
_edge[2]->F(1.-v,xU,yU,zU);
_patch->F(U,V,x,y,z); _patch->Inverse(xU,yU,zU,uU,vU);
double U = uD + u * (uU - uD);
double V = vD;
_patch->F(U,V,x,y,z);
}
} }
else { else {
Msg::Info("Such a face not implemented yet"); Msg::Info("Such a face not implemented yet");
...@@ -35,10 +41,7 @@ void FM_Face::F(double u, double v, double &x, double &y, double &z) { ...@@ -35,10 +41,7 @@ void FM_Face::F(double u, double v, double &x, double &y, double &z) {
bool FM_Face::Inverse(double x,double y,double z,double &u, double &v) bool FM_Face::Inverse(double x,double y,double z,double &u, double &v)
{ {
if (_edge.size() == 0) { if (_edge.size() == 1) {
_patch->Inverse(x,y,z,u,v);
}
else if (_edge.size() == 1) {
double n[3], t[3], s[3], c[3], r[3]; double n[3], t[3], s[3], c[3], r[3];
_patch->F(0.,0.,c[0],c[1],c[2]); _patch->F(0.,0.,c[0],c[1],c[2]);
for (int i=0;i<3;i++) { for (int i=0;i<3;i++) {
...@@ -70,22 +73,28 @@ bool FM_Face::Inverse(double x,double y,double z,double &u, double &v) ...@@ -70,22 +73,28 @@ bool FM_Face::Inverse(double x,double y,double z,double &u, double &v)
u = norm / R; u = norm / R;
} }
else if (_edge.size() == 4) { else if (_edge.size() == 4) {
double U, V; bool isPhysical = (_edge[0]->IsPhysical()) && (_edge[1]->IsPhysical()) &&
_patch->Inverse(x,y,z,U,V); (_edge[2]->IsPhysical()) && (_edge[3]->IsPhysical());
double u0,v0,u1,v1; if (isPhysical)
double xD, yD, zD, uD, vD; _patch->Inverse(x,y,z,u,v);
double xU, yU, zU, uU, vU; else {
_edge[0]->F(0,xD,yD,zD); double U, V;
_patch->Inverse(xD,yD,zD,u0,v0); _patch->Inverse(x,y,z,U,V);
_edge[0]->F(1,xD,yD,zD); double u0,v0,u1,v1;
_patch->Inverse(xD,yD,zD,u1,v1); double xD, yD, zD, uD, vD;
v = (V-v0)/(v1-v0); double xU, yU, zU, uU, vU;
_edge[0]->F(v,xD,yD,zD); _edge[0]->F(0,xD,yD,zD);
_patch->Inverse(xD,yD,zD,uD,vD); _patch->Inverse(xD,yD,zD,u0,v0);
_edge[2]->F(1.-v,xU,yU,zU); _edge[0]->F(1,xD,yD,zD);
_patch->Inverse(xU,yU,zU,uU,vU); _patch->Inverse(xD,yD,zD,u1,v1);
v = (V-v0)/(v1-v0);
u = (U - uD) / (uU - uD); _edge[0]->F(v,xD,yD,zD);
_patch->Inverse(xD,yD,zD,uD,vD);
_edge[2]->F(1.-v,xU,yU,zU);
_patch->Inverse(xU,yU,zU,uU,vU);
u = (U - uD) / (uU - uD);
}
} }
else { else {
Msg::Info("Such a face not implemented yet"); Msg::Info("Such a face not implemented yet");
......
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