Esempio n. 1
0
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);
    }
}
Esempio n. 2
0
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);
	}