puts "============"
puts "OCC23201"
puts "============"
puts ""
#######################################################################
# Projection algorithm produces wrong results.
#######################################################################

set BugNumber OCC23201

proc GetPercent {Value GoodValue} {
   set Percent 0.
   if {${GoodValue} != 0.} {
      set Percent [expr abs(${Value} - ${GoodValue}) / abs(double(${GoodValue})) * 100.]
   } elseif {${Value} != 0.} {
      set Percent [expr abs(${GoodValue} - ${Value}) / abs(double(${Value})) * 100.]
   } else {
      set Percent 0.
   }
   return ${Percent}
}

restore [locate_data_file bug23201_Tool_1.brep] b2
restore [locate_data_file bug23201_Tool_2.brep] b3

explode b2 f
mksurface s2 b2_1

explode b3 f
mksurface s3 b3_1

explode b2 e
mkcurve c2 b2_2

explode b3 e
mkcurve c3 b3_2

set BugStatus 0

set percent_max 0.1
set good_c23 3.1415926535897922
set good_c32 3.1415926535897922

if [catch { project c23 c2 s3 } ] {
    set BugStatus 1
} else {
    set c23_length [lindex [length c23] end]
    set length_percent [GetPercent ${c23_length} ${good_c23}]
    puts "length_percent = ${length_percent}"
    if {${length_percent} > ${percent_max}} {
	puts "c23: Faulty"
	set BugStatus 1
    } else {
	puts "c23: OK"
    }
}

if [catch { project c32 c3 s2 } ] {
    set BugStatus 1
} else {
    set c32_length [lindex [length c32] end]
    set length_percent [GetPercent ${c32_length} ${good_c32}]
    puts "length_percent = ${length_percent}"
    if {${length_percent} > ${percent_max}} {
	puts "c32: Faulty"
	set BugStatus 1
    } else {
	puts "c32: OK"
    }
}

# Resume
puts ""
if { ${BugStatus} != 0 } {
    puts "Faulty ${BugNumber}"
} else {
    puts "OK ${BugNumber}"
}

