@@ -45,36 +45,18 @@ void CommandEditGeom::internalExecute()
4545 internalSpecificPreExecute ();
4646
4747 // on recupere toutes les entites concernes par l'opération géométrique
48- std::map<GeomEntity*,MementoEntity> ref ;
49- std::vector<std::list< GeomEntity*>*> refEntities ;
48+ std::map<GeomEntity*, MementoEntity> mementos_by_entity ;
49+ std::set< GeomEntity*> to_mem_entities[ 4 ] ;
5050
51- refEntities.push_back (&(getRefEntities (0 ))); // sommets
52- refEntities.push_back (&(getRefEntities (1 ))); // courbes
53- refEntities.push_back (&(getRefEntities (2 ))); // surfaces
54- refEntities.push_back (&(getRefEntities (3 ))); // volumes
55-
56- // MODIF - LES ENTITES ADJ NE SONT PAS DES ENTITES DE REF
57- // refEntities[0]->insert(refEntities[0]->begin(),getAdjEntities(0).begin(),getAdjEntities(0).end());
58- // refEntities[1]->insert(refEntities[1]->begin(),getAdjEntities(1).begin(),getAdjEntities(1).end());
59- // refEntities[2]->insert(refEntities[2]->begin(),getAdjEntities(2).begin(),getAdjEntities(2).end());
60- // refEntities[3]->insert(refEntities[3]->begin(),getAdjEntities(3).begin(),getAdjEntities(3).end());
61-
62- #ifdef _DEBUG2
63- std::cerr<<" nb refs sommets = " <<getRefEntities (0 ).size ()<<std::endl;
64- std::cerr<<" nb refs curves = " <<getRefEntities (1 ).size ()<<std::endl;
65- std::cerr<<" nb refs surfaces= " <<getRefEntities (2 ).size ()<<std::endl;
66- std::cerr<<" nb refs volumes = " <<getRefEntities (3 ).size ()<<std::endl;
67- #endif
68- for (unsigned int i=0 ;i<4 ;i++){
69- std::list<GeomEntity*>* refList = refEntities[i];
70- std::list<GeomEntity*>::iterator it;
71- for (it=refList->begin ();it!=refList->end ();it++){
72- GeomEntity* e = *it;
51+ for (unsigned int i=0 ;i<4 ;i++) {
52+ to_mem_entities[i].insert (getRefEntities (i).begin (), getRefEntities (i).end ());
53+ to_mem_entities[i].insert (getAdjEntities (i).begin (), getAdjEntities (i).end ());
54+ for (GeomEntity* e : to_mem_entities[i]) {
7355 MementoEntity mem = m_memento_manager.createMemento (e);
7456#ifdef _DEBUG2
7557 std::cerr<<" Memento cree pour " <<e->getName ()<<std::endl;
7658#endif
77- ref .insert ({e, mem});
59+ mementos_by_entity .insert ({e, mem});
7860 }
7961 }
8062// gmds::Timer t2;
@@ -134,19 +116,27 @@ void CommandEditGeom::internalExecute()
134116 }
135117#endif
136118
137- // sauvegarde des mementos pour le undo/redo
119+ // Sauvegarde des mementos pour le undo/redo
120+ // Utiliser at en lecture pour avoir une exception si
121+ // la clef est absente (ne pas utiliser l'opérateur [])
138122 std::map<GeomEntity*,MementoEntity> keeped_ref;
139123 for (unsigned int i=0 ;i<mod_entities.size ();i++){
140124 GeomEntity* e = mod_entities[i];
141- keeped_ref[e] = ref[e];
125+ if (mementos_by_entity.find (e) == mementos_by_entity.end ())
126+ std::cout << " *** MOD les mementos ne contiennent pas " << e->getName () << std::endl;
127+ keeped_ref[e] = mementos_by_entity.at (e);
142128 }
143129 for (unsigned int i=0 ;i<mov_entities.size ();i++){
144130 GeomEntity* e = mov_entities[i];
145- keeped_ref[e] = ref[e];
131+ if (mementos_by_entity.find (e) == mementos_by_entity.end ())
132+ std::cout << " *** MOV les mementos ne contiennent pas " << e->getName () << std::endl;
133+ keeped_ref[e] = mementos_by_entity.at (e);
146134 }
147135 for (unsigned int i=0 ;i<rem_entities.size ();i++){
148136 GeomEntity* e = rem_entities[i];
149- keeped_ref[e] = ref[e];
137+ if (mementos_by_entity.find (e) == mementos_by_entity.end ())
138+ std::cout << " *** REM les mementos ne contiennent pas " << e->getName () << std::endl;
139+ keeped_ref[e] = mementos_by_entity.at (e);
150140 }
151141 saveMementos (keeped_ref);
152142 getInfoCommand ().setDestroyAndUpdateConnectivity (rem_entities);
0 commit comments