iA3DEllipseObjectVis::iA3DEllipseObjectVis(iAVtkWidget* widget, vtkTable* objectTable, QSharedPointer<QMap<uint, uint> > columnMapping, QColor const & color, int phiRes, int thetaRes) : iA3DColoredPolyObjectVis(widget, objectTable, columnMapping, color, (phiRes - 2) * thetaRes + 2) { auto fullPolySource = vtkSmartPointer<vtkAppendPolyData>::New(); // maybe use vtkParametricFunctionSource with vtkParametricEllipsoid? for (vtkIdType row = 0; row < objectTable->GetNumberOfRows(); ++row) { double cx = objectTable->GetValue(row, m_columnMapping->value(iACsvConfig::CenterX)).ToDouble(); double cy = objectTable->GetValue(row, m_columnMapping->value(iACsvConfig::CenterY)).ToDouble(); double cz = objectTable->GetValue(row, m_columnMapping->value(iACsvConfig::CenterZ)).ToDouble(); double dx = objectTable->GetValue(row, m_columnMapping->value(iACsvConfig::DimensionX)).ToDouble()/2; double dy = objectTable->GetValue(row, m_columnMapping->value(iACsvConfig::DimensionY)).ToDouble()/2; double dz = objectTable->GetValue(row, m_columnMapping->value(iACsvConfig::DimensionZ)).ToDouble()/2; auto ellipsoidSrc = vtkSmartPointer<vtkEllipsoidSource>::New(); ellipsoidSrc->SetThetaResolution(thetaRes); ellipsoidSrc->SetPhiResolution(phiRes); ellipsoidSrc->SetCenter(cx, cy, cz); ellipsoidSrc->SetXRadius(dx); ellipsoidSrc->SetYRadius(dy); ellipsoidSrc->SetZRadius(dz); ellipsoidSrc->Update(); fullPolySource->AddInputData(ellipsoidSrc->GetOutput()); } fullPolySource->Update(); m_fullPoly = fullPolySource->GetOutput(); m_fullPoly->GetPointData()->AddArray(m_colors); assert ( m_pointsPerObject*objectTable->GetNumberOfRows() == fullPolySource->GetOutput()->GetNumberOfPoints() ); m_mapper->SetInputData(m_fullPoly); setupBoundingBox(); setupOriginalIds(); }
/*! 入力 @param[in] lpd 入力データ @param[out] inputData_Vec 出力座標配列 */ void InputMovingAverageRevise::OnMouseDrag(LPIE_INPUT_DATA lpd, ImgEdit *pImgEdit, InputData_Vec &inputData_Vec) { AddInputData(lpd); IE_INPUT_DATA start; IE_INPUT_DATA end; GetAverageData(&end); GetBeforeData(&start); LineRevise(&start, &end, inputData_Vec); }
void PickCallbackFunction(vtkObject* caller, long unsigned int vtkNotUsed(eventId), void* clientData, void* vtkNotUsed(callData)) { vtkAreaPicker *areaPicker = static_cast<vtkAreaPicker*>(caller); iARenderer *ren = static_cast<iARenderer*>(clientData); ren->GetRenderWindow()->GetRenderers()->GetFirstRenderer()->RemoveActor(ren->selectedActor); auto extractSelection = vtkSmartPointer<vtkExtractSelectedFrustum>::New(); extractSelection->SetInputData(0, ren->getRenderObserver()->GetImageData()); extractSelection->PreserveTopologyOff(); extractSelection->SetFrustum(areaPicker->GetFrustum()); extractSelection->Update(); if (!extractSelection->GetOutput()->GetNumberOfElements(vtkUnstructuredGrid::CELL)) { ren->emitNoSelectedCells(); return; } if (ren->GetInteractor()->GetControlKey() && !ren->GetInteractor()->GetShiftKey()) { // Adds cells to selection auto append = vtkSmartPointer<vtkAppendFilter>::New(); append->AddInputData(ren->finalSelection); append->AddInputData(extractSelection->GetOutput()); append->Update(); ren->finalSelection->ShallowCopy(append->GetOutput()); } else if (ren->GetInteractor()->GetControlKey() && ren->GetInteractor()->GetShiftKey()) { // Removes cells from selection auto newfinalSel = vtkSmartPointer<vtkUnstructuredGrid>::New(); newfinalSel->Allocate(1, 1); newfinalSel->SetPoints(ren->finalSelection->GetPoints()); auto currSel = vtkSmartPointer<vtkUnstructuredGrid>::New(); currSel->ShallowCopy(extractSelection->GetOutput()); double f_Cell[DIM] = { 0,0,0 }, c_Cell[DIM] = { 0,0,0 }; double* spacing = ren->getRenderObserver()->GetImageData()->GetSpacing(); for (vtkIdType i = 0; i < ren->finalSelection->GetNumberOfCells(); ++i) { bool addCell = true; GetCellCenter(ren->finalSelection, i, f_Cell, spacing); for (vtkIdType j = 0; j < currSel->GetNumberOfCells(); ++j) { GetCellCenter(currSel, j, c_Cell, spacing); if (f_Cell[0] == c_Cell[0] && f_Cell[1] == c_Cell[1] && f_Cell[2] == c_Cell[2]) { addCell = false; break; } } if (addCell) newfinalSel->InsertNextCell(ren->finalSelection->GetCell(i)->GetCellType(), ren->finalSelection->GetCell(i)->GetPointIds()); } ren->finalSelection->ShallowCopy(newfinalSel); } else { // New selection ren->finalSelection->ShallowCopy(extractSelection->GetOutput()); } ren->selectedMapper->Update(); ren->GetRenderWindow()->GetRenderers()->GetFirstRenderer()->AddActor(ren->selectedActor); ren->emitSelectedCells(ren->finalSelection); }