36 #include "vtkCamera.h" 48 #include "boost/bind.hpp" 96 for (
unsigned int i=0; i<cstCOUNT; ++i)
98 CAMERA_STYLE_TYPE current =
static_cast<CAMERA_STYLE_TYPE
>(i);
123 QDomElement elem = dataNode.toElement();
132 elem.setAttribute(
"uniCam",
mUniCam);
134 elem.setAttribute(
"focusROI",
mFocusROI);
139 QDomElement elem = dataNode.toElement();
148 mUniCam = elem.attribute(
"uniCam", QString::number(
mUniCam)).toInt();
175 retval.mVolume3D =
true;
176 retval.mSlice3D =
false;
177 retval.mSlice2D =
true;
183 retval.mVolume3D =
true;
184 retval.mSlice3D =
true;
185 retval.mSlice2D =
true;
192 retval.mVolume3D =
true;
193 retval.mSlice3D =
false;
194 retval.mSlice2D =
false;
201 retval.mVolume3D =
false;
202 retval.mSlice3D =
true;
203 retval.mSlice2D =
false;
210 retval.mVolume3D =
false;
211 retval.mSlice3D =
false;
212 retval.mSlice2D =
true;
219 retval.mVolume3D =
true;
220 retval.mSlice3D =
true;
221 retval.mSlice2D =
false;
228 QDomElement elem = dataNode.toElement();
229 elem.setAttribute(
"volume3D", mVolume3D);
230 elem.setAttribute(
"slice3D", mSlice3D);
231 elem.setAttribute(
"slice2D", mSlice2D);
236 QDomElement elem = dataNode.toElement();
237 mVolume3D = elem.attribute(
"volume3D", QString::number(mVolume3D)).toInt();
238 mSlice3D = elem.attribute(
"slice3D", QString::number(mSlice3D)).toInt();
239 mSlice2D = elem.attribute(
"slice2D", QString::number(mSlice2D)).toInt();
244 return !(mVolume3D || mSlice3D || mSlice2D);
250 retval.mSlice2D = mSlice2D || rhs.mSlice2D;
251 retval.mSlice3D = mSlice3D || rhs.mSlice3D;
252 retval.mVolume3D = mVolume3D || rhs.mVolume3D;
259 retval.mSlice2D = mSlice2D && !rhs.mSlice2D;
260 retval.mSlice3D = mSlice3D && !rhs.mSlice3D;
261 retval.mVolume3D = mVolume3D && !rhs.mVolume3D;
267 if (required.mSlice2D && mSlice2D)
return true;
268 if (required.mSlice3D && mSlice3D)
return true;
269 if (required.mVolume3D && mVolume3D)
return true;
286 if (data->getType()==
"mesh")
295 if (image->getModality().toUpper().contains(
"US"))
297 if (image->getImageType().toUpper().contains(
"B-MODE"))
302 else if (image->getModality().toUpper().contains(
"MR"))
307 else if (image->getModality().toUpper().contains(
"CT"))
326 mShowLandmarks(false), mShowPointPickerProbe(false),
327 mPickerGlyph(new
Mesh(
"PickerGlyph"))
338 mVideoSource =
"active";
340 mGlobal2DZoom = mGroup2DZoom;
342 this->createSliceDefinitionProperty();
346 void ViewGroupData::purgeDataNotExistingInPatientModelService()
349 for (
unsigned i = 0; i < mData.size(); )
351 QString uid = mData[i].first;
352 if (!mServices->patient()->getData(uid))
354 if (this->contains(uid))
357 mData.erase(std::find_if(mData.begin(), mData.end(), data_equals(uid)));
364 for(
unsigned i = 0; i < purged.size(); ++i)
383 if (this->contains(uid))
387 DataAndViewPropertiesPair item(uid, properties);
389 for (
int i=
int(mData.size())-1; i>=0; --i)
393 this->insertData(mData.begin()+i+1, item);
397 if (!this->contains(uid))
398 this->insertData(mData.begin(), item);
402 void ViewGroupData::insertData(std::vector<DataAndViewPropertiesPair>::iterator iter, DataAndViewPropertiesPair &item)
405 this->mData.insert(iter, item);
426 if (this->contains(uid))
427 return std::find_if(mData.begin(), mData.end(), data_equals(uid))->second;
436 if (properties.
empty())
442 if (!this->contains(uid))
444 DataAndViewPropertiesPair item(uid, properties);
446 this->insertData(mData.end(), item);
450 std::find_if(mData.begin(), mData.end(), data_equals(uid))->second = properties;
456 bool ViewGroupData::contains(QString uid)
const 458 return std::count_if(mData.begin(), mData.end(), data_equals(uid));
463 if (!this->contains(uid))
465 mData.erase(std::find_if(mData.begin(), mData.end(), data_equals(uid)));
472 while (!mData.empty())
476 mGroup2DZoom->set(1.0);
477 mGlobal2DZoom->set(1.0);
482 DataPtr data = mServices->patient()->getData(uid);
485 reportError(
"Couldn't find the data: [" + uid +
"] in the datamanager.");
493 if (mVideoSource==uid)
506 return this->getDataOfType<Data>(properties);
510 template<
class DATA_TYPE>
511 std::vector<boost::shared_ptr<DATA_TYPE> > ViewGroupData::getDataOfType(
DataViewProperties requiredProperties)
const 514 std::map<QString, DataPtr> alldata = mServices->patient()->getDatas();
516 typedef boost::shared_ptr<DATA_TYPE> DATA_PTR;
517 std::vector<DATA_PTR> retval;
518 for (
unsigned i = 0; i < mData.size(); ++i)
520 DATA_PTR data = boost::dynamic_pointer_cast<DATA_TYPE>(alldata[mData[i].first]);
526 retval.push_back(data);
533 return this->getDataOfType<Image>(properties);
538 return this->getDataOfType<Mesh>(properties);
543 return this->getDataOfType<TrackedStream>(properties);
549 std::vector<TrackedStreamPtr> retval;
551 for(
int i = 0; i < streams.size(); ++i)
553 if(streams[i]->is2D() )
554 retval.push_back(streams[i]);
561 std::vector<ImagePtr> images = this->
getImages(properties);
564 for(
int i = 0; i < streams.size(); ++i)
566 ImagePtr changingImage = streams[i]->getChangingImage();
567 if(streams[i]->is3D())
568 images.push_back(changingImage);
569 if(include2D && streams[i]->is2D())
570 images.push_back(changingImage);
597 return mGlobal2DZoom;
610 camera->Dolly(zoomFactor);
613 void ViewGroupData::createSliceDefinitionProperty()
615 QStringList slicedefs;
616 for (
int i=0; i<ptCOUNT; ++i)
618 QStringList slicedefaults;
622 "Select slice planes to view in 3D",
630 QStringList val = mSliceDefinitionProperty->getValue();
636 QStringList val_list = val.
toString().split(
"/");
637 mSliceDefinitionProperty->setValue(val_list);
642 return mSliceDefinitionProperty;
649 for (
unsigned i = 0; i < mData.size(); ++i)
653 mData[i].second.addXml(elem);
671 for (
unsigned i=0; i<dataElems.size(); ++i)
673 QDomElement elem = dataElems[i];
674 QString uid = elem.text();
701 if (mode == rsPATIENT_REGISTRATED)
int getPriority(DataPtr data)
static DataViewProperties createSlice3D()
ptCORONAL
a slice seen from the front of the patient
void reportError(QString msg)
void initializeGlobal2DZoom(SyncedValuePtr val)
QString mCameraNotBehindROI
CameraDataPtr getCamera3D()
bool mCameraLockToTooltip
void addXml(QDomNode &dataNode)
static DataViewProperties createDefault()
void dataAddedOrRemoved()
boost::shared_ptr< class CameraData > CameraDataPtr
PlaneTypeCollection getSliceDefinitions()
std::string toString(T const &value)
converts any type to a string
boost::shared_ptr< DataMetric > DataMetricPtr
void parseXml(QDomNode dataNode)
std::vector< QDomElement > getDuplicateElements(QString name)
boost::shared_ptr< class Image > ImagePtr
std::vector< ImagePtr > getImagesAndChangingImagesFromTrackedStreams(DataViewProperties properties, bool include2D=false) const
CAMERA_STYLE_TYPE getStyle()
SyncedValuePtr getGroup2DZoom()
void parseXml(QDomNode dataNode)
SyncedValuePtr getGlobal2DZoom()
DataViewProperties getProperties(QString uid)
ptAXIAL
a slice seen from the top of the patient
ViewGroupData(CoreServicesPtr services, QString uid)
void setProperties(QString uid, DataViewProperties properties)
static DataViewProperties createSlice2D()
static StringListPropertyPtr initialize(const QString &uid, QString name, QString help, QStringList value, QStringList range, QDomNode root=QDomNode())
void addObjectToElement(QString name, T object)
CameraStyleData mCameraStyle
static DataViewProperties create3D()
boost::shared_ptr< class Data > DataPtr
std::vector< MeshPtr > getMeshes(DataViewProperties properties) const
ptSAGITTAL
a slice seen from the side of the patient
static PlaneTypeCollection fromString(QString input, PlaneTypeCollection defVal=PlaneTypeCollection())
void setCameraStyle(CAMERA_STYLE_TYPE style)
void addData(QString uid)
void addDataSorted(QString uid)
add data in a predefined ordering: CT/MR/SC/US/USA/Mesh/Metrics
std::vector< TrackedStreamPtr > getTracked2DStreams(DataViewProperties properties) const
static SyncedValuePtr create(QVariant val=QVariant())
QDomElement addTextToElement(QString name, QString text)
Options getOptions() const
void addXml(QDomNode &dataNode)
bool containsAnyFlagsIn(DataViewProperties required) const
static DataViewProperties createFull()
std::vector< ImagePtr > getImages(DataViewProperties properties) const
void parseXml(QDomNode dataNode)
std::vector< TrackedStreamPtr > getTrackedStreams(DataViewProperties properties) const
void dataViewPropertiesChanged(QString uid)
double mCameraTooltipOffset
void changed()
emit when the underlying data value is changed: The user interface will be updated.
static DataViewProperties createVolume3D()
void zoomCamera3D(int zoomFactor)
bool dataTypeSort(const DataPtr data1, const DataPtr data2)
bool removeData(QString uid)
boost::shared_ptr< class StringListProperty > StringListPropertyPtr
bool operator==(const RegistrationTransform &lhs, const RegistrationTransform &rhs)
QString parseTextFromElement(QString name)
bool similar(const CameraInfo &lhs, const CameraInfo &rhs, double tol)
void setVideoSource(QString uid)
boost::shared_ptr< class CoreServices > CoreServicesPtr
DataViewProperties removeFlagsIn(DataViewProperties rhs) const
void parseObjectFromElement(QString name, T object)
DataViewProperties addFlagsIn(DataViewProperties rhs) const
void videoSourceChanged(QString uid)
boost::shared_ptr< class SyncedValue > SyncedValuePtr
void setRegistrationMode(REGISTRATION_STATUS mode)
StringListPropertyPtr getSliceDefinitionProperty()
void addXml(QDomNode &dataNode)
std::vector< DataPtr > getData(DataViewProperties properties=DataViewProperties::createFull()) const
Base class for all Data Metrics.
void setSliceDefinitions(PlaneTypeCollection val)
bool mShowPointPickerProbe
QString enum2string(const ENUM &val)
QString getVideoSource() const
void setOptions(Options options)
vtkSmartPointer< class vtkCamera > vtkCameraPtr
Namespace for all CustusX production code.