示例#1
0
        private void CreateNewDrawing(PointF imagePoint, ImageToViewportTransformer transformer)
        {
            int  keyframeIndex     = 0;
            int  timestampPerFrame = 1;
            long currentTimestamp  = 0;
            bool editingLabel      = false;

            if (screenToolManager.ActiveTool == ToolManager.Tools["Label"])
            {
                editingLabel = LabelMouseDown(imagePoint, currentTimestamp, transformer);
            }

            if (editingLabel)
            {
                return;
            }

            if (metadata.Count == 0)
            {
                Keyframe kf = new Keyframe(0, "", metadata);
                metadata.AddKeyframe(kf);
            }

            AddDrawing(imagePoint, keyframeIndex, timestampPerFrame, transformer);
        }
示例#2
0
        public bool OnMouseLeftDown(Point mouse, Point imageLocation, float imageZoom)
        {
            if (metadata == null || screenToolManager == null)
            {
                return(false);
            }

            // At this point we must know the current timestamp and metadata should be valid.
            // TODO: Handle magnifier.
            // TODO: see if this could handle whole image manipulation as well, but at the moment the resizers are stored in the viewport.

            bool handled = false;
            ImageToViewportTransformer transformer = new ImageToViewportTransformer(imageLocation, imageZoom);
            PointF imagePoint = transformer.Untransform(mouse);

            metadata.AllDrawingTextToNormalMode();

            if (screenToolManager.IsUsingHandTool)
            {
                // TODO: Change cursor.
                handled = screenToolManager.HandTool.OnMouseDown(metadata, fixedKeyframe, imagePoint, fixedTimestamp, false);
            }
            else
            {
                handled = true;
                CreateNewDrawing(imagePoint, transformer);
            }

            return(handled);
        }
示例#3
0
        public bool OnMouseLeftMove(Point mouse, Keys modifiers, Point imageLocation, float imageZoom)
        {
            if (metadata == null || screenToolManager == null)
            {
                return(false);
            }

            bool handled = false;
            ImageToViewportTransformer transformer = new ImageToViewportTransformer(imageLocation, imageZoom);
            PointF imagePoint = transformer.Untransform(mouse);

            if (screenToolManager.IsUsingHandTool)
            {
                // TODO: handle magnifier.
                handled = screenToolManager.HandTool.OnMouseMove(metadata, imagePoint, Point.Empty, modifiers);
            }
            else
            {
                // Setting second point of a drawing.
                IInitializable drawing = metadata.HitDrawing as IInitializable;
                if (drawing != null)
                {
                    drawing.InitializeMove(imagePoint, modifiers);
                }
            }

            return(handled);
        }
示例#4
0
        public void Render(Graphics viewportCanvas, Point imageLocation, float imageZoom, long timestamp)
        {
            if (metadata == null)
            {
                return;
            }

            ImageToViewportTransformer transformer = new ImageToViewportTransformer(imageLocation, imageZoom);

            viewportCanvas.SmoothingMode = SmoothingMode.AntiAlias;
            RenderExtraDrawings(metadata, timestamp, viewportCanvas, transformer);
            RenderDrawings(metadata, timestamp, viewportCanvas, transformer);
            //RenderMagnifier();
        }
示例#5
0
        private bool LabelMouseDown(PointF imagePoint, long currentTimestamp, ImageToViewportTransformer transformer)
        {
            bool hitExisting = false;

            foreach (DrawingText label in metadata.Labels())
            {
                int hit = label.HitTest(imagePoint, currentTimestamp, metadata.CalibrationHelper.DistortionHelper, transformer, metadata.CoordinateSystem.Zooming);
                if (hit >= 0)
                {
                    hitExisting = true;
                    label.SetEditMode(true, transformer);
                }
            }

            return(hitExisting);
        }
示例#6
0
        public bool HitTest(Point mouse, Point imageLocation, float imageZoom)
        {
            // Note: at the moment this method does not support extra drawings.

            if (metadata == null)
            {
                return(false);
            }

            ImageToViewportTransformer transformer = new ImageToViewportTransformer(imageLocation, imageZoom);
            PointF imagePoint = transformer.Untransform(mouse);

            int keyframeIndex = 0;

            return(metadata.IsOnDrawing(keyframeIndex, imagePoint, fixedTimestamp));
        }
示例#7
0
        public void OnMouseUp(Bitmap bitmap, Point mouse, Keys modifiers, Point imageLocation, float imageZoom)
        {
            // TODO: Handle magnifier.
            // TODO: Memorize the action we just finished to enable undo.
            // TODO: keep tool or change tool.
            // m_ActiveTool = m_ActiveTool.KeepTool ? m_ActiveTool : m_PointerTool;

            if (screenToolManager.IsUsingHandTool)
            {
                screenToolManager.HandTool.OnMouseUp();
                metadata.AllDrawingTextToNormalMode();
                metadata.UpdateTrackPoint(bitmap);
            }

            ImageToViewportTransformer transformer = new ImageToViewportTransformer(imageLocation, imageZoom);
            PointF imagePoint = transformer.Untransform(mouse);

            metadata.InitializeCommit(null, imagePoint);

            screenToolManager.AfterToolUse();
        }
示例#8
0
        private void AddDrawing(PointF imagePoint, int keyframeIndex, int timestampPerFrame, ImageToViewportTransformer transformer)
        {
            AbstractDrawing drawing    = screenToolManager.ActiveTool.GetNewDrawing(imagePoint, keyframeIndex, timestampPerFrame, transformer);
            Guid            keyframeId = metadata.GetKeyframeId(keyframeIndex);

            HistoryMementoAddDrawing memento = new HistoryMementoAddDrawing(metadata, keyframeId, drawing.Id, drawing.ToolDisplayName);

            metadata.AddDrawing(keyframeId, drawing);
            metadata.HistoryStack.PushNewCommand(memento);

            // Special cases
            // TODO: implement the event handler to metadata DrawingAdded and finish the label in the handler.
            if (screenToolManager.ActiveTool == ToolManager.Tools["Label"])
            {
                if (LabelAdded != null)
                {
                    LabelAdded(this, new DrawingEventArgs(drawing, keyframeId));
                }

                ((DrawingText)drawing).SetEditMode(true, transformer);
            }
        }
示例#9
0
        private void RenderDrawings(Metadata metadata, long timestamp, Graphics canvas, ImageToViewportTransformer transformer)
        {
            DistortionHelper distorter = metadata.CalibrationHelper.DistortionHelper;

            foreach (Keyframe keyframe in metadata.Keyframes)
            {
                foreach (AbstractDrawing drawing in keyframe.Drawings)
                {
                    drawing.Draw(canvas, distorter, transformer, drawing == metadata.HitDrawing, timestamp);
                }
            }
        }
示例#10
0
        private void RenderExtraDrawings(Metadata metadata, long timestamp, Graphics canvas, ImageToViewportTransformer transformer)
        {
            DistortionHelper distorter = null;

            foreach (AbstractDrawing ad in metadata.ChronoManager.Drawings)
            {
                ad.Draw(canvas, distorter, transformer, false, timestamp);
            }

            foreach (AbstractDrawing ad in metadata.TrackManager.Drawings)
            {
                ad.Draw(canvas, distorter, transformer, false, timestamp);
            }

            foreach (AbstractDrawing ad in metadata.ExtraDrawings)
            {
                ad.Draw(canvas, distorter, transformer, false, timestamp);
            }
        }
示例#11
0
        private void RenderExtraDrawings(Metadata metadata, long timestamp, Graphics canvas, ImageToViewportTransformer transformer)
        {
            DistortionHelper distorter = null;

            metadata.DrawingCoordinateSystem.Draw(canvas, distorter, transformer, false, timestamp);
            metadata.DrawingTestGrid.Draw(canvas, distorter, transformer, false, timestamp);

            if (renderTimedDrawings)
            {
                metadata.SpotlightManager.Draw(canvas, distorter, transformer, false, timestamp);
                metadata.AutoNumberManager.Draw(canvas, distorter, transformer, false, timestamp);
            }

            if (renderTimedDrawings)
            {
                foreach (AbstractDrawing ad in metadata.ChronoManager.Drawings)
                {
                    ad.Draw(canvas, distorter, transformer, false, timestamp);
                }
            }

            if (renderTimedDrawings)
            {
                foreach (AbstractDrawing ad in metadata.TrackManager.Drawings)
                {
                    ad.Draw(canvas, distorter, transformer, false, timestamp);
                }
            }
        }