Skip to content

Commit 5b39715

Browse files
lelandaisbmpoudot
authored andcommitted
Fix issue#215
1 parent 78e118c commit 5b39715

File tree

3 files changed

+50
-24
lines changed

3 files changed

+50
-24
lines changed

src/Core/Mesh/CommandAddRemoveGroupName.cpp

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -574,10 +574,18 @@ void CommandAddRemoveGroupName::internalExecute()
574574
/*----------------------------------------------------------------------------*/
575575
void CommandAddRemoveGroupName::internalUndo()
576576
{
577+
// on commence par remettre les anciens groupes
578+
getInfoCommand().permCreatedDeleted();
579+
580+
// suppression de ce qui a été ajouté
581+
deleteCreatedMeshEntities();
582+
583+
// permute toutes les propriétés internes avec leur sauvegarde
584+
permInternalsStats();
577585

578586
switch(m_dim){
579587
case(0):{
580-
Group::Group0D* grp = getContext().getGroupManager().getNewGroup0D(m_groupName, &getInfoCommand());
588+
Group::Group0D* grp = getContext().getGroupManager().getGroup0D(m_groupName);
581589

582590
for (std::vector<Geom::GeomEntity*>::iterator iter = m_geom_entities.begin();
583591
iter != m_geom_entities.end(); ++iter){
@@ -615,7 +623,7 @@ void CommandAddRemoveGroupName::internalUndo()
615623
}
616624
break;
617625
case(1):{
618-
Group::Group1D* grp = getContext().getGroupManager().getNewGroup1D(m_groupName, &getInfoCommand());
626+
Group::Group1D* grp = getContext().getGroupManager().getGroup1D(m_groupName);
619627

620628
for (std::vector<Geom::GeomEntity*>::iterator iter = m_geom_entities.begin();
621629
iter != m_geom_entities.end(); ++iter){
@@ -653,7 +661,7 @@ void CommandAddRemoveGroupName::internalUndo()
653661
}
654662
break;
655663
case(2):{
656-
Group::Group2D* grp = getContext().getGroupManager().getNewGroup2D(m_groupName, &getInfoCommand());
664+
Group::Group2D* grp = getContext().getGroupManager().getGroup2D(m_groupName);
657665

658666
for (std::vector<Geom::GeomEntity*>::iterator iter = m_geom_entities.begin();
659667
iter != m_geom_entities.end(); ++iter){
@@ -691,7 +699,7 @@ void CommandAddRemoveGroupName::internalUndo()
691699
}
692700
break;
693701
case(3):{
694-
Group::Group3D* grp = getContext().getGroupManager().getNewGroup3D(m_groupName, &getInfoCommand());
702+
Group::Group3D* grp = getContext().getGroupManager().getGroup3D(m_groupName);
695703

696704
for (std::vector<Geom::GeomEntity*>::iterator iter = m_geom_entities.begin();
697705
iter != m_geom_entities.end(); ++iter){
@@ -734,14 +742,6 @@ void CommandAddRemoveGroupName::internalUndo()
734742
}
735743
break;
736744
}
737-
738-
getInfoCommand().permCreatedDeleted();
739-
740-
// suppression de ce qui a été ajouté
741-
deleteCreatedMeshEntities();
742-
743-
// permute toutes les propriétés internes avec leur sauvegarde
744-
permInternalsStats();
745745
}
746746
/*----------------------------------------------------------------------------*/
747747
void CommandAddRemoveGroupName::internalRedo()

test_link/test_groups.py

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -94,15 +94,40 @@ def test_section_by_plane():
9494
ctx.clearSession() # Clean the session after the previous test
9595
# Création d'une boite avec une topologie
9696
ctx.getTopoManager().newBoxWithTopo (Mgx3D.Point(0, 0, 0), Mgx3D.Point(1, 1, 1), 10, 10, 10, "box")
97+
vol_info = ctx.getGeomManager().getInfos("Vol0000",3)
98+
assert "box" in vol_info.groupsName()
9799
# Section par un plan entre géométries avec topologies
98100
ctx.getGeomManager ( ).sectionByPlane (["Vol0000"], Mgx3D.Plane(Mgx3D.Point(0, 0, .5), Mgx3D.Vector(0, 0, 1)), "aaa")
99101
# Les entités de dimension inférieure à 2 sont affectées au groupe aaa de manière explicite
102+
vol_info = ctx.getGeomManager().getInfos("Vol0001",3)
103+
assert "box" in vol_info.groupsName()
104+
surf_info = ctx.getGeomManager().getInfos("Surf0010",2)
105+
assert "aaa" in surf_info.groupsName()
106+
crb_info = ctx.getGeomManager().getInfos("Crb0014",1)
107+
assert "aaa" in crb_info.groupsName()
108+
pt_info = ctx.getGeomManager().getInfos("Pt0008",0)
109+
assert "aaa" in pt_info.groupsName()
110+
# Destruction de Pt0008
111+
ctx.getGeomManager().destroy(["Pt0008"], False)
112+
assert "DETRUIT" in ctx.getGroupManager().getInfos("aaa", 2)
113+
assert "DETRUIT" in ctx.getGroupManager().getInfos("box", 3)
114+
# Annulation de : Destruction de Pt0008
115+
ctx.undo()
116+
# Les entités de dimension inférieure à 2 sont affectées au groupe aaa de manière explicite
117+
vol_info = ctx.getGeomManager().getInfos("Vol0001",3)
118+
assert "box" in vol_info.groupsName()
100119
surf_info = ctx.getGeomManager().getInfos("Surf0010",2)
101120
assert "aaa" in surf_info.groupsName()
102121
crb_info = ctx.getGeomManager().getInfos("Crb0014",1)
103122
assert "aaa" in crb_info.groupsName()
104123
pt_info = ctx.getGeomManager().getInfos("Pt0008",0)
105124
assert "aaa" in pt_info.groupsName()
125+
# Annulation de : Section par un plan entre géométries avec topologies
126+
ctx.undo()
127+
vol_info = ctx.getGeomManager().getInfos("Vol0000",3)
128+
assert "box" in vol_info.groupsName()
129+
assert "DETRUIT" in ctx.getGroupManager().getInfos("aaa", 1)
130+
assert "DETRUIT" in ctx.getGroupManager().getInfos("aaa", 2)
106131

107132
def test_new_vertices_curves_and_planar_surface():
108133
ctx = Mgx3D.getStdContext()
@@ -135,3 +160,16 @@ def test_new_planar_surface():
135160
assert "aaa" not in crb_info.groupsName()
136161
pt_info = ctx.getGeomManager().getInfos("Pt0002",0)
137162
assert "aaa" not in pt_info.groupsName()
163+
164+
# Issue #215
165+
def test_undo_add_to_group():
166+
ctx = Mgx3D.getStdContext()
167+
ctx.clearSession() # Clean the session after the previous test
168+
# Création d'une boite avec une topologie
169+
ctx.getTopoManager().newBoxWithTopo (Mgx3D.Point(0, 0, 0), Mgx3D.Point(1, 1, 1), 10, 10, 10)
170+
# Modifie le groupe BOX
171+
ctx.getGeomManager().addToGroup (["Vol0000"], 3, "BOX")
172+
# Annulation de : Modifie le groupe BOX
173+
ctx.undo()
174+
# Hors_Groupe_3D n'est plus détruit après fix de l'issue#215
175+
assert "DETRUIT" not in ctx.getGroupManager().getInfos("Hors_Groupe_3D", 3)

test_link/test_unresolved_problems.py

Lines changed: 0 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -190,15 +190,3 @@ def test_undo_clear_group():
190190
# ctx.undo()
191191
# Vol0000 ne devrait pas être dans Hors_Groupe_3D mais seulement dans BOX
192192
# assert "Vol0000" not in ctx.getGroupManager().getGeomEntities(["Hors_Groupe_3D"])
193-
194-
# Issue #215
195-
def test_undo_add_to_group():
196-
ctx = Mgx3D.getStdContext()
197-
ctx.clearSession() # Clean the session after the previous test
198-
# Création d'une boite avec une topologie
199-
ctx.getTopoManager().newBoxWithTopo (Mgx3D.Point(0, 0, 0), Mgx3D.Point(1, 1, 1), 10, 10, 10)
200-
# Modifie le groupe BOX
201-
ctx.getGeomManager().addToGroup (["Vol0000"], 3, "BOX")
202-
# Annulation de : Modifie le groupe BOX
203-
# ctx.undo()
204-
#Vol0000 est bien dans Hors_Groupe_3D qui est destroyed (en rouge dans l'ihm)

0 commit comments

Comments
 (0)