30 |
#include <Structured3DMesh.hpp> |
#include <Structured3DMesh.hpp> |
31 |
|
|
32 |
#include <Scene.hpp> |
#include <Scene.hpp> |
33 |
|
|
34 |
|
#include <Union.hpp> |
35 |
|
#include <Intersection.hpp> |
36 |
|
|
37 |
#include <Problem.hpp> |
#include <Problem.hpp> |
38 |
|
|
39 |
#include <Mesh.hpp> |
#include <Mesh.hpp> |
305 |
} |
} |
306 |
} |
} |
307 |
|
|
|
|
|
|
for (EdgePairList::iterator t = localTriangleList.begin(); |
|
|
t != localTriangleList.end(); ++t) { |
|
|
size_t nbInside = 0; |
|
|
for (size_t k =0; k<3; ++k) { |
|
|
std::map<Edge::Pair, size_t>::iterator eRef |
|
|
= edgesRef.find((*t)[k]); |
|
|
if ((*eRef).second == 1) |
|
|
nbInside ++; |
|
|
} |
|
|
if (nbInside == 3) { |
|
|
ffout(3) << "yaduboulo\n"; |
|
|
triangleList.push_front(*t); |
|
|
} else { |
|
|
ffout(3) << "cava " << nbInside << '\n'; |
|
|
} |
|
|
} |
|
|
|
|
308 |
for (EdgePairList::iterator t = localTriangleList.begin(); |
for (EdgePairList::iterator t = localTriangleList.begin(); |
309 |
t != localTriangleList.end(); ++t) { |
t != localTriangleList.end(); ++t) { |
310 |
triangleList.push_front(*t); |
triangleList.push_front(*t); |
357 |
|
|
358 |
dynamic_cast<Structured3DMesh&>(M).createReferences(Omega); |
dynamic_cast<Structured3DMesh&>(M).createReferences(Omega); |
359 |
|
|
360 |
const Scene& S =Omega.scene(); |
const Scene& scene =Omega.scene(); |
361 |
|
|
362 |
std::set<Reference::Representation> referencesList; |
std::set<Reference::Representation> referencesList; |
363 |
for(POVRayReferences::iterator povRef = povRefList.begin(); |
for(POVRayReferences::iterator povRef = povRefList.begin(); |
364 |
povRef!= povRefList.end(); ++povRef) { |
povRef!= povRefList.end(); ++povRef) { |
365 |
Reference::Representation ref; |
Reference::Representation ref; |
366 |
ref.resize(S.nbObjects()); |
ref.resize(scene.nbObjects()); |
367 |
for (size_t i=0; i<S.nbObjects(); ++i) { |
for (size_t i=0; i<scene.nbObjects(); ++i) { |
368 |
const Object& O = S.object(i); |
const Object& O = scene.object(i); |
369 |
if (O.reference() == povRef->first) { |
if (O.reference() == povRef->first) { |
370 |
dynamic_cast<Structured3DMesh&>(M).createReferences(Omega,O.reference()); |
dynamic_cast<Structured3DMesh&>(M).createReferences(Omega,O.reference()); |
371 |
} |
} |
375 |
|
|
376 |
for(POVRayReferences::iterator povRef = povRefList.begin(); |
for(POVRayReferences::iterator povRef = povRefList.begin(); |
377 |
povRef!= povRefList.end(); ++povRef) { |
povRef!= povRefList.end(); ++povRef) { |
378 |
for (size_t i=0; i<S.nbObjects(); ++i) { |
for (size_t i=0; i<scene.nbObjects(); ++i) { |
379 |
const Object& O = S.object(i); |
const Object& O = scene.object(i); |
380 |
if (O.reference() == povRef->first) { |
if (O.reference() == povRef->first) { |
381 |
|
|
382 |
SurfaceMeshOfTriangles* surfMesh |
SurfaceMeshOfTriangles* surfMesh |
383 |
= new SurfaceMeshOfTriangles; |
= new SurfaceMeshOfTriangles; |
384 |
|
|
385 |
Reference::Representation ref; |
Reference::Representation ref; |
386 |
ref.resize(S.nbObjects()); |
ref.resize(scene.nbObjects()); |
387 |
|
|
388 |
ref[i] = true; |
ref[i] = true; |
389 |
|
|
390 |
this->generateSurfacicMesh(*(O.shape()), |
this->generateSurfacicMesh(O, |
391 |
Omega, |
Omega, |
392 |
*surfMesh, |
*surfMesh, |
393 |
dynamic_cast<Structured3DMesh&>(M), |
dynamic_cast<Structured3DMesh&>(M), |
542 |
*/ |
*/ |
543 |
void |
void |
544 |
SurfaceMeshGenerator:: |
SurfaceMeshGenerator:: |
545 |
generateSurfacicMesh(const Shape& S, |
generateSurfacicMesh(const Object& O, |
546 |
const Domain& Omega, |
const Domain& Omega, |
547 |
SurfaceMeshOfTriangles& s_mesh, |
SurfaceMeshOfTriangles& s_mesh, |
548 |
Structured3DMesh& SMesh, |
Structured3DMesh& SMesh, |
549 |
const Reference::Representation& ref, |
const Reference::Representation& ref, |
550 |
const std::set<Reference::Representation>& referencesList) |
const std::set<Reference::Representation>& referencesList) |
551 |
{ |
{ |
552 |
|
const Shape& S = *(O.shape()); |
553 |
|
|
554 |
|
typedef std::map<TinyVector<3>, Object*, |
555 |
|
SurfaceMeshGenerator::Internals::__ltv> ObjectReferences; |
556 |
|
|
557 |
|
ObjectReferences otherReferences; |
558 |
|
|
559 |
|
const Object& object = Omega.object(); |
560 |
|
const Scene& scene = Omega.scene(); |
561 |
|
|
562 |
|
|
563 |
|
switch (object.shapeType()) { |
564 |
|
case Shape::union_: { |
565 |
|
const Union& U = static_cast<const Union&>(*(object.shape())); |
566 |
|
for(Union::const_iterator i = U.begin(); |
567 |
|
i != U.end(); ++i) { |
568 |
|
otherReferences[(*(*i)).reference()] = *i; |
569 |
|
} |
570 |
|
break; |
571 |
|
} case Shape::intersection: { |
572 |
|
const Intersection& I = static_cast<const Intersection&>(*(object.shape())); |
573 |
|
for(Intersection::const_iterator i = I.begin(); |
574 |
|
i != I.end(); ++i) { |
575 |
|
otherReferences[(*(*i)).reference()] = *i; |
576 |
|
} |
577 |
|
break; |
578 |
|
} |
579 |
|
default: { fferr(0) << __FILE__ << ':' << __LINE__ << ": Not implemented\n"; |
580 |
|
std::exit(1); |
581 |
|
} |
582 |
|
} |
583 |
|
|
584 |
|
otherReferences.erase(O.reference()); |
585 |
|
|
586 |
for (size_t i = 0; i<SMesh.nbEdges(); i++) { |
for (size_t i = 0; i<SMesh.nbEdges(); i++) { |
587 |
Edge& e = SMesh.edge(i); |
Edge& e = SMesh.edge(i); |
588 |
#warning THIS TEST IS NOT ENOUGH! THINK TO THE BORDER! |
#warning THIS TEST IS NOT ENOUGH! THINK TO THE BORDER! |
909 |
} |
} |
910 |
} |
} |
911 |
|
|
912 |
(*__internals).triangleList.clear(); |
// (*__internals).triangleList.clear(); |
913 |
(*__internals).verticesList.clear(); |
// (*__internals).verticesList.clear(); |
914 |
|
|
915 |
|
|
916 |
(*__internals).__createTriangles(S, ref); |
// (*__internals).__createTriangles(S, ref); |
917 |
|
|
918 |
|
// for(ObjectReferences::iterator i = otherReferences.begin(); |
919 |
|
// i != otherReferences.end(); ++i) { |
920 |
|
// for(size_t n = 0; n<scene.nbObjects(); ++n) { |
921 |
|
// Reference::Representation otherRef; |
922 |
|
// otherRef.resize(scene.nbObjects()); |
923 |
|
|
924 |
|
// if (scene.object(n).reference() == ((*i).first)) { |
925 |
|
// otherRef[n] = true; |
926 |
|
// (*__internals).__createTriangles(*(scene.object(n).shape()), |
927 |
|
// otherRef); |
928 |
|
// } |
929 |
|
// } |
930 |
|
// } |
931 |
|
|
932 |
s_mesh.setNumberOfVertices((*__internals).verticesList.size()); |
s_mesh.setNumberOfVertices((*__internals).verticesList.size()); |
|
s_mesh.setNumberOfCells((*__internals).triangleList.size()); |
|
933 |
|
|
934 |
//! copies vertices into the s_mesh. |
//! copies vertices into the s_mesh. |
935 |
int i = 0; |
int i = 0; |
943 |
i++; |
i++; |
944 |
} |
} |
945 |
|
|
946 |
std::set<const Cell*> toTreatHexahedra; |
// std::set<const Cell*> toTreatHexahedra; |
947 |
std::set_difference (cuttedHexahedra.begin(), cuttedHexahedra.end(), |
// std::set_difference (cuttedHexahedra.begin(), cuttedHexahedra.end(), |
948 |
meshedHexahedra.begin(), meshedHexahedra.end(), |
// meshedHexahedra.begin(), meshedHexahedra.end(), |
949 |
inserter(toTreatHexahedra, toTreatHexahedra.begin())); |
// inserter(toTreatHexahedra, toTreatHexahedra.begin())); |
950 |
|
|
951 |
i = 0; |
i = 0; |
952 |
|
|
953 |
|
s_mesh.setNumberOfCells((*__internals).triangleList.size()); |
954 |
|
|
955 |
SurfaceMeshGenerator::Internals::MotherCellList::iterator motherCell |
SurfaceMeshGenerator::Internals::MotherCellList::iterator motherCell |
956 |
= (*__internals).cellList.begin(); |
= (*__internals).cellList.begin(); |
957 |
|
|
966 |
s_mesh.cell(i) = Triangle(V0,V1,V2); |
s_mesh.cell(i) = Triangle(V0,V1,V2); |
967 |
#warning SHOULD USE BC NUMBER (ie OBJECT NUMBER IN SCENE INSTEAD) |
#warning SHOULD USE BC NUMBER (ie OBJECT NUMBER IN SCENE INSTEAD) |
968 |
|
|
|
|
|
969 |
s_mesh.cell(i).reference() = 1; |
s_mesh.cell(i).reference() = 1; |
970 |
s_mesh.cell(i).setMother(*motherCell); |
s_mesh.cell(i).setMother(*motherCell); |
971 |
|
|
973 |
motherCell++; |
motherCell++; |
974 |
} |
} |
975 |
|
|
976 |
// plot2(s_mesh, toTreatHexahedra, SMesh); |
// plot2(s_mesh, toTreatHexahedra, SMesh); |
977 |
} |
} |
978 |
|
|
979 |
|
|
1124 |
// // responsible for drawing the actors it has. We also set the background |
// // responsible for drawing the actors it has. We also set the background |
1125 |
// // color here |
// // color here |
1126 |
// // |
// // |
1127 |
// ren1->AddActor( anActor1 ); |
// // ren1->AddActor( anActor1 ); |
1128 |
// ren1->AddActor( anActor2 ); |
// ren1->AddActor( anActor2 ); |
1129 |
// ren1->SetBackground( 0.1, 0.2, 0.4 ); |
// ren1->SetBackground( 0.1, 0.2, 0.4 ); |
1130 |
|
|