fgscenery.pl to HTML.

index -|- end

Generated: Tue Feb 2 17:54:35 2010 from fgscenery.pl 2007/03/21 6.6 KB.

#!/perl -w
# NAME: fgscenery.pl
# AIM: To check and advise what FG scenery is install in a given folder - 2007/03/20 - geoff.
# Scenery / Objects and Terrain
# the enumeration of Terrain (and Objects)
# each base Terrain folder, like say e000n40, contains 10x10 degrees of data
# So the base of e000n40 contains
# -----------------------------
# e000n40, e000n41, ... e000n49
# e001n40, e001n41, ... e000n49
# ...
# e009n40, e009n41, ... e001n49
# -----------------------------
# Then each sub-folder is further borken down into tiles (or buckets)
# so scenery\Terrain\e000n40\e000n40
# contains tiles 2957440.btg.gz, 2957448.btg.gz, ..., 2957499.btg.gz
# with corresponding .stg files ...
# from tileentry.hxx
#// ssg tree structure for this tile is as follows:
#// osg::Group(scene)
#//     - osg::Group(terrain)
#//        - SGPlacementTransform(tile)
#//           - osg::LOD(tile)
#//              - ssgEntity(tile)
#//                 - kid1(fan)
#//                 - kid2(fan)
#//                   ...
#//                 - kidn(fan)
# this service, from newbucket.cxx converts a tile index to lat,lon,x,y
#// Parse a unique scenery tile index and find the lon, lat, x, and y
#SGBucket::SGBucket(const long int bindex) {
#    long int index = bindex;
#    lon = index >> 14;
#    index -= lon << 14;
#    lon -= 180;
#    lat = index >> 6;
#    index -= lat << 6;
#    lat -= 90;
#    y = index >> 3;
#    index -= y << 3;
#    x = index;
#}
use strict;
use warnings;
require 'logfile.pl' or die "Unable to load logfile.pl ...\n";
# log file stuff
my ($LF);
my $outfile = 'temp.'.$0.'.txt';
if ($0 =~ /\w{1}:\\.*/) {
   my @tmpsp = split(/\\/,$0);
   $outfile = 'temp.'.($tmpsp[-1]).'.txt';
}
open_log($outfile);
prt( "$0 ... Hello, World ...\n" );
# for DEBUG
my $dbg1 = 1;   # use a DEFAULT input
my $dbg2 = 0;   # add aditional output during find ...
#my $defin = 'C:\FG\12\data';
#my $defin = 'C:\FG\11\data';
#my $defin = 'C:\FG\11\data';
#my $defin = 'C:\FG\10\data';
my $defin = 'D:\FG\Scenery';
my $inpdir = '';
my @infolders = ();
my $gcnt = 0;
my $tcnt = 0;
my $scnt = 0;
my $cnt = 0;
my $dir = '';
my $ff = '';
my $sf = '';
my @inobjects = ();
my @interrain = ();
parse_args( @ARGV );
if ( ! -d $inpdir) {
   mydie( "ERROR: $inpdir is NOT a DIRECTORY!\n" );
}
prt("Processing folder $inpdir for flightgear scenery ...\n");
@infolders = process_folder( $inpdir, 0 );
$gcnt += $tcnt;
$cnt = scalar @infolders;
prt("Processing total $cnt folders ... ($gcnt)\n");
my $scen = '';
my @sfolders = sort @infolders;
$cnt = scalar @sfolders;
###foreach $dir (@infolders) {
###foreach $dir (sort @infolders) {
for (my $i = 0; $i < $cnt; $i++) {
   $dir = $sfolders[$i];
   if (length($dir)) {
      $sf = submain($dir, $inpdir);
   } else {
      $sf = $dir;
   }
   if ($sf =~ /^Scenery$/i) {
      prt( "Got Scenery [$dir] ...\n" );
      $scen = $sf;
   } elsif (defined $sf && length($sf)) {
      if (defined $scen && length($scen)) {
         $sf = submain2($sf, $scen);
      }
      if (defined $sf && length($sf)) {
         if ($sf =~ /^Terrain$/i) {
            prt( "Got Terrain [$dir] ...\n" );
            $i++;
            for ( ; $i < $cnt; $i++) {
               $dir = $sfolders[$i];
               if (length($dir)) {
                  $sf = submain($dir, $inpdir);
               } else {
                  $sf = $dir;
               }
               if ($sf =~ /Terrain[\\\/](.*)/i) {
                  add_2_terrrain($1);
               } else {
                  $i--;
                  last;
               }
            }
         } elsif ($sf =~ /^Objects$/i) {
            prt( "Got Objects [$dir] ...\n" );
            $i++;
            for ( ; $i < $cnt; $i++) {
               $dir = $sfolders[$i];
               if (length($dir)) {
                  $sf = submain($dir, $inpdir);
               } else {
                  $sf = $dir;
               }
               if ($sf =~ /Objects[\\\/](.*)/i) {
                  add_2_objects($1);
               } else {
                  $i--;
                  last;
               }
            }
         }
      }
   }
}
$tcnt = scalar @interrain;
$scnt = scalar @inobjects;
prt( "Got $tcnt terrrain and $scnt object folders ...\n" );
foreach $dir (@interrain) {
   prt( "Terrrain/$dir\n" );
}
foreach $dir (@inobjects) {
   prt( "Objects/$dir\n" );
}
close_log($outfile,1);
exit(0);
#####################################
# subs below
sub add_2_terrrain { # ($1);
   my ($d) = shift;
   my $ud = dos_2_unix($d);
   if ( !($ud =~ /.*\/*CVS$/i) ) {
      push(@interrain, $ud);
   }
}
sub add_2_objects { # ($1);
   my ($d) = shift;
   my $ud = dos_2_unix($d);
   if ( !($ud =~ /.*\/*CVS$/i) ) {
      push(@inobjects, $ud);
   }
}
sub submain {
   my ($d, $m) = @_;
   $d = substr($d, length($m)+1); 
   return $d;
}
sub submain2 {
   my ($d, $m) = @_;
   if (defined $d) {
      if (defined $m) {
         my $l = length($m);
         if ($l) {
            $l += 1 if (length($d) > $l);
            $d = substr($d, $l); 
         }
      }
      return $d; 
   } else {
      return '';
   }
}
sub process_folder {
   my ($in, $level) = @_;
   if ($level == 0) {
      prt( "\nProcessing folder $in ... \n" );
   }
   my @dirs = ();
   if ( !opendir(DIR, $in) ) {
      prt( "ERROR: Unable to open directory [$in] ...\n" );
      return @dirs;
   }
   my @files = readdir(DIR);
   closedir DIR;
   my $cnt = 0;
   foreach my $file (@files) {
      if (($file eq '.') || ($file eq '..')) {
         next;
      }
      $cnt++;
      my $ff = $in . '\\' . $file;
      if ( -d $ff ) {
         push(@dirs, $ff);
         $tcnt++;
      }
   }
   my $cnt2 = scalar @dirs;
   prt( "Found $cnt items, $cnt2 directories ...\n" ) if $dbg2 && ($cnt2 > 0);
   my @sdirs = @dirs;
   foreach my $dir (@sdirs) {
      my @subdirs = process_folder($dir, ($level + 1));
      foreach $dir (@subdirs) {
         push(@dirs, $dir);
      }
   }
   if ($tcnt > 1000) {
      $gcnt += $tcnt;
      prt( "Got $gcnt folders, so far ...\n" );
      $tcnt = 0;
   }
   return @dirs;
}
sub parse_args {
   my (@av) = @_;
   while (@av) {
      my $arg = shift @av;
      if (length($inpdir)) {
         prt( "ERROR: Already have folder $inpdir ...\n" );
            mydie( "Only input is a single scenery folder ...\n" );
      }
      $inpdir = $arg;
   }
   if ( !length($inpdir) ) {
      if ($dbg1) {
         $inpdir = $defin;
      } else {
         prt( "ERROR: Folder name not found!\n" );
         mydie( "Useage: scenery_folder ...\n" );
      }
   }
}
sub dos_2_unix($) {
   my ($du) = shift;
   $du =~ s/\\/\//g;
   return $du;
}
#SGBucket::SGBucket(const long int bindex) {
sub conv_bucket_index {
   my ($ind) = shift;
#    long int index = bindex;
#    lon = index >> 14;
   my $lon = $ind >> 14;
#    index -= lon << 14;
#    lon -= 180;
   $ind -= $lon << 14;
   $lon -= 180;
#    lat = index >> 6;
   my $lat = $ind >> 6;
#    index -= lat << 6;
#    lat -= 90;
   $ind -= $lat << 6;
   $lat -= 90;
#    y = index >> 3;
   my $y = $ind >> 3;
#    index -= y << 3;
   $ind -= $y << 3;
#    x = index;
   my $x = $ind;
   my @arr = ();
   push(@arr, $lon);
   push(@arr, $lat);
   push(@arr, $y);
   push(@arr, $x);
   return @arr;
}
# eof - fgscenery.pl

index -|- top

checked by tidy  Valid HTML 4.01 Transitional