puts "========"
puts "0029824: Intersection of cylinder and sphere is incorrect"
puts "========"
puts ""

restore [locate_data_file OCC20964_revsolid.brep] b1 
restore [locate_data_file OCC20964_sphere.brep] b2 
explode b1 f
explode b2 f
donly b1_7 b2_1

bop b1_7 b2_1
bopsection result

checknbshapes result -edge 3

foreach a [explode result e] {
  mkcurve cc $a
  bounds cc U1 U2
  
  if {[dval U2-U1] < 1.0e-9} {
    puts "Error: Wrong curve's range!"
  }
  
  set aStep [expr [dval U2-U1]/100.0 ]
  set isFirst 1
  set aCosPrev 1.0
  dset dx1 0.0
  dset dy1 0.0
  dset dz1 0.0
  for {set aU [dval U1]} {$aU <= [dval U2]} {set aU [expr $aU + $aStep]} {
    cvalue cc $aU xx yy zz dx dy dz
    
    if {!$isFirst} {
      set m1 [module dx1 dy1 dz1]
      set m2 [module dx dy dz]
      set aCos [dval dx1*dx+dy1*dy+dz1*dz]
      set aCos [expr $aCos/($m1*$m2)]
      
      if {abs([expr $aCos - $aCosPrev]) > 0.05} {
        puts "Error: It seems that the curve $a change it direction at the point $aU. Please recheck."
        break
      }
      
      set aCosPrev $aCos
    }
    
    set isFirst 0
    
    dset dx1 dx
    dset dy1 dy
    dset dz1 dz
  }
}
