/[ff3d]/ff3d/solver/SurfaceMeshGenerator.cpp
ViewVC logotype

Diff of /ff3d/solver/SurfaceMeshGenerator.cpp

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1.3 by delpinux, Wed Feb 26 19:59:30 2003 UTC revision 1.4 by delpinux, Fri Feb 28 14:58:03 2003 UTC
# Line 30  Line 30 
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>
# Line 301  __createTriangles(const Shape& S, Line 305  __createTriangles(const Shape& S,
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);
# Line 371  generatesAllSufaceMeshes(const Problem& Line 357  generatesAllSufaceMeshes(const Problem&
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        }        }
# Line 389  generatesAllSufaceMeshes(const Problem& Line 375  generatesAllSufaceMeshes(const Problem&
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),
# Line 556  void plot2(const SurfaceMeshOfTriangles& Line 542  void plot2(const SurfaceMeshOfTriangles&
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!
# Line 889  generateSurfacicMesh(const Shape& S, Line 909  generateSurfacicMesh(const Shape& S,
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;
# Line 911  generateSurfacicMesh(const Shape& S, Line 943  generateSurfacicMesh(const Shape& S,
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    
# Line 932  generateSurfacicMesh(const Shape& S, Line 966  generateSurfacicMesh(const Shape& S,
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    
# Line 940  generateSurfacicMesh(const Shape& S, Line 973  generateSurfacicMesh(const Shape& S,
973      motherCell++;      motherCell++;
974    }    }
975    
976  //    plot2(s_mesh, toTreatHexahedra, SMesh);    //   plot2(s_mesh, toTreatHexahedra, SMesh);
977  }  }
978    
979    
# Line 1091  SurfaceMeshGenerator::~SurfaceMeshGenera Line 1124  SurfaceMeshGenerator::~SurfaceMeshGenera
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    

Legend:
Removed from v.1.3  
changed lines
  Added in v.1.4

savannah-hackers-public@gnu.org
ViewVC Help
Powered by ViewVC 1.1.26