Revision: 55774
          http://sourceforge.net/p/brlcad/code/55774
Author:   starseeker
Date:     2013-06-14 00:58:07 +0000 (Fri, 14 Jun 2013)
Log Message:
-----------
Add build target for rtwizard, make archer depend on it.

Modified Paths:
--------------
    brlcad/trunk/src/archer/CMakeLists.txt
    brlcad/trunk/src/tclscripts/CMakeLists.txt
    brlcad/trunk/src/tclscripts/rtwizard/CMakeLists.txt

Added Paths:
-----------
    brlcad/trunk/src/tclscripts/rtwizard/rtwizard

Removed Paths:
-------------
    brlcad/trunk/src/tclscripts/rtwizard/rtwizard.tcl

Modified: brlcad/trunk/src/archer/CMakeLists.txt
===================================================================
--- brlcad/trunk/src/archer/CMakeLists.txt      2013-06-13 23:59:52 UTC (rev 
55773)
+++ brlcad/trunk/src/archer/CMakeLists.txt      2013-06-14 00:58:07 UTC (rev 
55774)
@@ -6,6 +6,7 @@
 # archer depends on the creation/installation of all the
 # tclscripts.
 add_custom_target(archer ALL DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/archer)
+add_dependencies(archer bwish rtwizard)
 foreach(item ${pkgIndex_target_list})
   add_dependencies(archer ${item})
 endforeach(item ${pkgIndex_target_list})

Modified: brlcad/trunk/src/tclscripts/CMakeLists.txt
===================================================================
--- brlcad/trunk/src/tclscripts/CMakeLists.txt  2013-06-13 23:59:52 UTC (rev 
55773)
+++ brlcad/trunk/src/tclscripts/CMakeLists.txt  2013-06-14 00:58:07 UTC (rev 
55774)
@@ -84,7 +84,6 @@
 add_subdirectory(lod)
 add_subdirectory(mged)
 add_subdirectory(pl-dm)
-add_subdirectory(rtwizard)
 add_subdirectory(sdialogs)
 add_subdirectory(swidgets)
 add_subdirectory(util)
@@ -110,6 +109,10 @@
 pkgIndex_BUILD(tclscripts)
 tclIndex_BUILD(tclscripts)
 
+# Put rtwizard last so we can define a build target
+# that relies on the other tclscripts being set up.
+add_subdirectory(rtwizard)
+
 CMAKEFILES(README pkgIndex.tcl tclIndex hv3_man_browser_test.tcl)
 
 # Local Variables:

Modified: brlcad/trunk/src/tclscripts/rtwizard/CMakeLists.txt
===================================================================
--- brlcad/trunk/src/tclscripts/rtwizard/CMakeLists.txt 2013-06-13 23:59:52 UTC 
(rev 55773)
+++ brlcad/trunk/src/tclscripts/rtwizard/CMakeLists.txt 2013-06-14 00:58:07 UTC 
(rev 55774)
@@ -1,47 +1,8 @@
 add_subdirectory(lib)
 
-if(HAVE_SYMLINK)
-  if(NOT CMAKE_CONFIGURATION_TYPES)
-    execute_process(COMMAND ${CMAKE_COMMAND} -E create_symlink 
${CMAKE_CURRENT_SOURCE_DIR}/rtwizard.tcl 
${CMAKE_BINARY_DIR}/${BIN_DIR}/rtwizard)
-    set(rtwizard_cmd_outputs ${CMAKE_BINARY_DIR}/${BIN_DIR}/rtwizard)
-  else(NOT CMAKE_CONFIGURATION_TYPES)
-    foreach(CFG_TYPE ${CMAKE_CONFIGURATION_TYPES})
-      string(TOUPPER "${CFG_TYPE}" CFG_TYPE_UPPER)
-      execute_process(COMMAND ${CMAKE_COMMAND} -E create_symlink 
${CMAKE_CURRENT_SOURCE_DIR}/rtwizard.tcl 
${CMAKE_BINARY_DIR_${CFG_TYPE_UPPER}}/${BIN_DIR}/rtwizard)
-      set(rtwizard_cmd_outputs ${rtwizard_cmd_outputs} 
${CMAKE_BINARY_DIR_${CFG_TYPE_UPPER}}/${BIN_DIR}/rtwizard)
-    endforeach(CFG_TYPE ${CMAKE_CONFIGURATION_TYPES})
-  endif(NOT CMAKE_CONFIGURATION_TYPES)
-else(HAVE_SYMLINK)
-  if(NOT CMAKE_CONFIGURATION_TYPES)
-    add_custom_command(
-      OUTPUT ${CMAKE_BINARY_DIR}/${BIN_DIR}/rtwizard 
${CMAKE_BINARY_DIR}/${BIN_DIR}/rtwizard.bat
-      COMMAND ${CMAKE_COMMAND} -E copy_if_different 
${CMAKE_CURRENT_SOURCE_DIR}/rtwizard.bat 
${CMAKE_BINARY_DIR}/${BIN_DIR}/rtwizard.bat
-      COMMAND ${CMAKE_COMMAND} -E copy_if_different 
${CMAKE_CURRENT_SOURCE_DIR}/rtwizard.tcl ${CMAKE_BINARY_DIR}/${BIN_DIR}/rtwizard
-      DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/rtwizard.tcl 
${CMAKE_CURRENT_SOURCE_DIR}/rtwizard.bat
-      )
-    set(rtwizard_cmd_outputs ${CMAKE_BINARY_DIR}/${BIN_DIR}/rtwizard 
${CMAKE_BINARY_DIR}/${BIN_DIR}/rtwizard.bat)
-  else(NOT CMAKE_CONFIGURATION_TYPES)
-    foreach(CFG_TYPE ${CMAKE_CONFIGURATION_TYPES})
-      string(TOUPPER "${CFG_TYPE}" CFG_TYPE_UPPER)
-      add_custom_command(
-       OUTPUT ${CMAKE_BINARY_DIR_${CFG_TYPE_UPPER}}/${BIN_DIR}/rtwizard 
${CMAKE_BINARY_DIR_${CFG_TYPE_UPPER}}/${BIN_DIR}/rtwizard.bat
-       COMMAND ${CMAKE_COMMAND} -E copy 
${CMAKE_CURRENT_SOURCE_DIR}/rtwizard.bat 
${CMAKE_BINARY_DIR_${CFG_TYPE_UPPER}}/${BIN_DIR}/rtwizard.bat
-       COMMAND ${CMAKE_COMMAND} -E copy 
${CMAKE_CURRENT_SOURCE_DIR}/rtwizard.tcl 
${CMAKE_BINARY_DIR_${CFG_TYPE_UPPER}}/${BIN_DIR}/rtwizard
-       DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/rtwizard 
${CMAKE_CURRENT_SOURCE_DIR}/rtwizard.bat
-       )
-      set(rtwizard_cmd_outputs ${rtwizard_cmd_outputs} 
${CMAKE_BINARY_DIR_${CFG_TYPE_UPPER}}/${BIN_DIR}/rtwizard 
${CMAKE_BINARY_DIR_${CFG_TYPE_UPPER}}/${BIN_DIR}/rtwizard.bat)
-    endforeach(CFG_TYPE ${CMAKE_CONFIGURATION_TYPES})
-  endif(NOT CMAKE_CONFIGURATION_TYPES)
-  install(PROGRAMS rtwizard.bat DESTINATION ${BIN_DIR})
-  add_custom_target(rtwizard ALL DEPENDS ${rtwizard_cmd_outputs})
-endif(HAVE_SYMLINK)
-
-install(PROGRAMS rtwizard.tcl DESTINATION ${BIN_DIR} RENAME rtwizard)
-DISTCLEAN(${rtwizard_cmd_outputs})
-
 set(rtwizard_TCLSCRIPTS
   RaytraceWizard.tcl
-  rtwizard.tcl
+  rtwizard
   rtwizard.bat
   )
 BRLCAD_ADDDATA(rtwizard_TCLSCRIPTS tclscripts/rtwizard)
@@ -104,6 +65,24 @@
   )
 BRLCAD_ADDDATA(PictureTypeF_DATA tclscripts/rtwizard/examples/PictureTypeF)
 
+if(WIN32)
+  BRLCAD_MANAGE_FILES("rtwizard.bat" ${BIN_DIR} EXEC)
+endif(WIN32)
+BRLCAD_MANAGE_FILES("rtwizard" ${BIN_DIR} EXEC)
+
+add_custom_target(rtwizard ALL DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/rtwizard)
+add_dependencies(rtwizard bwish rt rtedge fbserv fb-png fb-pix fbclear fblabel 
fbfree fbline fb-fb pix-bw bwmod bw-pix pixmatte pix-fb)
+if(TARGET tkpng)
+  add_dependencies(rtwizard tkpng)
+endif(TARGET tkpng)
+foreach(item ${pkgIndex_target_list})
+  add_dependencies(rtwizard ${item})
+endforeach(item ${pkgIndex_target_list})
+foreach(item ${tclIndex_target_list})
+  add_dependencies(rtwizard ${item})
+endforeach(item ${tclIndex_target_list})
+
+
 CMAKEFILES(examples pkgIndex.tcl tclIndex)
 
 # Local Variables:

Copied: brlcad/trunk/src/tclscripts/rtwizard/rtwizard (from rev 55772, 
brlcad/trunk/src/tclscripts/rtwizard/rtwizard.tcl)
===================================================================
--- brlcad/trunk/src/tclscripts/rtwizard/rtwizard                               
(rev 0)
+++ brlcad/trunk/src/tclscripts/rtwizard/rtwizard       2013-06-14 00:58:07 UTC 
(rev 55774)
@@ -0,0 +1,512 @@
+#!/bin/sh
+#                    R T W I Z A R D . T C L
+# BRL-CAD
+#
+# Copyright (c) 2006-2013 United States Government as represented by
+# the U.S. Army Research Laboratory.
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public License
+# version 2.1 as published by the Free Software Foundation.
+#
+# This library is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this file; see the file named COPYING for more
+# information.
+#
+###
+#
+# Start-up script for both the command line and graphical modes of
+# rtwizard
+#
+
+# The trailing backslash forces tcl to skip the next line \
+STARTUP_HOME=`dirname $0`/..
+#\
+export STARTUP_HOME
+# restart using btclsh \
+TCLSH="btclsh"
+#\
+for clsh in btclsh btclsh_d ; do
+# see if we're installed \
+    if test -f ${STARTUP_HOME}/bin/$clsh ; then
+#\
+       TCLSH="${STARTUP_HOME}/bin/$clsh"
+#\
+       break;
+#\
+    fi
+# see if we're not installed yet \
+    if test -f ${STARTUP_HOME}/btclsh/$clsh ; then
+#\
+       TCLSH="${STARTUP_HOME}/btclsh/$clsh"
+#\
+       break;
+#\
+    fi
+#\
+done
+#\
+exec "$TCLSH" "$0" "$@"
+
+#
+# Begin Tcl here!
+#
+
+# We might as well populate options directly in the namespace
+# where they will eventually be used.  Define that namespace
+# up front.
+namespace eval RtWizard {}
+
+# Set up the options we support with rtwizard.  We will use
+# an associative array named wizard_state in the RtWizard
+# namespace to hold the key information - have getopt place the
+# results of its parsing directly in that array
+package require GetOpt
+getopt::init {
+       # GUI controls
+       {gui                    ""      {::use_gui}}
+       {no-gui                 ""      {::disable_gui}}
+       # Input/output files and framebuffer servers
+       {input                  i       {::have_gfile 
::RtWizard::wizard_state(dbFile)}}
+       {output                 o       {::output 
::RtWizard::wizard_state(output_filename)}}
+       {fbserv-device          d       {::fbserv_device 
::RtWizard::wizard_state(fbserv_device)}}
+       {fbserv-port            p       {::fbserv_port 
::RtWizard::wizard_state(fbserv_port)}}
+       {width                  w       {::have_width 
::RtWizard::wizard_state(width)}}
+       {height                 n       {::have_scanlines 
::RtWizard::wizard_state(scanlines)}}
+       # Objects to raytrace
+       {color-objects          c       {::have_full_color_objs 
::RtWizard::wizard_state(color_objlist) ...}}
+       {ghost-objects          g       {::have_ghost_objs 
::RtWizard::wizard_state(ghost_objlist) ...}}
+       {line-objects           l       {::have_line_objs 
::RtWizard::wizard_state(line_objlist) ...}}
+       # Settings
+       {background-color       C       {::have_bg_color 
::RtWizard::wizard_state(bg_color)}}
+       {ghosting-intensity     G       {::have_ghosting_intensity 
::RtWizard::wizard_state(ghosting_intensity)}}
+       {line-color             ""      {::have_line_color 
::RtWizard::wizard_state(e_color)}}
+       {non-line-color         ""      {::have_non_line_color 
::RtWizard::wizard_state(ne_color)}}
+       {occlusion              O       {::have_occlusion_mode 
::RtWizard::wizard_state(occmode)}}
+       # Image type
+       {type                   t       {::have_picture_type 
::RtWizard::wizard_state(picture_type)}}
+       # View
+       {azimuth                a       {::have_azimuth 
::RtWizard::wizard_state(init_azimuth)}}
+       {elevation              e       {::have_elevation 
::RtWizard::wizard_state(init_elevation)}}
+       {twist                  ""      {::have_twist 
::RtWizard::wizard_state(init_twist)}}
+       {perspective            P       {::have_perspective 
::RtWizard::wizard_state(perspective)}}
+       {zoom                   z       {::have_zoom 
::RtWizard::wizard_state(zoom)}}
+       {center                 ""      {::have_center 
::RtWizard::wizard_state(x_center) ::RtWizard::wizard_state(y_center) 
::RtWizard::wizard_state(z_center)}}
+       {viewsize               ""      {::have_viewsize 
::RtWizard::wizard_state(viewsize)}}
+       {orientation            ""      {::have_orientation 
::RtWizard::wizard_state(orientation)}}
+       {eye_pt                 ""      {::have_eye_pt 
::RtWizard::wizard_state(eye_pt)}}
+       # Debugging info
+       {verbose                v       {::RtWizard::wizard_state(verbose)}}
+}
+
+# Perform the actual option parsing
+if {[info exists argv]} {
+  set argv2 [getopt::getopt $argv]
+  set argv ""
+}
+if {[info exists argc]} {
+  set argc2 $argc
+} else {
+  set argc2 0
+}
+
+# If we have both gui and no-gui specified, use gui
+if {[info exists ::use_gui] && [info exists ::disable_gui]} {
+   puts "Warning - both -gui and -no-gui supplied - enabling gui"
+   unset ::disable_gui
+}
+
+# There are three common possibilities for inputs specified without an option 
flag - the
+# Geometry Database, the output filename and one or more full color components 
(i.e. the
+# standard rt paradigm.)  It isn't possible to fully generalize handling of 
unspecified
+# options, but there are a few cases we can support for convenience.
+
+# See if any of the residual arguments after getopt identify a .g file that 
exists
+if {[info exists argv2]} {
+   set possible_incorrect_g_name 0
+   set residualArgs {}
+   foreach item $argv2 {
+     if {[file extension $item] == ".g" && ![info exists 
::RtWizard::wizard_state(dbFile)]} {
+       if {[file exists $item]} {
+         set ::RtWizard::wizard_state(dbFile) $item
+       } else {
+         set possible_incorrect_g_name $item
+       }
+     } else {
+       lappend residualArgs $item
+     }
+   }
+   if {![info exists ::RtWizard::wizard_state(dbFile)] && 
$possible_incorrect_g_name} {
+      puts "Error: $possible_incorrect_g_name appears to specify a .g file, 
but file is not found."
+      if {[info exists argv]} {exit}
+   }
+   set argv2 $residualArgs
+}
+
+# If it looks like we have a .pix or .png filename, use it for output
+if {[info exists argv2]} {
+   set residualArgs {}
+   foreach item $argv2 {
+     if {[file extension $item] == ".pix" || [file extension $item] == ".png"} 
{
+        if {![info exists ::RtWizard::wizard_state(output_filename)]} {
+           set ::RtWizard::wizard_state(output_filename) $item
+        } else {
+           puts "Note - $item potentially specifies an output file, but 
$::RtWizard::wizard_state(output_filename) is already set as the output file."
+           lappend residualArgs $item
+        }
+     } else {
+       lappend residualArgs $item
+     }
+   }
+   set argv2 $residualArgs
+}
+
+# If we still have something left, assume full color objects are being 
specified.  May be an incorrect
+# assumption, but after the parsing already done they're either object names 
or garbage and we may as
+# well fail after trying them.
+
+if {[info exists argv2]} {
+    if {[string length $argv2]} {
+      if {![info exists ::RtWizard::wizard_state(color_objlist)]} {
+        set ::RtWizard::wizard_state(color_objlist) {}
+      }
+      foreach item $argv2 {
+        lappend ::RtWizard::wizard_state(color_objlist) $item
+      }
+    }
+}
+
+# If we have an explicit picture type, check whether we satisfy the minimum
+# data input for that type.
+if {[info exists ::have_picture_type] && ![info exists ::use_gui]} {
+  switch $::RtWizard::wizard_state(picture_type) {
+    A   -
+    1  {
+         if {![info exists ::RtWizard::wizard_state(color_objlist)]} {
+            if ([info exists ::disable_gui]) {
+              puts "Error - picture type $RtWizard::wizard_state(picture_type) 
specified, but no full color objects listed"
+              puts "Please specify full color objects using the -c option\n"
+              exit
+            } else {
+              set ::use_gui 1
+            }
+         }
+       }
+    B   -
+    2  {
+         if {![info exists ::RtWizard::wizard_state(line_objlist)]} {
+            if ([info exists ::disable_gui]) {
+              puts "Error - picture type 
$::RtWizard::wizard_state(picture_type) specified, but no line objects listed"
+              puts "Please specify line objects using the -e option\n"
+              exit
+            } else {
+              set ::use_gui 1
+            }
+         }
+       }
+    C   -
+    D   -
+    3  -
+    4  {
+         if {![info exists ::RtWizard::wizard_state(color_objlist)] || ![info 
exists ::RtWizard::wizard_state(line_objlist)]} {
+           if (![info exists ::disable_gui]) {
+              set ::use_gui 1
+           } else {
+             if {![info exists ::RtWizard::wizard_state(line_objlist)]} {
+               puts "Error - picture type 
$::RtWizard::wizard_state(picture_type) specified, but no line objects listed"
+               puts "Please specify line objects using the -e option\n"
+             }
+             if {![info exists ::RtWizard::wizard_state(color_objlist)]} {
+               puts "Error - picture type 
$::RtWizard::wizard_state(picture_type) specified, but no color objects listed"
+               puts "Please specify full color objects using the -c option\n"
+             }
+            exit
+           }
+         }
+       }
+    E   -
+    5  {
+         if {![info exists ::RtWizard::wizard_state(color_objlist)] || ![info 
exists ::RtWizard::wizard_state(ghost_objlist)]} {
+           if (![info exists ::disable_gui]) {
+              set ::use_gui 1
+           } else {
+             if {![info exists ::RtWizard::wizard_state(ghost_objlist)]} {
+               puts "Error - picture type 
$::RtWizard::wizard_state(picture_type) specified, but no ghost objects listed"
+               puts "Please specify ghost objects using the -g option\n"
+             }
+             if {![info exists ::RtWizard::wizard_state(color_objlist)]} {
+               puts "Error - picture type 
$::RtWizard::wizard_state(picture_type) specified, but no color objects listed"
+               puts "Please specify full color objects using the -c option\n"
+             }
+            exit
+           }
+         }
+       }
+    F   -
+    6  {
+         if {![info exists ::RtWizard::wizard_state(color_objlist)] || ![info 
exists ::RtWizard::wizard_state(line_objlist)] || ![info exists 
::RtWizard::wizard_state(ghost_objlist)]} {
+           if (![info exists ::disable_gui]) {
+              set ::use_gui 1
+           } else {
+             if {![info exists ::RtWizard::wizard_state(ghost_objlist)]} {
+               puts "Error - picture type 
$::RtWizard::wizard_state(picture_type) specified, but no ghost objects listed"
+               puts "Please specify ghost objects using the -g option\n"
+             }
+             if {![info exists ::RtWizard::wizard_state(color_objlist)]} {
+               puts "Error - picture type 
$::RtWizard::wizard_state(picture_type) specified, but no color objects listed"
+               puts "Please specify full color objects using the -c option\n"
+             }
+             if {![info exists ::RtWizard::wizard_state(line_objlist)]} {
+               puts "Error - picture type 
$::RtWizard::wizard_state(picture_type) specified, but no line objects listed"
+               puts "Please specify line objects using the -e option\n"
+             }
+            exit
+           }
+         }
+       }
+    default {puts "Error - unknown picture type 
$::RtWizard::wizard_state(picture_type)\n"; exit}
+  }
+}
+
+# We can set a lot of defaults, but not the objects to draw - if we don't have 
*something* specified,
+# we have to go graphical.
+if {![info exists ::RtWizard::wizard_state(color_objlist)] && ![info exists 
::RtWizard::wizard_state(line_objlist)] && ![info exists 
::RtWizard::wizard_state(ghost_objlist)]} {
+   if {![info exists ::disable_gui]} {
+    set ::use_gui 1
+   } else {
+    puts "Error - please specify one or more objects for at least one of 
color, ghost, or line rendering modes."
+    if {[info exists argv]} {exit}
+   }
+}
+
+# If we haven't been told what .g file to use, we're going to have to go 
graphical
+if {![info exists ::RtWizard::wizard_state(dbFile)]} {
+   if {![info exists ::disable_gui]} {
+    set ::use_gui 1
+   } else {
+    puts "Error - please specify Geometry Database (.g) file."
+    if {[info exists argv]} {exit}
+   }
+}
+
+# OK, we've collected all the info we can from the inputs.  Make sure all the 
key
+# variables are initialized to sane defaults.  The viewsize, eye_pt and center 
defaults are determined from
+# the drawing of the objects into the display manager if not already 
specified.  If
+# viewsize, orientation and eye_pt have already been specified, they are used 
instead of these
+# defaults when these defaults would conflict with them.
+
+# Geometry Database
+if {![info exists ::RtWizard::wizard_state(dbFile)]} { set 
::RtWizard::wizard_state(dbFile) "" }
+# Initial orientation
+if {![info exists ::RtWizard::wizard_state(init_azimuth)]} { set 
::RtWizard::wizard_state(init_azimuth) 35 }
+if {![info exists ::RtWizard::wizard_state(init_elevation)]} { set 
::RtWizard::wizard_state(init_elevation) 25 }
+if {![info exists ::RtWizard::wizard_state(init_twist)]} { set 
::RtWizard::wizard_state(init_twist) 0 }
+# Initial zoom
+if {![info exists ::RtWizard::wizard_state(zoom)]} { set 
::RtWizard::wizard_state(zoom) 1 }
+# Initial perspective
+if {![info exists ::RtWizard::wizard_state(perspective)]} { set 
::RtWizard::wizard_state(perspective) 0 }
+# Background color
+if {![info exists ::RtWizard::wizard_state(bg_color)]} { set 
::RtWizard::wizard_state(bg_color) {255 255 255} }
+# Edge lines color
+if {![info exists ::RtWizard::wizard_state(e_color)]} { set 
::RtWizard::wizard_state(e_color) {0 0 0} }
+# Edge not-lines color
+if {![info exists ::RtWizard::wizard_state(ne_color)]} { set 
::RtWizard::wizard_state(ne_color) {0 0 0} }
+# Occlusion mode
+if {![info exists ::RtWizard::wizard_state(occmode)]} { set 
::RtWizard::wizard_state(occmode) 1 }
+# Ghost intensity
+if {![info exists ::RtWizard::wizard_state(ghosting_intensity)]} { set 
::RtWizard::wizard_state(ghosting_intensity) 12 }
+# Pix width
+if {![info exists ::RtWizard::wizard_state(width)]} { set 
::RtWizard::wizard_state(width) 512 }
+# Pix height (number of scan lines)
+if {![info exists ::RtWizard::wizard_state(scanlines)]} { set 
::RtWizard::wizard_state(scanlines) 512 }
+# Color objects
+if {![info exists ::RtWizard::wizard_state(color_objlist)]} { set 
::RtWizard::wizard_state(color_objlist) {} }
+# Edge objects
+if {![info exists ::RtWizard::wizard_state(line_objlist)]} { set 
::RtWizard::wizard_state(line_objlist) {} }
+# Ghost objects
+if {![info exists ::RtWizard::wizard_state(ghost_objlist)]} { set 
::RtWizard::wizard_state(ghost_objlist) {} }
+
+# Load the package that lets us output images
+package require cadwidgets::RtImage
+
+# Set verbosity if not already set
+if {![info exists ::RtWizard::wizard_state(verbose)]} {
+    set ::RtWizard::wizard_state(verbose) 0
+}
+
+# If we're launching without enough arguments to fully specify an rtwizard
+# run or a gui run has been specifically requested, go graphical
+if {[info exists ::use_gui]} {
+   # Have to do these loads until we get "package require tclcad" and "package 
require dm"
+   # working - bwish loads them for us by default, but since rtwizard may be 
either
+   # graphical or command line we need to start with btclsh
+   if {$tcl_platform(platform) == "windows"} {
+     load [file join [bu_brlcad_root [bu_brlcad_dir bin]] libtclcad[info 
sharedlibextension]]
+     load [file join [bu_brlcad_root [bu_brlcad_dir bin]] libdm[info 
sharedlibextension]]
+   } else {
+     load [file join [bu_brlcad_root [bu_brlcad_dir lib]] libtclcad[info 
sharedlibextension]]
+     load [file join [bu_brlcad_root [bu_brlcad_dir lib]] libdm[info 
sharedlibextension]]
+   }
+   # Now, load the actual Raytrace Wizard GUI
+   package require RaytraceWizard
+   if {[info exists argv]} {exit}
+} else {
+
+   if {![info exists ::RtWizard::wizard_state(output_filename)] && ![info 
exists ::RtWizard::wizard_state(fbserv_port)] && ![info exists 
::RtWizard::wizard_state(fbserv_device)]} {
+     set ::RtWizard::wizard_state(output_filename) rtwizard.pix
+     if {![file exists $::RtWizard::wizard_state(output_filename)]} {
+       puts "Warning - no output file or framebuffer specified - using file 
rtwizard.pix for output."
+     }
+   }
+   if {[info exists ::RtWizard::wizard_state(output_filename)]} {
+     if {[file exists $::RtWizard::wizard_state(output_filename)]} {
+       puts "Error - cannot create output file, 
$::RtWizard::wizard_state(output_filename) already exists."
+       if {[info exists argv]} {exit}
+     }
+   }
+
+   # Get an in-memory framebuffer, if we don't already have a type set
+   if {![info exists ::RtWizard::wizard_state(fbserv_device)]} {
+      set ::RtWizard::wizard_state(fbserv_device) /dev/mem
+      set fbtype_specified 0
+   } else {
+      set fbtype_specified 1
+   }
+
+   # We need a port number for the fbserv.
+   if {![info exists ::RtWizard::wizard_state(fbserv_port)]} {
+      set ::RtWizard::wizard_state(fbserv_port) 0
+      set port_number_specified 0
+   } else {
+      set port_number_specified 1
+   }
+   # Check whether the framebuffer already exists.  If it does, and if
+   # it was specified on the command line, go with it.
+   if { [catch {exec [file join [bu_brlcad_root bin] fblabel] -F 
$::RtWizard::wizard_state(fbserv_port) 1 1 " "} error ] } {
+      catch {exec [file join [bu_brlcad_root bin] fbserv] -w 
$::RtWizard::wizard_state(width) -n $::RtWizard::wizard_state(scanlines) 
$::RtWizard::wizard_state(fbserv_port) $::RtWizard::wizard_state(fbserv_device) 
&} pid
+      if {[info exists pid]} {
+       set fbserv_pid $pid
+       # Wait a few milliseconds to make sure fbserv has completed its work 
and is available
+       while { [catch {exec [file join [bu_brlcad_root bin] fblabel] -F 
$::RtWizard::wizard_state(fbserv_port) 1 1 " "} error] } {after 300}
+      } else {
+       if {$::RtWizard::wizard_state(verbose)} {puts "fbserv port 
$::RtWizard::wizard_state(fbserv_port) failed!"}
+       incr ::RtWizard::wizard_state(fbserv_port)
+      }
+   }
+
+   # If we didn't have a pre-specified port number and the default didn't 
work, start counting up
+   if { ! $port_number_specified && ! [info exists fbserv_pid] } {
+       incr ::RtWizard::wizard_state(fbserv_port)
+       while { ! [catch {exec [file join [bu_brlcad_root bin] fbclear] -F 
$::RtWizard::wizard_state(fbserv_port) } error ] } {
+            if {$::RtWizard::wizard_state(verbose)} {puts "fbserv port 
$::RtWizard::wizard_state(fbserv_port) is already in use."}
+            incr ::RtWizard::wizard_state(fbserv_port)
+       }
+      catch {exec [file join [bu_brlcad_root bin] fbserv] -w 
$::RtWizard::wizard_state(width) -n $::RtWizard::wizard_state(scanlines) 
$::RtWizard::wizard_state(fbserv_port) $::RtWizard::wizard_state(fbserv_device) 
&} pid
+      set fbserv_pid $pid
+      # Wait a few milliseconds to make sure fbserv has completed its work and 
is available
+      while { [catch {exec [file join [bu_brlcad_root bin] fblabel] -F 
$::RtWizard::wizard_state(fbserv_port) 1 1 " "} error] } {after 300}
+   }
+
+   # Either we're using a specified view model, or we're deducing one based on 
user options
+   if {[info exists ::RtWizard::wizard_state(viewsize)] && [info exists 
::RtWizard::wizard_state(orientation)] && [info exists 
::RtWizard::wizard_state(eye_pt)]} {
+     set viewsize $::RtWizard::wizard_state(viewsize)
+     set orientation [split $::RtWizard::wizard_state(orientation) " "]
+     set eye_pt [split $::RtWizard::wizard_state(eye_pt) " "]
+     if {[info exists ::have_azimuth]} {puts "Warning - view model explicitly 
set - ignoring azimuth option"}
+     if {[info exists ::have_elevation]} {puts "Warning - view model 
explicitly set - ignoring elevation option"}
+     if {[info exists ::have_twist]} {puts "Warning - view model explicitly 
set - ignoring twist option"}
+     if {[info exists ::have_zoom]} {puts "Warning - view model explicitly set 
- ignoring zoom option"}
+     if {[info exists ::have_center]} {puts "Warning - view model explicitly 
set - ignoring center option"}
+
+   } else {
+     if {[info exists ::RtWizard::wizard_state(viewsize)] || [info exists 
::RtWizard::wizard_state(orientation)] || [info exists 
::RtWizard::wizard_state(eye_pt)]} {
+       if {! [info exists ::have_viewsize]} {puts "Error - when specifying 
view model directly, need viewsize"}
+       if {! [info exists ::have_orientation]} {puts "Error - when specifying 
view model directly, need orientation"}
+       if {! [info exists ::have_eye_pt]} {puts "Error - when specifying view 
model directly, need eye_pt"}
+       if {[info exists argv]} {exit}
+     }
+     set db [go_open db db $::RtWizard::wizard_state(dbFile)]
+     db new_view v1 nu
+
+     if {[llength $::RtWizard::wizard_state(color_objlist)]} {
+       foreach item $::RtWizard::wizard_state(color_objlist) {
+         db draw $item
+       }
+     }
+     if {[llength $::RtWizard::wizard_state(line_objlist)]} {
+       foreach item $::RtWizard::wizard_state(line_objlist) {
+         db draw $item
+       }
+     }
+     if {[llength $::RtWizard::wizard_state(ghost_objlist)]} {
+       foreach item $::RtWizard::wizard_state(ghost_objlist) {
+         db draw $item
+       }
+     }
+
+     db autoview v1
+     db aet v1 $::RtWizard::wizard_state(init_azimuth) 
$::RtWizard::wizard_state(init_elevation) $::RtWizard::wizard_state(init_twist)
+     db zoom v1 $::RtWizard::wizard_state(zoom)
+     db perspective v1 $::RtWizard::wizard_state(perspective)
+     if {[info exists ::RtWizard::wizard_state(x_center)] && [info exists 
::RtWizard::wizard_state(y_center)] && [info exists 
::RtWizard::wizard_state(z_center)]} {
+       db center v1 $::RtWizard::wizard_state(x_center) 
$::RtWizard::wizard_state(y_center) $::RtWizard::wizard_state(z_center)
+     }
+     set view_info [regsub -all ";" [db get_eyemodel v1] ""]
+     set vdata [split $view_info "\n"]
+     set viewsize [lindex [lindex $vdata 0] 1]
+     set orientation [lrange [lindex $vdata 1] 1 end]
+     set eye_pt [lrange [lindex $vdata 2] 1 end]
+   }
+
+   ::cadwidgets::rtimage $::RtWizard::wizard_state(dbFile) 
$::RtWizard::wizard_state(fbserv_port) \
+                       $::RtWizard::wizard_state(width) 
$::RtWizard::wizard_state(scanlines) \
+                       $viewsize $orientation $eye_pt 
$::RtWizard::wizard_state(perspective) \
+                       $::RtWizard::wizard_state(bg_color) 
$::RtWizard::wizard_state(e_color) $::RtWizard::wizard_state(ne_color)\
+                       $::RtWizard::wizard_state(occmode) 
$::RtWizard::wizard_state(ghosting_intensity) \
+                       $::RtWizard::wizard_state(color_objlist) \
+                       $::RtWizard::wizard_state(ghost_objlist) \
+                       $::RtWizard::wizard_state(line_objlist)
+
+   if {[info exists ::RtWizard::wizard_state(output_filename)]} {
+      set output_generated 0
+      if {[file extension $::RtWizard::wizard_state(output_filename)] == 
".png"} {
+        exec [file join [bu_brlcad_root bin] fb-png] -w 
$::RtWizard::wizard_state(width) -n $::RtWizard::wizard_state(scanlines) -F 
$::RtWizard::wizard_state(fbserv_port) 
$::RtWizard::wizard_state(output_filename)
+        set output_generated 1
+      }
+      if {!$output_generated} {
+        exec [file join [bu_brlcad_root bin] fb-pix] -w 
$::RtWizard::wizard_state(width) -n $::RtWizard::wizard_state(scanlines) -F 
$::RtWizard::wizard_state(fbserv_port) 
$::RtWizard::wizard_state(output_filename)
+        set output_generated 1
+      }
+
+   }
+
+
+   if {$::RtWizard::wizard_state(fbserv_device) == "/dev/mem"} {
+       if {[info exists fbserv_pid]} {
+         if {$tcl_platform(platform) == "windows"} {
+             set kill_cmd [auto_execok taskkill]
+             set kill_args [list $kill_cmd "/F" "/PID" $fbserv_pid]
+         } else {
+             set kill_cmd [auto_execok kill]
+             set kill_args [list $kill_cmd $fbserv_pid]
+         }
+         if {$kill_cmd != ""} {
+             exec {*}$kill_args
+         }
+      }
+   }
+}
+
+# Local Variables:
+# mode: sh
+# tab-width: 8
+# sh-indentation: 4
+# sh-basic-offset: 4
+# indent-tabs-mode: t
+# End:
+# ex: shiftwidth=4 tabstop=8

Deleted: brlcad/trunk/src/tclscripts/rtwizard/rtwizard.tcl
===================================================================
--- brlcad/trunk/src/tclscripts/rtwizard/rtwizard.tcl   2013-06-13 23:59:52 UTC 
(rev 55773)
+++ brlcad/trunk/src/tclscripts/rtwizard/rtwizard.tcl   2013-06-14 00:58:07 UTC 
(rev 55774)
@@ -1,512 +0,0 @@
-#!/bin/sh
-#                    R T W I Z A R D . T C L
-# BRL-CAD
-#
-# Copyright (c) 2006-2013 United States Government as represented by
-# the U.S. Army Research Laboratory.
-#
-# This library is free software; you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public License
-# version 2.1 as published by the Free Software Foundation.
-#
-# This library is distributed in the hope that it will be useful, but
-# WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this file; see the file named COPYING for more
-# information.
-#
-###
-#
-# Start-up script for both the command line and graphical modes of
-# rtwizard
-#
-
-# The trailing backslash forces tcl to skip the next line \
-STARTUP_HOME=`dirname $0`/..
-#\
-export STARTUP_HOME
-# restart using btclsh \
-TCLSH="btclsh"
-#\
-for clsh in btclsh btclsh_d ; do
-# see if we're installed \
-    if test -f ${STARTUP_HOME}/bin/$clsh ; then
-#\
-       TCLSH="${STARTUP_HOME}/bin/$clsh"
-#\
-       break;
-#\
-    fi
-# see if we're not installed yet \
-    if test -f ${STARTUP_HOME}/btclsh/$clsh ; then
-#\
-       TCLSH="${STARTUP_HOME}/btclsh/$clsh"
-#\
-       break;
-#\
-    fi
-#\
-done
-#\
-exec "$TCLSH" "$0" "$@"
-
-#
-# Begin Tcl here!
-#
-
-# We might as well populate options directly in the namespace
-# where they will eventually be used.  Define that namespace
-# up front.
-namespace eval RtWizard {}
-
-# Set up the options we support with rtwizard.  We will use
-# an associative array named wizard_state in the RtWizard
-# namespace to hold the key information - have getopt place the
-# results of its parsing directly in that array
-package require GetOpt
-getopt::init {
-       # GUI controls
-       {gui                    ""      {::use_gui}}
-       {no-gui                 ""      {::disable_gui}}
-       # Input/output files and framebuffer servers
-       {input                  i       {::have_gfile 
::RtWizard::wizard_state(dbFile)}}
-       {output                 o       {::output 
::RtWizard::wizard_state(output_filename)}}
-       {fbserv-device          d       {::fbserv_device 
::RtWizard::wizard_state(fbserv_device)}}
-       {fbserv-port            p       {::fbserv_port 
::RtWizard::wizard_state(fbserv_port)}}
-       {width                  w       {::have_width 
::RtWizard::wizard_state(width)}}
-       {height                 n       {::have_scanlines 
::RtWizard::wizard_state(scanlines)}}
-       # Objects to raytrace
-       {color-objects          c       {::have_full_color_objs 
::RtWizard::wizard_state(color_objlist) ...}}
-       {ghost-objects          g       {::have_ghost_objs 
::RtWizard::wizard_state(ghost_objlist) ...}}
-       {line-objects           l       {::have_line_objs 
::RtWizard::wizard_state(line_objlist) ...}}
-       # Settings
-       {background-color       C       {::have_bg_color 
::RtWizard::wizard_state(bg_color)}}
-       {ghosting-intensity     G       {::have_ghosting_intensity 
::RtWizard::wizard_state(ghosting_intensity)}}
-       {line-color             ""      {::have_line_color 
::RtWizard::wizard_state(e_color)}}
-       {non-line-color         ""      {::have_non_line_color 
::RtWizard::wizard_state(ne_color)}}
-       {occlusion              O       {::have_occlusion_mode 
::RtWizard::wizard_state(occmode)}}
-       # Image type
-       {type                   t       {::have_picture_type 
::RtWizard::wizard_state(picture_type)}}
-       # View
-       {azimuth                a       {::have_azimuth 
::RtWizard::wizard_state(init_azimuth)}}
-       {elevation              e       {::have_elevation 
::RtWizard::wizard_state(init_elevation)}}
-       {twist                  ""      {::have_twist 
::RtWizard::wizard_state(init_twist)}}
-       {perspective            P       {::have_perspective 
::RtWizard::wizard_state(perspective)}}
-       {zoom                   z       {::have_zoom 
::RtWizard::wizard_state(zoom)}}
-       {center                 ""      {::have_center 
::RtWizard::wizard_state(x_center) ::RtWizard::wizard_state(y_center) 
::RtWizard::wizard_state(z_center)}}
-       {viewsize               ""      {::have_viewsize 
::RtWizard::wizard_state(viewsize)}}
-       {orientation            ""      {::have_orientation 
::RtWizard::wizard_state(orientation)}}
-       {eye_pt                 ""      {::have_eye_pt 
::RtWizard::wizard_state(eye_pt)}}
-       # Debugging info
-       {verbose                v       {::RtWizard::wizard_state(verbose)}}
-}
-
-# Perform the actual option parsing
-if {[info exists argv]} {
-  set argv2 [getopt::getopt $argv]
-  set argv ""
-}
-if {[info exists argc]} {
-  set argc2 $argc
-} else {
-  set argc2 0
-}
-
-# If we have both gui and no-gui specified, use gui
-if {[info exists ::use_gui] && [info exists ::disable_gui]} {
-   puts "Warning - both -gui and -no-gui supplied - enabling gui"
-   unset ::disable_gui
-}
-
-# There are three common possibilities for inputs specified without an option 
flag - the
-# Geometry Database, the output filename and one or more full color components 
(i.e. the
-# standard rt paradigm.)  It isn't possible to fully generalize handling of 
unspecified
-# options, but there are a few cases we can support for convenience.
-
-# See if any of the residual arguments after getopt identify a .g file that 
exists
-if {[info exists argv2]} {
-   set possible_incorrect_g_name 0
-   set residualArgs {}
-   foreach item $argv2 {
-     if {[file extension $item] == ".g" && ![info exists 
::RtWizard::wizard_state(dbFile)]} {
-       if {[file exists $item]} {
-         set ::RtWizard::wizard_state(dbFile) $item
-       } else {
-         set possible_incorrect_g_name $item
-       }
-     } else {
-       lappend residualArgs $item
-     }
-   }
-   if {![info exists ::RtWizard::wizard_state(dbFile)] && 
$possible_incorrect_g_name} {
-      puts "Error: $possible_incorrect_g_name appears to specify a .g file, 
but file is not found."
-      if {[info exists argv]} {exit}
-   }
-   set argv2 $residualArgs
-}
-
-# If it looks like we have a .pix or .png filename, use it for output
-if {[info exists argv2]} {
-   set residualArgs {}
-   foreach item $argv2 {
-     if {[file extension $item] == ".pix" || [file extension $item] == ".png"} 
{
-        if {![info exists ::RtWizard::wizard_state(output_filename)]} {
-           set ::RtWizard::wizard_state(output_filename) $item
-        } else {
-           puts "Note - $item potentially specifies an output file, but 
$::RtWizard::wizard_state(output_filename) is already set as the output file."
-           lappend residualArgs $item
-        }
-     } else {
-       lappend residualArgs $item
-     }
-   }
-   set argv2 $residualArgs
-}
-
-# If we still have something left, assume full color objects are being 
specified.  May be an incorrect
-# assumption, but after the parsing already done they're either object names 
or garbage and we may as
-# well fail after trying them.
-
-if {[info exists argv2]} {
-    if {[string length $argv2]} {
-      if {![info exists ::RtWizard::wizard_state(color_objlist)]} {
-        set ::RtWizard::wizard_state(color_objlist) {}
-      }
-      foreach item $argv2 {
-        lappend ::RtWizard::wizard_state(color_objlist) $item
-      }
-    }
-}
-
-# If we have an explicit picture type, check whether we satisfy the minimum
-# data input for that type.
-if {[info exists ::have_picture_type] && ![info exists ::use_gui]} {
-  switch $::RtWizard::wizard_state(picture_type) {
-    A   -
-    1  {
-         if {![info exists ::RtWizard::wizard_state(color_objlist)]} {
-            if ([info exists ::disable_gui]) {
-              puts "Error - picture type $RtWizard::wizard_state(picture_type) 
specified, but no full color objects listed"
-              puts "Please specify full color objects using the -c option\n"
-              exit
-            } else {
-              set ::use_gui 1
-            }
-         }
-       }
-    B   -
-    2  {
-         if {![info exists ::RtWizard::wizard_state(line_objlist)]} {
-            if ([info exists ::disable_gui]) {
-              puts "Error - picture type 
$::RtWizard::wizard_state(picture_type) specified, but no line objects listed"
-              puts "Please specify line objects using the -e option\n"
-              exit
-            } else {
-              set ::use_gui 1
-            }
-         }
-       }
-    C   -
-    D   -
-    3  -
-    4  {
-         if {![info exists ::RtWizard::wizard_state(color_objlist)] || ![info 
exists ::RtWizard::wizard_state(line_objlist)]} {
-           if (![info exists ::disable_gui]) {
-              set ::use_gui 1
-           } else {
-             if {![info exists ::RtWizard::wizard_state(line_objlist)]} {
-               puts "Error - picture type 
$::RtWizard::wizard_state(picture_type) specified, but no line objects listed"
-               puts "Please specify line objects using the -e option\n"
-             }
-             if {![info exists ::RtWizard::wizard_state(color_objlist)]} {
-               puts "Error - picture type 
$::RtWizard::wizard_state(picture_type) specified, but no color objects listed"
-               puts "Please specify full color objects using the -c option\n"
-             }
-            exit
-           }
-         }
-       }
-    E   -
-    5  {
-         if {![info exists ::RtWizard::wizard_state(color_objlist)] || ![info 
exists ::RtWizard::wizard_state(ghost_objlist)]} {
-           if (![info exists ::disable_gui]) {
-              set ::use_gui 1
-           } else {
-             if {![info exists ::RtWizard::wizard_state(ghost_objlist)]} {
-               puts "Error - picture type 
$::RtWizard::wizard_state(picture_type) specified, but no ghost objects listed"
-               puts "Please specify ghost objects using the -g option\n"
-             }
-             if {![info exists ::RtWizard::wizard_state(color_objlist)]} {
-               puts "Error - picture type 
$::RtWizard::wizard_state(picture_type) specified, but no color objects listed"
-               puts "Please specify full color objects using the -c option\n"
-             }
-            exit
-           }
-         }
-       }
-    F   -
-    6  {
-         if {![info exists ::RtWizard::wizard_state(color_objlist)] || ![info 
exists ::RtWizard::wizard_state(line_objlist)] || ![info exists 
::RtWizard::wizard_state(ghost_objlist)]} {
-           if (![info exists ::disable_gui]) {
-              set ::use_gui 1
-           } else {
-             if {![info exists ::RtWizard::wizard_state(ghost_objlist)]} {
-               puts "Error - picture type 
$::RtWizard::wizard_state(picture_type) specified, but no ghost objects listed"
-               puts "Please specify ghost objects using the -g option\n"
-             }
-             if {![info exists ::RtWizard::wizard_state(color_objlist)]} {
-               puts "Error - picture type 
$::RtWizard::wizard_state(picture_type) specified, but no color objects listed"
-               puts "Please specify full color objects using the -c option\n"
-             }
-             if {![info exists ::RtWizard::wizard_state(line_objlist)]} {
-               puts "Error - picture type 
$::RtWizard::wizard_state(picture_type) specified, but no line objects listed"
-               puts "Please specify line objects using the -e option\n"
-             }
-            exit
-           }
-         }
-       }
-    default {puts "Error - unknown picture type 
$::RtWizard::wizard_state(picture_type)\n"; exit}
-  }
-}
-
-# We can set a lot of defaults, but not the objects to draw - if we don't have 
*something* specified,
-# we have to go graphical.
-if {![info exists ::RtWizard::wizard_state(color_objlist)] && ![info exists 
::RtWizard::wizard_state(line_objlist)] && ![info exists 
::RtWizard::wizard_state(ghost_objlist)]} {
-   if {![info exists ::disable_gui]} {
-    set ::use_gui 1
-   } else {
-    puts "Error - please specify one or more objects for at least one of 
color, ghost, or line rendering modes."
-    if {[info exists argv]} {exit}
-   }
-}
-
-# If we haven't been told what .g file to use, we're going to have to go 
graphical
-if {![info exists ::RtWizard::wizard_state(dbFile)]} {
-   if {![info exists ::disable_gui]} {
-    set ::use_gui 1
-   } else {
-    puts "Error - please specify Geometry Database (.g) file."
-    if {[info exists argv]} {exit}
-   }
-}
-
-# OK, we've collected all the info we can from the inputs.  Make sure all the 
key
-# variables are initialized to sane defaults.  The viewsize, eye_pt and center 
defaults are determined from
-# the drawing of the objects into the display manager if not already 
specified.  If
-# viewsize, orientation and eye_pt have already been specified, they are used 
instead of these
-# defaults when these defaults would conflict with them.
-
-# Geometry Database
-if {![info exists ::RtWizard::wizard_state(dbFile)]} { set 
::RtWizard::wizard_state(dbFile) "" }
-# Initial orientation
-if {![info exists ::RtWizard::wizard_state(init_azimuth)]} { set 
::RtWizard::wizard_state(init_azimuth) 35 }
-if {![info exists ::RtWizard::wizard_state(init_elevation)]} { set 
::RtWizard::wizard_state(init_elevation) 25 }
-if {![info exists ::RtWizard::wizard_state(init_twist)]} { set 
::RtWizard::wizard_state(init_twist) 0 }
-# Initial zoom
-if {![info exists ::RtWizard::wizard_state(zoom)]} { set 
::RtWizard::wizard_state(zoom) 1 }
-# Initial perspective
-if {![info exists ::RtWizard::wizard_state(perspective)]} { set 
::RtWizard::wizard_state(perspective) 0 }
-# Background color
-if {![info exists ::RtWizard::wizard_state(bg_color)]} { set 
::RtWizard::wizard_state(bg_color) {255 255 255} }
-# Edge lines color
-if {![info exists ::RtWizard::wizard_state(e_color)]} { set 
::RtWizard::wizard_state(e_color) {0 0 0} }
-# Edge not-lines color
-if {![info exists ::RtWizard::wizard_state(ne_color)]} { set 
::RtWizard::wizard_state(ne_color) {0 0 0} }
-# Occlusion mode
-if {![info exists ::RtWizard::wizard_state(occmode)]} { set 
::RtWizard::wizard_state(occmode) 1 }
-# Ghost intensity
-if {![info exists ::RtWizard::wizard_state(ghosting_intensity)]} { set 
::RtWizard::wizard_state(ghosting_intensity) 12 }
-# Pix width
-if {![info exists ::RtWizard::wizard_state(width)]} { set 
::RtWizard::wizard_state(width) 512 }
-# Pix height (number of scan lines)
-if {![info exists ::RtWizard::wizard_state(scanlines)]} { set 
::RtWizard::wizard_state(scanlines) 512 }
-# Color objects
-if {![info exists ::RtWizard::wizard_state(color_objlist)]} { set 
::RtWizard::wizard_state(color_objlist) {} }
-# Edge objects
-if {![info exists ::RtWizard::wizard_state(line_objlist)]} { set 
::RtWizard::wizard_state(line_objlist) {} }
-# Ghost objects
-if {![info exists ::RtWizard::wizard_state(ghost_objlist)]} { set 
::RtWizard::wizard_state(ghost_objlist) {} }
-
-# Load the package that lets us output images
-package require cadwidgets::RtImage
-
-# Set verbosity if not already set
-if {![info exists ::RtWizard::wizard_state(verbose)]} {
-    set ::RtWizard::wizard_state(verbose) 0
-}
-
-# If we're launching without enough arguments to fully specify an rtwizard
-# run or a gui run has been specifically requested, go graphical
-if {[info exists ::use_gui]} {
-   # Have to do these loads until we get "package require tclcad" and "package 
require dm"
-   # working - bwish loads them for us by default, but since rtwizard may be 
either
-   # graphical or command line we need to start with btclsh
-   if {$tcl_platform(platform) == "windows"} {
-     load [file join [bu_brlcad_root [bu_brlcad_dir bin]] libtclcad[info 
sharedlibextension]]
-     load [file join [bu_brlcad_root [bu_brlcad_dir bin]] libdm[info 
sharedlibextension]]
-   } else {
-     load [file join [bu_brlcad_root [bu_brlcad_dir lib]] libtclcad[info 
sharedlibextension]]
-     load [file join [bu_brlcad_root [bu_brlcad_dir lib]] libdm[info 
sharedlibextension]]
-   }
-   # Now, load the actual Raytrace Wizard GUI
-   package require RaytraceWizard
-   if {[info exists argv]} {exit}
-} else {
-
-   if {![info exists ::RtWizard::wizard_state(output_filename)] && ![info 
exists ::RtWizard::wizard_state(fbserv_port)] && ![info exists 
::RtWizard::wizard_state(fbserv_device)]} {
-     set ::RtWizard::wizard_state(output_filename) rtwizard.pix
-     if {![file exists $::RtWizard::wizard_state(output_filename)]} {
-       puts "Warning - no output file or framebuffer specified - using file 
rtwizard.pix for output."
-     }
-   }
-   if {[info exists ::RtWizard::wizard_state(output_filename)]} {
-     if {[file exists $::RtWizard::wizard_state(output_filename)]} {
-       puts "Error - cannot create output file, 
$::RtWizard::wizard_state(output_filename) already exists."
-       if {[info exists argv]} {exit}
-     }
-   }
-
-   # Get an in-memory framebuffer, if we don't already have a type set
-   if {![info exists ::RtWizard::wizard_state(fbserv_device)]} {
-      set ::RtWizard::wizard_state(fbserv_device) /dev/mem
-      set fbtype_specified 0
-   } else {
-      set fbtype_specified 1
-   }
-
-   # We need a port number for the fbserv.
-   if {![info exists ::RtWizard::wizard_state(fbserv_port)]} {
-      set ::RtWizard::wizard_state(fbserv_port) 0
-      set port_number_specified 0
-   } else {
-      set port_number_specified 1
-   }
-   # Check whether the framebuffer already exists.  If it does, and if
-   # it was specified on the command line, go with it.
-   if { [catch {exec [file join [bu_brlcad_root bin] fblabel] -F 
$::RtWizard::wizard_state(fbserv_port) 1 1 " "} error ] } {
-      catch {exec [file join [bu_brlcad_root bin] fbserv] -w 
$::RtWizard::wizard_state(width) -n $::RtWizard::wizard_state(scanlines) 
$::RtWizard::wizard_state(fbserv_port) $::RtWizard::wizard_state(fbserv_device) 
&} pid
-      if {[info exists pid]} {
-       set fbserv_pid $pid
-       # Wait a few milliseconds to make sure fbserv has completed its work 
and is available
-       while { [catch {exec [file join [bu_brlcad_root bin] fblabel] -F 
$::RtWizard::wizard_state(fbserv_port) 1 1 " "} error] } {after 300}
-      } else {
-       if {$::RtWizard::wizard_state(verbose)} {puts "fbserv port 
$::RtWizard::wizard_state(fbserv_port) failed!"}
-       incr ::RtWizard::wizard_state(fbserv_port)
-      }
-   }
-
-   # If we didn't have a pre-specified port number and the default didn't 
work, start counting up
-   if { ! $port_number_specified && ! [info exists fbserv_pid] } {
-       incr ::RtWizard::wizard_state(fbserv_port)
-       while { ! [catch {exec [file join [bu_brlcad_root bin] fbclear] -F 
$::RtWizard::wizard_state(fbserv_port) } error ] } {
-            if {$::RtWizard::wizard_state(verbose)} {puts "fbserv port 
$::RtWizard::wizard_state(fbserv_port) is already in use."}
-            incr ::RtWizard::wizard_state(fbserv_port)
-       }
-      catch {exec [file join [bu_brlcad_root bin] fbserv] -w 
$::RtWizard::wizard_state(width) -n $::RtWizard::wizard_state(scanlines) 
$::RtWizard::wizard_state(fbserv_port) $::RtWizard::wizard_state(fbserv_device) 
&} pid
-      set fbserv_pid $pid
-      # Wait a few milliseconds to make sure fbserv has completed its work and 
is available
-      while { [catch {exec [file join [bu_brlcad_root bin] fblabel] -F 
$::RtWizard::wizard_state(fbserv_port) 1 1 " "} error] } {after 300}
-   }
-
-   # Either we're using a specified view model, or we're deducing one based on 
user options
-   if {[info exists ::RtWizard::wizard_state(viewsize)] && [info exists 
::RtWizard::wizard_state(orientation)] && [info exists 
::RtWizard::wizard_state(eye_pt)]} {
-     set viewsize $::RtWizard::wizard_state(viewsize)
-     set orientation [split $::RtWizard::wizard_state(orientation) " "]
-     set eye_pt [split $::RtWizard::wizard_state(eye_pt) " "]
-     if {[info exists ::have_azimuth]} {puts "Warning - view model explicitly 
set - ignoring azimuth option"}
-     if {[info exists ::have_elevation]} {puts "Warning - view model 
explicitly set - ignoring elevation option"}
-     if {[info exists ::have_twist]} {puts "Warning - view model explicitly 
set - ignoring twist option"}
-     if {[info exists ::have_zoom]} {puts "Warning - view model explicitly set 
- ignoring zoom option"}
-     if {[info exists ::have_center]} {puts "Warning - view model explicitly 
set - ignoring center option"}
-
-   } else {
-     if {[info exists ::RtWizard::wizard_state(viewsize)] || [info exists 
::RtWizard::wizard_state(orientation)] || [info exists 
::RtWizard::wizard_state(eye_pt)]} {
-       if {! [info exists ::have_viewsize]} {puts "Error - when specifying 
view model directly, need viewsize"}
-       if {! [info exists ::have_orientation]} {puts "Error - when specifying 
view model directly, need orientation"}
-       if {! [info exists ::have_eye_pt]} {puts "Error - when specifying view 
model directly, need eye_pt"}
-       if {[info exists argv]} {exit}
-     }
-     set db [go_open db db $::RtWizard::wizard_state(dbFile)]
-     db new_view v1 nu
-
-     if {[llength $::RtWizard::wizard_state(color_objlist)]} {
-       foreach item $::RtWizard::wizard_state(color_objlist) {
-         db draw $item
-       }
-     }
-     if {[llength $::RtWizard::wizard_state(line_objlist)]} {
-       foreach item $::RtWizard::wizard_state(line_objlist) {
-         db draw $item
-       }
-     }
-     if {[llength $::RtWizard::wizard_state(ghost_objlist)]} {
-       foreach item $::RtWizard::wizard_state(ghost_objlist) {
-         db draw $item
-       }
-     }
-
-     db autoview v1
-     db aet v1 $::RtWizard::wizard_state(init_azimuth) 
$::RtWizard::wizard_state(init_elevation) $::RtWizard::wizard_state(init_twist)
-     db zoom v1 $::RtWizard::wizard_state(zoom)
-     db perspective v1 $::RtWizard::wizard_state(perspective)
-     if {[info exists ::RtWizard::wizard_state(x_center)] && [info exists 
::RtWizard::wizard_state(y_center)] && [info exists 
::RtWizard::wizard_state(z_center)]} {
-       db center v1 $::RtWizard::wizard_state(x_center) 
$::RtWizard::wizard_state(y_center) $::RtWizard::wizard_state(z_center)
-     }
-     set view_info [regsub -all ";" [db get_eyemodel v1] ""]
-     set vdata [split $view_info "\n"]
-     set viewsize [lindex [lindex $vdata 0] 1]
-     set orientation [lrange [lindex $vdata 1] 1 end]
-     set eye_pt [lrange [lindex $vdata 2] 1 end]
-   }
-
-   ::cadwidgets::rtimage $::RtWizard::wizard_state(dbFile) 
$::RtWizard::wizard_state(fbserv_port) \
-                       $::RtWizard::wizard_state(width) 
$::RtWizard::wizard_state(scanlines) \
-                       $viewsize $orientation $eye_pt 
$::RtWizard::wizard_state(perspective) \
-                       $::RtWizard::wizard_state(bg_color) 
$::RtWizard::wizard_state(e_color) $::RtWizard::wizard_state(ne_color)\
-                       $::RtWizard::wizard_state(occmode) 
$::RtWizard::wizard_state(ghosting_intensity) \
-                       $::RtWizard::wizard_state(color_objlist) \
-                       $::RtWizard::wizard_state(ghost_objlist) \
-                       $::RtWizard::wizard_state(line_objlist)
-
-   if {[info exists ::RtWizard::wizard_state(output_filename)]} {
-      set output_generated 0
-      if {[file extension $::RtWizard::wizard_state(output_filename)] == 
".png"} {
-        exec [file join [bu_brlcad_root bin] fb-png] -w 
$::RtWizard::wizard_state(width) -n $::RtWizard::wizard_state(scanlines) -F 
$::RtWizard::wizard_state(fbserv_port) 
$::RtWizard::wizard_state(output_filename)
-        set output_generated 1
-      }
-      if {!$output_generated} {
-        exec [file join [bu_brlcad_root bin] fb-pix] -w 
$::RtWizard::wizard_state(width) -n $::RtWizard::wizard_state(scanlines) -F 
$::RtWizard::wizard_state(fbserv_port) 
$::RtWizard::wizard_state(output_filename)
-        set output_generated 1
-      }
-
-   }
-
-
-   if {$::RtWizard::wizard_state(fbserv_device) == "/dev/mem"} {
-       if {[info exists fbserv_pid]} {
-         if {$tcl_platform(platform) == "windows"} {
-             set kill_cmd [auto_execok taskkill]
-             set kill_args [list $kill_cmd "/F" "/PID" $fbserv_pid]
-         } else {
-             set kill_cmd [auto_execok kill]
-             set kill_args [list $kill_cmd $fbserv_pid]
-         }
-         if {$kill_cmd != ""} {
-             exec {*}$kill_args
-         }
-      }
-   }
-}
-
-# Local Variables:
-# mode: sh
-# tab-width: 8
-# sh-indentation: 4
-# sh-basic-offset: 4
-# indent-tabs-mode: t
-# End:
-# ex: shiftwidth=4 tabstop=8

This was sent by the SourceForge.net collaborative development platform, the 
world's largest Open Source development site.


------------------------------------------------------------------------------
This SF.net email is sponsored by Windows:

Build for Windows Store.

http://p.sf.net/sfu/windows-dev2dev
_______________________________________________
BRL-CAD Source Commits mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/brlcad-commits

Reply via email to