orig/genwindow.csh
changeset 0 0aa115157c9c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/orig/genwindow.csh	Sat Apr 09 17:55:16 2011 +0100
@@ -0,0 +1,244 @@
+#!/bin/csh -f
+# RCSid: $Id: genwindow.csh,v 2.2 2003/02/22 02:07:23 greg Exp $
+#
+#  Generate source description for window with venetian blinds.
+#
+#	1/11/88		Greg Ward
+#
+#  Usage: genwindow shellfile
+#
+#  Takes as input the following shell variables from file $1:
+#
+#	worient		Window orientation (degrees from south)
+#	wwidth		Window width
+#	wheight		Window height
+#	wtrans		Window transmission
+#	bdepth		Blind depth
+#	bspac		Blind vertical spacing
+#	gap		Gap between blinds and window
+#	brcurv		Blind curvature radius (negative upward, zero none)
+#	bangle		Blind inclination (degrees from horizontal, up and out)
+#	material	Blind material type (metal or plastic)
+#	ucolor		Blind up side color ("red green blue")
+#	uspec		Blind up side specularity (0 to 1)
+#	urough		Blind up side roughness (0 to .2)
+#	dcolor		Blind down side color (opt)
+#	dspec		Blind down side specularity (opt)
+#	drough		Blind down side roughness (opt)
+#	lat		Site latitude (degrees)
+#	long		Site longitude (degrees)
+#	mer		Site standard meridian (degrees)
+#	hour		Hour (standard 24hr time)
+#	day		Day (of month)
+#	month		Month (of year)
+#	grefl		Ground plane reflectance
+#	sky		Sky conditions (sunny, clear, cloudy)
+#	nsources	Number of sources to divide window
+#
+#  Creates the following output files:
+#
+#	stdout		Window description for Radiance
+#	$1.d$$		Window output distribution
+#
+
+if ( $#argv != 1 ) then
+	echo Usage: $0 input
+	exit 1
+endif
+
+#	Set input and output files
+set input = $1
+set distrib = $1.d$$
+set tmpdir = /tmp
+set descrip = $tmpdir/gw$$.des
+set distoct = $tmpdir/gw$$.oct
+set skydesc = $tmpdir/gw$$.sky
+set remove = ( $distoct $skydesc $descrip )
+set removerr = ( $remove $distrib )
+onintr error
+
+#	Set default values
+set worient = 0.
+set wtrans = ( .96 .96 .96 )
+set bdepth = 0.025
+set bspac = 0.0155
+set gap = 0.
+set brcurv = 0.
+set bangle = 0.
+set material = plastic
+set ucolor = ( 0.5 0.5 0.5 ) 
+set uspec = 0.
+set urough = 0.05
+set lat = 37.8
+set long = 122
+set mer = 120
+set hour = 12
+set day = 21
+set month = 10
+set grefl = .2
+set sky = sunny
+set nsources = 6
+
+#	Get input
+source $input
+if ( $status ) goto error
+
+#	Create window
+cat > $descrip <<_EOF_
+
+void glass clear_glass
+0
+0
+3 $wtrans
+
+clear_glass polygon window
+0
+0
+12
+	0	0	0
+	0	0	$wheight
+	$wwidth	0	$wheight
+	$wwidth	0	0
+
+void $material blind_upmat
+0
+0
+5 $ucolor $uspec $urough
+_EOF_
+if ( $status ) goto error
+
+#	Blinds
+genblinds blind_upmat blind_up $bdepth $wwidth $wheight \
+		`ev "ceil($wheight/$bspac)"` $bangle -r $brcurv \
+	| xform -t $gap -$wwidth 1e-4 -rz 90 >> $descrip
+if ( $status ) goto error
+if ( $?dcolor ) then
+	cat >> $descrip <<_EOF_
+
+	void $material blind_dnmat
+	0
+	0
+	5 $dcolor $dspec $drough
+_EOF_
+	genblinds blind_dnmat blind_down $bdepth $wwidth $wheight \
+			`ev "ceil($wheight/$bspac)"` $bangle -r $brcurv \
+		| xform -t $gap -$wwidth 0 -rz 90 >> $descrip
+	if ( $status ) goto error
+endif
+
+#	Make sky
+switch ($sky)
+case sun*:
+	set skysw = +s
+	breaksw
+case clear:
+	set skysw = -s
+	breaksw
+case cloud*:
+	set skysw = -c
+	breaksw
+endsw
+dosky:
+gensky $month $day $hour $skysw -a $lat -o $long -m $mer -g $grefl \
+	| xform -rz `ev "-($worient)"` > $skydesc
+if ( $skysw == +s ) then
+	if ( `sed -n 13p $skydesc | rcalc -e '$1=if($3,-1,1)'` < 0 ) then
+		set skysw = -s
+		goto dosky
+	endif
+endif
+cat >> $skydesc <<_EOF_
+
+skyfunc glow skyglow
+0
+0
+4 1 1 1 0
+
+skyglow source sky
+0
+0
+4 0 -1 0 180
+_EOF_
+
+#	Make distribution
+oconv $skydesc $descrip > $distoct
+if ( $status ) goto error
+echo 2 5 85 9 0 340 18 > $distrib
+makedist -h -d -x1 0 1 0 -x2 0 0 1 -x3 1 0 0 -alpha 5-85:10 -beta 0-340:20 \
+		-tw $bspac -th $bspac -td `ev "2*($bdepth+$gap)"` \
+		-tc `ev "$wwidth/2" "$bdepth+$gap" "$wheight/2"` \
+		-ab 2 -aa .1 -ad 64 -as 64 \
+		-x 16 -y 16 $distoct >> $distrib
+if ( $status ) goto error
+
+set wsgrid = (`ev "floor(sqrt($nsources*$wwidth/$wheight)+.5)" "floor(sqrt($nsources*$wheight/$wwidth)+.5)"`)
+@ nsources = $wsgrid[1] * $wsgrid[2]
+#	Print header
+cat <<_EOF_
+#
+#  Window with venetian blinds
+#  Created from $input `date`
+#
+#	Window orientation (degrees from south):	$worient
+#	Window height:					$wheight
+#	Window width:					$wwidth
+#	Window transmission:				$wtrans
+#	Blind depth:					$bdepth
+#	Blind spacing:					$bspac
+#	Gap to window:					$gap
+#	Blind curvature radius:				$brcurv
+#	Blind inclination (degrees altitude):		$bangle
+#	Blind material:					$material
+#	Up side color:					$ucolor
+#	Up side specularity:				$uspec
+#	Up side roughness:				$urough
+_EOF_
+if ( $?dcolor ) then
+	cat <<_EOF_
+#	Down side color:				$dcolor
+#	Down side specularity:				$dspec
+#	Down side roughness:				$drough
+_EOF_
+else
+	echo \#\	Down side same as up
+endif
+cat <<_EOF_
+#	Latitude (degrees):				$lat
+#	Longitude (degrees):				$long
+#	Standard Meridian (degrees):			$mer
+#	Month Day Hour:					$month $day $hour
+#	Ground plane reflectance:			$grefl
+#	Sky condition:					$sky
+#	Number of window sources:			$nsources
+#
+_EOF_
+
+#	Send sources
+xform -e -rz $worient <<_EOF_
+
+void brightdata wdistrib
+10 noop $distrib source.cal src_theta src_phi -rx 90 -ry -90 -mx
+0
+0
+
+wdistrib illum willum
+0
+0
+3 1 1 1
+
+!gensurf willum wsource "$wwidth*t" $bdepth "$wheight*s" $wsgrid[2] $wsgrid[1]
+_EOF_
+if ( $status ) goto error
+
+#	Send window
+xform -rz $worient $descrip
+if ( $status ) goto error
+
+#	All done, print and exit
+rm -f $remove
+exit 0
+
+#	Error exit
+error:
+	rm -f $removerr
+	exit 1