void ExtractorLocator::buttonPressCallback(Vrui::LocatorTool::ButtonPressCallbackData* cbData) { /* Don't do anything if we're still waiting for a final extraction result: */ if(isFinalizationPending()) return; /* Update the locator: */ locator->setPosition(cbData->currentTransformation.getOrigin()); locator->setOrientation(cbData->currentTransformation.getRotation()); /* Request a visualization element if it's appropriate: */ if(!extractor->hasSeededCreator()||extractor->hasIncrementalCreator()||locator->isValid()) { /* Bump up the seed request ID: */ if((++lastSeedRequestID)==0) // 0 is an invalid ID ++lastSeedRequestID; if(extractor->isMaster()) { /* Get extraction parameters for the current locator state from the extractor: */ if(extractor->hasSeededCreator()) extractor->setSeedLocator(locator); #ifdef VISUALIZER_USE_COLLABORATION if(application->sharedVisualizationClient!=0) { /* Send a seed request to the shared visualization server: */ application->sharedVisualizationClient->postSeedRequest(this,lastSeedRequestID,extractor->cloneParameters()); } #endif /* Post a seed request: */ seedRequest(lastSeedRequestID,extractor->cloneParameters()); } } if(extractor->hasSeededCreator()&&extractor->hasIncrementalCreator()) { /* Start dragging: */ dragging=true; } else { #ifdef VISUALIZER_USE_COLLABORATION if(application->sharedVisualizationClient!=0) { /* Send a finalization request to the shared visualization server: */ application->sharedVisualizationClient->postFinalizationRequest(this,lastSeedRequestID); } #endif /* Wait for the only visualization element: */ finalize(lastSeedRequestID); /* Pop up the busy dialog: */ if(busyDialog!=0) Vrui::popupPrimaryWidget(busyDialog); } }
void ExtractorLocator::motionCallback(Vrui::LocatorTool::MotionCallbackData* cbData) { /* Update the locator: */ bool positionChanged=locator->setPosition(cbData->currentTransformation.getOrigin()); positionChanged=locator->setOrientation(cbData->currentTransformation.getRotation())||positionChanged; /* Post a seed request if the locator has moved since the last frame: */ if(dragging&&positionChanged) { /* Bump up the seed request ID: */ if((++lastSeedRequestID)==0) // 0 is an invalid ID ++lastSeedRequestID; if(extractor->isMaster()) { /* Get extraction parameters for the current locator state from the extractor: */ if(extractor->hasSeededCreator()) extractor->setSeedLocator(locator); #ifdef VISUALIZER_USE_COLLABORATION if(application->sharedVisualizationClient!=0) { /* Send a seed request to the shared visualization server: */ application->sharedVisualizationClient->postSeedRequest(this,lastSeedRequestID,extractor->cloneParameters()); } #endif /* Post a seed request: */ seedRequest(lastSeedRequestID,extractor->cloneParameters()); } } /* Check for updates from the extraction thread: */ ElementPointer newElement=checkUpdates(); if(newElement!=0) { /* Add the new element to visualizer's element list: */ application->elementList->addElement(newElement.getPointer(),extractor->getName()); /* Pop down the busy dialog: */ if(!(extractor->hasSeededCreator()&&extractor->hasIncrementalCreator())&&busyDialog!=0) Vrui::popdownPrimaryWidget(busyDialog); } /* Check for updates on long-running operations: */ if(completionPercentageUpdated) { if(busyDialog!=0) { char percentage[10]; snprintf(percentage,sizeof(percentage),"%5.1f",completionPercentage); percentageLabel->setString(percentage); } completionPercentageUpdated=false; } }
void SharedVisualizationClient::RemoteLocator::readSeedRequest(CollaborationPipe& pipe) { /* Read the seed request ID: */ unsigned int newSeedRequestID=pipe.read<unsigned int>(); #ifdef VERBOSE std::cout<<"SharedVisualizationClient: Received seed request "<<newSeedRequestID<<std::endl; #endif /* Read extraction parameters from pipe: */ Visualization::Abstract::BinaryParametersSource<Comm::ClusterPipe> source(extractor->getVariableManager(),pipe,false); Parameters* newSeedParameters=extractor->cloneParameters(); pipe.read<unsigned int>(); // Read and ignore parameter blob size newSeedParameters->read(source); /* Post a seed request: */ if(extractor->isMaster()) seedRequest(newSeedRequestID,newSeedParameters); }