puts "================"
puts "OCC25292"
puts "================"
puts ""
#######################################################################
# Face/Face intersection algorithm gives different results for different order of the arguments
#######################################################################

proc GetRange { curve } {
  global U1
  global U2
  
  set log [uplevel dump $curve]
  
  regexp {Degree +([-0-9.+eE]+), +([-0-9.+eE]+) Poles, +([-0-9.+eE]+)} ${log} full Degree Poles KnotsPoles
  puts "Degree=${Degree}"
  puts "Poles=${Poles}"
  puts "KnotsPoles=${KnotsPoles}"
  puts ""

  set Knot 1
  set exp_string "Knots :\n\n +${Knot} :  +(\[-0-9.+eE\]+) +(\[-0-9.+eE\]+)"
  regexp ${exp_string} ${log} full U1 Mult1

  set Knot ${KnotsPoles}
  set exp_string " +${Knot} :  +(\[-0-9.+eE\]+) +(\[-0-9.+eE\]+)"
  regexp ${exp_string} ${log} full U2 Mult2
}

puts "##############################"
puts "#!!!Search \"Attention\" keyword on this web-page for additional checking!!!"
puts "##############################"
puts ""
puts ""

# intersect command for trimmed surfaces

#This value must be equal to the analogical value in bug25292_35 and bug25292_36 of "bugs modalg_5" testgrid. 
set GoodNbCurv 2

restore [locate_data_file bug25292_f1.brep] f1
restore [locate_data_file bug25292_f2.brep] f2

mksurface s1 f1
mksurface s2 f2

# trim s1 in accordance with the UV-bounds of f1:
trimv s1t s1 19.1600000005 19.6600000005

# trim s2 in accordance with the UV-bounds of f2:
trim s2t s2 0. 1.570796326795 -275 275

###################
intersect res s2t s1t
###################

set che [whatis res]
set ind [string first "3d curve" $che]
if {${ind} >= 0} {
  #Only variable "res" exists
  
  if { $GoodNbCurv == 1 } {
    puts "OK: Curve Number is good!"
  } else {
    puts "Error: Curve Number is bad!"
  }
  
  set U1 0.0
  set U2 0.0
  
  GetRange res

  puts "U1 = ${U1}"
  puts "U2 = ${U2}"

  if {[expr {$U2 - $U1}] < 1.0e-20} {
    puts "Error: Wrong curve's range!"
  }
  
  dlog reset
  dlog on
  xdistcs res s1 ${U1} ${U2} 10
  set Log1 [dlog get]
  set List1 [split ${Log1} {TD= \t\n}]
  set Tolerance 1.0e-7
  set Limit_Tol 1.0e-7
  set D_good 0.
  checkList ${List1} ${Tolerance} ${D_good} ${Limit_Tol}
  
  dlog reset
  dlog on
  xdistcs res s2 ${U1} ${U2} 10
  set Log1 [dlog get]
  set List1 [split ${Log1} {TD= \t\n}]
  set Tolerance 1.0e-7
  set Limit_Tol 1.0e-7
  set D_good 0.
  checkList ${List1} ${Tolerance} ${D_good} ${Limit_Tol}
} else {
  set ic 1
  set AllowRepeate 1
  while { $AllowRepeate != 0 } {
    set che [whatis res_$ic]
    set ind [string first "3d curve" $che]
    if {${ind} < 0} {
      set AllowRepeate 0
    } else {
      set U1 0.0
      set U2 0.0
      
      GetRange res_$ic
      
      puts "U1 = ${U1}"
      puts "U2 = ${U2}"
      
      if {[expr {$U2 - $U1}] < 1.0e-20} {
        puts "Error: Wrong curve's range!"
      }
      
      dlog reset
      dlog on
      xdistcs res_$ic s1 ${U1} ${U2} 10
      set Log1 [dlog get]
      set List1 [split ${Log1} {TD= \t\n}]
      set Tolerance 1.0e-7
      set Limit_Tol 1.0e-7
      set D_good 0.
      checkList ${List1} ${Tolerance} ${D_good} ${Limit_Tol}
      
      dlog reset
      dlog on
      xdistcs res_$ic s2 0 1 10
      set Log1 [dlog get]
      set List1 [split ${Log1} {TD= \t\n}]
      set Tolerance 1.0e-7
      set Limit_Tol 1.0e-7
      set D_good 0.
      checkList ${List1} ${Tolerance} ${D_good} ${Limit_Tol}
      
      incr ic
    }
  }
  
  if {[expr {$ic - 1}] == $GoodNbCurv} {
    puts "OK: Curve Number is good!"
  } else {
    puts "Error: Curve Number is bad!"
  }
}
