/** * Trace a ray from clickPosition along the camera view direction and intersect * the image. * \param[in] clickPosition the click position in DISPLAY coordinates * \param[in] renderer the renderer from which to get the camera * \return the point where the ray intersects the image */ void PickerRep::pickLandmark(const Vector3D& clickPosition, vtkRendererPtr renderer) { if (!this->mEnabled) return; vtkMultiVolumePickerPtr picker = vtkMultiVolumePickerPtr::New(); int hit = picker->Pick(clickPosition[0], clickPosition[1], 0, renderer); if (!hit) { mIsDragging = false; return; } // search for picked data in manager, emit uid if found. vtkDataSetPtr data = picker->GetDataSet(); if (data) { std::map<QString, DataPtr> allData = mDataManager->getData(); for (std::map<QString, DataPtr>::iterator iter = allData.begin(); iter != allData.end(); ++iter) { MeshPtr mesh = boost::dynamic_pointer_cast<Mesh>(iter->second); if (mesh && mesh->getVtkPolyData() == data) emit dataPicked(iter->first); ImagePtr image = boost::dynamic_pointer_cast<Image>(iter->second); if (image && image->getBaseVtkImageData() == data) emit dataPicked(iter->first); } } Vector3D pick_w(picker->GetPickPosition()); if ( data && ((mGraphicalPoint && (data == mGraphicalPoint->getPolyData() )) ||(mGlyph && (data == mGlyph->getVtkPolyData() )) ||(mTool && (data == mTool->getGraphicsPolyData() ))) ) { // We have clicked the picker/tool itself. // Store click pos and wait for dragging. mClickedPoint = pick_w; mIsDragging = true; mCallbackCommand->SetAbortFlag(1); // abort this event: interactor does not receive it. return; } else { mIsDragging = false; } if (hit && mSnapToSurface) { mPickedPoint = pick_w; if (mGraphicalPoint) mGraphicalPoint->setValue(mPickedPoint); this->setGlyphCenter(mPickedPoint); emit pointPicked(mPickedPoint); } }
void PickerRep::OnMouseMove() { if (mIsDragging) { mPickedPoint += this->getDisplacement(); mClickedPoint = mPickedPoint; if (mGraphicalPoint) mGraphicalPoint->setValue(mPickedPoint); this->setGlyphCenter(mPickedPoint); emit pointPicked(mPickedPoint); mCallbackCommand->SetAbortFlag(1); } }
ui->lineEditTimeStep->setText("0.125"); curvatureFilter = CurvatureFlowFilterType::New(); connectedFilter = ConnectedThresholdFilterType::New(); castToIntFilter = CastToIntFilterType::New(); } ConnectedThresholdSegmentationDialog::~ConnectedThresholdSegmentationDialog() { delete ui; } void ConnectedThresholdSegmentationDialog::setPickPointGraphicsScene(CustomGraphicsScene *graphicsScene) { connect(ui->pushButtonPickPoint, SIGNAL(toggled(bool)), graphicsScene, SLOT(enablePick(bool))); connect(graphicsScene, SIGNAL(pointPicked(QPoint)), this, SLOT(updateSeedPoint(QPoint))); } void ConnectedThresholdSegmentationDialog::updateSeedPoint(QPoint point) { ui->lineEditXSeed->setText(QString::number(point.x())); ui->lineEditYSeed->setText(QString::number(point.y())); ui->pushButtonPickPoint->setChecked(false); } void ConnectedThresholdSegmentationDialog::on_pushButtonApply_clicked() { ImageLayer *imageLayer = ImageLayer::instance(); int connectedLowerThreshold = ui->sliderLowerThreshold->value(); int connectedUpperThreshold = ui->sliderUpperThreshold->value();