Esempio n. 1
0
        /// <summary>
        /// Updates the Renderer of a specific RenderSlice with a new width and new height.
        /// Width and height are mixed up, because the bitmap is rendered in rotation of 90°.
        /// </summary>
        /// <param name="rs">Change the dimensions of this RenderSlice</param>
        /// <param name="imageWidth">New image width in pixels (width is the unit or y axis)</param>
        /// <param name="imageHeight">New image height in pixels (height is the time or x axis)</param>
        public static void Renderer_Update(RenderSlice rs, int imageWidth, double imageHeight)
        {
            switch (rs.Renderer.ToString())
            {
            case "UnisensViewer.StreamRenderer":
                ((StreamRenderer)rs.Renderer).imageheight      = (int)imageHeight;
                ((StreamRenderer)rs.Renderer).dirtyrect.Height = (int)imageHeight;
                ((StreamRenderer)rs.Renderer).imagewidth       = imageWidth;
                ((StreamRenderer)rs.Renderer).dirtyrect.Width  = imageWidth;
                break;

            case "UnisensViewer.EventStringRenderer":
                ((EventStringRenderer)rs.Renderer).imageheight      = (int)imageHeight;
                ((EventStringRenderer)rs.Renderer).dirtyrect.Height = (int)imageHeight;
                ((EventStringRenderer)rs.Renderer).imagewidth       = imageWidth;
                ((EventStringRenderer)rs.Renderer).dirtyrect.Width  = imageWidth;
                break;

            case "UnisensViewer.EventValueRenderer":
                ((EventValueRenderer)rs.Renderer).imageheight      = (int)imageHeight;
                ((EventValueRenderer)rs.Renderer).dirtyrect.Height = (int)imageHeight;
                ((EventValueRenderer)rs.Renderer).imagewidth       = imageWidth;
                ((EventValueRenderer)rs.Renderer).dirtyrect.Width  = imageWidth;
                break;
            }
        }
Esempio n. 2
0
        private unsafe void Dropped(DragEventArgs e, RenderSlice rs)
        {
            ObservableCollection <RenderSlice> l = this.GetRenderSliceListFromDropPoint(e);
            Renderer r         = rs.Renderer;
            double   maxbreite = rs.ImageSource.Height;
            int      imageWidth;

            if (l.Count > 0)
            {
                imageWidth = (int)l[0].ImageSource.Width;
            }
            else
            {
                imageWidth = 128;
            }

            RendererManager.Renderer_Update(rs, imageWidth, maxbreite);
            RendererManager.RenderSlice_Update(rs, imageWidth, maxbreite);

            rs.Scale = (float)(imageWidth / rs.Range);
            this.MoveRenderSlice(rs, l);
            XElement channel = rs.UnisensNode;

            RendererManager.Render(rs.Renderer, channel);
        }
Esempio n. 3
0
        /// <summary>
        /// new Render in X-direchtion
        /// </summary>
        /// <param name="stackercontrol"></param>
        /// <param name="imageHeight">New image height in pixels (height is the time or x axis</param>
        public static void Drag(StackerControl stackercontrol, double imageHeight)
        {
            if (imageHeight < 20)
            {
                imageHeight = 20;
            }
            MaxBreite = imageHeight;
            for (int i = 0; i < stackercontrol.renderSliceLists.Count; i++)
            {
                RenderSlice rs = null;

                // modify all RenderSlice of the Renderers
                for (int j = 0; j < stackercontrol.renderSliceLists[i].Count; j++)
                {
                    // at adding a new RenderSlice in the rslist,
                    // the current RenderSlice is moved forward.
                    rs = stackercontrol.renderSliceLists[i][0];
                    int imageWidth = ((RasterRenderSlice)rs).ImageWidth;

                    Renderer_Update(rs, imageWidth, imageHeight);
                    RenderSlice_Update(rs, imageWidth, imageHeight);

                    // old RenderSlice replaced by new
                    Renderer r       = rs.Renderer;
                    XElement channel = rs.UnisensNode;
                    stackercontrol.MoveRenderSlice(rs, stackercontrol.renderSliceLists[i]);

                    // paint signal again
                    RendererManager.Render(r, channel);
                }
            }
        }
Esempio n. 4
0
        public void DropSignalEventValueEntry(XElement seventry, ObservableCollection <RenderSlice> rslist)
        {
            if (rslist == null)
            {
                // neuen stapel am ende erzeugen
                rslist = new ObservableCollection <RenderSlice>();
                this.renderSliceLists.Add(rslist);
            }

            // alle kanäle hinzufügen
            Renderer r = RendererManager.GetRenderer(seventry);

            if (r != null)
            {
                List <RenderSlice> l = new List <RenderSlice>();

                for (int a = 0; a < r.Channels; ++a)
                {
                    RenderSlice rs = r.GetRenderSlice(a);

                    this.AttachKillHandler(rs);
                    this.MoveRenderSlice(rs, rslist);

                    l.Add(rs);
                }

                RendererManager.AutoZoomGroupedByFiles(l);
            }

            if (rslist.Count == 0)
            {
                // ** beim erzeugen des renderers trat ein fehler auf, die eventuell oben erzeugte rsliste löschen
                this.renderSliceLists.Remove(rslist);
            }
        }
Esempio n. 5
0
        private void RendersliceKill(object sender, EventArgs e)
        {
            RenderSlice rs = (RenderSlice)sender;

            rs.Kill -= this.rskillhandler;

            int numslices = 0;

            // referenz auf das renderslice löschen
            // falls überhaupt keine renderslices mehr aktiv, dann den ganzen renderer löschen
            for (int a = 0, b = this.Channels; a < b; ++a)
            {
                if (this.RenderSlices[a] == rs)
                {
                    this.RenderSlices[a] = null;
                }

                if (this.RenderSlices[a] != null)
                {
                    ++numslices;
                }
            }

            if (numslices == 0)
            {
                this.Kill(this, null);
                // Free Memory
                this.Close();
            }
        }
Esempio n. 6
0
 private void AttachKillHandler(RenderSlice rs)
 {
     // nur bei neu erzeugten renderslices EINMAL reinhooken,
     // d.h. bei renderslices, die noch in keiner liste sind.
     // es ist nämlich möglich, dass man das xml-element nochmal reindragt!
     rs.Kill -= this.killHandler;
     rs.Kill += this.killHandler;
 }
Esempio n. 7
0
        public unsafe void ItemsControl_MouseLeftButtonUp(object sender, MouseButtonEventArgs e)
        {
            int imageWidth = (int)itemscontrol_RenderSliceImages.ActualHeight;
            ObservableCollection <RenderSlice> rslist = (ObservableCollection <RenderSlice>)itemscontrol_RenderSliceImages.DataContext;
            RenderSlice rs            = null;
            bool        width_changed = false;

            if (imageWidth < 10)
            {
                imageWidth = 10;
            }


            if (rslist != null)
            {
                // check if the width is changed or a slice is closed, when the mouse is released.
                if (imageWidth != ((RasterRenderSlice)rslist[0]).ImageWidth)
                {
                    width_changed = true;
                }
            }
            if (width_changed)
            {
                int i = 0;
                while (i < rslist.Count)
                {
                    // at adding a new RenderSlice in the rslist,
                    // the current RenderSlice is moved forward.
                    rs = rslist[0];
                    int deltaWidth = (int)(imageWidth - rs.ImageSource.Width);

                    int maxbreite = ((RasterRenderSlice)rs).ImageHeight;
                    // modify all RenderSlice of the Renderers
                    RendererManager.Renderer_Update(rs, imageWidth, maxbreite);
                    RendererManager.RenderSlice_Update(rs, imageWidth, maxbreite);

                    // Update Scale
                    rs.Scale = (float)(imageWidth / rs.Range);
                    //rs.ZoomInto(rs.Zoominfo.PhysicalMin, rs.Zoominfo.PhysicalMax);

                    Renderer r       = rs.Renderer;
                    XElement channel = rs.UnisensNode;

                    // old RenderSlice replaced by new
                    this.MoveRenderSlice(rs, rslist);

                    // paint all signals again
                    RendererManager.Render(r, channel);
                    i++;
                }
            }
        }
Esempio n. 8
0
        private void Image_MouseMove(object sender, MouseEventArgs e)
        {
            Image       i  = (Image)sender;
            RenderSlice rs = (RenderSlice)i.DataContext;

            // achtung image ist rotiert, also x<->y
            Point p = e.GetPosition(i);

            // zeit, die der mauscursor (1 pixel) überspannt
            double time     = RendererManager.Time + (RendererManager.TimeStretch * p.Y / i.ActualHeight);              // hier ebenso ActualWidth<->ActualHeight
            double time_end = time + (RendererManager.TimeStretch / i.ActualHeight);                                    // 1 pixel breite

            RaiseEvent(new UpdateStatusEventArgs(rs.GetSampleInfo(time, time_end)));
        }
Esempio n. 9
0
        private void Button_Click_killsignal(object sender, RoutedEventArgs e)
        {
            try
            {
                Button      b = (Button)sender;
                RenderSlice r = (RenderSlice)b.DataContext;

                r.RaiseKill();
            }
            catch (Exception ex)
            {
                Logger logger = LogManager.GetCurrentClassLogger();
                logger.Error("Strange error. Clicked on kill signal that is no RenderSlice: " + ex.StackTrace);
            }
        }
Esempio n. 10
0
        private void ListBox_renderSliceStack_SelectionChanged(object sender, SelectionChangedEventArgs args)
        {
            // ausgewähltes signal in den vordergrund bringen
            ListBox     l  = (ListBox)sender;
            RenderSlice rs = l.SelectedItem as RenderSlice;

            if (rs != null)
            {
                Grid         grid = (Grid)LogicalTreeHelper.GetParent(l);
                ItemsControl itemscontrol_rendersliceimages = (ItemsControl)grid.FindName("itemscontrol_rendersliceimages");

                ContentPresenter cp = (ContentPresenter)itemscontrol_rendersliceimages.ItemContainerGenerator.ContainerFromItem(rs);
                Panel.SetZIndex(cp, ++this.zindex);
            }
            else
            {
                l.SelectedIndex = 0;
            }
        }
Esempio n. 11
0
        private void RenderSlice_Kill(object sender, EventArgs e)
        {
            RenderSlice rs = (RenderSlice)sender;

            // handler wieder löschen (sonst speicherleck)
            rs.Kill -= this.killHandler;

            foreach (ObservableCollection <RenderSlice> l in this.renderSliceLists)
            {
                if (l.Remove(rs))
                {
                    if (l.Count == 0)
                    {
                        this.renderSliceLists.Remove(l);
                    }

                    break;
                }
            }
        }
Esempio n. 12
0
        public void MoveRenderSlice(RenderSlice rs, ObservableCollection <RenderSlice> dest)
        {
            // in alter liste finden, dann entfernen
            foreach (ObservableCollection <RenderSlice> l in this.renderSliceLists)
            {
                if (l.Remove(rs))
                {
                    // wurde gefunden und entfernt.

                    // falls alte liste jetzt leer, löschen.
                    if (l.Count == 0 && l != dest)
                    {
                        this.renderSliceLists.Remove(l);
                    }

                    break;
                }
            }

            dest.Add(rs);
        }
Esempio n. 13
0
        private void DropChannel(XElement channel, ObservableCollection <RenderSlice> rslist)
        {
            Renderer r = RendererManager.GetRenderer(channel.Parent);

            if (r != null)
            {
                List <RenderSlice> renderSliceList = new List <RenderSlice>();

                int channelNum = MeasurementEntry.GetChannelNum(channel);

                if (channelNum != -1)
                {
                    RenderSlice renderSlice = r.GetRenderSlice(channelNum);

                    this.AttachKillHandler(renderSlice);
                    this.MoveRenderSlice(renderSlice, rslist);

                    renderSliceList.Add(renderSlice);
                }

                RendererManager.AutoZoomIndividual(renderSliceList);
            }
        }
Esempio n. 14
0
        /// <summary>
        /// Updates a RenderSlice with a new width and new height.
        /// Width and height are mixed up, because the bitmap is rendered in rotation of 90°.
        /// This method changes all information of the RenderSlice.
        /// </summary>
        /// <param name="rs">Change the dimensions of this RenderSlice</param>
        /// <param name="imageWidth">New image width in pixels (width is the unit or y axis)</param>
        /// <param name="imageHeight">New image height in pixels (height is the time or x axis)</param>
        public unsafe static void RenderSlice_Update(RenderSlice rs, int imageWidth, double imageHeight)
        {
            DrawingGroup drawinggroup = new DrawingGroup();

            ((RasterRenderSlice)rs).ImageHeight  = (int)imageHeight;
            ((RasterRenderSlice)rs).ImageWidth   = imageWidth;
            ((RasterRenderSlice)rs).WBmp         = new WriteableBitmap(imageWidth, (int)imageHeight, 96, 96, PixelFormats.Pbgra32, null);
            ((RasterRenderSlice)rs).argb         = (uint *)((RasterRenderSlice)rs).WBmp.BackBuffer;
            ((RasterRenderSlice)rs).strideUInt32 = ((RasterRenderSlice)rs).WBmp.BackBufferStride >> 2;

            Rect         rect         = new Rect(0.0, 0.0, imageWidth, ((RasterRenderSlice)rs).ImageHeight);
            ImageDrawing imagedrawing = new ImageDrawing(((RasterRenderSlice)rs).WBmp, rect);

            MatrixTransform mt = new MatrixTransform(0.0, 1.0, -1.0, 0.0, imageWidth, 0);

            mt.Freeze();

            drawinggroup.Children.Add(imagedrawing);

            switch (rs.Renderer.ToString())
            {
            case "UnisensViewer.EventStringRenderer":
                ((EventRenderSlice)rs).geometrygroup.Transform = mt;
                drawinggroup.Children.Add(((EventRenderSlice)rs).geometrydrawing);
                break;

            case "UnisensViewer.EventValueRenderer":
                ((RasterRenderSlice)rs).geometrygroup.Transform = mt;
                drawinggroup.Children.Add(((RasterRenderSlice)rs).geometrydrawing);
                break;

            default:
                break;
            }
            drawinggroup.ClipGeometry           = new RectangleGeometry(rect);
            ((RasterRenderSlice)rs).imagesource = new DrawingImage(drawinggroup);
        }
Esempio n. 15
0
        public static void MergedZoomInto(RenderSlice rs)
        {
            ZoomInfo zi = new ZoomInfo(float.MaxValue, float.MinValue);

            if (rs.Zoominfo.PhysicalMax > zi.PhysicalMax)
            {
                zi.PhysicalMax = rs.Zoominfo.PhysicalMax;
            }

            if (rs.Zoominfo.PhysicalMin < zi.PhysicalMin)
            {
                zi.PhysicalMin = rs.Zoominfo.PhysicalMin;
            }

            if (rs.Zoominfo.PhysicalMin != float.MaxValue)
            {
                // zoominfo nicht initialisiert / keine daten?
                rs.ZoomInto(zi.PhysicalMin, zi.PhysicalMax);
            }
            else
            {
                rs.ZoomInto(0.0f, 0.0f);
            }
        }
 public HoverRenderSliceEventArgs(RenderSlice renderslice)
     : base(SignalViewerControl.HoverRenderSliceEvent)
 {
     this.renderslice = renderslice;
 }