Example #1
0
        static bool GetSeriesList(RBSeriesQuery query, out List <RBSeries> seriesList)
        {
            seriesList = new List <RBSeries>();

            int cnt;
            int ret;
            var errmsg = new StringBuilder(IRCOM_MAX_MESSAGE_LENGTH);

            var ptr = RsGetSeriesList(AppUtil.rsAddr, AppUtil.rsPort, ref query, out cnt, out ret, errmsg);

            if (ptr == null || ret != 0)
            {
                LogUtil.Error2("RsGetSeriesList[{0}] {1}", ret, errmsg);
                return(false);
            }

            try
            {
                for (int i = 0; i < cnt; i++)
                {
                    var series = (RBSeries)Marshal.PtrToStructure(ptr + Marshal.SizeOf(typeof(RBSeries)) * i, typeof(RBSeries));
                    if (series.no_im == 0)
                    {
                        continue;
                    }

                    if (series.DBStatus == RB_STATUS_DBLOCK)
                    {
                        LogUtil.Warn1("RB_STATUS_DBLOCK: {0}", series.SeriesUID);
                        continue;
                    }

                    seriesList.Add(series);
                }
                return(true);
            }
            finally
            {
                RsFree(ptr);
            }
        }
Example #2
0
        //シリーズ一覧の取得
        public static void GetSeriesList(StudyKey key, out List <SeriesTag> tags)
        {
            tags = new List <SeriesTag>();

            var seriesQuery = new RBSeriesQuery();

            seriesQuery.is_filter_on = 1;
            seriesQuery.location     = Int32.Parse(key.StorageID);
            seriesQuery.StudyUID     = key.StudyInstanceUID;

            List <RBSeries> seriesList;

            if (!GetSeriesList(seriesQuery, out seriesList))
            {
                return;
            }

            //ソート
            seriesList.Sort((x, y) =>
            {
                int c = x.SeriesNo.CompareTo(y.SeriesNo);
                if (c == 0)
                {
                    return(x.SeriesUID.CompareTo(y.SeriesUID));
                }
                else
                {
                    return(c);
                }
            });

            foreach (var series in seriesList)
            {
                var imageQuery = new RBObjectQuery();
                imageQuery.is_filter_on = 1;
                imageQuery.location     = Int32.Parse(key.StorageID);
                imageQuery.StudyUID     = key.StudyInstanceUID;
                imageQuery.SeriesUID    = series.SeriesUID;

                List <RBImage> imageList;
                if (!GetImageList(imageQuery, out imageList))
                {
                    continue;
                }

                //ソート
                imageList.Sort((x, y) =>
                {
                    int c = x.ImageNo.CompareTo(y.ImageNo);
                    if (c == 0)
                    {
                        return(x.InstUID.CompareTo(y.InstUID));
                    }
                    else
                    {
                        return(c);
                    }
                });

                int nof = 0;
                foreach (var image in imageList)
                {
                    nof += image.NoOfFrames;
                }

                if (nof == 0)
                {
                    var sekey = new SeriesKey()
                    {
                        StudyInstanceUID  = key.StudyInstanceUID,
                        SeriesInstanceUID = series.SeriesUID,
                        SOPInstanceUID    = null,
                        StorageID         = key.StorageID,
                        IsImage           = false
                    };

                    var tag = new SeriesTag();
                    tag.SeriesKey         = ConvertUtil.Serialize(sekey); //new RsSeriesKey(key, series.SeriesUID, series.Modality, series.SeriesDesc, series.SeriesNo);
                    tag.SeriesNumber      = series.SeriesNo;
                    tag.Modality          = series.Modality;
                    tag.SeriesDescription = series.SeriesDesc;
                    tag.NumberOfImages    = series.no_im;
                    tag.NumberOfFrames    = nof;

                    tags.Add(tag);
                }
                else
                {
                    //イメージ
                    foreach (var image in imageList)
                    {
                        var sekey = new SeriesKey()
                        {
                            StudyInstanceUID  = key.StudyInstanceUID,
                            SeriesInstanceUID = series.SeriesUID,
                            SOPInstanceUID    = image.InstUID,
                            StorageID         = key.StorageID,
                            IsImage           = true
                        };

                        var tag = new SeriesTag();
                        tag.SeriesKey         = ConvertUtil.Serialize(sekey); //new RsSeriesKey(key, series.SeriesUID, image.InstUID, image.NoOfFrames);
                        tag.SeriesNumber      = series.SeriesNo;
                        tag.Modality          = series.Modality;
                        tag.SeriesDescription = series.SeriesDesc;
                        tag.NumberOfImages    = 1;
                        tag.NumberOfFrames    = image.NoOfFrames;

                        tags.Add(tag);
                    }
                }
            }
        }
Example #3
0
 static extern IntPtr RsGetSeriesList(byte[] addr, ushort port_no, ref RBSeriesQuery query_data, out int no_of_series, out int ret_code, StringBuilder message);