31 #pragma package(smart_init)
68 _mcEdge(__mcEdge), _mcaa(__mcaa)
86 if (it_lec !=
_lec.end())
87 return it_lec->second;
113 if (it_lec !=
_lec.end() )
115 delete it_lec->second;
121 _lec.insert ( std::make_pair(__seg,lec) );
127 double point[3], normal[3];
132 for (
unsigned i=0; i<3; i++)
134 point[i] = .5*(x[0][i]+x[1][i]);
135 normal[i] = x[1][i] - point[i];
140 if (startSeg == NULL)
154 if (it_lec !=
_lec.end() )
156 delete it_lec->second;
170 for ( it_lec =
_lec.begin();
171 it_lec !=
_lec.end();
175 lec->
Update(__reconstructNormalOffsets);
185 for ( it_lec =
_lec.begin();
186 it_lec !=
_lec.end();
191 lec->
Update(__reconstructNormalOffsets);
201 for ( it_lec =
_lec.begin();
202 it_lec !=
_lec.end();
207 ec->
Update(__reconstructNormalOffsets);
215 int touchingSegCount;
218 touchingSegCount = 0;
219 for ( it_lec =
_lec.begin();
220 it_lec !=
_lec.end();
233 if (touchingSegCount > 1)
240 for ( it_lec =
_lec.begin();
241 it_lec !=
_lec.end();
247 printf(
"Warning: while updating local criteria of MCEdge %lu, local edge criteria's edge became null\n",
_mcEdge->
get_id());
254 it_lec =
_lec.begin();
259 it_lec !=
_lec.end();
265 printf(
"Warning: while updating local criteria of MCEdge %lu, the MCEdge %lu is different than the first one\n",
_mcEdge->
get_id(), ec->
GetEdge()->
get_id() );
279 std::vector < MCVertex * > mcVertices;
285 mcVertices[0]->get_point()->evaluer(xyz[0]);
286 mcVertices[1]->get_point()->evaluer(xyz[1]);
289 double criterionEdgeLength;
296 if (length > limitLength)
305 if (mcVertices.size() == 2 && mcVertices[0] != mcVertices[1] )
310 std::set < MCEdge * > vertex_edges;
312 if (vertex_edges.size() == 1)
319 if (mcVertexRank1 == NULL)
324 if (mcVertexRank1 == mcVertices[0] )
325 otherVertex = mcVertices[1];
327 otherVertex = mcVertices[0];
329 return ( -1 + length / limitLength );
342 mcVertexRank1 = mcVertices[0];
344 return ( -1 + length / limitLength );
387 std::set<MG_NOEUD*> nodes;
389 for ( it_lec =
_lec.begin();
390 it_lec !=
_lec.end();
396 if (
node->get_lien_topologie()
397 &&
node->get_lien_topologie()->get_dimension() == 1
398 &&
node->get_lien_segment()->get_nb() == 2 )
401 segs[0] =
node->get_lien_segment()->get(0);
402 segs[1] =
node->get_lien_segment()->get(1);
436 if (
node->get_lien_segment()->get_nb() != 2 )
440 segs[0] =
node->get_lien_segment()->get(0);
441 segs[1] =
node->get_lien_segment()->get(1);
445 MCEdge * mcEdge = (
MCEdge*) segs[i]->get_lien_topologie();
455 if ( vecEC[0] && vecEC[1]
466 double edge_length=0;
468 for ( it_lec =
_lec.begin();
469 it_lec !=
_lec.end();
475 edge_length += length;
486 double edge_length = 0;
494 for ( it_lec =
_lec.begin();
495 it_lec !=
_lec.end();
508 edge_length += length;
512 if (edge_length != 0.0)
513 result /= edge_length;
518 result = std::min(result, .01);
519 else if (lengthScore > result)
520 result = lengthScore;
522 if (edge_length == 0.0)
530 std::vector <LocalEdgeCriteria*> result;
534 for ( it_lec =
_lec.begin();
535 it_lec !=
_lec.end();
539 result.push_back(lec);
548 if (__it !=
_lec.end() )
557 if (__it !=
_lec.end() )
568 for ( it_lec = __src->
_lec.begin();
569 it_lec != __src->
_lec.end();
574 _lec.insert(std::make_pair(seg,lec));
585 for ( it_lec =
_lec.begin();
586 it_lec !=
_lec.end();
std::map< MG_SEGMENT *, LocalEdgeCriteria * >::iterator LEC_Iterator
LocalEdgeCriteria * CreateLocalEdgeCriteria(MG_SEGMENT *__seg)
double GetLength() const
total length of all local segments
void ReInit(MG_SEGMENT *__touchingSeg)
double DeletionScore()
score of MCT operators
bool Delete(MG_SEGMENT *__seg)
void Update(MG_SEGMENT *__touchingSeg, bool __reconstructNormalOffsets)
double DeletionScore_EdgeLength() const
std::vector< LocalEdgeCriteria * > GetLocalEdgeCriteria()
std::map< MG_SEGMENT *, LocalEdgeCriteria * >::const_iterator LEC_CIterator
GlobalEdgeCriteria(MCEdge *, MCAA *)
LocalEdgeCriteria * GetFirstLocalEdgeCriteria(LEC_Iterator &__it)
double SplitScore(double __splitPoint[3])
void ChangeTopo(GlobalEdgeCriteria *__src)
LocalEdgeCriteria * GetNextLocalEdgeCriteria(LEC_Iterator &__it)
void Update(bool __reconstructNormalOffset=true)
MG_SEGMENT * GetSegment()
bool IsTouchingEdge(MCEdge *__mcEdge)
double DeletionScore() const
bool IsTouchingSegment(MG_SEGMENT *__segment)
MG_MAILLAGE * GetFEMesh() const
MCBody * GetMCBody() const
double GetMaxOverdensity()
double GetSize(double xyz[3])
GlobalEdgeCriteria * GetGlobalEdgeCriteria(MCEdge *__mcEdge)
MG_MAILLAGE * GetMCTess() const
MG_SEGMENT * FindClosestSeg(MCEdge *__mcEdge, double __P[3], double __N[3])
void Vertex_GetAdjacentEdges(MCVertex *__mcVertex, std::vector< MCEdge * > &__list)
void Edge_GetVertices(MCEdge *, std::vector< MCVertex * > &__mcVertices)
PolyCurve * GetPolyCurve()
double get_longueur(double __s_min=-1, double __s_max=-1, double precision=1E-6)
virtual TPL_SET< MG_ELEMENT_MAILLAGE * > * get_lien_maillage(void)
virtual int get_nb_ccf(void)
bool contient(MG_IDENTIFICATEUR *id)
virtual MG_NOEUD * get_noeud1(void)
virtual double get_longueur(void)
virtual MG_NOEUD * get_noeud2(void)
static void MG_NOEUD_GET_XYZ(MG_NOEUD *node, double *xyz)
X get_premier(ITERATEUR &it)
X get_suivant(ITERATEUR &it)