Text archives Help
- 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.