Example #1
0
 public AsynchronousPriorStudyLoader(IImageViewer imageViewer, IPriorStudyFinder priorStudyFinder)
 {
     _imageViewer        = imageViewer;
     _singleStudyLoaders = new List <SingleStudyLoader>();
     _priorStudyFinder   = priorStudyFinder ?? PriorStudyFinder.Null;
     _priorStudyFinder.SetImageViewer(_imageViewer);
 }
        // Forces re-draw of displayed images if they have AIMGraphic
        private static void UpdateDisplayedImages(string loginName)
        {
            foreach (DesktopWindow desktopWindow in Application.DesktopWindows)
            {
                foreach (Workspace workspace in desktopWindow.Workspaces)
                {
                    IImageViewer imageViewer = ImageViewerComponent.GetAsImageViewer(workspace);

                    if (imageViewer != null)
                    {
                        foreach (ImageBox imageBox in imageViewer.PhysicalWorkspace.ImageBoxes)
                        {
                            foreach (Tile tile in imageBox.Tiles)
                            {
                                IOverlayGraphicsProvider graphicsProvider = tile.PresentationImage as IOverlayGraphicsProvider;
                                if (graphicsProvider != null)
                                {
                                    foreach (IGraphic graphic in graphicsProvider.OverlayGraphics)
                                    {
                                        AimGraphic aimGraphic = graphic as AimGraphic;
                                        if (aimGraphic != null &&
                                            (string.IsNullOrEmpty(loginName) || string.Equals(loginName, aimGraphic.UserLoginName, StringComparison.InvariantCultureIgnoreCase)))
                                        {
                                            tile.PresentationImage.Draw();
                                            break;
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
Example #3
0
        internal static void OnViewerClosed(IImageViewer viewer)
        {
            KeyImageInformation info = GetKeyImageInformation(viewer);

            KeyImageInformation.Remove(viewer);

            if (info != null)
            {
                using (info)
                {
                    try
                    {
                        var publisher = new KeyImagePublisher(info);
                        publisher.Publish();
                    }
                    catch (Exception e)
                    {
                        //Should never happen because KeyImagePublisher.Publish doesn't throw exceptions.
                        ExceptionHandler.Report(e, Application.ActiveDesktopWindow);
                    }
                }
            }

            ManageActivityMonitorConnection();
        }
        public ViewerFrameEnumerator(IImageViewer viewer, int selectedWeight, int unselectedWeight, int imageWindow, Predicate <Frame> canFetchFrame)
        {
            _viewer           = viewer;
            _selectedWeight   = selectedWeight;
            _unselectedWeight = unselectedWeight;
            _imageWindow      = imageWindow;

            _framesToProcess = new Queue <Frame>();
            _canFetchFrame   = canFetchFrame;

            _viewer.PhysicalWorkspace.ImageBoxes.ItemAdded    += OnImageBoxAdded;
            _viewer.PhysicalWorkspace.ImageBoxes.ItemRemoved  += OnImageBoxRemoved;
            _viewer.PhysicalWorkspace.ImageBoxes.ItemChanging += OnImageBoxChanging;
            _viewer.PhysicalWorkspace.ImageBoxes.ItemChanged  += OnImageBoxChanged;

            _viewer.EventBroker.ImageBoxSelected  += OnImageBoxSelected;
            _viewer.EventBroker.DisplaySetChanged += OnDisplaySetChanged;

            _imageBoxStrategies = new Dictionary <IImageBox, ImageBoxFrameSelectionStrategy>();

            foreach (IImageBox imageBox in _viewer.PhysicalWorkspace.ImageBoxes)
            {
                _imageBoxStrategies[imageBox] = new ImageBoxFrameSelectionStrategy(imageBox, _imageWindow, _canFetchFrame, OnImageBoxDataChanged);
            }

            _selectedImageBox = _viewer.SelectedImageBox;
        }
Example #5
0
        public GetViewerInfoResult GetViewerInfo(GetViewerInfoRequest request)
        {
            if (request == null)
            {
                string message = "The get viewer info request cannot be null.";
                Platform.Log(LogLevel.Debug, message);
                throw new FaultException(message);
            }

            if (request.Viewer == null || request.Viewer.Identifier.Equals(Guid.Empty))
            {
                string message = "A valid viewer id must be specified.";
                Platform.Log(LogLevel.Debug, message);
                throw new FaultException(message);
            }

            IImageViewer viewer = ViewerAutomationTool.GetViewer(request.Viewer.Identifier);

            if (viewer == null)
            {
                string message = String.Format("The specified viewer ({0}) was not found, " +
                                               "likely because it has already been closed by the user.", request.Viewer.Identifier);
                Platform.Log(LogLevel.Debug, message);

                throw new FaultException <ViewerNotFoundFault>(new ViewerNotFoundFault(message), _viewerNotFoundReason);
            }

            GetViewerInfoResult result = new GetViewerInfoResult();

            result.AdditionalStudyInstanceUids = GetAdditionalStudyInstanceUids(viewer);
            return(result);
        }
        /// <summary>
        /// Loads tag data for the study in the specified workspace.
        /// </summary>
        /// <param name="workspace"></param>
        private void LoadData(Workspace workspace)
        {
            IImageViewer viewer = workspace == null ? null : ImageViewerComponent.GetAsImageViewer(workspace);

            if (viewer != null)
            {
                // for simplicity, assume only one patient and study in the workspace
                Patient patient = CollectionUtils.FirstElement(viewer.StudyTree.Patients.Values);
                _activeStudy = CollectionUtils.FirstElement(patient.Studies.Values);

                // load the tags for the active study, remembering the original value so we know if any changes are made
                _originalTags = _tags = MakeTagsString(_database.GetTagsForStudy(_activeStudy.StudyInstanceUID));

                if (!_searchEnabled)
                {
                    FindSimilar();
                }
            }
            else
            {
                Clear();
            }

            NotifyPropertyChanged("Tags");
            NotifyPropertyChanged("UpdateEnabled");
        }
        private void SetImageViewer(Workspace workspace)
        {
            IImageViewer viewer = CastToImageViewer(workspace);

            if (viewer != _viewer)
            {
                if (_viewer != null)
                {
                    _viewer.EventBroker.PresentationImageSelected -= OnPresentationImageSelected;
                    _viewer.EventBroker.TileSelected -= OnTileSelected;
                }

                _viewer = viewer;
                if (_viewer != null)
                {
                    _viewer.EventBroker.PresentationImageSelected += OnPresentationImageSelected;
                    _viewer.EventBroker.TileSelected += OnTileSelected;

                    UpdateImageProperties(viewer.SelectedPresentationImage);
                }
                else
                {
                    UpdateImageProperties(null);
                }
            }
        }
Example #8
0
        private void SetActiveViewer(IImageViewer viewer)
        {
            if (_activeViewer != null)
            {
                _activeViewer.EventBroker.ImageBoxSelected   -= OnImageBoxSelected;
                _activeViewer.EventBroker.DisplaySetSelected -= OnDisplaySetSelected;
            }

            _activeViewer = viewer;

            IDisplaySet displaySet = null;

            if (_activeViewer != null)
            {
                _activeViewer.EventBroker.ImageBoxSelected   += OnImageBoxSelected;
                _activeViewer.EventBroker.DisplaySetSelected += OnDisplaySetSelected;

                if (_activeViewer.SelectedImageBox != null)
                {
                    displaySet = _activeViewer.SelectedImageBox.DisplaySet;
                }
            }

            CurrentDisplaySet = displaySet;
        }
		internal ActiveImageViewerChangedEventArgs(
			IImageViewer activatedImageViewer,
			IImageViewer deactivatedImageViewer)
		{
			_activatedImageViewer = activatedImageViewer;
			_deactivatedImageViewer = deactivatedImageViewer;
		}
Example #10
0
        private void SetImageViewer(Workspace workspace)
        {
            var viewer = CastToImageViewer(workspace);

            if (viewer == _activeViewer)
            {
                return;
            }

            if (_activeViewer != null)
            {
                _activeViewer.EventBroker.ImageBoxSelected        -= OnImageBoxSelected;
                _activeViewer.EventBroker.GraphicSelectionChanged -= OnGraphicSelectionChanged;
                _activeViewer.EventBroker.TileSelected            -= OnTileSelected;
            }

            _activeViewer = viewer;

            if (_activeViewer != null)
            {
                _activeViewer.EventBroker.ImageBoxSelected        += OnImageBoxSelected;
                _activeViewer.EventBroker.GraphicSelectionChanged += OnGraphicSelectionChanged;
                _activeViewer.EventBroker.TileSelected            += OnTileSelected;
            }
            // Update selected graphic
            SetSelectedGraphic(_activeViewer == null || _activeViewer.SelectedPresentationImage == null
                                                                                ? null
                                                                                : _activeViewer.SelectedPresentationImage.SelectedGraphic);

            IsImageViewerActive = _activeViewer != null;
        }
Example #11
0
        public void ApplyLayout(IImageViewer viewer, AppliedWorkspace layout)
        {
            if (layout.DisplaySets.Count != layout.WorkspaceLayout.Rows * layout.WorkspaceLayout.Columns)
            {
                throw new ArgumentException(string.Format(SR.MessageAmountOfImageBoxesMismatch, layout.DisplaySets.Count, layout.WorkspaceLayout.Rows, layout.WorkspaceLayout.Columns, layout.WorkspaceLayout.Name));
            }
            IPhysicalWorkspace workspace = viewer.PhysicalWorkspace;

            workspace.SetImageBoxGrid(layout.WorkspaceLayout.Rows, layout.WorkspaceLayout.Columns);
            var imageBoxIndex = 0;

            foreach (var displaySetLayout in layout.DisplaySets)
            {
                var imageBox = workspace.ImageBoxes[imageBoxIndex];

                imageBox.SetTileGrid(
                    displaySetLayout.Item1.TileRows,
                    displaySetLayout.Item1.TileColumns);
                if (null != displaySetLayout.Item2)
                {
                    imageBox.DisplaySet = displaySetLayout.Item2.CreateFreshCopy();
                }
                else
                {
                    imageBox.DisplaySet = null;
                }
                imageBoxIndex++;
            }
        }
Example #12
0
        private void SetImageViewer(Workspace workspace)
        {
            var viewer = CastToImageViewer(workspace);

            if (viewer == _activeViewer)
            {
                return;
            }

            if (_activeViewer != null)
            {
                _activeViewer.EventBroker.ImageBoxSelected          -= OnImageBoxSelected;
                _activeViewer.EventBroker.TileSelected              -= OnTileSelected;
                _activeViewer.EventBroker.GraphicSelectionChanged   -= OnGraphicSelectionChanged;
                _activeViewer.EventBroker.PresentationImageSelected -= OnPresentationImageSelected;
            }

            _activeViewer = viewer;

            if (_activeViewer != null)
            {
                _activeViewer.EventBroker.ImageBoxSelected          += OnImageBoxSelected;
                _activeViewer.EventBroker.TileSelected              += OnTileSelected;
                _activeViewer.EventBroker.GraphicSelectionChanged   += OnGraphicSelectionChanged;
                _activeViewer.EventBroker.PresentationImageSelected += OnPresentationImageSelected;
            }

            SetInitialSelections();
        }
Example #13
0
        internal static void OnViewerClosed(IImageViewer viewer)
        {
            var info = GetKeyImageClipboard(viewer);

            KeyImageClipboards.Remove(viewer);

            if (info != null)
            {
                try
                {
                    info.Publish();
                }
                catch (Exception e)
                {
                    //Should never happen because KeyImagePublisher.Publish doesn't throw exceptions.
                    ExceptionHandler.Report(e, Application.ActiveDesktopWindow);
                }
                finally
                {
                    info.Dispose();
                }
            }

            ManageActivityMonitorConnection();
        }
 internal ActiveImageViewerChangedEventArgs(
     IImageViewer activatedImageViewer,
     IImageViewer deactivatedImageViewer)
 {
     _activatedImageViewer   = activatedImageViewer;
     _deactivatedImageViewer = deactivatedImageViewer;
 }
        // Returns currently displayed annotations' colors and associated user names
        private static Dictionary <string, Color> GetDisplayedUsersAndMarkupColors()
        {
            Dictionary <string, Color> displayedUserColors = new Dictionary <string, Color>();

            IImageViewer imageViewer = ImageViewerComponent.GetAsImageViewer(Application.ActiveDesktopWindow.ActiveWorkspace);

            if (imageViewer != null)
            {
                foreach (ImageBox imageBox in imageViewer.PhysicalWorkspace.ImageBoxes)
                {
                    foreach (Tile tile in imageBox.Tiles)
                    {
                        IOverlayGraphicsProvider graphicsProvider = tile.PresentationImage as IOverlayGraphicsProvider;
                        if (graphicsProvider != null)
                        {
                            foreach (IGraphic graphic in graphicsProvider.OverlayGraphics)
                            {
                                AimGraphic aimGraphic = graphic as AimGraphic;
                                if (aimGraphic != null)                                // && String.Equals(loginName, aimGraphic.UserLoginName, StringComparison.InvariantCultureIgnoreCase))
                                {
                                    if (!displayedUserColors.ContainsKey(aimGraphic.UserLoginName))
                                    {
                                        displayedUserColors[aimGraphic.UserLoginName] = aimGraphic.Color;
                                    }
                                }
                            }
                        }
                    }
                }
            }
            return(displayedUserColors);
        }
        public static bool StartAimAnnotationTool(IImageViewer currentImageViewer)
        {
            if (currentImageViewer == null)
            {
                return(false);
            }

            var        actionPath = new ActionPath(BUTTON_ACTION_PATH, new ResourceResolver(typeof(AimAnnotationTool), true));
            IActionSet actionSet  = currentImageViewer.ExportedActions.Select(action => action.Path.LocalizedPath == actionPath.LocalizedPath);

            if (actionSet != null)
            {
                foreach (IAction action in actionSet)
                {
                    ClickAction clickAction = action as ClickAction;
                    if (clickAction != null)
                    {
                        clickAction.Click();
                        return(true);
                    }
                }
            }

            return(false);
        }
        public static void SetTileLayout(IImageViewer imageViewer, int rows, int columns)
        {
            Platform.CheckForNullReference(imageViewer, "imageViewer");
            Platform.CheckArgumentRange(rows, 1, LayoutSettings.MaximumTileRows, "rows");
            Platform.CheckArgumentRange(columns, 1, LayoutSettings.MaximumTileColumns, "columns");

            IImageBox imageBox = imageViewer.PhysicalWorkspace.SelectedImageBox;

            if (imageBox == null || imageBox.ParentPhysicalWorkspace.Locked)
            {
                return;
            }

            var memorableCommand = new MemorableUndoableCommand(imageBox)
            {
                BeginState = imageBox.CreateMemento()
            };

            int index = imageBox.TopLeftPresentationImageIndex;

            imageBox.SetTileGrid(rows, columns);
            imageBox.TopLeftPresentationImageIndex = index;
            imageBox.Draw();
            imageBox.SelectDefaultTile();

            memorableCommand.EndState = imageBox.CreateMemento();

            var historyCommand = new DrawableUndoableCommand(imageBox)
            {
                Name = SR.CommandLayoutTiles
            };

            historyCommand.Enqueue(memorableCommand);
            imageViewer.CommandHistory.AddCommand(historyCommand);
        }
		internal PhysicalWorkspace(IImageViewer imageViewer)
		{
			Platform.CheckForNullReference(imageViewer, "imageViewer");

            _imageViewer = imageViewer;
			this.ImageBoxes.ItemAdded += OnImageBoxAdded;
			this.ImageBoxes.ItemRemoved += OnImageBoxRemoved;
		}
Example #19
0
        internal PhysicalWorkspace(IImageViewer imageViewer)
        {
            Platform.CheckForNullReference(imageViewer, "imageViewer");

            _imageViewer = imageViewer;
            this.ImageBoxes.ItemAdded   += OnImageBoxAdded;
            this.ImageBoxes.ItemRemoved += OnImageBoxRemoved;
        }
Example #20
0
 public void Init(IImageViewer imageViewer)
 {
     this.imageViewer = imageViewer;
     model            = new Model();
     imageViewer.PossibleFileFormatList = model.PossibleFileFormatList;
     AttachImageViewer();
     AttchModel();
 }
        internal static IEnumerable <ISegGraphic> GetAllSegmentationGraphicsFromSeg(IImageViewer imageViewer, Seg seg)
        {
            var graphics = new List <ISegGraphic>();

            graphics.AddRange(seg.SegGraphics);
            graphics.AddRange(GetSegmentationImageGraphicsFromSeg(imageViewer, seg));
            return(graphics);
        }
 void IPrefetchingStrategy.Stop()
 {
     if (_imageViewer != null)
     {
         Stop();
         _imageViewer = null;
     }
 }
Example #23
0
        public OpenStudiesResult OpenStudies(OpenStudiesRequest request)
        {
            if (request == null)
            {
                string message = "The open studies request cannot be null.";
                Platform.Log(LogLevel.Debug, message);
                throw new FaultException(message);
            }

            if (request.StudiesToOpen == null || request.StudiesToOpen.Count == 0)
            {
                string message = "At least one study must be specified.";
                Platform.Log(LogLevel.Debug, message);
                throw new FaultException(message);
            }

            OpenStudiesResult result = new OpenStudiesResult();
            bool activateIfOpen      = request.ActivateIfAlreadyOpen ?? true;

            try
            {
                string       primaryStudyInstanceUid = request.StudiesToOpen[0].StudyInstanceUid;
                IImageViewer viewer = null;
                if (activateIfOpen)
                {
                    Workspace workspace = GetViewerWorkspace(primaryStudyInstanceUid);
                    if (workspace != null)
                    {
                        viewer = ImageViewerComponent.GetAsImageViewer(workspace);
                        workspace.Activate();
                    }
                }

                if (viewer == null)
                {
                    viewer = LaunchViewer(request, primaryStudyInstanceUid);
                }

                Guid?viewerId = ViewerAutomationTool.GetViewerId(viewer);
                if (viewerId == null)
                {
                    throw new FaultException("Failed to retrieve the id of the specified viewer.");
                }

                result.Viewer = new Viewer(viewerId.Value, GetPrimaryStudyIdentifier(viewer));
                return(result);
            }
            catch (FaultException)
            {
                throw;
            }
            catch (Exception e)
            {
                string message = "An unexpected error has occurred while attempting to open the study(s).";
                Platform.Log(LogLevel.Error, e, message);
                throw new FaultException(message);
            }
        }
        internal override void SetImageViewer(IImageViewer imageViewer)
        {
            base.SetImageViewer(imageViewer);

            foreach (Graphic3D graphic in _graphicCollection3D)
            {
                graphic.SetImageViewer(imageViewer);
            }
        }
Example #25
0
        internal static void OnViewerOpened(IImageViewer viewer)
        {
            if (!KeyImageInformation.ContainsKey(viewer))
            {
                KeyImageInformation[viewer] = new KeyImageInformation();
            }

            ManageActivityMonitorConnection();
        }
Example #26
0
 /// <summary>
 /// Implementation of <see cref="IDisposable"/>.
 /// </summary>
 protected virtual void Dispose(bool disposing)
 {
     if (disposing && _imageViewer != null)
     {
         _imageViewer.EventBroker.StudyLoaded     -= OnPriorStudyLoaded;
         _imageViewer.EventBroker.StudyLoadFailed -= OnPriorStudyLoadFailed;
         _imageViewer = null;
     }
 }
Example #27
0
        internal static bool IsExploded(IImageViewer viewer)
        {
            if (Tools.ContainsKey(viewer))
            {
                return(Tools[viewer].Checked);
            }

            return(false);
        }
Example #28
0
        /// <summary>
        /// Performs given operation on the images in the given Image Viewer
        /// </summary>
        /// <param name="imageViewer">reference to <code>IImageViewer</code> that the operation has to be performed on</param>
        /// <param name="stopOnFirstMatch">when <code>true</code>, will return after the first successful predicate operation.</param>
        /// <param name="predicate">Operation to execute on each <code>IPresentationImage</code></param>
        /// <param name="displayedImagesOnly">when<code>true</code>, will only operated on visible <code>DisplaySet</code>s</param>
        /// <returns><code>true</code> if at least one of predicate run succeeded and <code>false</code> - if all failed</returns>
        public static bool ImageViewerImageOperation(IImageViewer imageViewer, bool stopOnFirstMatch, Func <IPresentationImage, bool> predicate, bool displayedImagesOnly)
        {
            if (imageViewer == null)
            {
                throw new ArgumentNullException("imageViewer");
            }

            if (predicate == null)
            {
                throw new ArgumentNullException("predicate");
            }

            bool predicateWorked = false;

            // Go through displayed images first
            foreach (IImageBox imageBox in imageViewer.PhysicalWorkspace.ImageBoxes)
            {
                if (imageBox.DisplaySet == null || imageBox.DisplaySet.PresentationImages == null || imageBox.DisplaySet.PresentationImages.Count == 0)
                {
                    continue;
                }

                foreach (var presentationImage in imageBox.DisplaySet.PresentationImages)
                {
                    predicateWorked |= predicate(presentationImage);
                    if (predicateWorked && stopOnFirstMatch)
                    {
                        return(true);
                    }
                }
            }

            if (!displayedImagesOnly)
            {
                // Go through other available images
                foreach (IImageSet imageSet in imageViewer.LogicalWorkspace.ImageSets)
                {
                    foreach (IDisplaySet displaySet in imageSet.DisplaySets)
                    {
                        if (displaySet.PresentationImages.Count == 0)
                        {
                            continue;
                        }

                        foreach (var presentationImage in displaySet.PresentationImages)
                        {
                            predicateWorked |= predicate(presentationImage);
                            if (predicateWorked && stopOnFirstMatch)
                            {
                                return(true);
                            }
                        }
                    }
                }
            }
            return(predicateWorked);
        }
Example #29
0
        internal override void SetImageViewer(IImageViewer imageViewer)
        {
            base.SetImageViewer(imageViewer);

            foreach (Graphic graphic in this.Graphics)
            {
                graphic.SetImageViewer(imageViewer);
            }
        }
Example #30
0
        internal static void OnViewerOpened(IImageViewer viewer)
        {
            if (!KeyImageClipboards.ContainsKey(viewer))
            {
                KeyImageClipboards[viewer] = new KeyImageClipboard(viewer.StudyTree);
            }

            ManageActivityMonitorConnection();
        }
Example #31
0
        private SingleStudyLoader(SynchronizationContext uiThreadContext, IImageViewer viewer)
        {
            Platform.CheckForNullReference(uiThreadContext, "uiThreadContext");

            IsValidPrior     = false;
            _uiThreadContext = uiThreadContext;
            _viewer          = viewer;
            LoadOnlineOnly   = false;
        }
 public IPresentationImage GetSelectedPI()
 {
     IPresentationImage selectedPresentationImage = null;
     if (this._window.ActiveWorkspace.Component is IImageViewer)
     {
         IImageViewer component = (IImageViewer)this._window.ActiveWorkspace.Component;
         selectedPresentationImage = component.SelectedPresentationImage;
     }
     return selectedPresentationImage;
 }
		public static void Create(IDesktopWindow desktopWindow, IImageViewer viewer)
		{
			IDisplaySet selectedDisplaySet = viewer.SelectedImageBox.DisplaySet;
			string name = String.Format("{0} - Dynamic TE", selectedDisplaySet.Name);
			IDisplaySet t2DisplaySet = new DisplaySet(name, "");

			double currentSliceLocation = 0.0;

			BackgroundTask task = new BackgroundTask(
				delegate(IBackgroundTaskContext context)
				{
					int i = 0;

					foreach (IPresentationImage image in selectedDisplaySet.PresentationImages)
					{
						IImageSopProvider imageSopProvider = image as IImageSopProvider;

						if (imageSopProvider == null)
							continue;

						ImageSop imageSop = imageSopProvider.ImageSop;
						Frame frame = imageSopProvider.Frame;

						if (frame.SliceLocation != currentSliceLocation)
						{
							currentSliceLocation = frame.SliceLocation;

							try
							{
								DynamicTePresentationImage t2Image = CreateT2Image(imageSop, frame);
								t2DisplaySet.PresentationImages.Add(t2Image);
							}
							catch (Exception e)
							{
								Platform.Log(LogLevel.Error, e);
								desktopWindow.ShowMessageBox("Unable to create T2 series.  Please check the log for details.",
								                             MessageBoxActions.Ok);
								break;
							}

						}

						string message = String.Format("Processing {0} of {1} images", i, selectedDisplaySet.PresentationImages.Count);
						i++;

						BackgroundTaskProgress progress = new BackgroundTaskProgress(i, selectedDisplaySet.PresentationImages.Count, message);
						context.ReportProgress(progress);
					}
				}, false);

			ProgressDialog.Show(task, desktopWindow, true, ProgressBarStyle.Blocks);

			viewer.LogicalWorkspace.ImageSets[0].DisplaySets.Add(t2DisplaySet);
		}
Example #34
0
		void IPrefetchingStrategy.Start(IImageViewer imageViewer)
		{
			Platform.CheckForNullReference(imageViewer, "imageViewer");

			//Only start if we haven't already been started.
			if (_imageViewer == null)
			{
				_imageViewer = imageViewer;
				Start();
			}
		}
Example #35
0
		public override void Initialize()
		{
			base.Initialize();

			this.Context.DesktopWindow.Workspaces.ItemActivationChanged += OnWorkspaceActivationChanged;

			_viewer = base.ImageViewer;
			lock(_syncLock)
			{
				_tools.Add(this);
			}
		}
Example #36
0
		private void CreateObjects()
		{
			_viewer = new ImageViewerComponent();
			_imageBox = new ImageBox();
			_tile1 = new Tile();
			_tile2 = new Tile();

			_imageSet = new ImageSet();
			_displaySet = new DisplaySet();
			_image1 = new TestPresentationImage();
			_image2 = new TestPresentationImage();
		}
        /// <summary>
        /// Performs given operation on the images in the given Image Viewer
        /// </summary>
        /// <param name="imageViewer">reference to <code>IImageViewer</code> that the operation has to be performed on</param>
        /// <param name="stopOnFirstMatch">when <code>true</code>, will return after the first successful predicate operation.</param>
        /// <param name="predicate">Operation to execute on each <code>IPresentationImage</code></param>
        /// <param name="displayedImagesOnly">when<code>true</code>, will only operated on visible <code>DisplaySet</code>s</param>
        /// <returns><code>true</code> if at least one of predicate run succeeded and <code>false</code> - if all failed</returns>
        public static bool ImageViewerImageOperation(IImageViewer imageViewer, bool stopOnFirstMatch, Func<IPresentationImage, bool> predicate, bool displayedImagesOnly)
        {
            if (imageViewer == null)
                throw new ArgumentNullException("imageViewer");

            if (predicate == null)
                throw new ArgumentNullException("predicate");

            bool predicateWorked = false;

            // Go through displayed images first
            foreach (IImageBox imageBox in imageViewer.PhysicalWorkspace.ImageBoxes)
            {
                if (imageBox.DisplaySet == null || imageBox.DisplaySet.PresentationImages == null || imageBox.DisplaySet.PresentationImages.Count == 0)
                    continue;

                foreach (var presentationImage in imageBox.DisplaySet.PresentationImages)
                {
                    predicateWorked |= predicate(presentationImage);
                    if (predicateWorked && stopOnFirstMatch)
                        return true;
                }
            }

            if (!displayedImagesOnly)
            {
                // Go through other available images
                foreach (IImageSet imageSet in imageViewer.LogicalWorkspace.ImageSets)
                {
                    foreach (IDisplaySet displaySet in imageSet.DisplaySets)
                    {
                        if (displaySet.PresentationImages.Count == 0)
                            continue;

                        foreach (var presentationImage in displaySet.PresentationImages)
                        {
                            predicateWorked |= predicate(presentationImage);
                            if (predicateWorked && stopOnFirstMatch)
                                return true;
                        }
                    }
                }
            }
            return predicateWorked;
        }
Example #38
0
		public TestTree()
		{
			_viewer = new ImageViewerComponent();

			_imageBox1 = new ImageBox();
			_imageBox2 = new ImageBox();

			_tile1 = new Tile();
			_tile2 = new Tile();
			_tile3 = new Tile();
			_tile4 = new Tile();

			_imageSet1 = new ImageSet();

			_displaySet1 = new DisplaySet();
			_displaySet2 = new DisplaySet();

			_image1 = new TestPresentationImage();
			_image2 = new TestPresentationImage();
			_image3 = new TestPresentationImage();
			_image4 = new TestPresentationImage();

			_viewer.PhysicalWorkspace.ImageBoxes.Add(_imageBox1);
			_viewer.PhysicalWorkspace.ImageBoxes.Add(_imageBox2);

			_imageBox1.Tiles.Add(_tile1);
			_imageBox1.Tiles.Add(_tile2);
			_imageBox2.Tiles.Add(_tile3);
			_imageBox2.Tiles.Add(_tile4);

			_viewer.LogicalWorkspace.ImageSets.Add(_imageSet1);

			_imageSet1.DisplaySets.Add(_displaySet1);
			_imageSet1.DisplaySets.Add(_displaySet2);

			_displaySet1.PresentationImages.Add(_image1);
			_displaySet1.PresentationImages.Add(_image2);
			_displaySet2.PresentationImages.Add(_image3);
			_displaySet2.PresentationImages.Add(_image4);

			_imageBox1.DisplaySet = _displaySet1;
			_imageBox2.DisplaySet = _displaySet2;
		}
        public static bool StartAimAnnotationTool(IImageViewer currentImageViewer)
        {
            if (currentImageViewer == null)
                return false;

            var actionPath = new ActionPath(BUTTON_ACTION_PATH, new ResourceResolver(typeof(AimAnnotationTool), true));
            IActionSet actionSet = currentImageViewer.ExportedActions.Select(action => action.Path.LocalizedPath == actionPath.LocalizedPath);
            if (actionSet != null)
            {
                foreach (IAction action in actionSet)
                {
                    ClickAction clickAction = action as ClickAction;
                    if (clickAction != null)
                    {
                        clickAction.Click();
                        return true;
                    }
                }
            }

            return false;
        }
Example #40
0
		internal static void OnViewerOpened(IImageViewer viewer)
		{
			if (!_keyImageInformation.ContainsKey(viewer))
				_keyImageInformation[viewer] = new KeyImageInformation();

			ManageActivityMonitorConnection();
		}
Example #41
0
		internal static KeyImageInformation GetKeyImageInformation(IImageViewer viewer)
		{
			if (!PermissionsHelper.IsInRole(AuthorityTokens.KeyImages))
				throw new PolicyException(SR.ExceptionViewKeyImagePermissionDenied);

			if (viewer != null)
				return _keyImageInformation[viewer];
			else
				return null;
		}
		internal static bool IsExploded(IImageViewer viewer)
		{
            var proxy = viewer.ExtensionData[typeof(ExtensionDataProxy)] as ExtensionDataProxy;
            return proxy != null && proxy.Tool.Checked;
		}
 public TestToolContext(IImageViewer viewer)
 {
     Viewer = viewer;
 }
		    internal static void AssignDisplaySetToImageBox(IImageViewer viewer, IDisplaySet displaySet)
			{
                AssignDisplaySetToImageBox(viewer.SelectedImageBox, displaySet);
			}
Example #45
0
		private static bool AnySopsLoaded(IImageViewer imageViewer)
		{
			foreach (Patient patient in imageViewer.StudyTree.Patients)
			{
				foreach (Study study in patient.Studies)
				{
					foreach (Series series in study.Series)
					{
						foreach (Sop sop in series.Sops)
						{
							return true;
						}
					}
				}
			}

			return false;
		}
        /// <summary>
        /// Find requested image in the ImageViewer and makes it selected. Will load a series if it's not loaded.
        /// </summary>
        /// <param name="imageViewer">ImageViewer that hosts the requested image</param>
        /// <param name="sopInstanceUid">SOP Instance UID of the image</param>
        /// <param name="frameNumber">image frame number (1 - first image)</param>
        /// <returns>Returns requested image or <code>null</code> if the image is not found.</returns>
        public static IPresentationImage SelectImage(IImageViewer imageViewer, string sopInstanceUid, int frameNumber)
        {
            // Search displayed images first
            foreach (var imageBox in imageViewer.PhysicalWorkspace.ImageBoxes)
            {
                if (imageBox.DisplaySet == null || imageBox.DisplaySet.PresentationImages == null || imageBox.DisplaySet.PresentationImages.Count == 0)
                    continue;

                var presentationImage = imageBox.DisplaySet.PresentationImages.Cast<IImageSopProvider>().FirstOrDefault(
                        pi => pi.ImageSop.SopInstanceUid == sopInstanceUid && pi.Frame.FrameNumber == frameNumber) as IPresentationImage;

                if (presentationImage == null)
                    continue;

                try
                {
                    // Unselect selected in a different image box
                    if (!imageBox.Selected)
                        UnselectCurrentGraphics(imageViewer.PhysicalWorkspace.SelectedImageBox);

                    imageBox.TopLeftPresentationImage = presentationImage;
                    imageBox.Tiles[0].Select();
                    imageBox.Draw();

                    return presentationImage;
                }
                catch (Exception ex)
                {
                    ExceptionHandler.Report(ex, imageViewer.DesktopWindow);
                }
            }

            // Search other available images
            foreach (var imageSet in imageViewer.LogicalWorkspace.ImageSets)
            {

                foreach (var displaySet in imageSet.DisplaySets)
                {
                    var presentationImage = displaySet.PresentationImages.Cast<IImageSopProvider>().FirstOrDefault(
                            pi => pi.ImageSop.SopInstanceUid == sopInstanceUid && pi.Frame.FrameNumber == frameNumber) as IPresentationImage;

                    if (presentationImage == null)
                        continue;
                    try
                    {
                        var targetImageBox = imageViewer.PhysicalWorkspace.SelectedImageBox ??
                                                   (imageViewer.PhysicalWorkspace.ImageBoxes.Count > 0 ? imageViewer.PhysicalWorkspace.ImageBoxes[0] : null);
                        if (targetImageBox == null)
                        {
                            imageViewer.DesktopWindow.ShowMessageBox("Failed to find available display", MessageBoxActions.Ok);
                            Platform.Log(LogLevel.Error, "Failed to locate a target ImageBox to display selected image.");
                            return null;
                        }

                        var targetDisplaySet = displaySet.CreateFreshCopy();
                        var targetPresentationImage = targetDisplaySet.PresentationImages.Cast<IImageSopProvider>().FirstOrDefault(
                            pi => pi.ImageSop.SopInstanceUid == sopInstanceUid && pi.Frame.FrameNumber == frameNumber) as IPresentationImage;
                        if (targetPresentationImage == null)
                        {
                            imageViewer.DesktopWindow.ShowMessageBox("Failed to find required image", MessageBoxActions.Ok);
                            Platform.Log(LogLevel.Error, "Failed to locate a target PresentationImage in a new DisplaySet.");
                            return null;
                        }

                        // Unselect selected in a different image box
                        if (!targetImageBox.Selected)
                            UnselectCurrentGraphics(imageViewer.PhysicalWorkspace.SelectedImageBox);

                        targetImageBox.DisplaySet = targetDisplaySet;
                        targetImageBox.TopLeftPresentationImage = targetPresentationImage;
                        targetImageBox.Tiles[0].Select();
                        targetImageBox.Draw();

                        return targetPresentationImage;
                    }
                    catch (Exception ex)
                    {
                        ExceptionHandler.Report(ex, imageViewer.DesktopWindow);
                    }
                }
            }

            return null;
        }
Example #47
0
		private static List<string> GetAdditionalStudyInstanceUids(IImageViewer viewer)
		{
			List<string> studyInstanceUids = new List<string>();

			foreach (Patient patient in viewer.StudyTree.Patients)
			{
				foreach (Study study in patient.Studies)
				{
					studyInstanceUids.Add(study.StudyInstanceUid);
				}
			}

			if (studyInstanceUids.Count > 0)
				studyInstanceUids.RemoveAt(0);

			return studyInstanceUids;
		}
Example #48
0
		private static StudyRootStudyIdentifier GetPrimaryStudyIdentifier(IImageViewer viewer)
		{
			// TODO CR (Oct 12): Add support for patient reconciliation (after we move that concept into viewer common)
			return viewer.StudyTree.Patients.SelectMany(p => p.Studies).Select(s => new StudyRootStudyIdentifier(s.GetIdentifier())).FirstOrDefault();
		}
Example #49
0
		private static string GetPrimaryStudyInstanceUid(IImageViewer viewer)
		{
			foreach (Patient patient in viewer.StudyTree.Patients)
			{
				foreach (Study study in patient.Studies)
				{
					return study.StudyInstanceUid;
				}
			}

			return null;
		}
Example #50
0
		/// <summary>
		/// As long as the primary study is loaded, even partially, we continue opening the viewer and
		/// just report the loading errors to the user.  If other studies failed to load, we still just
		/// open the viewer and report to the user.
		/// </summary>
		private static void HandleLoadStudiesException(Exception e, string primaryStudyInstanceUid, IImageViewer viewer)
		{
			if (GetPrimaryStudyInstanceUid(viewer) == primaryStudyInstanceUid)
				return; //the primary study was at least partiallly loaded.

			if (e is NotFoundLoadStudyException)
				throw new FaultException<StudyNotFoundFault>(new StudyNotFoundFault(), "The study was not found.");
			if (e is NearlineLoadStudyException)
				throw new FaultException<StudyNearlineFault>(new StudyNearlineFault { IsStudyBeingRestored = ((NearlineLoadStudyException)e).IsStudyBeingRestored }, "The study is nearline.");
			if (e is OfflineLoadStudyException)
				throw new FaultException<StudyOfflineFault>(new StudyOfflineFault(), "The study is offline.");
			if (e is InUseLoadStudyException)
				throw new FaultException<StudyInUseFault>(new StudyInUseFault(), "The study is in use.");
			if (e is StudyLoaderNotFoundException)
			{
				const string reason = "The study cannot be loaded directly from the specified server/location.";
				throw new FaultException<OpenStudiesFault>(new OpenStudiesFault { FailureDescription = reason }, reason);
			}

			throw new FaultException<OpenStudiesFault>(new OpenStudiesFault(), "The primary study could not be loaded.");
		}
Example #51
0
			public LocalSopLoader(IImageViewer viewer)
			{
				_viewer = viewer;
			}
		public ToolModalityBehaviorHelper(IImageViewer imageViewer)
		{
			_imageViewer = imageViewer;
		}
		void IPrefetchingStrategy.Stop()
		{
			if(_imageViewer != null)
			{
				Stop();
				_imageViewer = null;
			}
		}
Example #54
0
		internal static void OnViewerClosed(IImageViewer viewer)
		{
			KeyImageInformation info = GetKeyImageInformation(viewer);
			_keyImageInformation.Remove(viewer);

			if (info != null)
			{				
				using(info)
				{
					try
					{
						var publisher = new KeyImagePublisher(info);
						publisher.Publish();
					}
					catch (Exception e)
					{
                        //Should never happen because KeyImagePublisher.Publish doesn't throw exceptions.
                        ExceptionHandler.Report(e, Application.ActiveDesktopWindow);
					}
				}
			}

			ManageActivityMonitorConnection();
		}
Example #55
0
		void IViewerSetupHelper.SetImageViewer(IImageViewer viewer)
		{
			ImageViewer = viewer;
		}
Example #56
0
		private static Workspace GetViewerWorkspace(IImageViewer viewer)
		{
			foreach (Workspace workspace in GetViewerWorkspaces())
			{
				IImageViewer workspaceViewer = ImageViewerComponent.GetAsImageViewer(workspace);
				if (viewer == workspaceViewer)
					return workspace;
			}

			return null;
		}
 /// <summary>
 /// Performs given operation on the images in the given Image Viewer
 /// </summary>
 /// <param name="imageViewer">reference to <code>IImageViewer</code> that the operation has to be performed on</param>
 /// <param name="stopOnFirstMatch">when <code>true</code>, will return after the first successful predicate operation.</param>
 /// <param name="predicate">Operation to execute on each <code>IPresentationImage</code></param>
 /// <returns><code>true</code> if at least one of predicate runs succeeded and <code>false</code> - if all failed</returns>
 public static bool ImageViewerImageOperation(IImageViewer imageViewer, bool stopOnFirstMatch, Func<IPresentationImage, bool> predicate)
 {
     return ImageViewerImageOperation(imageViewer, stopOnFirstMatch, predicate, false);
 }
Example #58
0
		internal virtual void SetImageViewer(IImageViewer imageViewer)
		{
			_parentImageViewer = imageViewer;
		}
        internal static List<IGraphic> PopulateImageViewerWithSavedMarkup(List<IMarkup> markupList, IImageViewer imageViewer)
        {
            var graphics = new List<IGraphic>();
            foreach (var markup in markupList)
            {
                foreach (var box in imageViewer.PhysicalWorkspace.ImageBoxes)
                {
                    if (box.DisplaySet == null)
                        continue;

                    var imageSop =
                        box.DisplaySet.PresentationImages.Cast<IImageSopProvider>().FirstOrDefault(
                        pi => pi.ImageSop.SopInstanceUid == markup.PresentationImageUid && pi.Frame.FrameNumber == markup.FrameNumber);

                    var selectedPresentationImage = imageSop as IPresentationImage;
                    if (selectedPresentationImage == null)
                        continue;

                    var graphicsProvider = selectedPresentationImage as IOverlayGraphicsProvider;
                    if (graphicsProvider != null)
                    {
                        if (markup is MarkupEllipse)
                        {
                            var markupEllipse = (MarkupEllipse)markup;
                            var ellipsePrimitive = new EllipsePrimitive();
                            var roiGraphic = new RoiGraphic(new BoundableResizeControlGraphic(new BoundableStretchControlGraphic(
                                new MoveControlGraphic(ellipsePrimitive))));
                            var boundableGraphic = roiGraphic.Subject as BoundableGraphic;

                            markup.GraphicHashcode = roiGraphic.GetHashCode();
                            graphics.Add(roiGraphic);
                            graphicsProvider.OverlayGraphics.Add(roiGraphic);

                            if (boundableGraphic != null)
                            {
                                roiGraphic.Suspend(); // prevent callout location calculation until all points are set
                                roiGraphic.Name = markup.Name;
                                ellipsePrimitive.BottomRight = markupEllipse.BottomRight;
                                ellipsePrimitive.TopLeft = markupEllipse.TopLeft;
                                roiGraphic.State = roiGraphic.CreateInactiveState();
                                roiGraphic.Resume(true); // Force callout location calculation
                                roiGraphic.Callout.TextLocation = markupEllipse.CalloutLocation;
                            }
                        }
                        else if (markup is MarkupPolygonal)
                        {
                            var markupPolygon = (MarkupPolygonal)markup;

                            var polyline = new PolylineGraphic(true);
                            foreach (var point in markupPolygon.Vertices)
                                polyline.Points.Add(point);
                            var roiGraphic = new RoiGraphic(new PolygonControlGraphic(true, new MoveControlGraphic(polyline)));

                            markup.GraphicHashcode = roiGraphic.GetHashCode();
                            graphics.Add(roiGraphic);
                            graphicsProvider.OverlayGraphics.Add(roiGraphic);

                            //if (boundableGraphic != null)
                            {
                                roiGraphic.Suspend(); // prevent callout location calculation until all points are set
                                roiGraphic.Name = markup.Name;
                                roiGraphic.State = roiGraphic.CreateInactiveState();
                                roiGraphic.Resume(true); // Force callout location calculation
                                roiGraphic.Callout.TextLocation = markupPolygon.CalloutLocation;
                            }
                        }
                        else if (markup is MarkupRectangle)
                        {
                            var markupRectangle = (MarkupRectangle)markup;
                            var rectanglePrimitive = new RectanglePrimitive();
                            var roiGraphic = new RoiGraphic(new BoundableResizeControlGraphic(new BoundableStretchControlGraphic(
                                new MoveControlGraphic(rectanglePrimitive))));
                            var boundableGraphic = roiGraphic.Subject as BoundableGraphic;

                            markup.GraphicHashcode = roiGraphic.GetHashCode();
                            graphics.Add(roiGraphic);
                            graphicsProvider.OverlayGraphics.Add(roiGraphic);

                            if (boundableGraphic != null)
                            {
                                roiGraphic.Suspend(); // prevent callout location calculation until all points are set
                                roiGraphic.Name = markup.Name;
                                rectanglePrimitive.BottomRight = markupRectangle.BottomRight;
                                rectanglePrimitive.TopLeft = markupRectangle.TopLeft;
                                roiGraphic.State = roiGraphic.CreateInactiveState();
                                roiGraphic.Resume(true); // Force callout location calculation
                                roiGraphic.Callout.TextLocation = markupRectangle.CalloutLocation;
                            }
                        }
                        else if (markup is MarkupProtractor)
                        {
                            var markupProtractor = (MarkupProtractor)markup;

                            var protractorGraphic = new ProtractorGraphic();
                            foreach (var point in markupProtractor.Points)
                                protractorGraphic.Points.Add(point);
                            var roiGraphic = new RoiGraphic(new VerticesControlGraphic(new MoveControlGraphic(protractorGraphic)));

                            markup.GraphicHashcode = roiGraphic.GetHashCode();
                            graphics.Add(roiGraphic);
                            graphicsProvider.OverlayGraphics.Add(roiGraphic);

                            roiGraphic.Suspend(); // prevent callout location calculation until all points are set
                            roiGraphic.Name = markup.Name;
                            roiGraphic.State = roiGraphic.CreateInactiveState();
                            roiGraphic.Resume(true); // Force callout location calculation
                            roiGraphic.Callout.TextLocation = markupProtractor.CalloutLocation;
                        }
                        else if (markup is MarkupLinear)
                        {
                            var markupLinear = (MarkupLinear)markup;

                            var polylineGraphic = new PolylineGraphic();
                            foreach (var point in markupLinear.Vertices)
                                polylineGraphic.Points.Add(point);
                            var roiGraphic = new RoiGraphic(new VerticesControlGraphic(new MoveControlGraphic(polylineGraphic)));

                            markup.GraphicHashcode = roiGraphic.GetHashCode();
                            graphics.Add(roiGraphic);
                            graphicsProvider.OverlayGraphics.Add(roiGraphic);

                            roiGraphic.Suspend(); // prevent callout location calculation until all points are set
                            roiGraphic.Name = markup.Name;
                            roiGraphic.State = roiGraphic.CreateInactiveState();
                            roiGraphic.Resume(true); // Force callout location calculation
                            roiGraphic.Callout.TextLocation = markupLinear.CalloutLocation;
                        }
                        else if (markup is MarkupPoint)
                        {
                            var markupPoint = (MarkupPoint)markup;

                            IGraphic calloutGraphic;
                            if (markupPoint.UseCrosshair)
                            {
                                calloutGraphic = new UserCrosshairCalloutGraphic
                                {
                                    AnchorPoint = markupPoint.Point,
                                    TextLocation = markupPoint.CalloutLocation,
                                    Text = markupPoint.CalloutText,
                                    ShowShaft = !String.IsNullOrEmpty(markupPoint.CalloutText),
                                    LineStyle = LineStyle.Dot
                                };

                            }
                            else
                            {
                                calloutGraphic = new UserCalloutGraphic
                                {
                                    AnchorPoint = markupPoint.Point,
                                    TextLocation = markupPoint.CalloutLocation,
                                    Text = markupPoint.CalloutText,
                                    ShowArrowhead = true,
                                    LineStyle = LineStyle.Solid
                                };
                            }

                            var statefulGraphic = new StandardStatefulGraphic(calloutGraphic);
                            statefulGraphic.State = statefulGraphic.CreateInactiveState();

                            var contextGraphic = new ContextMenuControlGraphic(typeof(ClearCanvas.ImageViewer.Tools.Standard.TextCalloutTool).FullName, "basicgraphic-menu", null, statefulGraphic);
                            contextGraphic.Actions = new ToolSet(new GraphicToolExtensionPoint(), new GraphicToolContext(contextGraphic)).Actions;

                            //if (markupPoint.Name != "RemoveForCalloutPlacement")
                            {
                                markup.GraphicHashcode = contextGraphic.GetHashCode();
                                graphics.Add(contextGraphic);
                                graphicsProvider.OverlayGraphics.Add(contextGraphic);
                                //selectedPresentationImage.Draw();
                            }
                        }
                    }

                    box.TopLeftPresentationImage = selectedPresentationImage;
                    box.Tiles[0].Select();
                    box.Draw();

                    break;
                }
            }
            return graphics;
        }
Example #60
0
		internal override void SetImageViewer(IImageViewer imageViewer)
		{
			base.SetImageViewer(imageViewer);

			foreach (Graphic graphic in this.Graphics)
				graphic.SetImageViewer(imageViewer);
		}