bin/ltview.pl
author Axel Jacobs <axel@jaloxa.eu>
Sun, 15 Dec 2013 18:07:03 +0000
changeset 48 de81adde2cae
parent 44 c8df2d579470
child 61 4f3a9f297a6a
permissions -rwxr-xr-x
Gold DaySim weather file for Gatwick as converted by epw2wea under Windoze
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
38
a21b69f32c77 ltview: WIP luminaire viewer based on objview.rb
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
     1
#!/usr/bin/perl
a21b69f32c77 ltview: WIP luminaire viewer based on objview.rb
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
     2
#
44
c8df2d579470 ltview: working and tested on LINUX and Vista
Axel Jacobs <axel@jaloxa.eu>
parents: 38
diff changeset
     3
# Make a nice view of a luminaire
c8df2d579470 ltview: working and tested on LINUX and Vista
Axel Jacobs <axel@jaloxa.eu>
parents: 38
diff changeset
     4
# Argument is the Radiance description of a luminaire, incl. distribution
38
a21b69f32c77 ltview: WIP luminaire viewer based on objview.rb
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
     5
#
44
c8df2d579470 ltview: working and tested on LINUX and Vista
Axel Jacobs <axel@jaloxa.eu>
parents: 38
diff changeset
     6
# This script is based on Radiance's objview.pl plus
c8df2d579470 ltview: working and tested on LINUX and Vista
Axel Jacobs <axel@jaloxa.eu>
parents: 38
diff changeset
     7
# Rob Guglielmetti's ltview extension to his objview.rb
38
a21b69f32c77 ltview: WIP luminaire viewer based on objview.rb
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
     8
#
44
c8df2d579470 ltview: working and tested on LINUX and Vista
Axel Jacobs <axel@jaloxa.eu>
parents: 38
diff changeset
     9
# Axel Jacobs, 25 Dec 2013
38
a21b69f32c77 ltview: WIP luminaire viewer based on objview.rb
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    10
a21b69f32c77 ltview: WIP luminaire viewer based on objview.rb
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    11
use strict;
a21b69f32c77 ltview: WIP luminaire viewer based on objview.rb
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    12
use warnings;
a21b69f32c77 ltview: WIP luminaire viewer based on objview.rb
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    13
use File::Temp qw/ tempdir /;
a21b69f32c77 ltview: WIP luminaire viewer based on objview.rb
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    14
44
c8df2d579470 ltview: working and tested on LINUX and Vista
Axel Jacobs <axel@jaloxa.eu>
parents: 38
diff changeset
    15
my $td = tempdir( CLEANUP => 1 );
c8df2d579470 ltview: working and tested on LINUX and Vista
Axel Jacobs <axel@jaloxa.eu>
parents: 38
diff changeset
    16
my $octree = "$td/lt$$.oct";
38
a21b69f32c77 ltview: WIP luminaire viewer based on objview.rb
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    17
my $room = "$td/rm$$.rad";
44
c8df2d579470 ltview: working and tested on LINUX and Vista
Axel Jacobs <axel@jaloxa.eu>
parents: 38
diff changeset
    18
my $rif = "$td/lt$$.rif";
c8df2d579470 ltview: working and tested on LINUX and Vista
Axel Jacobs <axel@jaloxa.eu>
parents: 38
diff changeset
    19
my $lumi = "$td/lt$$.rad";
38
a21b69f32c77 ltview: WIP luminaire viewer based on objview.rb
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    20
my $ambf = "$td/af$$.amb";
a21b69f32c77 ltview: WIP luminaire viewer based on objview.rb
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    21
my $raddev = "x11";   # default output device. Overwrite with -o
a21b69f32c77 ltview: WIP luminaire viewer based on objview.rb
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    22
my $up = "Z";
44
c8df2d579470 ltview: working and tested on LINUX and Vista
Axel Jacobs <axel@jaloxa.eu>
parents: 38
diff changeset
    23
my $vw = "XYZ";    # default view. See 'man rad' for details
c8df2d579470 ltview: working and tested on LINUX and Vista
Axel Jacobs <axel@jaloxa.eu>
parents: 38
diff changeset
    24
my $bubble = 0;    # Box or bubble?  0..box, 1..bubble
c8df2d579470 ltview: working and tested on LINUX and Vista
Axel Jacobs <axel@jaloxa.eu>
parents: 38
diff changeset
    25
my $TINY = 0.01;
38
a21b69f32c77 ltview: WIP luminaire viewer based on objview.rb
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    26
a21b69f32c77 ltview: WIP luminaire viewer based on objview.rb
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    27
my $opts = "";        # Options common to rad and glrad
44
c8df2d579470 ltview: working and tested on LINUX and Vista
Axel Jacobs <axel@jaloxa.eu>
parents: 38
diff changeset
    28
my $rendopts = "-ab 1 -ds .15 -av 0 0 0";    # For render= line in rif file
38
a21b69f32c77 ltview: WIP luminaire viewer based on objview.rb
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    29
my $usegl = 0;        # Run glrad instead of rad (Boolean).
a21b69f32c77 ltview: WIP luminaire viewer based on objview.rb
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    30
my $radopt = 0;       # An option specific to rad was passed (Boolean).
a21b69f32c77 ltview: WIP luminaire viewer based on objview.rb
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    31
my $glradopt = 0;     # An option specific to glrad was passed (Boolean).
a21b69f32c77 ltview: WIP luminaire viewer based on objview.rb
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    32
a21b69f32c77 ltview: WIP luminaire viewer based on objview.rb
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    33
while (@ARGV) {
a21b69f32c77 ltview: WIP luminaire viewer based on objview.rb
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    34
	$_ = $ARGV[0];
a21b69f32c77 ltview: WIP luminaire viewer based on objview.rb
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    35
	if (m/-g/) {   # OpenGL output
a21b69f32c77 ltview: WIP luminaire viewer based on objview.rb
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    36
		if ( $^O =~ /MSWin32/ ) {
44
c8df2d579470 ltview: working and tested on LINUX and Vista
Axel Jacobs <axel@jaloxa.eu>
parents: 38
diff changeset
    37
			# No meaningful error messages under Windows. Just ignore...
c8df2d579470 ltview: working and tested on LINUX and Vista
Axel Jacobs <axel@jaloxa.eu>
parents: 38
diff changeset
    38
			#die("OpenGL view is not available under Windows.\n");
c8df2d579470 ltview: working and tested on LINUX and Vista
Axel Jacobs <axel@jaloxa.eu>
parents: 38
diff changeset
    39
		} else {
c8df2d579470 ltview: working and tested on LINUX and Vista
Axel Jacobs <axel@jaloxa.eu>
parents: 38
diff changeset
    40
			$usegl = 1;
38
a21b69f32c77 ltview: WIP luminaire viewer based on objview.rb
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    41
		}
a21b69f32c77 ltview: WIP luminaire viewer based on objview.rb
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    42
	} elsif (m/-u/) {   # up direction
a21b69f32c77 ltview: WIP luminaire viewer based on objview.rb
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    43
		$up = $ARGV[1];
a21b69f32c77 ltview: WIP luminaire viewer based on objview.rb
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    44
		shift @ARGV;
a21b69f32c77 ltview: WIP luminaire viewer based on objview.rb
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    45
	} elsif ((m/-s/) or (m/-w/)) {   # silent, no warnings
a21b69f32c77 ltview: WIP luminaire viewer based on objview.rb
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    46
		$opts .= " $_";
a21b69f32c77 ltview: WIP luminaire viewer based on objview.rb
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    47
	} elsif (m/-b/) {   # back face visibility
a21b69f32c77 ltview: WIP luminaire viewer based on objview.rb
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    48
		$rendopts .= ' -bv';
a21b69f32c77 ltview: WIP luminaire viewer based on objview.rb
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    49
	} elsif (m/-v/) {   # standard view "[Xx]?[Yy]?[Zz]?[vlcahs]?"
44
c8df2d579470 ltview: working and tested on LINUX and Vista
Axel Jacobs <axel@jaloxa.eu>
parents: 38
diff changeset
    50
		# Prepend view with '+' for custom view away from the luminaire, not at it.
c8df2d579470 ltview: working and tested on LINUX and Vista
Axel Jacobs <axel@jaloxa.eu>
parents: 38
diff changeset
    51
		# This is not defined by rad's default views.
38
a21b69f32c77 ltview: WIP luminaire viewer based on objview.rb
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    52
		$vw = $ARGV[1];
a21b69f32c77 ltview: WIP luminaire viewer based on objview.rb
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    53
		shift @ARGV;
a21b69f32c77 ltview: WIP luminaire viewer based on objview.rb
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    54
	} elsif (m/-N/) {   # No. of parallel processes
44
c8df2d579470 ltview: working and tested on LINUX and Vista
Axel Jacobs <axel@jaloxa.eu>
parents: 38
diff changeset
    55
		if ( $^O =~ /MSWin32/ ) {
c8df2d579470 ltview: working and tested on LINUX and Vista
Axel Jacobs <axel@jaloxa.eu>
parents: 38
diff changeset
    56
			# Silently ignore this under Windoze
c8df2d579470 ltview: working and tested on LINUX and Vista
Axel Jacobs <axel@jaloxa.eu>
parents: 38
diff changeset
    57
			#die("Multi-processor support is not available under Windows.\n");
c8df2d579470 ltview: working and tested on LINUX and Vista
Axel Jacobs <axel@jaloxa.eu>
parents: 38
diff changeset
    58
		} else {
c8df2d579470 ltview: working and tested on LINUX and Vista
Axel Jacobs <axel@jaloxa.eu>
parents: 38
diff changeset
    59
			$opts .= ' -N ' . $ARGV[1];
c8df2d579470 ltview: working and tested on LINUX and Vista
Axel Jacobs <axel@jaloxa.eu>
parents: 38
diff changeset
    60
		}
38
a21b69f32c77 ltview: WIP luminaire viewer based on objview.rb
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    61
		$radopt = 1;
a21b69f32c77 ltview: WIP luminaire viewer based on objview.rb
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    62
		shift @ARGV;
a21b69f32c77 ltview: WIP luminaire viewer based on objview.rb
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    63
	} elsif (m/-o/) {   # output device (rvu -devices)
a21b69f32c77 ltview: WIP luminaire viewer based on objview.rb
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    64
		$raddev = $ARGV[1];
a21b69f32c77 ltview: WIP luminaire viewer based on objview.rb
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    65
		$radopt = 1;
a21b69f32c77 ltview: WIP luminaire viewer based on objview.rb
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    66
		shift @ARGV;
a21b69f32c77 ltview: WIP luminaire viewer based on objview.rb
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    67
	} elsif ((m/-V/) or (m/-e/)) {   # print view, explicate variables
a21b69f32c77 ltview: WIP luminaire viewer based on objview.rb
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    68
		# Think of those two as '-verbose'.
a21b69f32c77 ltview: WIP luminaire viewer based on objview.rb
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    69
		$opts .= " $_";
a21b69f32c77 ltview: WIP luminaire viewer based on objview.rb
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    70
		$radopt = 1;
a21b69f32c77 ltview: WIP luminaire viewer based on objview.rb
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    71
	} elsif (m/-S/) {   # full-screen stereo
a21b69f32c77 ltview: WIP luminaire viewer based on objview.rb
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    72
		$opts .= " $_";
a21b69f32c77 ltview: WIP luminaire viewer based on objview.rb
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    73
		$glradopt = 1;
44
c8df2d579470 ltview: working and tested on LINUX and Vista
Axel Jacobs <axel@jaloxa.eu>
parents: 38
diff changeset
    74
	} elsif (m/-r/) {    # spherical room rather than box
c8df2d579470 ltview: working and tested on LINUX and Vista
Axel Jacobs <axel@jaloxa.eu>
parents: 38
diff changeset
    75
		$bubble = 1;
38
a21b69f32c77 ltview: WIP luminaire viewer based on objview.rb
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    76
	} elsif (m/^-\w/) {
a21b69f32c77 ltview: WIP luminaire viewer based on objview.rb
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    77
		die("objview: Bad option: $_\n");
a21b69f32c77 ltview: WIP luminaire viewer based on objview.rb
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    78
	} else {
a21b69f32c77 ltview: WIP luminaire viewer based on objview.rb
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    79
		last;
a21b69f32c77 ltview: WIP luminaire viewer based on objview.rb
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    80
	}
a21b69f32c77 ltview: WIP luminaire viewer based on objview.rb
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    81
	shift @ARGV;
a21b69f32c77 ltview: WIP luminaire viewer based on objview.rb
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    82
}
a21b69f32c77 ltview: WIP luminaire viewer based on objview.rb
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    83
44
c8df2d579470 ltview: working and tested on LINUX and Vista
Axel Jacobs <axel@jaloxa.eu>
parents: 38
diff changeset
    84
# We need exactly one input file: a Radiance luminaires description
c8df2d579470 ltview: working and tested on LINUX and Vista
Axel Jacobs <axel@jaloxa.eu>
parents: 38
diff changeset
    85
#TODO: this could be expanded to handle Radiance .dat files and IES photometry files...
38
a21b69f32c77 ltview: WIP luminaire viewer based on objview.rb
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    86
if (! $#ARGV == 0) {
44
c8df2d579470 ltview: working and tested on LINUX and Vista
Axel Jacobs <axel@jaloxa.eu>
parents: 38
diff changeset
    87
	die("ltview: Need one Radiance luminaire.\n");
38
a21b69f32c77 ltview: WIP luminaire viewer based on objview.rb
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    88
}
a21b69f32c77 ltview: WIP luminaire viewer based on objview.rb
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    89
a21b69f32c77 ltview: WIP luminaire viewer based on objview.rb
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    90
# Make sure we don't confuse glrad and rad options.
a21b69f32c77 ltview: WIP luminaire viewer based on objview.rb
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    91
if ($usegl) {
a21b69f32c77 ltview: WIP luminaire viewer based on objview.rb
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    92
	if ($radopt) {
a21b69f32c77 ltview: WIP luminaire viewer based on objview.rb
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    93
		die("objview: glrad output requested, but rad option passed.\n");
a21b69f32c77 ltview: WIP luminaire viewer based on objview.rb
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    94
	}
a21b69f32c77 ltview: WIP luminaire viewer based on objview.rb
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    95
} else {
a21b69f32c77 ltview: WIP luminaire viewer based on objview.rb
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    96
	if ($glradopt) {
a21b69f32c77 ltview: WIP luminaire viewer based on objview.rb
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    97
		die("objview: rad output requested, but glrad option passed.\n");
a21b69f32c77 ltview: WIP luminaire viewer based on objview.rb
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    98
	}
a21b69f32c77 ltview: WIP luminaire viewer based on objview.rb
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    99
}
a21b69f32c77 ltview: WIP luminaire viewer based on objview.rb
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
   100
a21b69f32c77 ltview: WIP luminaire viewer based on objview.rb
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
   101
open(FH, ">$room") or
a21b69f32c77 ltview: WIP luminaire viewer based on objview.rb
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
   102
		die("ltview: Can't write to temporary file $room\n");
44
c8df2d579470 ltview: working and tested on LINUX and Vista
Axel Jacobs <axel@jaloxa.eu>
parents: 38
diff changeset
   103
print FH "void plastic wall_mat  0  0  5 .2 .2 .2 0 0\n";
c8df2d579470 ltview: working and tested on LINUX and Vista
Axel Jacobs <axel@jaloxa.eu>
parents: 38
diff changeset
   104
c8df2d579470 ltview: working and tested on LINUX and Vista
Axel Jacobs <axel@jaloxa.eu>
parents: 38
diff changeset
   105
if ($bubble == 1) {
c8df2d579470 ltview: working and tested on LINUX and Vista
Axel Jacobs <axel@jaloxa.eu>
parents: 38
diff changeset
   106
	# Room is a bubble, not a box
c8df2d579470 ltview: working and tested on LINUX and Vista
Axel Jacobs <axel@jaloxa.eu>
parents: 38
diff changeset
   107
	my $radius = sprintf "%.6f", 1.1*5 * 3**(1/3);
c8df2d579470 ltview: working and tested on LINUX and Vista
Axel Jacobs <axel@jaloxa.eu>
parents: 38
diff changeset
   108
	print FH "wall_mat sphere orb  0  0  4 0 0 0 $radius\n";
c8df2d579470 ltview: working and tested on LINUX and Vista
Axel Jacobs <axel@jaloxa.eu>
parents: 38
diff changeset
   109
} else {
c8df2d579470 ltview: working and tested on LINUX and Vista
Axel Jacobs <axel@jaloxa.eu>
parents: 38
diff changeset
   110
	print FH <<EndOfRoom;
c8df2d579470 ltview: working and tested on LINUX and Vista
Axel Jacobs <axel@jaloxa.eu>
parents: 38
diff changeset
   111
# Don't rely on genbox here (named genrbox under Debian/Ubuntu)
c8df2d579470 ltview: working and tested on LINUX and Vista
Axel Jacobs <axel@jaloxa.eu>
parents: 38
diff changeset
   112
wall_mat polygon box.1540  0  0  12  5 -5 -5  5 -5 5  -5 -5 5  -5 -5 -5
c8df2d579470 ltview: working and tested on LINUX and Vista
Axel Jacobs <axel@jaloxa.eu>
parents: 38
diff changeset
   113
wall_mat polygon box.4620  0  0  12  -5 -5 5  -5 5 5  -5 5 -5  -5 -5 -5
c8df2d579470 ltview: working and tested on LINUX and Vista
Axel Jacobs <axel@jaloxa.eu>
parents: 38
diff changeset
   114
wall_mat polygon box.2310  0  0  12  -5 5 -5  5 5 -5  5 -5 -5  -5 -5 -5
c8df2d579470 ltview: working and tested on LINUX and Vista
Axel Jacobs <axel@jaloxa.eu>
parents: 38
diff changeset
   115
wall_mat polygon box.3267  0  0  12  5 5 -5  -5 5 -5  -5 5 5  5 5 5
c8df2d579470 ltview: working and tested on LINUX and Vista
Axel Jacobs <axel@jaloxa.eu>
parents: 38
diff changeset
   116
wall_mat polygon box.5137  0  0  12  5 -5 5  5 -5 -5  5 5 -5  5 5 5
c8df2d579470 ltview: working and tested on LINUX and Vista
Axel Jacobs <axel@jaloxa.eu>
parents: 38
diff changeset
   117
wall_mat polygon box.6457  0  0  12  -5 5 5  -5 -5 5  5 -5 5  5 5 5
38
a21b69f32c77 ltview: WIP luminaire viewer based on objview.rb
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
   118
EndOfRoom
44
c8df2d579470 ltview: working and tested on LINUX and Vista
Axel Jacobs <axel@jaloxa.eu>
parents: 38
diff changeset
   119
}
38
a21b69f32c77 ltview: WIP luminaire viewer based on objview.rb
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
   120
close(FH);
a21b69f32c77 ltview: WIP luminaire viewer based on objview.rb
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
   121
44
c8df2d579470 ltview: working and tested on LINUX and Vista
Axel Jacobs <axel@jaloxa.eu>
parents: 38
diff changeset
   122
# Work out how large the luminaire is and scale so that the longest
c8df2d579470 ltview: working and tested on LINUX and Vista
Axel Jacobs <axel@jaloxa.eu>
parents: 38
diff changeset
   123
# axis-align dimension is one unit
c8df2d579470 ltview: working and tested on LINUX and Vista
Axel Jacobs <axel@jaloxa.eu>
parents: 38
diff changeset
   124
my $dimstr = `getbbox -h $ARGV[0]`;
c8df2d579470 ltview: working and tested on LINUX and Vista
Axel Jacobs <axel@jaloxa.eu>
parents: 38
diff changeset
   125
chomp $dimstr;
c8df2d579470 ltview: working and tested on LINUX and Vista
Axel Jacobs <axel@jaloxa.eu>
parents: 38
diff changeset
   126
# Values returned by getbbox are indented and delimited with multiple spaces.
c8df2d579470 ltview: working and tested on LINUX and Vista
Axel Jacobs <axel@jaloxa.eu>
parents: 38
diff changeset
   127
$dimstr =~ s/^\s+//;   # remove leading spaces
c8df2d579470 ltview: working and tested on LINUX and Vista
Axel Jacobs <axel@jaloxa.eu>
parents: 38
diff changeset
   128
my @dims = split(/\s+/, $dimstr);   # convert to array
c8df2d579470 ltview: working and tested on LINUX and Vista
Axel Jacobs <axel@jaloxa.eu>
parents: 38
diff changeset
   129
c8df2d579470 ltview: working and tested on LINUX and Vista
Axel Jacobs <axel@jaloxa.eu>
parents: 38
diff changeset
   130
# Find largest axes-aligned dimension
c8df2d579470 ltview: working and tested on LINUX and Vista
Axel Jacobs <axel@jaloxa.eu>
parents: 38
diff changeset
   131
my @diffs = ($dims[1]-$dims[0], $dims[3]-$dims[2], $dims[5]-$dims[4]);
c8df2d579470 ltview: working and tested on LINUX and Vista
Axel Jacobs <axel@jaloxa.eu>
parents: 38
diff changeset
   132
@diffs = reverse sort { $a <=> $b } @diffs;
c8df2d579470 ltview: working and tested on LINUX and Vista
Axel Jacobs <axel@jaloxa.eu>
parents: 38
diff changeset
   133
my $size = $diffs[0];
c8df2d579470 ltview: working and tested on LINUX and Vista
Axel Jacobs <axel@jaloxa.eu>
parents: 38
diff changeset
   134
c8df2d579470 ltview: working and tested on LINUX and Vista
Axel Jacobs <axel@jaloxa.eu>
parents: 38
diff changeset
   135
# Move objects so centre is at origin
c8df2d579470 ltview: working and tested on LINUX and Vista
Axel Jacobs <axel@jaloxa.eu>
parents: 38
diff changeset
   136
my $xtrans = -1.0 * ($dims[0] + $dims[1]) / 2;
c8df2d579470 ltview: working and tested on LINUX and Vista
Axel Jacobs <axel@jaloxa.eu>
parents: 38
diff changeset
   137
my $ytrans = -1.0 * ($dims[2] + $dims[3]) / 2;
c8df2d579470 ltview: working and tested on LINUX and Vista
Axel Jacobs <axel@jaloxa.eu>
parents: 38
diff changeset
   138
my $ztrans = -1.0 * ($dims[4] + $dims[5]) / 2;
c8df2d579470 ltview: working and tested on LINUX and Vista
Axel Jacobs <axel@jaloxa.eu>
parents: 38
diff changeset
   139
# Scale so that largest object dimension is unity
c8df2d579470 ltview: working and tested on LINUX and Vista
Axel Jacobs <axel@jaloxa.eu>
parents: 38
diff changeset
   140
my $scale = 1 / $size;
c8df2d579470 ltview: working and tested on LINUX and Vista
Axel Jacobs <axel@jaloxa.eu>
parents: 38
diff changeset
   141
c8df2d579470 ltview: working and tested on LINUX and Vista
Axel Jacobs <axel@jaloxa.eu>
parents: 38
diff changeset
   142
my $cmd = "xform -t $xtrans $ytrans $ztrans -s $scale $ARGV[0] > $lumi";
c8df2d579470 ltview: working and tested on LINUX and Vista
Axel Jacobs <axel@jaloxa.eu>
parents: 38
diff changeset
   143
system "$cmd";
c8df2d579470 ltview: working and tested on LINUX and Vista
Axel Jacobs <axel@jaloxa.eu>
parents: 38
diff changeset
   144
c8df2d579470 ltview: working and tested on LINUX and Vista
Axel Jacobs <axel@jaloxa.eu>
parents: 38
diff changeset
   145
my $scene = "$room $lumi";
38
a21b69f32c77 ltview: WIP luminaire viewer based on objview.rb
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
   146
# Make this work under Windoze
a21b69f32c77 ltview: WIP luminaire viewer based on objview.rb
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
   147
if ( $^O =~ /MSWin32/ ) {
a21b69f32c77 ltview: WIP luminaire viewer based on objview.rb
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
   148
	$scene =~ s{\\}{/}g;
a21b69f32c77 ltview: WIP luminaire viewer based on objview.rb
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
   149
	$octree =~ s{\\}{/}g;
44
c8df2d579470 ltview: working and tested on LINUX and Vista
Axel Jacobs <axel@jaloxa.eu>
parents: 38
diff changeset
   150
	$ambf =~ s{\\}{/}g;
38
a21b69f32c77 ltview: WIP luminaire viewer based on objview.rb
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
   151
	$raddev = "qt";
a21b69f32c77 ltview: WIP luminaire viewer based on objview.rb
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
   152
}
a21b69f32c77 ltview: WIP luminaire viewer based on objview.rb
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
   153
44
c8df2d579470 ltview: working and tested on LINUX and Vista
Axel Jacobs <axel@jaloxa.eu>
parents: 38
diff changeset
   154
my $custom_vw = $vw;
c8df2d579470 ltview: working and tested on LINUX and Vista
Axel Jacobs <axel@jaloxa.eu>
parents: 38
diff changeset
   155
$vw =~ s/^\+//;
38
a21b69f32c77 ltview: WIP luminaire viewer based on objview.rb
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
   156
open(FH, ">$rif") or
44
c8df2d579470 ltview: working and tested on LINUX and Vista
Axel Jacobs <axel@jaloxa.eu>
parents: 38
diff changeset
   157
		die("ltview: Can't write to temporary file $rif\n");
38
a21b69f32c77 ltview: WIP luminaire viewer based on objview.rb
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
   158
print FH <<EndOfRif;
a21b69f32c77 ltview: WIP luminaire viewer based on objview.rb
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
   159
scene= $scene
44
c8df2d579470 ltview: working and tested on LINUX and Vista
Axel Jacobs <axel@jaloxa.eu>
parents: 38
diff changeset
   160
EXPOSURE= 2
c8df2d579470 ltview: working and tested on LINUX and Vista
Axel Jacobs <axel@jaloxa.eu>
parents: 38
diff changeset
   161
ZONE= Interior -5 5  -5 5  -5 5
38
a21b69f32c77 ltview: WIP luminaire viewer based on objview.rb
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
   162
UP= $up
a21b69f32c77 ltview: WIP luminaire viewer based on objview.rb
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
   163
view= $vw
a21b69f32c77 ltview: WIP luminaire viewer based on objview.rb
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
   164
OCTREE= $octree
a21b69f32c77 ltview: WIP luminaire viewer based on objview.rb
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
   165
oconv= -f
a21b69f32c77 ltview: WIP luminaire viewer based on objview.rb
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
   166
AMBF= $ambf
a21b69f32c77 ltview: WIP luminaire viewer based on objview.rb
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
   167
render= $rendopts
a21b69f32c77 ltview: WIP luminaire viewer based on objview.rb
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
   168
EndOfRif
a21b69f32c77 ltview: WIP luminaire viewer based on objview.rb
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
   169
close(FH);
a21b69f32c77 ltview: WIP luminaire viewer based on objview.rb
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
   170
44
c8df2d579470 ltview: working and tested on LINUX and Vista
Axel Jacobs <axel@jaloxa.eu>
parents: 38
diff changeset
   171
# Custom view: look away from the luminaire, not at it.  This is indicated
c8df2d579470 ltview: working and tested on LINUX and Vista
Axel Jacobs <axel@jaloxa.eu>
parents: 38
diff changeset
   172
# by a leading '+' in front of the view (-v argument, default: XYZ)
c8df2d579470 ltview: working and tested on LINUX and Vista
Axel Jacobs <axel@jaloxa.eu>
parents: 38
diff changeset
   173
if ($custom_vw =~ m/^\+/) {
c8df2d579470 ltview: working and tested on LINUX and Vista
Axel Jacobs <axel@jaloxa.eu>
parents: 38
diff changeset
   174
	# Get rad to spit out the -v* options for the default view requested
c8df2d579470 ltview: working and tested on LINUX and Vista
Axel Jacobs <axel@jaloxa.eu>
parents: 38
diff changeset
   175
	my $view = `rad -V -n -s $rif`;
c8df2d579470 ltview: working and tested on LINUX and Vista
Axel Jacobs <axel@jaloxa.eu>
parents: 38
diff changeset
   176
	$view =~ s/\n//;
c8df2d579470 ltview: working and tested on LINUX and Vista
Axel Jacobs <axel@jaloxa.eu>
parents: 38
diff changeset
   177
	$view =~ s/^VIEW= //;
c8df2d579470 ltview: working and tested on LINUX and Vista
Axel Jacobs <axel@jaloxa.eu>
parents: 38
diff changeset
   178
c8df2d579470 ltview: working and tested on LINUX and Vista
Axel Jacobs <axel@jaloxa.eu>
parents: 38
diff changeset
   179
	my $x = 0;
c8df2d579470 ltview: working and tested on LINUX and Vista
Axel Jacobs <axel@jaloxa.eu>
parents: 38
diff changeset
   180
	my $y = 0;
c8df2d579470 ltview: working and tested on LINUX and Vista
Axel Jacobs <axel@jaloxa.eu>
parents: 38
diff changeset
   181
	my $z = 0;
c8df2d579470 ltview: working and tested on LINUX and Vista
Axel Jacobs <axel@jaloxa.eu>
parents: 38
diff changeset
   182
	if ($vw =~ m/X/) {
c8df2d579470 ltview: working and tested on LINUX and Vista
Axel Jacobs <axel@jaloxa.eu>
parents: 38
diff changeset
   183
		$x = $dims[0] - $TINY;
c8df2d579470 ltview: working and tested on LINUX and Vista
Axel Jacobs <axel@jaloxa.eu>
parents: 38
diff changeset
   184
	} elsif ($vw =~ m/x/) {
c8df2d579470 ltview: working and tested on LINUX and Vista
Axel Jacobs <axel@jaloxa.eu>
parents: 38
diff changeset
   185
		$x = $dims[1] + $TINY;
c8df2d579470 ltview: working and tested on LINUX and Vista
Axel Jacobs <axel@jaloxa.eu>
parents: 38
diff changeset
   186
	}
c8df2d579470 ltview: working and tested on LINUX and Vista
Axel Jacobs <axel@jaloxa.eu>
parents: 38
diff changeset
   187
	if ($vw =~ m/Y/) {
c8df2d579470 ltview: working and tested on LINUX and Vista
Axel Jacobs <axel@jaloxa.eu>
parents: 38
diff changeset
   188
		$y = $dims[2] - $TINY;
c8df2d579470 ltview: working and tested on LINUX and Vista
Axel Jacobs <axel@jaloxa.eu>
parents: 38
diff changeset
   189
	} elsif ($vw =~ m/y/) {
c8df2d579470 ltview: working and tested on LINUX and Vista
Axel Jacobs <axel@jaloxa.eu>
parents: 38
diff changeset
   190
		$y = $dims[3] + $TINY;
c8df2d579470 ltview: working and tested on LINUX and Vista
Axel Jacobs <axel@jaloxa.eu>
parents: 38
diff changeset
   191
	}
c8df2d579470 ltview: working and tested on LINUX and Vista
Axel Jacobs <axel@jaloxa.eu>
parents: 38
diff changeset
   192
	if ($vw =~ m/Z/) {
c8df2d579470 ltview: working and tested on LINUX and Vista
Axel Jacobs <axel@jaloxa.eu>
parents: 38
diff changeset
   193
		$z = $dims[4] - $TINY;
c8df2d579470 ltview: working and tested on LINUX and Vista
Axel Jacobs <axel@jaloxa.eu>
parents: 38
diff changeset
   194
	} elsif ($vw =~ m/z/) {
c8df2d579470 ltview: working and tested on LINUX and Vista
Axel Jacobs <axel@jaloxa.eu>
parents: 38
diff changeset
   195
		$z = $dims[5] + $TINY;
c8df2d579470 ltview: working and tested on LINUX and Vista
Axel Jacobs <axel@jaloxa.eu>
parents: 38
diff changeset
   196
	}
c8df2d579470 ltview: working and tested on LINUX and Vista
Axel Jacobs <axel@jaloxa.eu>
parents: 38
diff changeset
   197
	
c8df2d579470 ltview: working and tested on LINUX and Vista
Axel Jacobs <axel@jaloxa.eu>
parents: 38
diff changeset
   198
	# Keep rad-generated standard view, but modify -vp
c8df2d579470 ltview: working and tested on LINUX and Vista
Axel Jacobs <axel@jaloxa.eu>
parents: 38
diff changeset
   199
	$vw = "nice $view -vp $x $y $z";
c8df2d579470 ltview: working and tested on LINUX and Vista
Axel Jacobs <axel@jaloxa.eu>
parents: 38
diff changeset
   200
c8df2d579470 ltview: working and tested on LINUX and Vista
Axel Jacobs <axel@jaloxa.eu>
parents: 38
diff changeset
   201
	open(FH, ">$rif") or
c8df2d579470 ltview: working and tested on LINUX and Vista
Axel Jacobs <axel@jaloxa.eu>
parents: 38
diff changeset
   202
			die("ltview: Can't write to temporary file $rif\n");
c8df2d579470 ltview: working and tested on LINUX and Vista
Axel Jacobs <axel@jaloxa.eu>
parents: 38
diff changeset
   203
	print FH <<EndOfRif2;
c8df2d579470 ltview: working and tested on LINUX and Vista
Axel Jacobs <axel@jaloxa.eu>
parents: 38
diff changeset
   204
scene= $scene
c8df2d579470 ltview: working and tested on LINUX and Vista
Axel Jacobs <axel@jaloxa.eu>
parents: 38
diff changeset
   205
EXPOSURE= 2
c8df2d579470 ltview: working and tested on LINUX and Vista
Axel Jacobs <axel@jaloxa.eu>
parents: 38
diff changeset
   206
ZONE= Interior -5 5  -5 5  -5 5
c8df2d579470 ltview: working and tested on LINUX and Vista
Axel Jacobs <axel@jaloxa.eu>
parents: 38
diff changeset
   207
UP= $up
c8df2d579470 ltview: working and tested on LINUX and Vista
Axel Jacobs <axel@jaloxa.eu>
parents: 38
diff changeset
   208
view= $vw
c8df2d579470 ltview: working and tested on LINUX and Vista
Axel Jacobs <axel@jaloxa.eu>
parents: 38
diff changeset
   209
OCTREE= $octree
c8df2d579470 ltview: working and tested on LINUX and Vista
Axel Jacobs <axel@jaloxa.eu>
parents: 38
diff changeset
   210
oconv= -f
c8df2d579470 ltview: working and tested on LINUX and Vista
Axel Jacobs <axel@jaloxa.eu>
parents: 38
diff changeset
   211
AMBF= $ambf
c8df2d579470 ltview: working and tested on LINUX and Vista
Axel Jacobs <axel@jaloxa.eu>
parents: 38
diff changeset
   212
render= $rendopts
c8df2d579470 ltview: working and tested on LINUX and Vista
Axel Jacobs <axel@jaloxa.eu>
parents: 38
diff changeset
   213
EndOfRif2
c8df2d579470 ltview: working and tested on LINUX and Vista
Axel Jacobs <axel@jaloxa.eu>
parents: 38
diff changeset
   214
	close(FH);
c8df2d579470 ltview: working and tested on LINUX and Vista
Axel Jacobs <axel@jaloxa.eu>
parents: 38
diff changeset
   215
}
c8df2d579470 ltview: working and tested on LINUX and Vista
Axel Jacobs <axel@jaloxa.eu>
parents: 38
diff changeset
   216
38
a21b69f32c77 ltview: WIP luminaire viewer based on objview.rb
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
   217
if ($usegl) {
a21b69f32c77 ltview: WIP luminaire viewer based on objview.rb
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
   218
	system "glrad $opts $rif";
a21b69f32c77 ltview: WIP luminaire viewer based on objview.rb
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
   219
} else {
a21b69f32c77 ltview: WIP luminaire viewer based on objview.rb
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
   220
	system "rad -o $raddev $opts $rif";
a21b69f32c77 ltview: WIP luminaire viewer based on objview.rb
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
   221
}
a21b69f32c77 ltview: WIP luminaire viewer based on objview.rb
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
   222
a21b69f32c77 ltview: WIP luminaire viewer based on objview.rb
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
   223
#EOF