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 { } } }
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); }
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; }
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); }
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(); } }