1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56
|
set subgroup modalg
set calcul "p"
set type "i"
proc OFFSETSHAPE {distance faces calcul type} {
uplevel #0 explode s f
uplevel #0 offsetparameter 1e-7 $calcul $type
uplevel #0 offsetload s $distance $faces
uplevel #0 offsetperform result
}
proc ProjectCurvePointToPlaneAlongDir {curve param pln {dir {}}} {
upvar $pln p
upvar $curve c
cvalue c $param x y z
if {[llength $dir] == 0 } {
# project to plane along the normal
regexp {Axis :([-0-9.+eE]+), ([-0-9.+eE]+), ([-0-9.+eE]+)} [dump p] full dx dy dz
lappend dir $dx $dy $dz
}
line ln x y z [lindex $dir 0] [lindex $dir 1] [lindex $dir 2]
intersect pt ln p
regexp {Point : ([-0-9.+eE]+), ([-0-9.+eE]+), ([-0-9.+eE]+)} [dump pt] full x y z
set pntOnPlane {}
lappend pntOnPlane $x $y $z
return $pntOnPlane
}
proc CheckProjectionToPlane {nbSamples origCurve origParam0 origParam1 projCurve projParam0 projParam1 pln {dir {}} {tolerance 1.e-7}} {
upvar $pln p
upvar $origCurve origC
upvar $projCurve projC
set isOk 1
for {set i 0} {$i <= $nbSamples} {incr i} {
set parOrig [expr $origParam0 + ($origParam1 - $origParam0) * $i / $nbSamples]
set parProj [expr $projParam0 + ($projParam1 - $projParam0) * $i / $nbSamples]
set pnt [ProjectCurvePointToPlaneAlongDir origC $parOrig p $dir]
cvalue projC $parProj X Y Z
set dx [expr [lindex $pnt 0]-[dval X]]
set dy [expr [lindex $pnt 1]-[dval Y]]
set dz [expr [lindex $pnt 2]-[dval Z]]
if {[expr $dx*$dx + $dy*$dy + $dz*$dz] < [expr $tolerance*$tolerance]} {
puts "OK: Projection correct"
} else {
puts "ERROR: Projection incorrect"
set isOk 0
}
}
return $isOk
}
|