Exemple #1
0
        /// <summary>
        /// Adds a new track drawing.
        /// </summary>
        public void AddTrack(DrawingTrack track)
        {
            trackManager.AddDrawing(track);

            track.ParentMetadata = this;

            if (lastUsedTrackerParameters != null)
            {
                track.TrackerParameters = lastUsedTrackerParameters;
            }

            track.TrackerParametersChanged += Track_TrackerParametersChanged;

            hitDrawing = track;

            AfterDrawingCreation(track);

            // The following is necessary for the "undo of deletion" case.
            track.UpdateKinematics();
            track.IntegrateKeyframes();

            if (DrawingAdded != null)
            {
                DrawingAdded(this, new DrawingEventArgs(track, trackManager.Id));
            }
        }
Exemple #2
0
        public void UpdateTrackPoint(Bitmap bitmap)
        {
            // Happens when mouse up and editing a track.
            DrawingTrack t = hitDrawing as DrawingTrack;

            if (t != null && (t.Status == TrackStatus.Edit || t.Status == TrackStatus.Configuration))
            {
                t.UpdateTrackPoint(bitmap);
            }
        }
        public FormTrackAnalysis(Metadata metadata, DrawingTrack track)
        {
            this.metadata   = metadata;
            this.kinematics = track.TrajectoryKinematics;
            this.color      = track.MainColor;

            InitializeComponent();

            plotHelper = new PlotHelper(plotView);
            Localize();
            CreatePlots();
        }
Exemple #4
0
        private void Track_TrackerParametersChanged(object sender, EventArgs e)
        {
            // Remember these track parameters to bootstrap the next trackable.
            DrawingTrack track = sender as DrawingTrack;

            if (track == null)
            {
                return;
            }

            lastUsedTrackerParameters = track.TrackerParameters;
        }
Exemple #5
0
        private bool IsOnTrack(Metadata metadata, PointF mouseCoordinates, long currentTimeStamp)
        {
            // Track have their own special hit test because we need to differenciate the interactive case from the edit case.
            bool isOnDrawing = false;

            foreach (AbstractDrawing drawing in metadata.TrackManager.Drawings)
            {
                DrawingTrack track = drawing as DrawingTrack;
                if (track == null)
                {
                    continue;
                }

                int hitResult = drawing.HitTest(mouseCoordinates, currentTimeStamp, metadata.CalibrationHelper.DistortionHelper, metadata.CoordinateSystem, metadata.CoordinateSystem.Zooming);
                if (hitResult < 0)
                {
                    continue;
                }

                isOnDrawing        = true;
                selectedObjectType = SelectedObjectType.ExtraDrawing;
                metadata.SelectDrawing(drawing);

                manipulationType = ManipulationType.Move;

                switch (track.Status)
                {
                case TrackStatus.Interactive:
                    if (hitResult == 0 || hitResult == 1)
                    {
                        manipulationType = ManipulationType.Resize;
                        resizingHandle   = hitResult;
                    }
                    break;

                case TrackStatus.Configuration:
                    if (hitResult > 1)
                    {
                        manipulationType = ManipulationType.Resize;
                        resizingHandle   = hitResult;
                    }
                    break;
                }

                break;
            }

            return(isOnDrawing);
        }
Exemple #6
0
        public void ModifiedDrawing(Guid managerId, Guid drawingId)
        {
            AbstractDrawing drawing = GetDrawing(managerId, drawingId);
            DrawingTrack    track   = drawing as DrawingTrack;

            if (track != null)
            {
                track.UpdateKinematics();
                track.IntegrateKeyframes();
            }

            if (DrawingModified != null)
            {
                DrawingModified(this, new DrawingEventArgs(drawing, managerId));
            }
        }
        public formConfigureTrajectoryDisplay(DrawingTrack track, Metadata metadata, Bitmap image, long timestamp, Action invalidate)
        {
            InitializeComponent();

            this.track   = track;
            memoStatus   = track.Status;
            track.Status = TrackStatus.Configuration;
            track.TrackerParametersChanged += new EventHandler(track_TrackParametersChanged);
            this.invalidate = invalidate;
            this.timestamp  = timestamp;

            pnlViewport.Controls.Add(viewportController.View);
            viewportController.View.Dock = DockStyle.Fill;

            viewportController.Bitmap    = image;
            viewportController.Timestamp = timestamp;

            InitializeDisplayRectangle(image.Size, timestamp);
            metadataRenderer    = new MetadataRenderer(metadata);
            metadataManipulator = new MetadataManipulator(metadata, screenToolManager);
            metadataManipulator.SetFixedTimestamp(timestamp);
            metadataManipulator.SetFixedKeyframe(-1);

            viewportController.MetadataRenderer    = metadataRenderer;
            viewportController.MetadataManipulator = metadataManipulator;

            viewportController.Refresh();

            track.DrawingStyle.ReadValue();

            // Save the current state in case of cancel.
            track.MemorizeState();
            track.DrawingStyle.Memorize();

            InitViewCombo();
            InitMarkerCombo();
            InitExtraDataCombo();
            chkBestFitCircle.Checked = track.DisplayBestFitCircle;
            InitTrackParameters();
            SetupStyleControls();
            SetCurrentOptions();
            InitCulture();

            interactionTimer.Interval = 15;
            interactionTimer.Tick    += InteractionTimer_Tick;
            interactionTimer.Start();
        }