Manta Interactive Ray Tracer Development Mailing List

Text archives Help


[MANTA] r1171 - in trunk: Core/Exceptions Engine/Control StandAlone


Chronological Thread 
  • From: abe@sci.utah.edu
  • To: manta@sci.utah.edu
  • Subject: [MANTA] r1171 - in trunk: Core/Exceptions Engine/Control StandAlone
  • Date: Sun, 13 Aug 2006 18:30:37 -0600 (MDT)

Author: abe
Date: Sun Aug 13 18:30:35 2006
New Revision: 1171

Added:
   trunk/Core/Exceptions/UnknownComponent.cc
   trunk/Core/Exceptions/UnknownComponent.h
Modified:
   trunk/Engine/Control/RTRT.cc
   trunk/StandAlone/manta.cc
Log:

Fixed problem in bin/manta preventing imagedisplays from being
specified on the command line. (This prevented -imagedisplay null from
working.)

A    Core/Exceptions/UnknownComponent.h
A    Core/Exceptions/UnknownComponent.cc
M    Engine/Control/RTRT.cc
M    StandAlone/manta.cc


Added: trunk/Core/Exceptions/UnknownComponent.cc
==============================================================================
--- (empty file)
+++ trunk/Core/Exceptions/UnknownComponent.cc   Sun Aug 13 18:30:35 2006
@@ -0,0 +1,37 @@
+
+#include <Core/Exceptions/UnknownComponent.h>
+
+#include <sgi_stl_warnings_off.h>
+#include <sstream>
+#include <sgi_stl_warnings_on.h>
+
+using namespace Manta;
+using namespace std;
+
+UnknownComponent::UnknownComponent(const std::string& error, const 
std::string& spec )
+{
+  ostringstream msg;
+  msg << error << " Component spec: " << spec;
+  
+  message_ = msg.str();
+}
+
+UnknownComponent::UnknownComponent(const UnknownComponent& copy)
+    : message_(copy.message_)
+{
+}
+
+UnknownComponent::~UnknownComponent()
+{
+}
+
+const char* UnknownComponent::message() const
+{
+    return message_.c_str();
+}
+
+const char* UnknownComponent::type() const
+{
+    return "UnknownComponent";
+}
+

Added: trunk/Core/Exceptions/UnknownComponent.h
==============================================================================
--- (empty file)
+++ trunk/Core/Exceptions/UnknownComponent.h    Sun Aug 13 18:30:35 2006
@@ -0,0 +1,26 @@
+
+#ifndef Manta_Core_UnknownComponent_h
+#define Manta_Core_UnknownComponent_h
+
+#include <Core/Exceptions/Exception.h>
+#include <sgi_stl_warnings_off.h>
+#include <string>
+#include <sgi_stl_warnings_on.h>
+
+namespace Manta {
+  using namespace std;
+  class UnknownComponent : public SCIRun::Exception {
+  public:
+    UnknownComponent(const std::string& error, const std::string& spec);
+    UnknownComponent(const UnknownComponent&);
+    virtual ~UnknownComponent();
+    virtual const char* message() const;
+    virtual const char* type() const;
+  protected:
+  private:
+    std::string message_;
+    UnknownComponent& operator=(const UnknownComponent&);
+  };
+}
+
+#endif

Modified: trunk/Engine/Control/RTRT.cc
==============================================================================
--- trunk/Engine/Control/RTRT.cc        (original)
+++ trunk/Engine/Control/RTRT.cc        Sun Aug 13 18:30:35 2006
@@ -24,6 +24,7 @@
 #include <Core/Exceptions/InternalError.h>
 #include <Core/Exceptions/InvalidState.h>
 #include <Core/Exceptions/InputError.h>
+#include <Core/Exceptions/UnknownComponent.h>
 #include <Core/Thread/Thread.h>
 #include <Core/Thread/Time.h>
 #include <Core/Util/Assert.h>
@@ -207,7 +208,9 @@
   NOT_FINISHED("RTRT::setTimeMode");
 }
 
-void RTRT::beginRendering(bool blockUntilFinished)
+#define MANTA_CHECK_POINTER(ptr) if (ptr == 0) throw SCIRun::InvalidState( 
#ptr, __FILE__, __LINE__ ); 
+
+void RTRT::beginRendering(bool blockUntilFinished) throw (SCIRun::Exception 
&)
 {
   runningLock.lock();
   if(running)
@@ -217,14 +220,27 @@
   runningLock.unlock();
 
   // Preprocess
+  MANTA_CHECK_POINTER(scene)
+  
   LightSet* lights = scene->getLights();
+  MANTA_CHECK_POINTER(lights)
+  
+  
   PreprocessContext context(this, lights);
   lights->preprocess(context);
+
+  MANTA_CHECK_POINTER(scene->getBackground())
   scene->getBackground()->preprocess(context);
+
+  MANTA_CHECK_POINTER(scene->getObject())
   scene->getObject()->preprocess(context);
+  
   for(int index = 0;index < static_cast<int>(channels.size());index++){
     Channel* channel = channels[index];
+    MANTA_CHECK_POINTER(channel)
+    
     channel->camera->preprocess(context);
+    MANTA_CHECK_POINTER(channel->camera)
   }
 
   if(!currentImageCreator)
@@ -693,10 +709,10 @@
   // Parse the arg string.
   parseSpec(spec, name, args);
 
-  // Search for an image display with the name.
+  // Search for an image display creator with the name.
   ImageDisplayMapType::iterator iter = imageDisplays.find(name);
   if(iter == imageDisplays.end())
-    return 0;
+    throw UnknownComponent( "Image display not found", spec );
 
   // Create the channel with the image display.
   return createChannel( (*iter->second)(args), camera, stereo, xres, yres );

Modified: trunk/StandAlone/manta.cc
==============================================================================
--- trunk/StandAlone/manta.cc   (original)
+++ trunk/StandAlone/manta.cc   Sun Aug 13 18:30:35 2006
@@ -39,6 +39,7 @@
 #include <Core/Exceptions/Exception.h>
 #include <Core/Exceptions/InternalError.h>
 #include <Core/Exceptions/IllegalArgument.h>
+#include <Core/Exceptions/UnknownComponent.h>
 #include <Core/Thread/Time.h>
 #include <Core/Util/About.h>
 
@@ -76,7 +77,7 @@
 #include <ieeefp.h>
 #endif
 
- Scene* createDefaultScene();
+Scene* createDefaultScene();
 static void make_stack( ReadContext &context, const vector<string> &args );
 
 static void
@@ -220,127 +221,148 @@
     bool compute_bb_camera = false;
 
     // Parse command line args.
-    
-    int argc = static_cast<int>(args.size());
-    for(int i=0;i<argc;i++){
-      string arg = args[i];
-      if(arg == "-help"){
-        usage(rtrt);
+    try {
+      int argc = static_cast<int>(args.size());
+      for(int i=0;i<argc;i++){
+        string arg = args[i];
+        if(arg == "-help"){
+          usage(rtrt);
 
         
-      } else if(arg == "-bench" || arg == "-quietbench"){
+        } else if(arg == "-bench" || arg == "-quietbench"){
 
-        
///////////////////////////////////////////////////////////////////////
-        // Benchmark Helper.        
-        bool verbose = true;
-        if(arg == "-quietbench")
-          verbose = false;
-        long numFrames = 100;
-        long warmup = 10;
-        if(getLongArg(i, args, numFrames)){
-          getLongArg(i, args, warmup);
-        }
-        BenchHelper* b = new BenchHelper(rtrt, numFrames, verbose);
-        // Ask for two callbacks, one at frame "warmup", and one at
-        // frame warmup+numFrames
-        rtrt->addOneShotCallback(MantaInterface::Absolute, warmup,
-                                 Callback::create(b, &BenchHelper::start));
-        rtrt->addOneShotCallback(MantaInterface::Absolute, warmup+numFrames,
-                                 Callback::create(b, &BenchHelper::stop));
+          
///////////////////////////////////////////////////////////////////////
+          // Benchmark Helper.        
+          bool verbose = true;
+          if(arg == "-quietbench")
+            verbose = false;
+          long numFrames = 100;
+          long warmup = 10;
+          if(getLongArg(i, args, numFrames)){
+            getLongArg(i, args, warmup);
+          }
+          BenchHelper* b = new BenchHelper(rtrt, numFrames, verbose);
+          // Ask for two callbacks, one at frame "warmup", and one at
+          // frame warmup+numFrames
+          rtrt->addOneShotCallback(MantaInterface::Absolute, warmup,
+                                   Callback::create(b, &BenchHelper::start));
+          rtrt->addOneShotCallback(MantaInterface::Absolute, 
warmup+numFrames,
+                                   Callback::create(b, &BenchHelper::stop));
 
         
-      } else if(arg == "-camera"){
-        string s;
-        if(!getStringArg(i, args, s))
-          usage(rtrt);
-        currentCamera = rtrt->createCamera(s);
-        if(!currentCamera){
-          cerr << "Error creating camera: " << s << ", available cameras 
are:\n";
-          printList(cerr, rtrt->listCameras());
-          throw IllegalArgument( s, i, args );
-        }
-      } else if(arg == "-res"){
-        if(!getResolutionArg(i, args, xres, yres)){
-          cerr << "Error parsing resolution: " << args[i+1] << '\n';
-          usage(rtrt);
-        }
-      } else if(arg == "-stereo") {
-        stereo = true;
+        } else if(arg == "-camera"){
+          string s;
+          if(!getStringArg(i, args, s))
+            usage(rtrt);
+          currentCamera = rtrt->createCamera(s);
+          if(!currentCamera){
+            cerr << "Error creating camera: " << s << ", available cameras 
are:\n";
+            printList(cerr, rtrt->listCameras());
+            throw IllegalArgument( s, i, args );
+          }
+        } else if(arg == "-res"){
+          if(!getResolutionArg(i, args, xres, yres)){
+            cerr << "Error parsing resolution: " << args[i+1] << '\n';
+            usage(rtrt);
+          }
+        } else if(arg == "-stereo") {
+          stereo = true;
         
-      } else if(arg == "-imagedisplay"){
-        string s;
-        if(!getStringArg(i, args, s))
-          usage(rtrt);
-        if(!rtrt->createChannel(s, currentCamera, stereo, xres, yres)){
-          cerr << "Invalid image display: " << s << ", available image 
displays are:\n";
-          printList(cerr, rtrt->listImageDisplays());
-          throw IllegalArgument( s, i, args );
-        }
-        channelCreated=true;
-
-      } else if(arg == "-imagetype"){
-        string s;
-        if(!getStringArg(i, args, s))
-        usage(rtrt);
-        if(!rtrt->selectImageType(s)){
-          cerr << "Invalid image type: " << s << ", available image types 
are:\n";
-          printList(cerr, rtrt->listImageTypes());
-          throw IllegalArgument( s, i, args );
-        }        
+        } else if(arg == "-imagedisplay"){
+          string s;
+          if(!getStringArg(i, args, s))
+            usage(rtrt);
+
+          // Create the channel.
+          try {
+            rtrt->createChannel(s, currentCamera, stereo, xres, yres);
+            
+          } catch (UnknownComponent e) {
+            cerr << e.message() << "\n"
+                 << "Available image displays: ";
+            printList(cerr, rtrt->listImageDisplays());
+            throw e;
+          }
+          channelCreated=true;
+
+        } else if(arg == "-imagetype"){
+          string s;
+          if(!getStringArg(i, args, s))
+            usage(rtrt);
+          if(!rtrt->selectImageType(s)){
+            cerr << "Invalid image type: " << s << ", available image types 
are:\n";
+            printList(cerr, rtrt->listImageTypes());
+            throw IllegalArgument( s, i, args );
+          }        
         
-      } else if(arg == "-idlemode"){
-        string s;
-        if(!getStringArg(i, args, s))
-          usage(rtrt);
-        if(!rtrt->addIdleMode(s)){
-          cerr << "Invalid idle mode: " << s << ", available idle modes 
are:\n";
-          printList(cerr, rtrt->listIdleModes());
-          throw IllegalArgument( s, i, args );
-        }
-      } else if(arg == "-np"){
-                               long np;
-                               if(!getLongArg(i, args, np))
-                                       usage(rtrt);
-                               rtrt->changeNumWorkers(static_cast<int>(np));
+        } else if(arg == "-idlemode"){
+          string s;
+          if(!getStringArg(i, args, s))
+            usage(rtrt);
+          if(!rtrt->addIdleMode(s)){
+            cerr << "Invalid idle mode: " << s << ", available idle modes 
are:\n";
+            printList(cerr, rtrt->listIdleModes());
+            throw IllegalArgument( s, i, args );
+          }
+        } else if(arg == "-np"){
+          long np;
+          if(!getLongArg(i, args, np))
+            usage(rtrt);
+          rtrt->changeNumWorkers(static_cast<int>(np));
         
-      } else if(arg == "-ui"){
-                               string s;
-                               if(!getStringArg(i, args, s))
-                                       usage(rtrt);
-                               UserInterface* ui = 
rtrt->createUserInterface(s);
-                               if(!ui){
-                                       cerr << "Unknown user interface: " << 
s << ", available user interfaces are:\n";
-                                       printList(cerr, 
rtrt->listUserInterfaces());
-                                       throw IllegalArgument( s, i, args );
-                               }
-                               ui->startup();
-                               haveUI = true;
-
-      } else if(arg == "-shadows"){
-        string s;
-        if(!getStringArg(i, args, s))
-          usage(rtrt);
-        if(!rtrt->selectShadowAlgorithm(s)){
-          cerr << "Invalid shadow algorithm: " << s << ", available shadow 
algorithms are:\n";
-          printList(cerr, rtrt->listShadowAlgorithms());
-          throw IllegalArgument( s, i, args );
-        }
+        } else if(arg == "-ui"){
+          string s;
+          if(!getStringArg(i, args, s))
+            usage(rtrt);
+          UserInterface* ui = rtrt->createUserInterface(s);
+          if(!ui){
+            cerr << "Unknown user interface: " << s << ", available user 
interfaces are:\n";
+            printList(cerr, rtrt->listUserInterfaces());
+            throw IllegalArgument( s, i, args );
+          }
+          ui->startup();
+          haveUI = true;
+
+        } else if(arg == "-shadows"){
+          string s;
+          if(!getStringArg(i, args, s))
+            usage(rtrt);
+          if(!rtrt->selectShadowAlgorithm(s)){
+            cerr << "Invalid shadow algorithm: " << s << ", available shadow 
algorithms are:\n";
+            printList(cerr, rtrt->listShadowAlgorithms());
+            throw IllegalArgument( s, i, args );
+          }
         
-      } else if(arg == "-scene"){
-        if(rtrt->haveScene())
-          cerr << "WARNING: multiple scenes specified, will use last one\n";
-        string scene;
-        if(!getStringArg(i, args, scene))
-          usage(rtrt);
-        if(!rtrt->readScene(scene)){
-          cerr << "Error reading scene: " << scene << '\n';
-          throw IllegalArgument( "-scene", i, args );
+        } else if(arg == "-scene"){
+          if(rtrt->haveScene())
+            cerr << "WARNING: multiple scenes specified, will use last 
one\n";
+          string scene;
+          if(!getStringArg(i, args, scene))
+            usage(rtrt);
+          if(!rtrt->readScene(scene)){
+            cerr << "Error reading scene: " << scene << '\n';
+            throw IllegalArgument( "-scene", i, args );
+          }
+        }
+        else if (arg == "-stack") {
+          if (!getStringArg(i,args,stack_file))
+            usage(rtrt);
         }
       }
-      else if (arg == "-stack") {
-        if (!getStringArg(i,args,stack_file))
-          usage(rtrt);
-      }
+    }
+    catch (SCIRun::Exception& e) {
+      cerr << "manta.cc (argument parsing): Caught SCIRun exception: " << 
e.message() << '\n';
+      Thread::exitAll( 1 );
+      
+    } catch (std::exception e){
+      cerr << "manta.cc (argument parsing): Caught std exception: "
+           << e.what()
+           << '\n';
+      Thread::exitAll(1);
+      
+    } catch(...){
+      cerr << "manta.cc (argument parsing): Caught unknown exception\n";
+      Thread::exitAll(1);
     }
 
     
///////////////////////////////////////////////////////////////////////////
@@ -389,17 +411,17 @@
     
///////////////////////////////////////////////////////////////////////////
     
   } catch (SCIRun::Exception& e) {
-    cerr << "manta.cc: Caught SCIRun exception: " << e.message() << '\n';
+    cerr << "manta.cc (top level): Caught SCIRun exception: " << e.message() 
<< '\n';
     Thread::exitAll( 1 );
                
   } catch (std::exception e){
-    cerr << "manta.cc: Caught std exception: "
+    cerr << "manta.cc (top level): Caught std exception: "
          << e.what()
          << '\n';
     Thread::exitAll(1);
                
   } catch(...){
-    cerr << "manta.cc: Caught unknown exception\n";
+    cerr << "manta.cc (top level): Caught unknown exception\n";
     Thread::exitAll(1);
   }
 




  • [MANTA] r1171 - in trunk: Core/Exceptions Engine/Control StandAlone, abe, 08/13/2006

Archive powered by MHonArc 2.6.16.

Top of page