Example #1
0
        Point GetAnnotationPos(ImgTxtPosEnum pos, FrameworkElement fe)
        {
            Debug.Assert(pos >= 0 && pos < ImgTxtPosEnum.Max);
            switch (pos)
            {
            case ImgTxtPosEnum.TopLeft:
                fe.HorizontalAlignment = HorizontalAlignment.Left;
                fe.VerticalAlignment   = VerticalAlignment.Top;
                return(new Point(0, 0));

            case ImgTxtPosEnum.TopRight:
                fe.HorizontalAlignment = HorizontalAlignment.Right;
                fe.VerticalAlignment   = VerticalAlignment.Top;
                return(new Point(0, 2));

            case ImgTxtPosEnum.BottomRight:
                fe.HorizontalAlignment = HorizontalAlignment.Right;
                fe.VerticalAlignment   = VerticalAlignment.Bottom;
                return(new Point(2, 2));

            case ImgTxtPosEnum.BottomLeft:
                fe.HorizontalAlignment = HorizontalAlignment.Left;
                fe.VerticalAlignment   = VerticalAlignment.Bottom;
                return(new Point(2, 0));

            case ImgTxtPosEnum.Top:
                fe.HorizontalAlignment = HorizontalAlignment.Center;
                fe.VerticalAlignment   = VerticalAlignment.Top;
                return(new Point(0, 1));

            case ImgTxtPosEnum.Right:
                fe.HorizontalAlignment = HorizontalAlignment.Right;
                fe.VerticalAlignment   = VerticalAlignment.Center;
                return(new Point(1, 2));

            case ImgTxtPosEnum.Bottom:
                fe.HorizontalAlignment = HorizontalAlignment.Center;
                fe.VerticalAlignment   = VerticalAlignment.Bottom;
                return(new Point(2, 1));

            case ImgTxtPosEnum.Left:
                fe.HorizontalAlignment = HorizontalAlignment.Left;
                fe.VerticalAlignment   = VerticalAlignment.Center;
                return(new Point(1, 0));

            default:
                throw new Exception("not supported position");
            }
        }
Example #2
0
        private void FillAnnotationToGrid(MedViewerControlCell cell, Grid grid)
        {
            //////////////////////////////////////////////////////////////////////////
            //Assert

            Debug.Assert(cell != null);
            Debug.Assert(grid != null);

            var image = cell.Image;

            if (image == null)
            {
                return;
            }

            var page = cell.Image.CurrentPage;

            if (page == null)
            {
                return;
            }

            var overlayText = (OverlayText)page.GetOverlay(OverlayType.Text);

            if (overlayText == null)
            {
                return;
            }
            var graphicImageText = overlayText.Graphics[0] as GraphicImageText;

            if (graphicImageText == null)
            {
                return;
            }

            //////////////////////////////////////////////////////////////////////////
            //new a 3x3 grid 1:8:1, and add to the cell grid
            var r1 = new RowDefinition(); r1.Height = new GridLength(1, GridUnitType.Star);
            var r2 = new RowDefinition(); r2.Height = new GridLength(1, GridUnitType.Star);
            var r3 = new RowDefinition(); r3.Height = new GridLength(1, GridUnitType.Star);

            grid.RowDefinitions.Add(r1);
            grid.RowDefinitions.Add(r2);
            grid.RowDefinitions.Add(r3);

            var c1 = new ColumnDefinition(); c1.Width = new GridLength(1, GridUnitType.Star);
            var c2 = new ColumnDefinition(); c2.Width = new GridLength(1, GridUnitType.Star);
            var c3 = new ColumnDefinition(); c3.Width = new GridLength(1, GridUnitType.Star);

            grid.ColumnDefinitions.Add(c1);
            grid.ColumnDefinitions.Add(c2);
            grid.ColumnDefinitions.Add(c3);

            //////////////////////////////////////////////////////////////////////////
            //Traverse four annotation text panel, and fetch texts to fill into the
            for (ImgTxtPosEnum pos = 0; pos < ImgTxtPosEnum.Max; pos++)
            {
                var textPanel  = graphicImageText.GetTextItemPanel(pos);
                var textGroups = textPanel.Children;
                if (textGroups.Count == 0)
                {
                    continue;
                }

                //new a stackpanel at current pos
                var textStack = new StackPanel();
                textStack.Orientation = Orientation.Vertical;
                textStack.Margin      = new Thickness(2, 2, 2, 2);
                var viewBox = new Viewbox();
                viewBox.Child = textStack;

                var point = GetAnnotationPos(pos, viewBox);
                Grid.SetColumn(viewBox, (int)point.Y);
                Grid.SetRow(viewBox, (int)point.X);
                grid.Children.Add(viewBox);


                foreach (var item in textGroups)
                {
                    var    textGroup = item as GraphicImageText.TextItemGroup;
                    string textItem  = textGroup.TextItemBody.Text;

                    //add a textBlock with Text = textItem into the stackPanel
                    var textBlock = new TextBlock()
                    {
                        Text       = textItem,
                        FontSize   = 5,
                        FontWeight = FontWeights.Bold,
                        //Margin = new Thickness(10,0,10,0),
                        //HorizontalAlignment = System.Windows.HorizontalAlignment.Center,
                        //VerticalAlignment = System.Windows.VerticalAlignment.Center,
                        //Opacity = 0.5,
                        //Foreground = Brushes.White,
                        //Effect = new DropShadowEffect()
                        //{
                        //    Color = Colors.Black,
                        //    ShadowDepth = 1
                        //}
                    };
                    textBlock.HorizontalAlignment = textStack.HorizontalAlignment;
                    textBlock.VerticalAlignment   = textStack.VerticalAlignment;


                    textStack.Children.Add(textBlock);
                }
            }
            //var textControl = graphicImageText.Control;

            //grid.Children.Add(null);
        }
Example #3
0
        public void AddFilmPage(PageModel pageModel, bool ifPageNo)
        {
            try
            {
                Logger.LogFuncUp();

                this.FilmTitleViewModel.ResetModel(pageModel.PageTitleInfoModel);

                var rootCell = this._filmingViewerControl.LayoutManager.RootCell;
                rootCell.RemoveAll();
                //rootCell.BorderThickness = -1D;
                rootCell.SetBorderThicknessWithoutRefresh(-1D);
                this._filmingViewerControl.LayoutManager.SetLayoutByXML(pageModel.Layout, new Func <MedViewerLayoutCell>(() => { return(new MedViewerLayoutCell()
                    {
                        BorderThickness = -1D, CellControlMargin = 0
                    }); }));

                this._filmingViewerControl.GraphicContextMenu.GraphicsStatisticItemsMode =
                    pageModel.PageGraphicOperationModel.GraphicsStatisticItemsMode;

                List <MedViewerControlCell> controlCells = new List <MedViewerControlCell>();
                foreach (var cellModel in pageModel.CellModels)
                {
                    var cell = new MedViewerControlCell();
                    controlCells.Add(cell);
                    var sop = cellModel.Sop as ImageSop;
                    if (null != sop)
                    {
                        var displayData = FilmPageControl.DataAccessorInstance.CreateImageDataForFilming(sop.DicomSource, sop.GetNormalizedPixelData(), cellModel.Ps, cellModel.PtUnit);
                        cell.Image.AddPage(displayData);
                        //图元颜色修改
                        if (pageModel.EFilmModel.IfSaveImageAsGrayScale)
                        {
                            var overlayGraphics = displayData.GetOverlay(OverlayType.Graphics) as OverlayGraphics;
                            if (null != overlayGraphics)
                            {
                                foreach (var graphic in overlayGraphics.Graphics)
                                {
                                    var parent = graphic as IComposed;
                                    if (parent != null)
                                    {
                                        foreach (var obj in parent.Components)
                                        {
                                            var graphicBase = obj as DynamicGraphicBase;
                                            if (graphicBase != null)
                                            {
                                                graphicBase.GeometryProperty.NormalColor = Colors.White; //设置打印图元线颜色
                                                if (!(graphicBase is GraphicText))
                                                {
                                                    graphicBase.GeometryProperty.Thickness = 2D;  //设置打印图元线宽
                                                }
                                            }
                                        }
                                    }
                                    else
                                    {
                                        var graphicBase = graphic as DynamicGraphicBase;
                                        if (null != graphicBase)
                                        {
                                            graphicBase.GeometryProperty.NormalColor = Colors.White; //设置打印图元线颜色
                                            if (!(graphicBase is GraphicText))
                                            {
                                                graphicBase.GeometryProperty.Thickness = 2D; //设置打印图元线宽
                                            }
                                        }
                                    }
                                }
                            }
                        }
                        //四角信息配置(出厂and高级应用)
                        var overlayFilmTxt = displayData.GetOverlay(OverlayType.FilmingText) as OverlayFilmingText;
                        if (null == overlayFilmTxt)
                        {
                            return;
                        }
                        overlayFilmTxt.GraphicFilmingImageText.LeftMargin         = 0;
                        overlayFilmTxt.GraphicFilmingImageText.RightMargin        = 0;
                        overlayFilmTxt.GraphicFilmingImageText.BottomMargin       = 0;
                        overlayFilmTxt.GraphicFilmingImageText.TopMargin          = 0;
                        overlayFilmTxt.GraphicFilmingImageText.FontStyle          = "Arial";
                        overlayFilmTxt.GraphicFilmingImageText.ImgTxtMgPostion    = cellModel.ImgTxTPosition;
                        overlayFilmTxt.GraphicFilmingImageText.IsShowOrientation  = (cellModel.MgOrientationIsShow == "1"?true:false);
                        overlayFilmTxt.GraphicFilmingImageText.IsImgTxtShowFromF1 = (cellModel.IsShowImgTxt == "1" ? true : false);
                        overlayFilmTxt.GraphicFilmingImageText.IsRulerShowFromF1  = (cellModel.IsShowRuler == "1" ? true : false);

                        if (ImgTxtDisplayState.All == displayData.PState.DisplayMode || ImgTxtDisplayState.Customization == displayData.PState.DisplayMode)
                        {
                            string modalities;
                            mcsf_clr_systemenvironment_config.GetModalityName(out modalities);

                            if (modalities == "DBT")
                            {
                                if (null != overlayFilmTxt.Page &&
                                    null != overlayFilmTxt.Page.Image &&
                                    null != overlayFilmTxt.Page.Image.Cell)
                                {
                                    var config = overlayFilmTxt.Page.Image.Cell.ViewerControlSetting.Configuration;
                                    config.EntryConfig.ImageTextMap =
                                        Printers.Instance.Modality2FilmingImageTextConfigPath;
                                }
                            }

                            //overlayFilmTxt.ConfigStandardImageText(displayData.ImageHeader.DicomHeader,
                            //                                                                    cellModel.ImgTxtFilePathOrContent,
                            //                                                                    cellModel.ImgTxtItemPathOrContent);
                            overlayFilmTxt.GraphicFilmingImageText.GraphicImageText.SerializedContent =
                                cellModel.ImgTxtFilePathOrContent;
                        }
                        else if (ImgTxtDisplayState.FromApplication == displayData.PState.DisplayMode)
                        {
                            //ImageTextConfigContent imageTextConfigContent = new ImageTextConfigContent()
                            //                                                    {
                            //                                                        ImageTextFileContent = cellModel.ImgTxtFilePathOrContent,
                            //                                                        //TextItemFileContent = cellModel.ImgTxtItemPathOrContent
                            //                                                    };
                            //overlayFilmTxt.ConfigApplicationConfigReader(displayData.ImageHeader.DicomHeader, imageTextConfigContent);
                            overlayFilmTxt.GraphicFilmingImageText.GraphicImageText.SerializedContent =
                                cellModel.ImgTxtFilePathOrContent;
                            overlayFilmTxt.GraphicFilmingImageText.GraphicImageText.SerializedDataHeader = cellModel.ImgTxTContent;
                        }

                        //定位像参考线
                        if (!string.IsNullOrEmpty(cellModel.LocalizedImageUid) && null != cellModel.LocalizedImageSop)
                        {
                            DisplayData   smallDisplayData = DataAccessorInstance.CreateImageData(cellModel.LocalizedImageSop.DicomSource, (cellModel.LocalizedImageSop as ImageSop).GetNormalizedPixelData());
                            ImgTxtPosEnum pos = ImgTxtPosEnum.Center;
                            if (!string.IsNullOrEmpty(cellModel.LocalizedImagePSInfo))
                            {
                                smallDisplayData.PSXml = cellModel.LocalizedImagePSInfo;
                                smallDisplayData.DeserializePSInfo();
                            }
                            if (!string.IsNullOrEmpty(cellModel.LocalizedImagePosion))
                            {
                                Enum.TryParse(cellModel.LocalizedImagePosion, out pos);
                                overlayFilmTxt.GraphicFilmingImageText.ReferenceLinePos = pos;
                                overlayFilmTxt.GraphicFilmingImageText.HasReferenceLine = true;
                            }
                            DataAccessorInstance.AddOverlayLocalizedImage(displayData, smallDisplayData, pos);


                            if (pageModel.EFilmModel.IfSaveImageAsGrayScale)
                            {
                                var overlayReferenceLine = smallDisplayData.Overlays.FirstOrDefault(n => n is OverlayReferenceLine2Filming) as OverlayReferenceLine2Filming;
                                if (overlayReferenceLine != null)
                                {
                                    overlayReferenceLine.LineColor = Colors.White; //设置打印参考线颜色
                                    //overlayReferenceLine.LineThickness = 0.3D; //设置打印参考线线宽
                                }
                            }
                        }

                        //比例尺
                        var overlayRuler = displayData.GetOverlay(OverlayType.Ruler) as OverlayRuler;
                        if (null != overlayRuler)
                        {
                            overlayRuler.IsVisible = cellModel.RulerVisible;
                            overlayRuler.GraphicRuler.MinimalCellSize = 0D;
                        }


                        var tagName2Value = new Dictionary <uint, string>();
                        tagName2Value.Add(ServiceTagName.PatientAge, string.Empty);
                        tagName2Value.Add(ServiceTagName.PatientID, string.Empty);
                        tagName2Value.Add(ServiceTagName.PatientName, string.Empty);
                        tagName2Value.Add(ServiceTagName.PatientSex, string.Empty);
                        tagName2Value.Add(ServiceTagName.StudyID, string.Empty);
                        tagName2Value.Add(ServiceTagName.SeriesInstanceUID, string.Empty);
                        tagName2Value.Add(ServiceTagName.StudyInstanceUID, string.Empty);
                        tagName2Value.Add(ServiceTagName.Modality, string.Empty);

                        Widget.GetTagValue(cell, tagName2Value);

                        cellModel.PatientAge       = tagName2Value[ServiceTagName.PatientAge];
                        cellModel.PatientId        = tagName2Value[ServiceTagName.PatientID];
                        cellModel.PatientsName     = tagName2Value[ServiceTagName.PatientName];
                        cellModel.PatientsSex      = tagName2Value[ServiceTagName.PatientSex];
                        cellModel.StudyId          = tagName2Value[ServiceTagName.StudyID];
                        cellModel.SeriesUid        = tagName2Value[ServiceTagName.SeriesInstanceUID];
                        cellModel.StudyInstanceUid = tagName2Value[ServiceTagName.StudyInstanceUID];
                        cellModel.Modality         = tagName2Value[ServiceTagName.Modality];
                    }
                }
                this._filmingViewerControl.AddCells(controlCells);

                foreach (var controlCell in controlCells)
                {
                    controlCell.Refresh();
                }

                //only for PT
                this.PageTitle_AddDrugForPT();


                var eFilmModel = pageModel.EFilmModel;

                if (eFilmModel.IfSaveEFilm)
                {
                    var sampleCell =
                        controlCells.FirstOrDefault(c => c != null && c.Image != null && c.Image.CurrentPage != null);

                    if (!eFilmModel.IsMixed)
                    {
                        eFilmModel.FillTagsFrom(sampleCell);
                        string modalities;
                        mcsf_clr_systemenvironment_config.GetModalityName(out modalities);
                        eFilmModel.EFilmModality = modalities;
                    }
                }

                if (pageModel.EFilmModel.PeerNode.NodeType == PeerNodeType.GENERAL_PRINTER)
                {
                    #region [--纸质打印--]
                    this.PrintByGeneralPrinter(eFilmModel, ifPageNo);
                    #endregion
                }
                else
                {
                    #region [--胶片打印--]

                    this.GeneralFilms(eFilmModel, ifPageNo);

                    #endregion
                }

                ClearViewerControl(_filmingViewerControl);

                Logger.LogFuncDown();
            }
            catch (Exception ex)
            {
                Logger.LogFuncException(ex.Message + ex.StackTrace);
            }
        }