| author | Axel Jacobs <axel@jaloxa.eu> |
| Tue, 11 Mar 2014 00:28:22 +0000 | |
| changeset 59 | 626ea3bad930 |
| parent 44 | c8df2d579470 |
| child 61 | 4f3a9f297a6a |
| permissions | -rwxr-xr-x |
|
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 |