358 |
const ObjectToTreat& O1, |
const ObjectToTreat& O1, |
359 |
const ObjectToTreat& O2); |
const ObjectToTreat& O2); |
360 |
|
|
361 |
void __generateMesh(Structured3DMesh& SMesh, |
void __generateMesh(const Domain& omega, Structured3DMesh& SMesh, |
362 |
const Object& object, const size_t& level, |
const Object& object, const size_t& level, |
363 |
std::stack<ReferenceCounting<ObjectToTreat> >& objectStack); |
std::stack<ReferenceCounting<ObjectToTreat> >& objectStack); |
364 |
|
|
3147 |
void plothexa(size_t ncase,std::set<const Cell*>& cuttedHexahedra); |
void plothexa(size_t ncase,std::set<const Cell*>& cuttedHexahedra); |
3148 |
|
|
3149 |
void SurfaceMeshGenerator::Internals:: |
void SurfaceMeshGenerator::Internals:: |
3150 |
__generateMesh(Structured3DMesh& SMesh, |
__generateMesh(const Domain& omega, |
3151 |
|
Structured3DMesh& SMesh, |
3152 |
const Object& object, const size_t& level, |
const Object& object, const size_t& level, |
3153 |
std::stack<ReferenceCounting<ObjectToTreat> >& objectStack) |
std::stack<ReferenceCounting<ObjectToTreat> >& objectStack) |
3154 |
{ |
{ |
3159 |
size_t j=0; |
size_t j=0; |
3160 |
for (Union::const_iterator i = U.begin(); |
for (Union::const_iterator i = U.begin(); |
3161 |
i != U.end(); ++i,++j) { |
i != U.end(); ++i,++j) { |
3162 |
__generateMesh(SMesh,(*(*i)), level+1, objectStack); |
__generateMesh(omega, SMesh,(*(*i)), level+1, objectStack); |
3163 |
if (j>0) { |
if (j>0) { |
3164 |
// get first object of the intersection |
// get first object of the intersection |
3165 |
ReferenceCounting<ObjectToTreat> O1 = objectStack.top(); |
ReferenceCounting<ObjectToTreat> O1 = objectStack.top(); |
3195 |
size_t j=0; |
size_t j=0; |
3196 |
for(Intersection::const_iterator i = I.begin(); |
for(Intersection::const_iterator i = I.begin(); |
3197 |
i != I.end(); ++i,++j) { |
i != I.end(); ++i,++j) { |
3198 |
__generateMesh(SMesh,(*(*i)), level+1, objectStack); |
__generateMesh(omega, SMesh,(*(*i)), level+1, objectStack); |
3199 |
if (j>0) { |
if (j>0) { |
3200 |
// get first object of the intersection |
// get first object of the intersection |
3201 |
ReferenceCounting<ObjectToTreat> O1 = objectStack.top(); |
ReferenceCounting<ObjectToTreat> O1 = objectStack.top(); |
3230 |
} |
} |
3231 |
case Shape::not_: { |
case Shape::not_: { |
3232 |
const Object& notObject = *(static_cast<const Not&>(*object.shape()).object()); |
const Object& notObject = *(static_cast<const Not&>(*object.shape()).object()); |
3233 |
__generateMesh(SMesh, notObject, |
__generateMesh(omega, SMesh, notObject, |
3234 |
level+1, objectStack); |
level+1, objectStack); |
3235 |
|
|
3236 |
ObjectToTreat& o = (*objectStack.top()); |
ObjectToTreat& o = (*objectStack.top()); |
3251 |
|
|
3252 |
ObjectToTreat& o = (*objectStack.top()); |
ObjectToTreat& o = (*objectStack.top()); |
3253 |
if(object.hasReference()) { |
if(object.hasReference()) { |
3254 |
static size_t ref=1; |
const size_t ref = omega.reference(object.reference()); |
3255 |
for (size_t i=0; i<(*o.trianglelist).size(); ++i) { |
for (size_t i=0; i<(*o.trianglelist).size(); ++i) { |
3256 |
Triangle& t = (*o.trianglelist)[i]; |
Triangle& t = (*o.trianglelist)[i]; |
3257 |
t.reference()=ref; |
t.reference()=ref; |
3258 |
} |
} |
|
ffout(0) << "Reference set to " << ref << '\n'; |
|
|
ref++; |
|
|
} else { |
|
|
ffout(0) << "has no reference!\n"; |
|
3259 |
} |
} |
3260 |
} |
} |
3261 |
|
|
3286 |
\warning Implementation could be improved and function size reduced. |
\warning Implementation could be improved and function size reduced. |
3287 |
*/ |
*/ |
3288 |
void SurfaceMeshGenerator:: |
void SurfaceMeshGenerator:: |
3289 |
generateSurfacicMesh(const Domain& Omega, |
generateSurfacicMesh(const Domain& omega, |
3290 |
SurfaceMeshOfTriangles& s_mesh, |
SurfaceMeshOfTriangles& s_mesh, |
3291 |
Structured3DMesh& SMesh) |
Structured3DMesh& SMesh) |
3292 |
{ |
{ |
3293 |
typedef std::map<TinyVector<3>, Object*> ObjectReferences; |
typedef std::map<TinyVector<3>, Object*> ObjectReferences; |
3294 |
|
|
3295 |
const Object& object = Omega.object(); |
const Object& object = omega.object(); |
3296 |
const Scene& scene = Omega.scene(); |
const Scene& scene = omega.scene(); |
3297 |
|
|
3298 |
(*__internals).edgesRefVertex.resize(scene.nbObjects()); |
(*__internals).edgesRefVertex.resize(scene.nbObjects()); |
3299 |
|
|
3302 |
} |
} |
3303 |
|
|
3304 |
std::stack<ReferenceCounting<SurfaceMeshGenerator::Internals::ObjectToTreat> > objectStack; |
std::stack<ReferenceCounting<SurfaceMeshGenerator::Internals::ObjectToTreat> > objectStack; |
3305 |
(*__internals).__generateMesh(SMesh,object, 0, objectStack); |
(*__internals).__generateMesh(omega, SMesh,object, 0, objectStack); |
3306 |
|
|
3307 |
SurfaceMeshGenerator::Internals::ObjectToTreat& o = (*objectStack.top()); |
SurfaceMeshGenerator::Internals::ObjectToTreat& o = (*objectStack.top()); |
3308 |
std::set<int> refset; |
std::set<int> refset; |