Skip to content
Snippets Groups Projects
Commit 23778b76 authored by Tristan Carrier Baudouin's avatar Tristan Carrier Baudouin
Browse files

choice of 0 or 1 layer of vertices

parent 4ea2d643
No related branches found
No related tags found
No related merge requests found
...@@ -59,6 +59,7 @@ class Metric{ ...@@ -59,6 +59,7 @@ class Metric{
class Node{ class Node{
private: private:
int layer; int layer;
int limit;
double h; double h;
Metric m; Metric m;
SPoint3 point; SPoint3 point;
...@@ -69,10 +70,12 @@ class Node{ ...@@ -69,10 +70,12 @@ class Node{
Node(SPoint3); Node(SPoint3);
~Node(); ~Node();
void set_layer(int); void set_layer(int);
void set_limit(int);
void set_size(double); void set_size(double);
void set_metric(Metric); void set_metric(Metric);
void set_point(SPoint3); void set_point(SPoint3);
int get_layer(); int get_layer();
int get_limit();
double get_size(); double get_size();
Metric get_metric(); Metric get_metric();
SPoint3 get_point(); SPoint3 get_point();
...@@ -239,10 +242,13 @@ double Metric::get_m33(){ ...@@ -239,10 +242,13 @@ double Metric::get_m33(){
/*********class Node*********/ /*********class Node*********/
Node::Node(){} Node::Node(){
limit = -1;
}
Node::Node(SPoint3 new_point){ Node::Node(SPoint3 new_point){
point = new_point; point = new_point;
limit = -1;
} }
Node::~Node(){} Node::~Node(){}
...@@ -251,6 +257,10 @@ void Node::set_layer(int new_layer){ ...@@ -251,6 +257,10 @@ void Node::set_layer(int new_layer){
layer = new_layer; layer = new_layer;
} }
void Node::set_limit(int new_limit){
limit = new_limit;
}
void Node::set_size(double new_h){ void Node::set_size(double new_h){
h = new_h; h = new_h;
} }
...@@ -267,6 +277,10 @@ int Node::get_layer(){ ...@@ -267,6 +277,10 @@ int Node::get_layer(){
return layer; return layer;
} }
int Node::get_limit(){
return limit;
}
double Node::get_size(){ double Node::get_size(){
return h; return h;
} }
...@@ -354,8 +368,8 @@ void Filler::treat_region(GRegion* gr){ ...@@ -354,8 +368,8 @@ void Filler::treat_region(GRegion* gr){
unsigned int i; unsigned int i;
int j; int j;
int count; int count;
int limit;
bool ok2; bool ok2;
bool val;
double x,y,z; double x,y,z;
SPoint3 point; SPoint3 point;
Node *node,*individual,*parent; Node *node,*individual,*parent;
...@@ -371,9 +385,10 @@ void Filler::treat_region(GRegion* gr){ ...@@ -371,9 +385,10 @@ void Filler::treat_region(GRegion* gr){
std::vector<MVertex*> boundary_vertices; std::vector<MVertex*> boundary_vertices;
std::set<MVertex*> temp; std::set<MVertex*> temp;
std::list<GFace*> faces; std::list<GFace*> faces;
std::set<MVertex*> retired; std::map<MVertex*,int> limits;
std::set<MVertex*>::iterator it; std::set<MVertex*>::iterator it;
std::list<GFace*>::iterator it2; std::list<GFace*>::iterator it2;
std::map<MVertex*,int>::iterator it3;
RTree<Node*,double,3,double> rtree; RTree<Node*,double,3,double> rtree;
Frame_field::init_region(gr); Frame_field::init_region(gr);
...@@ -385,37 +400,47 @@ void Filler::treat_region(GRegion* gr){ ...@@ -385,37 +400,47 @@ void Filler::treat_region(GRegion* gr){
temp.clear(); temp.clear();
new_vertices.clear(); new_vertices.clear();
faces.clear(); faces.clear();
retired.clear(); limits.clear();
faces = gr->faces(); faces = gr->faces();
for(it2=faces.begin();it2!=faces.end();it2++){ for(it2=faces.begin();it2!=faces.end();it2++){
gf = *it2; gf = *it2;
val = code(gf->tag()); limit = code(gf->tag());
for(i=0;i<gf->getNumMeshElements();i++){ for(i=0;i<gf->getNumMeshElements();i++){
element = gf->getMeshElement(i); element = gf->getMeshElement(i);
for(j=0;j<element->getNumVertices();j++){ for(j=0;j<element->getNumVertices();j++){
vertex = element->getVertex(j); vertex = element->getVertex(j);
if(val){ temp.insert(vertex);
retired.insert(vertex); limits.insert(std::pair<MVertex*,int>(vertex,limit));
}
//temp.insert(vertex);
} }
} }
} }
for(i=0;i<gr->getNumMeshElements();i++){ /*for(i=0;i<gr->getNumMeshElements();i++){
element = gr->getMeshElement(i); element = gr->getMeshElement(i);
for(j=0;j<element->getNumVertices();j++){ for(j=0;j<element->getNumVertices();j++){
vertex = element->getVertex(j); vertex = element->getVertex(j);
temp.insert(vertex); temp.insert(vertex);
} }
}*/
for(it=temp.begin();it!=temp.end();it++){
if((*it)->onWhat()->dim()==1){
boundary_vertices.push_back(*it);
}
} }
for(it=temp.begin();it!=temp.end();it++){ for(it=temp.begin();it!=temp.end();it++){
if((*it)->onWhat()->dim()<3){ if((*it)->onWhat()->dim()==2){
boundary_vertices.push_back(*it); boundary_vertices.push_back(*it);
} }
} }
/*for(it=temp.begin();it!=temp.end();it++){
if((*it)->onWhat()->dim()<3){
boundary_vertices.push_back(*it);
}
}*/
//std::ofstream file("nodes.pos"); //std::ofstream file("nodes.pos");
//file << "View \"test\" {\n"; //file << "View \"test\" {\n";
...@@ -427,10 +452,12 @@ void Filler::treat_region(GRegion* gr){ ...@@ -427,10 +452,12 @@ void Filler::treat_region(GRegion* gr){
node = new Node(SPoint3(x,y,z)); node = new Node(SPoint3(x,y,z));
compute_parameters(node,gr); compute_parameters(node,gr);
node->set_layer(0); node->set_layer(0);
it3 = limits.find(boundary_vertices[i]);
node->set_limit(it3->second);
rtree.Insert(node->min,node->max,node); rtree.Insert(node->min,node->max,node);
if(retired.find(boundary_vertices[i])==retired.end()){
fifo.push(node); fifo.push(node);
}
//print_node(node,file); //print_node(node,file);
} }
...@@ -440,6 +467,10 @@ void Filler::treat_region(GRegion* gr){ ...@@ -440,6 +467,10 @@ void Filler::treat_region(GRegion* gr){
fifo.pop(); fifo.pop();
garbage.push_back(parent); garbage.push_back(parent);
if(parent->get_limit()!=-1 && parent->get_layer()>=parent->get_limit()){
continue;
}
spawns.clear(); spawns.clear();
spawns.resize(6); spawns.resize(6);
...@@ -460,6 +491,7 @@ void Filler::treat_region(GRegion* gr){ ...@@ -460,6 +491,7 @@ void Filler::treat_region(GRegion* gr){
if(inside_domain(octree,x,y,z)){ if(inside_domain(octree,x,y,z)){
compute_parameters(individual,gr); compute_parameters(individual,gr);
individual->set_layer(parent->get_layer()+1); individual->set_layer(parent->get_layer()+1);
individual->set_limit(parent->get_limit());
if(far_from_boundary(octree,individual)){ if(far_from_boundary(octree,individual)){
wrapper.set_ok(1); wrapper.set_ok(1);
...@@ -727,22 +759,25 @@ double Filler::improvement(GEntity* ge,MElementOctree* octree,SPoint3 point,doub ...@@ -727,22 +759,25 @@ double Filler::improvement(GEntity* ge,MElementOctree* octree,SPoint3 point,doub
return average; return average;
} }
bool Filler::code(int x){ int Filler::code(int tag){
bool val; int limit;
std::string s; std::string s;
std::stringstream s2; std::stringstream s2;
val = 0; limit = -1;
s2 << x; s2 << tag;
s = s2.str(); s = s2.str();
if(s.length()>=5){ if(s.length()>=5){
if(s.at(0)=='1' && s.at(1)=='2' && s.at(2)=='3' && s.at(3)=='4' && s.at(4)=='5'){ if(s.at(0)=='1' && s.at(1)=='1' && s.at(2)=='1' && s.at(3)=='1' && s.at(4)=='1'){
val = 1; limit = 0;
}
else if(s.at(0)=='2' && s.at(1)=='2' && s.at(2)=='2' && s.at(3)=='2' && s.at(4)=='2'){
limit = 1;
} }
} }
return val; return limit;
} }
int Filler::get_nbr_new_vertices(){ int Filler::get_nbr_new_vertices(){
...@@ -779,29 +814,29 @@ void Filler::print_node(Node* node,std::ofstream& file){ ...@@ -779,29 +814,29 @@ void Filler::print_node(Node* node,std::ofstream& file){
h = node->get_size(); h = node->get_size();
m = node->get_metric(); m = node->get_metric();
x1 = x + h*m.get_m11(); x1 = x + k1*h*m.get_m11();
y1 = y + h*m.get_m21(); y1 = y + k1*h*m.get_m21();
z1 = z + h*m.get_m31(); z1 = z + k1*h*m.get_m31();
x2 = x - h*m.get_m11(); x2 = x - k1*h*m.get_m11();
y2 = y - h*m.get_m21(); y2 = y - k1*h*m.get_m21();
z2 = z - h*m.get_m31(); z2 = z - k1*h*m.get_m31();
x3 = x + h*m.get_m12(); x3 = x + k1*h*m.get_m12();
y3 = y + h*m.get_m22(); y3 = y + k1*h*m.get_m22();
z3 = z + h*m.get_m32(); z3 = z + k1*h*m.get_m32();
x4 = x - h*m.get_m12(); x4 = x - k1*h*m.get_m12();
y4 = y - h*m.get_m22(); y4 = y - k1*h*m.get_m22();
z4 = z - h*m.get_m32(); z4 = z - k1*h*m.get_m32();
x5 = x + h*m.get_m13(); x5 = x + k1*h*m.get_m13();
y5 = y + h*m.get_m23(); y5 = y + k1*h*m.get_m23();
z5 = z + h*m.get_m33(); z5 = z + k1*h*m.get_m33();
x6 = x - h*m.get_m13(); x6 = x - k1*h*m.get_m13();
y6 = y - h*m.get_m23(); y6 = y - k1*h*m.get_m23();
z6 = z - h*m.get_m33(); z6 = z - k1*h*m.get_m33();
print_segment(SPoint3(x,y,z),SPoint3(x1,y1,z1),file); print_segment(SPoint3(x,y,z),SPoint3(x1,y1,z1),file);
print_segment(SPoint3(x,y,z),SPoint3(x2,y2,z2),file); print_segment(SPoint3(x,y,z),SPoint3(x2,y2,z2),file);
......
...@@ -26,7 +26,7 @@ class Filler{ ...@@ -26,7 +26,7 @@ class Filler{
void compute_parameters(Node*,GEntity*); void compute_parameters(Node*,GEntity*);
void create_spawns(GEntity*,MElementOctree*,Node*,std::vector<Node*>&); void create_spawns(GEntity*,MElementOctree*,Node*,std::vector<Node*>&);
double improvement(GEntity*,MElementOctree*,SPoint3,double,SVector3); double improvement(GEntity*,MElementOctree*,SPoint3,double,SVector3);
bool code(int); int code(int);
void print_segment(SPoint3,SPoint3,std::ofstream&); void print_segment(SPoint3,SPoint3,std::ofstream&);
void print_node(Node*,std::ofstream&); void print_node(Node*,std::ofstream&);
public: public:
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment