bin/objpict.pl
author Axel Jacobs <axel@jaloxa.eu>
Sat, 09 Apr 2011 22:21:19 +0100
changeset 3 572fcaba44b9
child 18 eb4125f74a79
permissions -rwxr-xr-x
Added objsomething.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
3
572fcaba44b9 Added objsomething.
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
     1
#!/usr/bin/perl 
572fcaba44b9 Added objsomething.
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
     2
572fcaba44b9 Added objsomething.
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
     3
# Make a nice multi-view picture of an object
572fcaba44b9 Added objsomething.
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
     4
# Command line arguments contain materials and object files
572fcaba44b9 Added objsomething.
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
     5
#
572fcaba44b9 Added objsomething.
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
     6
# This is a re-write of Greg's objpict.csh and should be a drop-in
572fcaba44b9 Added objsomething.
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
     7
# replacement, with no funcionality added or removed
572fcaba44b9 Added objsomething.
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
     8
572fcaba44b9 Added objsomething.
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
     9
use strict;
572fcaba44b9 Added objsomething.
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    10
use warnings;
572fcaba44b9 Added objsomething.
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    11
572fcaba44b9 Added objsomething.
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    12
use File::Temp qw/ tempdir /;
572fcaba44b9 Added objsomething.
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    13
my $td = tempdir( CLEANUP => 1 );
572fcaba44b9 Added objsomething.
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    14
572fcaba44b9 Added objsomething.
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    15
my $xres = 800;
572fcaba44b9 Added objsomething.
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    16
my $yres = 800;
572fcaba44b9 Added objsomething.
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    17
my $rpict_cmd = "rpict -av .2 .2 .2 -x $xres -y $yres";
572fcaba44b9 Added objsomething.
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    18
572fcaba44b9 Added objsomething.
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    19
my $inprad = "$td/op$$.rad";
572fcaba44b9 Added objsomething.
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    20
my $testroom = "$td/testroom.rad";
572fcaba44b9 Added objsomething.
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    21
my $octree = "$td/op.oct";
572fcaba44b9 Added objsomething.
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    22
572fcaba44b9 Added objsomething.
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    23
# See if files actually exist.
572fcaba44b9 Added objsomething.
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    24
foreach (@ARGV) {
572fcaba44b9 Added objsomething.
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    25
	if (! -e) {
572fcaba44b9 Added objsomething.
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    26
		die("Can't read file $_\n");
572fcaba44b9 Added objsomething.
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    27
	}
572fcaba44b9 Added objsomething.
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    28
}
572fcaba44b9 Added objsomething.
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    29
572fcaba44b9 Added objsomething.
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    30
# Dump files passed on command line or from STDIN to a temp file.
572fcaba44b9 Added objsomething.
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    31
open(FH, ">$inprad") or
572fcaba44b9 Added objsomething.
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    32
		die("Can\'t write to temporary file $inprad");
572fcaba44b9 Added objsomething.
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    33
while (<>) {
572fcaba44b9 Added objsomething.
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    34
	print FH;
572fcaba44b9 Added objsomething.
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    35
}
572fcaba44b9 Added objsomething.
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    36
close(FH);
572fcaba44b9 Added objsomething.
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    37
572fcaba44b9 Added objsomething.
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    38
# Create some lights and a box as back drop.
572fcaba44b9 Added objsomething.
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    39
# The objects and view points will be inside the box.
572fcaba44b9 Added objsomething.
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    40
open(FH, ">$testroom") or
572fcaba44b9 Added objsomething.
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    41
		die("Can\'t write to temporary file $testroom");
572fcaba44b9 Added objsomething.
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    42
print FH <<EndOfTestroom;
572fcaba44b9 Added objsomething.
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    43
void plastic wall_mat  0  0  5  .681 .543 .686  0 .2
572fcaba44b9 Added objsomething.
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    44
void light bright  0  0  3  3000 3000 3000
572fcaba44b9 Added objsomething.
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    45
572fcaba44b9 Added objsomething.
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    46
bright sphere lamp0  0  0  4  4 4 -4  .1
572fcaba44b9 Added objsomething.
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    47
bright sphere lamp1  0  0  4  4 0 4  .1
572fcaba44b9 Added objsomething.
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    48
bright sphere lamp2  0  0  4  0 4 4  .1
572fcaba44b9 Added objsomething.
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    49
572fcaba44b9 Added objsomething.
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    50
wall_mat polygon box.1540  0  0  12  5 -5 -5  5 -5 5  -5 -5 5  -5 -5 -5
572fcaba44b9 Added objsomething.
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    51
wall_mat polygon box.4620  0  0  12  -5 -5 5  -5 5 5  -5 5 -5  -5 -5 -5
572fcaba44b9 Added objsomething.
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    52
wall_mat polygon box.2310  0  0  12  -5 5 -5  5 5 -5  5 -5 -5  -5 -5 -5
572fcaba44b9 Added objsomething.
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    53
wall_mat polygon box.3267  0  0  12  5 5 -5  -5 5 -5  -5 5 5  5 5 5
572fcaba44b9 Added objsomething.
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    54
wall_mat polygon box.5137  0  0  12  5 -5 5  5 -5 -5  5 5 -5  5 5 5
572fcaba44b9 Added objsomething.
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    55
wall_mat polygon box.6457  0  0  12  -5 5 5  -5 -5 5  5 -5 5  5 5 5
572fcaba44b9 Added objsomething.
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    56
EndOfTestroom
572fcaba44b9 Added objsomething.
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    57
close(FH);
572fcaba44b9 Added objsomething.
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    58
572fcaba44b9 Added objsomething.
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    59
my $dimstr = `getbbox -h $inprad`;
572fcaba44b9 Added objsomething.
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    60
# Values returned by getbbox are indented and padded with spaces.
572fcaba44b9 Added objsomething.
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    61
$dimstr =~ s/(\s)+/\ /g;   # squeeze spaces
572fcaba44b9 Added objsomething.
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    62
$dimstr =~ s/^\ //;   # remove leading space
572fcaba44b9 Added objsomething.
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    63
my @dims = split(/\ /, $dimstr);   # convert to array
572fcaba44b9 Added objsomething.
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    64
572fcaba44b9 Added objsomething.
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    65
# Find largest axes-aligned dimension
572fcaba44b9 Added objsomething.
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    66
my @diffs = ($dims[1]-$dims[0], $dims[3]-$dims[2], $dims[5]-$dims[4]);
572fcaba44b9 Added objsomething.
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    67
@diffs = reverse sort { $a <=> $b } @diffs;
572fcaba44b9 Added objsomething.
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    68
my $size = $diffs[0];
572fcaba44b9 Added objsomething.
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    69
572fcaba44b9 Added objsomething.
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    70
my $vw1 = "-vtl -vp 2 .5 .5 -vd -1 0 0 -vh 1 -vv 1";
572fcaba44b9 Added objsomething.
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    71
my $vw2 = "-vtl -vp .5 2 .5 -vd 0 -1 0 -vh 1 -vv 1";
572fcaba44b9 Added objsomething.
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    72
my $vw3 = "-vtl -vp .5 .5 2 -vd 0 0 -1 -vu -1 0 0 -vh 1 -vv 1";
572fcaba44b9 Added objsomething.
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    73
my $vw4 = "-vp 3 3 3 -vd -1 -1 -1 -vh 20 -vv 20";
572fcaba44b9 Added objsomething.
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    74
572fcaba44b9 Added objsomething.
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    75
# Move objects so centre is at origin
572fcaba44b9 Added objsomething.
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    76
my $xtrans = -1.0 * ($dims[0] + $dims[1]) / 2;
572fcaba44b9 Added objsomething.
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    77
my $ytrans = -1.0 * ($dims[2] + $dims[3]) / 2;
572fcaba44b9 Added objsomething.
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    78
my $ztrans = -1.0 * ($dims[4] + $dims[5]) / 2;
572fcaba44b9 Added objsomething.
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    79
# Scale so that largest object dimension is unity
572fcaba44b9 Added objsomething.
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    80
my $scale = 1 / $size;
572fcaba44b9 Added objsomething.
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    81
572fcaba44b9 Added objsomething.
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    82
my $cmd = "xform -t $xtrans $ytrans $ztrans -s $scale -t .5 .5 .5 $inprad";
572fcaba44b9 Added objsomething.
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    83
$cmd .= " |oconv $testroom - > $octree";
572fcaba44b9 Added objsomething.
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    84
system "$cmd";
572fcaba44b9 Added objsomething.
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    85
572fcaba44b9 Added objsomething.
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    86
# Render four different views of the objects
572fcaba44b9 Added objsomething.
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    87
system "$rpict_cmd $vw1 $octree > $td/right.hdr";
572fcaba44b9 Added objsomething.
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    88
system "$rpict_cmd $vw2 $octree > $td/front.hdr";
572fcaba44b9 Added objsomething.
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    89
system "$rpict_cmd $vw3 $octree > $td/down.hdr";
572fcaba44b9 Added objsomething.
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    90
system "$rpict_cmd $vw4 $octree > $td/oblique.hdr";
572fcaba44b9 Added objsomething.
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    91
572fcaba44b9 Added objsomething.
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    92
# Compose the four views into one image
572fcaba44b9 Added objsomething.
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    93
$cmd = "pcompos $td/down.hdr 0 $xres $td/oblique.hdr $xres $yres";
572fcaba44b9 Added objsomething.
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    94
$cmd .= " $td/right.hdr 0 0 $td/front.hdr $xres 0";
572fcaba44b9 Added objsomething.
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    95
$cmd .= " |pfilt -1 -r .6 -x /2 -y /2";
572fcaba44b9 Added objsomething.
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    96
exec "$cmd";
572fcaba44b9 Added objsomething.
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    97
572fcaba44b9 Added objsomething.
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    98
#EOF