/// <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)); } }
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(); }
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; }
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); }
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(); }