1
0
mirror of https://git.dev.opencascade.org/repos/occt.git synced 2025-04-04 18:06:22 +03:00
emv f523acf0b4 0028913: UnifySameDomain crashes with error: "a shape is modified and removed simultaneously"
Correct filling of the history of the modifications of the shapes in ShapeUpgrade_UnifySameDomain algorithm.

Test cases for the issue.
2017-08-24 19:12:44 +03:00

83 lines
2.4 KiB
Plaintext

if {[isdraw result]} {
# check history information
# get resulting edges
eval compound [explode result v] res_verts
eval compound [explode result e] res_edges
# get all vertices and edges of the input shape
eval compound [explode a v] input_verts
eval compound [explode a e] input_edges
# check deleted
# get removed vertices through the history
compound rem_verts
foreach v [explode input_verts] {
if {[regexp "The shape has been deleted" [unifysamedomisdel $v]]} {
add $v rem_verts;
}
}
# get removed edges through the history
compound rem_edges
foreach e [explode input_edges] {
if {[regexp "The shape has been deleted" [unifysamedomisdel $e]]} {
add $e rem_edges;
}
}
# check that all removed shapes are not present in the result
bsection sec_v res_verts rem_verts
if {[llength [explode sec_v v]]} {
puts "Error: the history of the removed vertices is incorrect."
}
bsection sec_e res_edges rem_edges
if {[llength [explode sec_e e]]} {
puts "Error: the history of the removed edges is incorrect."
}
# faces should not be removed at all
foreach f [explode a f] {
if {[regexp "The shape has been deleted" [unifysamedomisdel $f]]} {
puts "Error: the faces should not be removed during unification."
break;
}
}
# check modifications
# get all modified and not removed shapes into compound and
# compare the contents of the compound with the result shape
eval compound [explode a f] input_faces
compound all_hist_shapes
foreach comp {input_verts input_edges input_faces} {
foreach s [explode $comp] {
if {[regexp "The shape has been deleted" [unifysamedomisdel $s]]} {
continue;
}
if {[regexp "The shape has not been modified" [unifysamedommod s_mod $s]]} {
add $s all_hist_shapes;
continue;
}
if {[regexp "COMPOUND" [whatis s_mod]]} {
foreach sm [explode s_mod] { add $sm all_hist_shapes }
} else {
add s_mod all_hist_shapes;
}
}
}
eval compound [explode result f] res_faces
compound all_res_shapes
foreach comp {res_verts res_edges res_faces} {
foreach s [explode $comp] { add $s all_res_shapes }
}
checknbshapes all_hist_shapes -ref [nbshapes all_res_shapes]
checkprops all_hist_shapes -s [lindex [sprops result -skip] 2] -l [lindex [lprops result -skip] 2] -skip
}