77a77b6f8abaf1cab6ec4f4c0f8b5c922bd8feb3
[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 # Ray-Tracing doesn't work with Compatible Profile on macOS
11 if { $::tcl_platform(os) == "Darwin" } { vcaps -core }
12
13 # procedure to define box dimensions
14 set scale 1.
15 set ratio 0.94
16 proc defbox {} { 
17   global scale ratio
18   set scale [expr $scale * $ratio]
19   return [list 1.8*$scale 1.8*$scale 1.3*$scale]
20 }
21
22 # make set of boxes
23 eval box b1 0 0 0 [defbox] 
24 eval box b2 2 0 0 [defbox]
25 eval box b3 4 0 0 [defbox] 
26 eval box b4 6 0 0 [defbox] 
27 eval box b5 6 -1.5 0 [defbox] 
28 eval box b6 6 -3 0 [defbox] 
29 eval box b7 6 -4.5 0 [defbox] 
30 eval box b8 6 -6 0 [defbox] 
31 eval box b9 6 -6 1 [defbox]
32 eval box b10 6 -6 2 [defbox]
33
34 # cut last box by prisms created from the first two to make impression
35 # that it is overlapped by these on selected view (see vviewparams below)
36 explode b1 f
37 explode b2 f
38 prism p0 b1_5 12.3 -14 6.8
39 bcut bx b10 p0
40 prism p1 b2_3 12 -14 6.8
41 bcut bxx bx p1
42 tcopy bxx b10
43
44 # make some boxes hollow
45 for {set i 1} {$i <= 1} {incr i} {
46   set dim [bounding b$i -save xmin ymin zmin xmax ymax zmax]
47   set dx [dval xmax-xmin]
48   set x1 [dval xmin+0.1*$dx]
49   set x2 [dval ymin+0.1*$dx]
50   set x3 [dval zmin+0.1*$dx]
51   box bc $x1 $x2 $x3 0.8*$dx 0.8*$dx $dx
52   bcut bb b$i bc
53   tcopy bb b$i
54 }
55
56 # prepare a view
57 vinit Penrose w=1024 h=512
58 vbackground -color WHITE
59 vrenderparams -rayTrace -fsaa on -reflections off -shadows off
60
61 # set camera position and adjust lights
62 vcamera -persp -fovy 25
63 vviewparams -eye 14 -14 6.8 -up 0 0 1 -at 4 -4 0 -scale 70
64 vsetdispmode 1
65 vlight def
66 vlight add directional direction 1 -2 -10 head 1 color white
67 vlight add directional direction 0 -10 0 head 1 color white
68
69 # display boxes
70 vdisplay b1 b2 b3 b4 b5 b6 b7 b8 b9 b10
71
72 # set colors like in boxes of on OCC logo
73 vsetcolor b1  DD0029
74 vsetcolor b2  F6DD00
75 vsetcolor b3  98F918
76 vsetcolor b4  E9007A
77 vsetcolor b5  007ABC
78 vsetcolor b6  93007A
79 vsetcolor b7  EE9800
80 vsetcolor b8  00B489
81 vsetcolor b9  00A47A
82 vsetcolor b10 007ABC
83
84 # set material to plastic for better look
85 for {set i 1} {$i <= 10} {incr i} {vsetmaterial b$i plastic}
86
87 vdrawtext label "Which\nbox\nis\ncloser\nto\nyou?" -pos 0 -6 -2 -color BLACK -halign left -valign bottom -angle 0 -zoom 0 -height 40