mirror of
https://git.dev.opencascade.org/repos/occt.git
synced 2025-04-09 18:50:54 +03:00
Existing method of Cylinder-Cylinder intersection computing is based on finding the analytic line (as a function of one argument) and converting one into the walking-line with set of equidistant (along the line parameter) points. The main advantage of applied method is using adaptively computed step. Necessary step is computed into every point of the obtained walking-line. At that we receive final walking-line directly (without preliminary analytic line) and we determine moments more precisely, when it should be split (see IntPatch_ImpImpIntersection_4.gxx). The main disadvantages is bad working this method for non-trimmed cylinders (with infinite bounds), because step value is depend on the boundaries values. More over, new method always returns walking-line, while intersection result can be an analytic curve (lines, circle, ellipse). That is NO good. Therefore, analytic curve is computed by existing method. In conclusion, in spite of covering almost all more often meeting cases, new method has limited application. Then we should use the existing old method. Additionally, method MinMax() is added (see Standard_Real.hxx file). It uses into new algorithm. Some test cases is changed according to their new behavior. Test case for issue CR24915 is added. Into GeometryTest_APICommands.cxx only tabulations were chaged. "Extending" of isolines (see Geom2dHatch_Hatcher.cxx). Small correction of test case for issue CR24915.
97 lines
2.4 KiB
Plaintext
Executable File
97 lines
2.4 KiB
Plaintext
Executable File
puts "========="
|
|
puts "CR24915"
|
|
puts "========="
|
|
puts ""
|
|
###############################
|
|
## Wrong intersection curves between two cylinders
|
|
###############################
|
|
|
|
proc checkList {List Tolerance D_good Limit_Tol} {
|
|
set L1 [llength ${List}]
|
|
set L2 10
|
|
set L3 5
|
|
set N [expr (${L1} - ${L2})/${L3} + 1]
|
|
|
|
for {set i 1} {${i} <= ${N}} {incr i} {
|
|
set j1 [expr ${L2} + (${i}-1)*${L3}]
|
|
set j2 [expr ${j1} + 2]
|
|
set T [lindex ${List} ${j1}]
|
|
set D [lindex ${List} ${j2}]
|
|
#puts "i=${i} j1=${j1} j2=${j2} T=${T} D=${D}"
|
|
if { [expr abs(${D} - ${D_good})] > ${Tolerance} } {
|
|
puts "Error : T=${T} D=${D}"
|
|
}
|
|
if { [expr abs(${D} - ${D_good})] > ${Limit_Tol}
|
|
&& [expr abs(${D} - ${D_good})] <= ${Tolerance} } {
|
|
puts "Attention (critical value of tolerance) : T=${T} D=${D}"
|
|
}
|
|
}
|
|
}
|
|
|
|
puts "##############################"
|
|
puts "#!!!Searh \"Attention\" keyword on this web-page for additinal checking!!!"
|
|
puts "##############################"
|
|
|
|
restore [locate_data_file bug24915_ft2.brep] b1
|
|
restore [locate_data_file bug24915_ft3.brep] b2
|
|
|
|
# 1. topology
|
|
bclearobjects
|
|
bcleartools
|
|
baddobjects b1 b2
|
|
bfillds
|
|
bbuild r
|
|
checkshape r
|
|
|
|
# 2. geometry
|
|
set MaxTol 1.5e-6
|
|
set log [bopcurves b1 b2]
|
|
|
|
mksurface s1 b1
|
|
mksurface s2 b2
|
|
|
|
regexp {Tolerance Reached=+([-0-9.+eE]+)\n+([-0-9.+eE]+)} ${log} full Toler NbCurv
|
|
|
|
if {${Toler} > ${MaxTol}} {
|
|
puts "Error: Tolerance is too big!"
|
|
}
|
|
|
|
for {set i 1} {$i <= ${NbCurv}} {incr i} {
|
|
set log [dump c_$i]
|
|
|
|
regexp {Degree +([-0-9.+eE]+), +([-0-9.+eE]+) Poles, +([-0-9.+eE]+)} ${log} full Degree Poles KnotsPoles
|
|
|
|
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
|
|
|
|
dlog reset
|
|
dlog on
|
|
xdistcs c_$i s1 ${U1} ${U2} 100
|
|
set Log2 [dlog get]
|
|
set List2 [split ${Log2} {TD= \t\n}]
|
|
set Tolerance 1.6e-5
|
|
set Limit_Tol 1.0e-7
|
|
set D_good 0.
|
|
catch {checkList ${List2} ${Tolerance} ${D_good} ${Limit_Tol}}
|
|
|
|
dlog reset
|
|
dlog on
|
|
xdistcs c_$i s2 ${U1} ${U2} 100
|
|
set Log2 [dlog get]
|
|
set List2 [split ${Log2} {TD= \t\n}]
|
|
set Tolerance 1.6e-5
|
|
set Limit_Tol 1.0e-7
|
|
set D_good 0.
|
|
catch {checkList ${List2} ${Tolerance} ${D_good} ${Limit_Tol}}
|
|
}
|
|
|
|
smallview
|
|
donly b2 c_2
|
|
fit
|
|
set only_screen_axo 1
|