feat: add default layout open function from PACS

This commit is contained in:
kradchen
2025-06-30 13:21:39 +08:00
parent 474c6b8d9e
commit 0ebbcb1008
5 changed files with 75 additions and 2 deletions

View File

@@ -141,6 +141,12 @@ enum SeriesOpenMode {
DIR_OPEN_MODE
};
enum SeriesType {
UNKNOWN_SIDE,
LEFT_SIDE,
RIGHT_SIDE
};
//typedef std::shared_ptr<DicomTagInfo_t> DicomTagInfo_t*;
//typedef std::shared_ptr<UniqueIDInfo_t> UniqueIDInfo_t*;

View File

@@ -368,6 +368,17 @@ void ImageViewManager::viewReload(const std::string &unique_info) {
reloadCurrentView(currentView);
}
void ImageViewManager::viewReloadWithID(int aID, const std::string &unique_info)
{
if (!getView(aID)) return;
auto selectView = getView(aID);
selectView->unloadFusion();
ImageSetStore *helper = ImageSetStore::GetInstance();
selectView->loadSeries(helper->getSeriesImageSet(unique_info));
selectView->render();
reloadCurrentView(selectView);
}
void ImageViewManager::viewCleared(DicomImageView* view) {
smartDo([](auto v, auto callData) {
auto src = (DicomImageView*)callData;

View File

@@ -73,6 +73,9 @@ public:
void viewReload(const std::string &unique_info);
void viewReloadWithID(int aID, const std::string &unique_info);
void viewCleared(DicomImageView* view);
void clearCurrentView();

View File

@@ -295,7 +295,7 @@ void QDicomViewer::Slot_ToolbarVisibilityChanged(bool visible) {
void QDicomViewer::openDICOMFromPACS(int err, std::string dirName) {
if (err == NOERROR) {
openDICOM(dirName, DIR_OPEN_MODE);
openDICOMWithLayout(dirName, LEFT_SIDE);
} else {
//pop out msg box
QMessageBox::warning(this, tr("Warning"), tr("open DICOM Images From PACS Fail"));
@@ -338,4 +338,54 @@ void QDicomViewer::openDICOM(const std::string &dicomName, SeriesOpenMode openMo
ui->thumbnailBar->updateThumbnailBar();
}
void QDicomViewer::openDICOMWithLayout(const std::string &dicomName, SeriesType aSeriesType)
{
displayThumbnailBar(true);
ui->viewContainer->viewLayoutChanged(2,2);
//reset store
ImageSetStore *helper = ImageSetStore::GetInstance();
helper->reset();
int count = 0;
std::vector<ExtendMedicalImageProperties*> vector;
DicomLoader::readPropertiesFromDir(dicomName, vector, count);
QString selectSide = "L";
if (aSeriesType == UNKNOWN_SIDE)
{
bool canload = false;
for (int i = 0; i < count; ++i) {
QString des = vector[i]->GetSeriesDescription();
if (des.count() < 6) continue;
//default use Left side
if (des.left(4).toUpper() == "REFL" && des.right(1) == "L")
canload = true;
}
if (!canload) selectSide = "R";
}
else{
selectSide = aSeriesType == LEFT_SIDE ? "L" : "R";
}
for (int i = 0; i < count; ++i)
{
helper->addImageSet(vector[i]);
QString des = vector[i]->GetSeriesDescription();
if (des.count() < 6)
continue;
if (des.left(4).toUpper() == "REFL" && des.right(1) == selectSide)
{
ui->viewContainer->getViewManager()->viewReloadWithID(0, vector[i]->GetUniqueID());
ui->viewContainer->getViewManager()->getView(0)->setReconPlane(0);
ui->viewContainer->getViewManager()->viewReloadWithID(1, vector[i]->GetUniqueID());
ui->viewContainer->getViewManager()->getView(1)->setReconPlane(1);
ui->viewContainer->getViewManager()->viewReloadWithID(2, vector[i]->GetUniqueID());
ui->viewContainer->getViewManager()->getView(02)->setReconPlane(2);
}
if (des.left(7).toUpper() == "CORONAL" && des.right(1) == selectSide)
{
ui->viewContainer->getViewManager()->viewReloadWithID(3, vector[i]->GetUniqueID());
}
}
ui->thumbnailBar->updateThumbnailBar();
}

View File

@@ -70,6 +70,9 @@ private:
*/
void openDICOM(const std::string &dicomName, SeriesOpenMode openMode);
void openDICOMWithLayout(const std::string &dicomName, SeriesType aSeriesType = UNKNOWN_SIDE);
/**
* 设置部分空间的槽函数连接
*/