puts "=========================================================="
puts "0027540: Run-to-run differences in the 3D Offset algorithm"
puts "=========================================================="
puts ""

pload MODELING

restore [locate_data_file bug27540_shapes1.brep] s
explode s

# make offset operations on two shapes
# first shape
offsetparameter 1e-7 c i
# set offset 10 for top faces (normal direction 0 0 1), 0 for all other faces
offsetload s_1 0
set faces [explode s_1 f]
foreach f $faces {
  mksurface surf $f
  set found [regexp {Axis   :([-0-9.+eE]*), ([-0-9.+eE]*), ([-0-9.+eE]*)} [dump surf] full x y z]
  if {$found && abs($z - 1) < 1.e-7} {
    offsetonface $f 10
  }
}
offsetperform result1
checkprops result1 -s 3.26459e+006
checkprops result1 -v 1.067e+008
checknbshapes result1 -vertex 28 -edge 42 -wire 18 -face 17 -shell 1 -solid 1


# second shape
offsetparameter 1e-7 c i
# set offset 10 for top faces (normal direction 0 0 1), 0 for all other faces
offsetload s_2 0
set faces [explode s_2 f]
foreach f $faces {
  mksurface surf $f
  set found [regexp {Axis   :([-0-9.+eE]*), ([-0-9.+eE]*), ([-0-9.+eE]*)} [dump surf] full x y z]
  if {$found && abs($z - 1) < 1.e-7} {
    offsetonface $f 10
  }
}
offsetperform result2
checkprops result2 -s 3.26459e+006
checkprops result2 -v 1.067e+008
checknbshapes result2 -vertex 28 -edge 42 -wire 18 -face 17 -shell 1 -solid 1


# compare the results
set vertices1 [nexplode result1 v]
set vertices2 [nexplode result2 v]

set nbv1 [llength $vertices1]

for {set i 0} {$i < $nbv1} {incr i} {
  set v1 [lindex $vertices1 $i]
  set v2 [lindex $vertices2 $i]

  mkpoint px $v1
  set dump_v1 [dump px]
  
  mkpoint px $v2
  set dump_v2 [dump px]

  if {$dump_v1 != $dump_v2} {
    puts "Error: the results are not the same - $v1 and $v2"
  }
}
