vtkPolyDataPtr polydataFromTransforms(TimedTransformMap transformMap_prMt, Transform3D rMpr) { vtkPolyDataPtr retval = vtkPolyDataPtr::New(); vtkPointsPtr points = vtkPointsPtr::New(); vtkCellArrayPtr lines = vtkCellArrayPtr::New(); points->Allocate(transformMap_prMt.size()); TimedTransformMap::iterator mapIter = transformMap_prMt.begin(); while(mapIter != transformMap_prMt.end()) { Vector3D point_t = Vector3D(0,0,0); Transform3D prMt = mapIter->second; Transform3D rMt = rMpr * prMt; Vector3D p = rMt.coord(point_t); points->InsertNextPoint(p.begin()); ++mapIter; } lines->Initialize(); std::vector<vtkIdType> ids(points->GetNumberOfPoints()); for (unsigned i=0; i<ids.size(); ++i) ids[i] = i; lines->InsertNextCell(ids.size(), &(*ids.begin())); retval->SetPoints(points); retval->SetLines(lines); return retval; }
/**Create and return the structure that would have been read by UsReconstructFileReader, * if written from this object. * */ USReconstructInputData UsReconstructionFileMaker::getReconstructData(ImageDataContainerPtr imageData, std::vector<TimeInfo> imageTimestamps, TimedTransformMap trackerRecordedData, std::map<double, ToolPositionMetadata> trackerRecordedMetadata, std::map<double, ToolPositionMetadata> referenceRecordedMetadata, ToolPtr tool, QString streamUid, bool writeColor, Transform3D rMpr) { if(trackerRecordedData.empty()) reportWarning("No tracking data for writing to reconstruction file."); USReconstructInputData retval; retval.mFilename = mSessionDescription; // not saved yet - no filename retval.mUsRaw = USFrameData::create(mSessionDescription, imageData); retval.rMpr = rMpr; retval.mTrackerRecordedMetadata = trackerRecordedMetadata; retval.mReferenceRecordedMetadata = referenceRecordedMetadata; for (TimedTransformMap::iterator it = trackerRecordedData.begin(); it != trackerRecordedData.end(); ++it) { TimedPosition current; current.mTime = it->first; current.mTimeInfo.setAcquisitionTime(it->first); current.mPos = it->second; retval.mPositions.push_back(current); } std::vector<TimeInfo> fts = imageTimestamps; for (unsigned i=0; i<fts.size(); ++i) { TimedPosition current; current.mTimeInfo = fts[i]; current.mTime = current.mTimeInfo.getAcquisitionTime(); current.mPos = Transform3D::Identity(); // current.mPos = not written - will be found from track positions during reconstruction. retval.mFrames.push_back(current); } if (tool && tool->getProbe()) { retval.mProbeDefinition.setData(tool->getProbe()->getProbeDefinition(streamUid)); } if (tool) retval.mProbeUid = tool->getUid(); this->fillFramePositions(&retval); return retval; }