ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/REPOS_ERICCA/magic/lib/CAD4FE/src/CAD4FE_LoopCriteria.cpp
Revision: 253
Committed: Tue Jul 13 19:40:46 2010 UTC (14 years, 10 months ago) by francois
File size: 2818 byte(s)
Log Message:
changement de hiearchie et utilisation de ccmake + mise a jour

File Contents

# User Rev Content
1 foucault 27 //---------------------------------------------------------------------------
2    
3    
4     //---------------------------------------------------------------------------
5     // include MAGIC Headers
6     #include "gestionversion.h"
7     #include <MG_GEOMETRIE.h>
8     #include <MG_MAILLAGE.h>
9     #include <MG_MAILLAGE_OUTILS.h>
10     #include <ot_mathematique.h>
11     #include <ot_quadrature_gauss.h>
12    
13     #include "CAD4FE_MCEdge.h"
14     #include "CAD4FE_MCFace.h"
15     #include "CAD4FE_PolyCurve.h"
16     #include "CAD4FE_MCAA.h"
17     #include "CAD4FE_MCBody.h"
18     #include "CAD4FE_mg_utils.h"
19     #include "CAD4FE_Intersection_Plane_MG_MAILLAGE.h"
20     #include "ot_algorithme_geometrique.h"
21    
22     #pragma hdrstop
23    
24     #include "CAD4FE_LoopCriteria.h"
25    
26     //---------------------------------------------------------------------------
27    
28     #pragma package(smart_init)
29    
30     using namespace CAD4FE;
31    
32     LoopCriteria::LoopCriteria(MCAA * __mcaa, MCFace * __mcFace, std::vector < MCEdge * > __loop, int __nbSegMin)
33     : _loop(__loop), _mcaa(__mcaa), _mcFace(__mcFace)
34     {
35     _nbSegMin = __nbSegMin;
36     Update();
37     }
38    
39     void LoopCriteria::Update()
40     {
41     MCEdge * mcEdge; MG_ARETE * refEdge; PolyCurve * pc;
42     if (_mcFace->get_nb_ccf() != 0)
43     {
44     _score = 0;
45     return;
46     }
47    
48     for (unsigned itMCEdge = 0; itMCEdge < _loop.size(); itMCEdge++)
49     {
50     mcEdge = _loop[itMCEdge];
51     if (mcEdge->get_nb_ccf() != 0)
52     {
53     _score = 0;
54     return;
55     }
56     }
57    
58     _nbSeg=0;
59     for (unsigned itMCEdge = 0; itMCEdge < _loop.size(); itMCEdge++){
60     MCEdge * mcEdge = _loop[itMCEdge];
61     _nbSeg += _mcaa->GetFEMeshSegmentCount(mcEdge);
62     }
63    
64     if ( _nbSeg < _nbSegMin )
65     {
66     _score = 1-((double)_nbSeg)/_nbSegMin;
67     }
68     else
69     {
70     _score = 0;
71     }
72     }
73    
74     int LoopCriteria::GetNbFEMeshSeg()
75     {
76     return _nbSeg;
77     }
78    
79     int LoopCriteria::GetNbFEMeshSegMin()
80     {
81     return _nbSegMin;
82     }
83    
84     double LoopCriteria::EdgeSplitScore(MCEdge * __mcEdge, double __splitPoint[3])
85     {
86     std::vector<MCVertex*> extremities;
87     _mcaa->GetMCBody()->Edge_GetVertices(__mcEdge, extremities);
88     if (! (extremities.size () == 1 || (extremities.size()==2 && extremities[0] == extremities[1])))
89     return 0;
90    
91    
92     int mcEdgeSegCount = _mcaa->GetFEMeshSegmentCount(__mcEdge);
93    
94     if ( mcEdgeSegCount >= 2 )
95     {
96     double L = __mcEdge->GetPolyCurve()->get_longueur();
97     double xyz[3];
98     __mcEdge->evaluer(.5*L,xyz);
99     double meshSize = _mcaa->GetSize(xyz);
100     __mcEdge->evaluer(meshSize,__splitPoint);
101     return 1;
102     }
103    
104     return 0;
105     }
106    
107     double LoopCriteria::DeletionScore()
108     {
109     return _score;
110     }
111    
112     std::vector < MCEdge * > & LoopCriteria::GetLoop()
113     {
114     return _loop;
115     }
116    
117     MCFace * LoopCriteria::GetFace()
118     {
119     return _mcFace;
120     }