Example #1
0
void Viewer::toolsMenuCallback(GLMotif::ToggleButton::ValueChangedCallbackData *cbData)
{
   AbstractDynamicsTool* tool;

   std::string name=cbData->toggle->getName();
   {
      if (name == "ParticleSprayerToggle")
      {
         masterout() << "Current Tool: Particle Sprayer" << std::endl;

         tool=toolmap["ParticleSprayerTool"];
         bool state=tool->isDisabled();
         tool->setDisabled(!state);

      }
      else if (name == "DotSpreaderToggle")
      {
         masterout() << "Current Tool: Dot Spreader" << std::endl;

         tool=toolmap["DotSpreaderTool"];
         bool state=tool->isDisabled();
         tool->setDisabled(!state);
      }
      else if (name == "StaticSolverToggle")
      {
         masterout() << "CurrentTool: Static Solver" << std::endl;

         tool=toolmap["StaticSolverTool"];
         bool state=tool->isDisabled();
         tool->setDisabled(!state);
      }
      else if (name == "DynamicSolverToggle")
      {
         masterout() << "CurrentTool: Dynamic Solver" << std::endl;

         tool=toolmap["DynamicSolverTool"];
         bool state=tool->isDisabled();
         tool->setDisabled(!state);
      }
      else
      {
      }
   }

}
Example #2
0
void masteroutf(masterclient &c, const char *fmt, ...)
{
    bigstring msg;
    va_list args;
    va_start(args, fmt);
    vformatbigstring(msg, fmt, args);
    va_end(args);
    masterout(c, msg);
}
Example #3
0
std::vector<std::string> Viewer::loadPlugins() throw(std::runtime_error)
{
   // create Directory object and parse plugin directory
   std::string directory(RESOURCEDIR);
   directory += "/plugins";

   masterout() << "Loading plugins from: " << directory << std::endl;

   
   Directory dir;
   dir.addExtensionFilter("so");
   dir.read(directory);

   void *dlib;
   for (std::vector<std::string>::const_iterator lib=dir.contents().begin(); lib
         != dir.contents().end(); ++lib)
   {
      masterout() << "\topening " << *lib << "..." << std::endl;

      // prepend directory name to library file name
      std::string file=directory + "/" + *lib;

      // open the library
      dlib=dlopen(file.c_str(), RTLD_NOW);
      //dlib=dlopen(file.c_str(), RTLD_LAZY|RTLD_GLOBAL);

      if (dlib == NULL)
         throw std::runtime_error(dlerror());

      // add the handle to our list
      dl_list.insert(dl_list.end(), dlib);
   }

   // create an array of model names
   std::vector<std::string> model_names;

   for (DynamicsFactory::iterator itr=Factory.begin(); itr != Factory.end(); ++itr)
   {
      model_names.insert(model_names.end(), itr->first);
   }

   // return the name array
   return model_names;
}
Example #4
0
void Viewer::dynamicsMenuCallback(GLMotif::ToggleButton::ValueChangedCallbackData *cbData)
{
   bool popup=false;

   // delete current dynamical model
   if (model != NULL)
      delete model;

   GLMotif::WidgetManager::Transformation oldTrans;

   // delete current parameter dialog
   if (parameterDialog != NULL)
   {
      // save the old transformation
      oldTrans=parameterDialog->getTransformation();

      // if dialog is currently shown hide before deleting
      if (parameterDialog->state() == CaveDialog::ACTIVE)
      {
         parameterDialog->hide();

         // set flag to popup after creating new dialog
         popup=true;
      }

      delete parameterDialog;
   }

   std::string name=cbData->toggle->getName();

   // create the key from the toggle name
   std::string key(name);
   key.erase(key.find("toggle"));

   debugout() << "  toggle: " << name << "\tkey: " << key << std::endl;

   // create the dynamical model
   model=Factory[key]();

   // create/assign parameter dialog
   parameterDialog=model->createParameterDialog(mainMenu);

   parameterDialog->setTransformation(oldTrans);

   // popup parameter dialog if previously shown or system requests it
   if (popup)
      parameterDialog->show();
   else if (model->autoShowParameterDialog())
   {
      showParameterDialogToggle->setToggle(true);
      parameterDialog->show();
   }

   // update the integration step size
   double step_size=IntegrationStepSize::instance()->getSavedValue(key);

   if (step_size > 0.0)
   {
      masterout() << key << ":restoring step size [" << step_size << "]"
                  << std::endl;
   }
   else
   {
      // set the integration step size to the default value
      step_size=IntegrationStepSize::DefaultStepSize;
      masterout() << key << ":integration step size not set."
                  << " Setting to default (" << step_size << ")" << std::endl;
   }

   IntegrationStepSize::instance()->setValue(step_size);

   // iterate through tools and sets dynamical integrator
   for (ToolList::iterator tool=tools.begin(); tool != tools.end(); ++tool)
   {
      (*tool)->setIntegrator(model);
   }

   // fake radio-button behavior
   setRadioToggles(dynamicsToggleButtons, name);
}
Example #5
0
void Viewer::toolCreationCallback(Vrui::ToolManager::ToolCreationCallbackData* cbData)
{
   ToolBox::ToolBox* toolBox=dynamic_cast<ToolBox::ToolBox*> (cbData->tool);

   if (toolBox != 0)
   {
      (new ToolBox::Extensions::ToolRotator(toolBox))->alwaysShowCurrent(false).positionOfCurrent(180).closeDelay(2.0);

      masterout() << "Creating tools and adding to toolbox..." << std::endl;

      AbstractDynamicsTool *tool;

      // add tools

      masterout() << "\tAdding Static Solver..." << std::endl;

      tool=new StaticSolverTool(toolBox, this);
      // set dynamical integrator and add tool to array
      tool->setIntegrator(model);
      tools.push_back(tool);
      // create associated options dialog and add to dialog array
      optionsDialogs.push_back(tool->createOptionsDialog(mainMenu));

      toolmap["StaticSolverTool"]=tool;

      masterout() << "\tAdding Dot Spreader..." << std::endl;

      tool=new DotSpreaderTool(toolBox, this);
      // set dynamical integrator and add tool to array
      tool->setIntegrator(model);
      tools.push_back(tool);
      // create associated options dialog and add to dialog array
      optionsDialogs.push_back(tool->createOptionsDialog(mainMenu));

      toolmap["DotSpreaderTool"]=tool;

      masterout() << "\tAdding Particle Sprayer..." << std::endl;

      tool=new ParticleSprayerTool(toolBox, this);
      // set dynamical integrator and add tool to array
      tool->setIntegrator(model);
      tools.push_back(tool);
      // create associated options dialog and add to dialog array
      optionsDialogs.push_back(tool->createOptionsDialog(mainMenu));

      toolmap["ParticleSprayerTool"]=tool;

      masterout() << "\tAdding Dynamic Solver..." << std::endl;

      tool=new DynamicSolverTool(toolBox, this);
      // set dynamical integrator and add tool to array
      tool->setIntegrator(model);
      tools.push_back(tool);
      // create associated options dialog and add to dialog array
      optionsDialogs.push_back(tool->createOptionsDialog(mainMenu));

      toolmap["DynamicSolverTool"]=tool;

      // automatically load the first tool and set options dialog
      AbstractDynamicsTool* currentTool = static_cast<AbstractDynamicsTool*>(tools.front());
      currentTool->grab();
      updateCurrentOptionsDialog();
   }
}