a9499fa704f7e772eb9fd9b3a44954ffecdc3f4a
[occt.git] / samples / tcl / Penrose.tcl
1 # Generate set of boxes resembling OCC logo and arranged in the shape of 
2 # Penrose triangle on perspective view.
3 # The sample shows how the viewer can be manipulated to produce required 
4 # visual effect
5
6 #Category: Visualization
7 #Title: Penrose triangle on perspective view
8
9 pload MODELING VISUALIZATION 
10
11 # procedure to define box dimensions
12 set scale 1.
13 set ratio 0.94
14 proc defbox {} { 
15   global scale ratio
16   set scale [expr $scale * $ratio]
17   return [list 1.8*$scale 1.8*$scale 1.3*$scale]
18 }
19
20 # make set of boxes
21 eval box b1 0 0 0 [defbox] 
22 eval box b2 2 0 0 [defbox]
23 eval box b3 4 0 0 [defbox] 
24 eval box b4 6 0 0 [defbox] 
25 eval box b5 6 -1.5 0 [defbox] 
26 eval box b6 6 -3 0 [defbox] 
27 eval box b7 6 -4.5 0 [defbox] 
28 eval box b8 6 -6 0 [defbox] 
29 eval box b9 6 -6 1 [defbox]
30 eval box b10 6 -6 2 [defbox]
31
32 # cut last box by prisms created from the first two to make impression
33 # that it is overlapped by these on selected view (see vviewparams below)
34 explode b1 f
35 explode b2 f
36 prism p0 b1_5 12.3 -14 6.8
37 bcut bx b10 p0
38 prism p1 b2_3 12 -14 6.8
39 bcut bxx bx p1
40 tcopy bxx b10
41
42 # make some boxes hollow
43 for {set i 1} {$i <= 1} {incr i} {
44   set dim [boundingstr b$i]
45   set dx [expr [lindex $dim 3] - [lindex $dim 0]]
46   set x1 [expr [lindex $dim 0] + 0.1 * $dx]
47   set x2 [expr [lindex $dim 1] + 0.1 * $dx]
48   set x3 [expr [lindex $dim 2] + 0.1 * $dx]
49   box bc $x1 $x2 $x3 0.8*$dx 0.8*$dx $dx
50   bcut bb b$i bc
51   tcopy bb b$i
52 }
53
54 # prepare a view
55 vinit Penrose w=1024 h=512
56 vsetcolorbg 255 255 255
57 vrenderparams -rayTrace -fsaa on -reflections off -shadows off
58
59 # set camera position and adjust lights
60 vcamera -persp -fovy 25
61 vviewparams -eye 14 -14 6.8 -up 0 0 1 -at 4 -4 0 -scale 70
62 vsetdispmode 1
63 vlight def
64 vlight add directional direction 1 -2 -10 head 1 color white
65 vlight add directional direction 0 -10 0 head 1 color white
66
67 # display boxes
68 vdisplay b1 b2 b3 b4 b5 b6 b7 b8 b9 b10
69
70 # set colors like in boxes of on OCC logo
71 vsetcolor b1 0.8671875 0 0.16015625
72 vsetcolor b2 0.96484375 0.8671875 0
73 vsetcolor b3 0.609375 0.97734375 0.09375
74 vsetcolor b4 0.90234375 0 0.48046875
75 vsetcolor b5 0 0.48046875 0.73828125
76 vsetcolor b6 0.578125 0 0.48046875
77 vsetcolor b7 0.93359375 0.609375 0
78 vsetcolor b8 0 0.70703125 0.9296875
79 vsetcolor b9 0 0.64453125 0.48046875
80 vsetcolor b10 0 0.48046875 0.73828125
81
82 # set material to plastic for better look
83 for {set i 1} {$i <= 10} {incr i} {vsetmaterial b$i plastic}
84
85 vdrawtext "Which\nbox\nis\ncloser\nto\nyou?" 0 -6 -2 0 0 0 left top 0 0 40  Bold