0024758: Sample DRAW scripts for demonstrating sweeping algorithm
[occt.git] / tests / bugs / modalg_5 / bug24758_1
1 puts "==========="
2 puts "OCC24758"
3 puts "==========="
4 puts ""
5 ##############################################################
6 # Sample Draw scripts for demonstrating sweeping algorithm
7 ##############################################################
8
9 # parameters
10 dset R  10.    ;# outer radius
11 dset H  20.    ;# height of the spiral part
12 dset a  0.5*pi ;# total angle of spiral rotation
13
14 # make profile
15 circle outer 0 0 0 0 0 1 R
16 circle inner 0 0 0 0 0 1 R-2
17 circle round 3 6 0 0 0 1 5
18 polyline cut -2 0 0  -2 R+1 0  0.5 R+1 0  -1 0 0  -2 0 0
19
20 proc _curvetoface {name} {
21   uplevel #0 mkedge $name $name
22   uplevel #0 wire $name $name
23   uplevel #0 mkface $name p0 $name
24 }
25
26 plane p0
27 _curvetoface outer
28 _curvetoface inner
29 _curvetoface round
30 mkface cut p0 cut
31
32 bcommon teeth cut round
33 bcommon teeth teeth outer
34
35 tcopy inner profile
36 set nbteeths 25
37 for {set i 0} {$i < $nbteeths} {incr i} {
38   fuse profile profile teeth
39   trotate teeth 0 0 0 0 0 1 360./$nbteeths
40 }
41
42 # sweep profile along curved shape
43 polyline sp 0 0 0  0 0 H
44 cylinder ss 0 0 0  0 0 1  1 0 0  R
45 vertex v1 R 0 0
46 vertex v2 R 0 H
47 line ll 0 0 a H
48 trim ll ll 0 sqrt(a*a+H*H)
49
50 trotate v2 0 0 0 0 0 1 180.*a/pi
51 mkedge ee ll ss v1 v2
52 wire gg ee
53  
54 donly profile sp gg
55 explode profile w
56 tcopy profile_1 profile_2 
57 tcopy profile_1 profile_3
58 tscale profile_1  0 0 0  1./(R-2) 
59 ttranslate profile_2 0 0 H/2
60 tscale profile_2  0 0 H/2  4./(R-2) 
61 ttranslate profile_3 0 0 H
62 tscale profile_3  0 0 H  3./(R-2) 
63
64 mksweep sp
65 setsweep -G gg 0 0
66 addsweep profile_1
67 addsweep profile_2
68 addsweep profile_3
69 vclear
70
71 buildsweep base -S
72
73 # make a shank
74 plane p1 0 0 H 0 0 1
75 pcylinder shank p1 1.4 H
76 plane p2 0 0 H+1 0 0 1
77 pcylinder sh2 p2 1.5 H-1
78 bfuse shank shank sh2
79 bfuse cutter base shank
80
81 # check result
82 checkshape cutter
83
84 # show result
85 incmesh cutter 0.01
86 vinit
87 vdisplay cutter
88 vsetdispmode cutter 1
89 incmesh profile_1 0.01; vdisplay profile_1
90 vfit
91
92 # check square
93 renamevar cutter result
94 set square 1403.85
95
96 set only_screen 1