#!/bin/sh
#\
exec ${GOOD_ROOT_DIR}/bin/vr_scene $0 $*

# draw text?
proc ITEXT {} {return 1} 

# draw seats?
proc ISITS {} {return 0} 

# draw computers?
proc ICOMPS {} {return 0} 

# draw lamps?
proc ILAMPS {} {return 0} 

VR_position { -14 0 1 }

VR_angle 1.57

VR_msg {Welcome in the Department of Computer Graphics of TU Ilmenau.}

Top in
in -scale { 2 1 2} 
sc -insert in

# utility classes:
Tcl_Primitive Sit {} {} Sit String {Creates a {ARG 1 Sit}.} {
    Cylinder $THIS.c 0.2 0.05
    $THIS.c -father $THIS -translate { 0 0.7 0} 
    $THIS.c -rotate { -1.571 0 0}
    Quader $THIS.q 0.4 0.6 0.05
    $THIS.q -father $THIS -translate { 0 1 0.2} 
    $THIS.q -rotate { 0.1 0 0}
    Cylinder $THIS.c2 0.02 0.7
    $THIS.c2 -father $THIS -translate { 0 0.35 0} 
    $THIS.c2 -rotate { -1.571 0 0}
}

Tcl_Method Sit -color c Color {Set the {ARG 1 Color} for the sit.} {
    $THIS -ambient $c -diffuse $c
}

Tcl_Primitive Lamp {} {} Name  String {Creates a new {ARG 1 Monitor}.} {
    [Cylinder $THIS.c1 0.1 0.025] -father $THIS -rotate { 1.58 0 0}
    [Cylinder $THIS.c2 0.01 0.5] -father $THIS.c1 -translate {0 0 -0.25}
    [Sphere $THIS.s1 0.03] -father $THIS.c2 -translate {0 0 -0.175}
    [Cylinder $THIS.c3 0.01 0.2] -father $THIS.s1 -rotate {0 1.4 0}
    $THIS.c3 -translate {0 0 -0.05}
    [Sphere $THIS.s2 0.03] -father $THIS.c3 -translate {0 0 -0.08}
    [Cylinder $THIS.c4 0.01 0.175] -father $THIS.s2 -rotate {0 1.3 0}
    $THIS.c4 -translate {0 0 -0.025}
    [Sphere $THIS.s3 0.04] -father $THIS.c4 -translate {0 0 -0.1}
    [Cylinder $THIS.c5 0.04 0.04] -father $THIS.s3 -translate {0 0 -0.02}
    [Cone $THIS.c6 0.08 0.1] -father $THIS.c5 -rotate {3.14 0 0}
    $THIS.c6 -translate {0 0 -0.025}
}


Tcl_Method Lamp -color c Color {Set the {ARG 1 Color} for the lamp.} {
    $THIS -ambient $c -diffuse $c
}

Tcl_Primitive Monitor {} {} Name  String {Creates a new {ARG 1 Monitor}.} {
    Quader $THIS.1 0.3 0.3 0.05
    $THIS.1 -father $THIS -diffuse {0.75 0.75 0.75} -pickmode 2
    Quader $THIS.2 0.25 0.25 0.05
    $THIS.2 -father $THIS -diffuse {0 0 0} -translate {0 0 0.01} -pickmode 2
    Quader $THIS.3 0.2 0.2 0.2
    $THIS.3 -father $THIS -translate {0 0 -0.125} -diffuse {0.75 0.75 0.75} -pickmode 2
}

Tcl_Primitive Comp {} {} Name  String {Creates a new {ARG 1 Comp}.} {
    Quader $THIS.c1 0.3 0.075 0.275
    $THIS.c1 -father $THIS -diffuse {0 0 1} -pickmode 2
    Quader $THIS.c2 0.2 0.01 0.2
    $THIS.c2 -father $THIS.c1 -diffuse {0.05 0.05 0.05} -translate {0 0.0425 0} -pickmode 2
    Cylinder $THIS.c3 0.075 0.05
    $THIS.c3 -father $THIS.c2 -diffuse {0.75 0.75 0.75} -rotate {1.58 0 0} -pickmode 2
    $THIS.c3 -translate {0 0 -0.025}
    Monitor $THIS.mon
    $THIS.mon -father $THIS.c2 -translate {0 0.15 0.1} -diffuse {0.05 0.05 0.05} -pickmode 2
}

Tcl_Primitive  Table {} {} {Name Pos Angel} String {Creates a new {ARG 1 Table}.} {
    Quader $THIS.1 1 0.025 0.5 
    $THIS.1 -father $THIS
    Quader $THIS.1.11 0.3 0.8 0.5
    $THIS.1.11 -father $THIS.1 -translate {-0.35 -0.4 0} -pickmode 2
    Quader $THIS.1.12 0.3 0.8 0.5
    $THIS.1.12 -father $THIS.1 -translate {0.35 -0.4 0} -pickmode 2
    Quader $THIS.1.13 0.4 0.08 0.5
    $THIS.1.13 -father $THIS.1 -translate {0 -0.05 0} -pickmode 2
    if {[ISITS]} {
	Sit $THIS.s 
	$THIS.s -father $THIS -translate {0 -0.85 0.15} -color { 0.6 0.5 0}
    }
    if {$Pos!=-1} {
	if {[ICOMPS]} {
	    Comp $THIS.comp
	    $THIS.comp -father $THIS.1 -translate "$Pos 0.0475 -0.05"
	    $THIS.comp $THIS.1.c -rotate "0 $Angel 0"
	}
	if {[ILAMPS]} {
	    Lamp $THIS.lamp
	    $THIS.lamp -father $THIS.1 -translate "[expr $Pos*-1] 0.0475 -0.13" -color {0 0 0}
	    $THIS.lamp -rotate "0 [expr 1.58+$Angel*-2] 0"
	}
    }
}

Tcl_Method Table -color c Color {Set the {ARG 1 Color} for the table.} {
    $THIS -ambient $c -diffuse $c
}

Tcl_Primitive  TableSet {} {} Name String {Creates a new {ARG 1 TableSet}.} {
    Table $THIS.t1 0.3 -0.2
    $THIS.t1 -father $THIS -color {0.45 0.2 0}
    Table $THIS.t2 -0.3 0.2
    $THIS.t2 -father $THIS -translate {0 0 -0.5} -color {0.45 0.2 0}
    $THIS.t2 -rotate {0 3.1457 0}
    Table $THIS.t3 0.3 -0.2
    $THIS.t3 -father $THIS -translate {-0.75 0 -0.25} -color {0.45 0.2 0}
    $THIS.t3 -rotate {0 -1.58 0}
}

# the outside:

Tcl_Primitive I_Outside {} {} {n l} {String Double} {\
	Creates a piece of the outside wall. Parameters are {ARG 1 Name} and {ARG 2 Width}.} {
    $THIS -pickmode 2
    Quader $THIS.u $l 3 0.1
    $THIS.u -pickmode 2 -father $THIS -translate { 0 1.5 0 } -diffuse { 0 0 0.5} -transmission 0.9 -specular { 0.2 0.2 0.9} -fillstyle 0
}

[I_Outside o1 12] -father in
o1 -translate {0.1 0 -7.8}

[I_Outside o2 15] -father in
o2 -translate {6.05 0 -0.35}
o2 -rotate { 0 -1.57 0}

[I_Outside o3 12.2] -father in
o3 -translate {0 0 7.2}

[I_Outside o4 4.7] -father in
o4 -translate {-6.05 0 4.8}
o4 -rotate { 0 -1.57 0}

[I_Outside o5 4.5] -father in
o5 -translate {-8.3 0 2.45}

[I_Outside o6 4.5] -father in
o6 -translate {-8.2 0 0.4}

[I_Outside o7 8.3] -father in
o7 -translate {-5.9 0 -3.7}
o7 -rotate { 0 -1.57 0}



# the overall bounding box:
Quader in.q 12.2 3 15.2
#in.q -father in -translate { 0 1.5 -0.4} -fillstyle 0

# the medium bounding box:
Quader in.mq 5.7 3 9
#in.mq -father in -translate { 0 1.5 -0.4}

# the inner bounding box:
Quader in.iq 4 3 7.2
#in.iq -father in -translate { 0 1.5 -0.4} 

Tcl_Primitive I_Wall {} {} {n w } {String Double} {\
	Creates a wall with {ARG 1 Name} and specified {ARG 2 Width}.} {
    Quader $THIS.q $w 3 0.05
    $THIS.q -pickmode 2 -father $THIS -translate "[expr $w*0.5] 1.5 -0.025"
}

Tcl_Primitive I_DWall {} {angle} {n w h dw} {String Double Double Double} {\
	Creates a wall and a door with {ARG 1 Name}. Additional arguments are {ARG 2 Width} and the {ARG 3 Distance} of the door.} {	
    $THIS -pickmode 2
    Quader $THIS.qq1 $dw 3 0.05
    $THIS.qq1 -pickmode 2 -father $THIS -translate "[expr $dw*0.5] 1.5 -0.025"
    Quader $THIS.qq2 0.4 1 0.05
    $THIS.qq2 -pickmode 2 -father $THIS -translate "[expr $dw+0.2] 2.5 -0.025"
    set len [expr $w-$dw-0.4]
    Quader $THIS.qq3 $len 3 0.05
    $THIS.qq3 -pickmode 2 -father $THIS -translate "[expr $len*0.5+0.4+$dw] 1.5 -0.025"
    
    Top $THIS.d
    $THIS.d -pickmode 2 -father $THIS -translate "$dw 1 -0.05" 
    Quader $THIS.d.q 0.4 2 0.05
    $THIS.d.q -pickmode 2 -father $THIS.d -translate "0.2 0 0"
    set $THIS->angle 0
    $THIS.d -diffuse { 0.3 0.9 0.3} -ambient { 0.3 0.9 0.3}
}

Tcl_Method I_DWall -open nangle Double { Open the door by the specified {ARG 1 angle}.} {
    $THIS.d -rotate "0 [expr -1*[set $THIS->angle]] 0"
    set $THIS->angle $nangle
    $THIS.d -rotate "0 [set $THIS->angle] 0"
}

Tcl_Method I_DWall -getDoor {} {} {Return the door primitive} {
    return $THIS.d
}

Tcl_Primitive I_Room I_DWall {} {n w h dw} {String Double Double Double} {\
	Creates a room with {ARG 1 Name}. Additional arguments are {ARG 2 Width}, {ARG 3 Height} and the {ARG 3 Distance} of the door.} {
    Quader $THIS.l 0.05 3 $h
    $THIS.l -pickmode 2 -father $THIS -translate "0.025 1.5 -[expr $h*0.5]"
}

Tcl_Primitive I_ClosedRoom I_Room {} {n w h dw} {String Double Double Double} {\
	Creates a room with {ARG 1 Name}. Additional arguments are {ARG 2 Width}, {ARG 3 Height} and the {ARG 3 Distance} of the door.} {
    Quader $THIS.q2 $w 3 0.05
    $THIS.q2 -pickmode 2 -father $THIS -translate "[expr $w*0.5] 1.5 [expr -$h+0.025]"
    Quader $THIS.l2 0.05 3 $h
    $THIS.l2 -pickmode 2 -father $THIS -translate "[expr $w-0.025] 1.5 -[expr $h*0.5]"
}

[I_Room r14 4.5 1.3 1.8] -father in
r14 -translate {-6 0 1.1}
r14 -rotate { 0 3.14 0}

if [ISITS] {
    [Sit s15.1] -father in -translate { -5.5 0 1.3}
    s15.1 -rotate { 0 3.14 0} -color { 0.6 0.5 0}
    [Sit s15.2] -father in -translate { -4.6 0 1.3}
    s15.2 -rotate { 0 3.3 0} -color { 0.6 0.5 0}
    [Sit s15.3] -father in -translate { -3.8 0 1.3}
    s15.3 -rotate { 0 2.9 0} -color { 0.6 0.5 0}
}

[I_Room r16 3 3 2.3] -father in
r16 -translate {-2.8 0 0.3}
r16 -rotate { 0 1.57 0}

[I_DWall r16a 3 1.5 0.6] -father in
r16a -translate {-2.8 0 -1.2}
r16a -rotate { 0 3.14 0}
r16a -open 2

[I_Room r17 1.5 3 0.2] -father in
r17 -translate {-2.8 0 -2.65}
r17 -rotate { 0 1.57 0}

[I_Room r18 1.5 3 0.2] -father in
r18 -translate {-2.8 0 -4.15}
r18 -rotate { 0 1.57 0}

[I_DWall r18a 3 2.25 2.3] -father in
r18a -translate {-5.8 0 -5.6}

[I_Room r19 1.5 3 0.6] -father in
r19 -translate {-2.8 0 -4.8}

[I_Room r20 1.5 3 0.7] -father in
r20 -translate {-1.4 0 -4.8}

[I_Room r21 1.5 3 0.2] -father in
r21 -translate {0.1 0 -4.8}

[I_Room r22 1.5 3 0.2] -father in
r22 -translate {1.6 0 -4.8}

[I_DWall r23 0.7 1.5 0.1] -father in
r23 -translate {3 0 -4.8} 
r23 -rotate { 0 -1.57 0}
r23 -open -1.57

[I_Room r23a 1.5 3 0.2] -father in
r23a -translate {3.1 0 -4.8}
[r23a -getDoor] -diffuse { 0.5 0.3 0.2}
[r23a -getDoor] -ambient { 0.5 0.3 0.2}

[I_DWall r23b 3.7 1.5 3.1] -father in
r23b -translate {4.6 0 -7.8}
r23b -rotate { 0 -1.57 0}
[r23b -getDoor] -diffuse { 0.5 0.3 0.2}
[r23b -getDoor] -ambient { 0.5 0.3 0.2}
r23b -open 1.4
[Table r23b.t1 -0.3 0.2] -father r23b -rotate {0 -1.58 0}
r23b.t1 -translate {-1 0.8 -0.5} -color {0.45 0.2 0}
[Table r23b.t2 0.3 -0.2] -father r23b -rotate {0 1.58 0}
r23b.t2 -translate {1 0.8 1} -color {0.45 0.2 0}
[Table r23b.t3 -0.3 0.2] -father r23b -rotate {0 -1.58 0}
r23b.t3 -translate {-1 0.8 -2.5} -color {0.45 0.2 0}
[Table r23b.t4 0.3 -0.2] -father r23b -rotate {0 1.58 0}
r23b.t4 -translate {1 0.8 3} -color {0.45 0.2 0}


[I_Room r24 1.5 3 0.2] -father in
r24 -translate {3 0 -4.15}
r24 -rotate { 0 -1.57 0}
[TableSet r24.t1] -father r24
r24.t1 -rotate {0 1.58 0}
r24.t1 -translate {2.5 0.8 1}

[I_Room r25 1.5 3 0.2] -father in
r25 -translate {3 0 -2.65}
r25 -rotate { 0 -1.57 0}
[TableSet r25.t1] -father r25
r25.t1 -rotate {0 1.58 0}
r25.t1 -translate {2.5 0.8 1}

[I_Room r26 1.5 3 0.2] -father in
r26 -translate {3 0 -1.15}
r26 -rotate { 0 -1.57 0}
[TableSet r26.t1] -father r26
r26.t1 -rotate {0 1.58 0}
r26.t1 -translate {2.5 0.8 1}

[I_Room r27 1.5 3 0.2] -father in
r27 -translate {3 0 0.35}
r27 -rotate { 0 -1.57 0}
[TableSet r27.t1] -father r27
r27.t1 -rotate {0 1.58 0}
r27.t1 -translate {2.5 0.8 1}

[I_Room r28 1.5 3 0.2] -father in
r28 -translate {3 0 1.85}
r28 -rotate { 0 -1.57 0}
r28 -open 1.3
[TableSet r28.t1] -father r28 
r28.t1 -rotate {0 1.58 0}
r28.t1 -translate {2.5 0.8 1}


[I_DWall r29 3.75 3 0.1] -father in
r29 -translate {3 0 3.35}
r29 -rotate { 0 -1.57 0}
r29 -open 1.6

[I_Wall w29 3 ] -father in
w29 -translate {3 0 3.35}

if [ITEXT] {
    [Text t29 "SGI Cabinet" {0 0 0} ] -pickmode 2 -father r29 
    t29 -scale { 0.1 0.1 0.1} -diffuse { 1 0 1}
    t29 -translate { -2 23 1}
    t29 -rotate { 0 0 0.2}
}
[Table r29.t01 -1 0] -father r29 -rotate {0 1.58 0}
r29.t01 -translate {1.25 0.8 0.25} -color {0.8 0.8 0.8}
[Table r29.t11 -1 0] -father r29 -rotate {0 1.58 0}
r29.t11 -translate {2.5 0.8 1.25} -color {0.8 0.8 0.8}
[Table r29.t12 -0.3 0.2] -father r29 -rotate {0 1.58 0}
r29.t12 -translate {1.75 0.8 1.25} -color {0.8 0.8 0.8}
[Table r29.t13 -0.3 0.2] -father r29 -rotate {0 1.58 0}
r29.t13 -translate {1 0.8 1.25} -color {0.8 0.8 0.8}
[Table r29.t21 0.3 -0.2] -father r29 -rotate {0 1.58 0}
r29.t21 -translate {2.5 0.8 2.25} -color {0.8 0.8 0.8}
[Table r29.t22 -0.3 0.2] -father r29 -rotate {0 1.58 0}
r29.t22 -translate {1.75 0.8 2.25} -color {0.8 0.8 0.8}
[Table r29.t23 -0.3 0.2] -father r29 -rotate {0 1.58 0}
r29.t23 -translate {1 0.8 2.25} -color {0.8 0.8 0.8}
[Table r29.t31 0.3 -0.2] -father r29 -rotate {0 1.58 0}
r29.t31 -translate {2.5 0.8 3.25} -color {0.8 0.8 0.8}
[Table r29.t32 0.2 -0.3] -father r29 -rotate {0 1.58 0}
r29.t32 -translate {1.75 0.8 3.25} -color {0.8 0.8 0.8}
[Table r29.t33 -0.3 0.2] -father r29 -rotate {0 1.58 0}
r29.t33 -translate {1 0.8 3.25} -color {0.8 0.8 0.8}

[I_Room r30 2.25 3 1] -father in
r30 -translate {3 0 4.1}
r30 -rotate { 0 -3.14 0}

[I_Room r31 3.75 3 2.4] -father in
r31 -translate {0.75 0 4.1}
r31 -rotate { 0 -3.14 0}
r31 -open 1.6

if [ITEXT] {
    [Text t31 "Sun Cabinet" {0 0 0} ] -pickmode 2 -father r31 
    t31 -scale { 0.1 0.1 0.1} -diffuse { 0 0.8 0.3}
    t31 -translate { 21 23 1}
    t31 -rotate { -0.1 0 0}
}

for {set i 0} {$i<4} {incr i 1} {
    [Table r31.1$i [expr $i/10] 0.2] -father r31 -color {0.6 0.6 0.6} -rotate {0 1.58 0}
    r31.1$i -translate "[expr $i*0.6+0.75] 0.8 0.25"
}

for {set i 0} {$i<4} {incr i 1} {
    [Table r31.2$i -0.3 0.2] -father r31 -color {0.6 0.6 0.6} -rotate {0 -1.58 0}
    r31.2$i -translate "[expr $i*-0.6-0.75] 0.8 -1.5"
}

for {set i 0} {$i<4} {incr i 1} {
    [Table r31.3$i -0 0.1] -father r31 -color {0.6 0.6 0.6} -rotate {0 1.58 0}
    r31.3$i -translate "[expr $i*0.6+0.75] 0.8 2"
}

for {set i 0} {$i<4} {incr i 1} {
    [Table r31.4$i -0.3 0.2] -father r31 -color {0.6 0.6 0.6} -rotate {0 -1.58 0}
    r31.4$i -translate "[expr $i*-0.6-0.75] 0.8 -3.5"
}


[I_Room r31a 3 3 0.2] -father in
r31a -translate {-3 0 4.1}
r31a -rotate { 0 -3.14 0}

[I_DWall r32 2.3 1 0.15] -father in
r32 -translate {-2.8 0 4.1}
r32 -rotate { 0 1.57 0}
delete [r32 -getDoor]

[I_Wall w32 0.8] -father in
w32 -translate {-3.7 0 4.1}
w32 -rotate { 0 1.57 0}

[I_DWall r32a 0.9 1 0.05] -father in
r32a -translate {-3.7 0 3.35}

[I_Wall w32a 3.2] -father in
w32a -translate {-6 0 1.8}

[I_ClosedRoom r34 2 3.9 0.2] -father in
r34 -translate {-1.9 0 1.2}
r34 -rotate { 0 -1.57 0}

[I_Room r35 1.9 3.9 1.1] -father in
r35 -translate {-1.9 0 -0.7}
r35 -rotate { 0 -1.57 0}

[I_Wall w35 0.75] -father in
w35 -translate {2 0 1.3}
w35 -rotate { 0 1.57 0}

[Quader qw35 1.3 1 0.1] -father in
qw35 -translate {1.95 2.5 -0.1}
qw35 -rotate { 0 1.57 0}

[I_ClosedRoom r36 1.2 1.35 0.1] -father in
r36 -translate {-1.9 0 -1.9}
r36 -rotate { 0 -1.57 0}

[I_DWall r37 1.2 2.6 0.1] -father in
r37 -translate {1.95 0 -1.9}
r37 -rotate { 0 -1.57 0}

[I_ClosedRoom r38 0.65 1 0.05] -father in
r38 -translate {2 0 -1.9}
r38 -rotate { 0 1.57 0}

[I_DWall r39 1.45 2.6 0.1] -father in
r39 -translate {2 0 -2.5}
r39 -rotate { 0 1.57 0}
r39 -open 1.4

[I_DWall r40 3.9 2.6 2.3] -father in
r40 -translate {2 0 -4}
r40 -rotate { 0 3.14 0}

[I_Wall w40 1.2 ] -father in
w40 -translate {-1.9 0 -4}
w40 -rotate { 0 -1.57 0}

[I_ClosedRoom r41 0.9 1 0.45] -father in
r41 -translate {-1.9 0 -2.8}
r41 -rotate { 0 -1.57 0}
r41 -open 1.6

if [ITEXT] {
    [Text t41 "Kitchen" {0 0 0} ] -pickmode 2 -father r41 
    t41 -scale { 0.1 0.1 0.1} -diffuse { 0.2 0.3 0.1}
    t41 -translate {4 26 1}
    t41 -rotate { 0.3 0 0}
}

# the lights:

sc -insert [PointLight l1] [PointLight l2] [AmbientLight al]
l1 -origin { 0 10 0}
l2 -origin { 10 5 0} -color { 0 0 1}
al -color {0.2 0.2 0.2}
