/*public void saveToCSV(string step) * { * var csv = new StringBuilder(); * * // check if scnes dir exists * if (!Directory.Exists(ProjectConstants.STUDY_DIR)) * { * // if not create it * Directory.CreateDirectory(ProjectConstants.STUDY_DIR); * } * string path = ProjectConstants.STUDY_DIR+ "\\PBD_"+ this.m_CsvNameTime +".csv"; * * * //var newLine = string.Format("{0},{1},{2}{3}", PBDManager.Instance.StartTime.ToString(), PBDManager.Instance.EndTime.ToString(), PBDManager.Instance.DurationTime.ToString(), Environment.NewLine); * long now = DateTime.Now.Ticks / TimeSpan.TicksPerMillisecond; * var newLine = string.Format("{0},{1},{2}{3}", step, now, now - m_CsvNameTime, Environment.NewLine); * csv.Append(newLine); * * // File.WriteAllText( path, csv.ToString()); * File.AppendAllText(path, csv.ToString()); * }*/ public void checkAutomaticallyForAssemblyStep() { // PDB active? if (StateManager.Instance.State == AllEnums.State.RECORD && !m_BlockAssemblyCheck && !m_BlockUntilObjectIsBackAgain) { long now = DateTime.Now.Ticks / TimeSpan.TicksPerMillisecond; if (now - m_LlastWithdrawlTimestampInMillis > 10000) // was last withdrawl at least 10 seconds ago? { if (now - m_lastWorkingTimestampInMillis > 3000) //threshold { //did we already take a snapshot of this period if (!m_AlreadyDetectedAssembly) { // user might be waiting for automatically created step // check if something happened AssemblyZone z = AssemblyZoneManager.Instance.createAssemblyZoneFromChanges(); if (z != null) { // block assembly until next pick m_BlockAssemblyCheck = true; // create a scene for displaying assemblyzone and add it to workflow Scene.Scene autoScene = new Scene.Scene(); autoScene.Add(z.getDrawable(true)); AdaptiveScene adaptiveScene = new AdaptiveScene(autoScene, AdaptivityLevel.AdaptivityLevels.FirstOrDefault()); EditWorkflowManager.Instance.createStep(AllEnums.PBD_Mode.ASSEMBLY_DONE, adaptiveScene, "Zone-" + z.Id, z.TriggerMessage); AssemblyZoneManager.Instance.CurrentLayout.AssemblyZones.Add(z); m_AlreadyDetectedAssembly = true; // temporarilty display feedback that zone was detected Scene.Scene feedbackScene = new Scene.Scene(); Scene.SceneText text = new Scene.SceneText(0.5 * KinectManager.Instance.ImageSize.Width, 0.5 * KinectManager.Instance.ImageSize.Height, "Step created", System.Windows.Media.Color.FromRgb(255, 255, 255), 10.0, new System.Windows.Media.FontFamily("Arial")); feedbackScene.Add(text); SceneManager.Instance.TemporaryFeedbackScene = feedbackScene; SceneManager.Instance.DisplayTempFeedback = true; m_CreatedFeedbackTimestampInMillis = now; } // create a new snapshot if (!m_IsUserWorking) { AssemblyZoneManager.Instance.createDepthSnapshot(); } } } } } // maybe find a better place for this: // check if the feedback should still be displayed long nower = DateTime.Now.Ticks / TimeSpan.TicksPerMillisecond; if (nower - m_CreatedFeedbackTimestampInMillis > m_FeedbackShow_Time) { SceneManager.Instance.DisplayTempFeedback = false; SceneManager.Instance.TemporaryFeedbackScene.Clear(); } }
private void ViewPort_Drop(object sender, DragEventArgs e) { if (e.Data.GetDataPresent("SceneItem")) { string item = e.Data.GetData("SceneItem") as string; var pos = e.GetPosition(m_Viewport); var hitRes = VisualTreeHelper.HitTest(m_Viewport, pos); RayMeshGeometry3DHitTestResult rayMeshRes = hitRes as RayMeshGeometry3DHitTestResult; if (rayMeshRes != null) { double x = (double)rayMeshRes.PointHit.X; double y = (double)rayMeshRes.PointHit.Y; Scene.SceneItem s = null; if (item == typeof(SceneRect).ToString()) { s = new Scene.SceneRect(x, y, 50, 50, System.Windows.Media.Color.FromRgb(0, 255, 0)); } else if (item == typeof(SceneText).ToString()) { s = new Scene.SceneText(x, y, "Text", System.Windows.Media.Color.FromRgb(255, 255, 255), 10.0, new FontFamily("Arial")); } else if (item == typeof(SceneTextViewer).ToString()) { s = new Scene.SceneTextViewer(x, y, 0.2, 0.2, "Text", new FontFamily("Arial"), 10.0, System.Windows.Media.Color.FromRgb(255, 255, 255)); } else if (item == typeof(SceneCircle).ToString()) { s = new Scene.SceneCircle(x, y, 10, 0.0, Math.PI * 2.0, System.Windows.Media.Color.FromRgb(0, 255, 0)); } else if (item == typeof(SceneImage).ToString()) { s = new Scene.SceneImage(x, y, 100, 100, null); } else if (item == typeof(SceneVideo).ToString()) { s = new Scene.SceneVideo(x, y, 100, 100, null); } else if (item == typeof(ScenePolygon).ToString()) { s = new Scene.ScenePolygon(new Polygon(new Vector2[] { new Vector2(0 + x, 0 + y), new Vector2(50 + x, 50 + y), new Vector2(50 + x, y) }), System.Windows.Media.Color.FromRgb(0, 255, 0)); } else if (item == typeof(SceneAudio).ToString()) { s = new Scene.SceneAudio(null); } if (s != null) { SceneManager.Instance.CurrentScene.Add(s); } else { throw new NotImplementedException(); } } } }
public void createEndScene(string pName, string pEndcondition) { // create a scene for displaying the withdrawel from the box Scene.Scene autoScene = new Scene.Scene(); Scene.SceneText text = new Scene.SceneText(0.5 * KinectManager.Instance.ImageSize.Width, 0.5 * KinectManager.Instance.ImageSize.Height, "Fertig", System.Windows.Media.Color.FromRgb(255, 255, 255), 10.0, new System.Windows.Media.FontFamily("Arial")); autoScene.Add(text); AdaptiveScene adaptiveScene = new AdaptiveScene(autoScene, AdaptivityLevel.AdaptivityLevels.FirstOrDefault()); createStep(AllEnums.PBD_Mode.END_CONDITION, adaptiveScene, pName, pEndcondition); }
public double fps = 0; // current FPS private DebugInformationManager() { // display GUI FPS SceneText fpsInfo = new Scene.SceneText(0.43, 0.013, "DebugFPS:", System.Windows.Media.Color.FromRgb(255, 0, 0), 10, new System.Windows.Media.FontFamily("Arial")); SceneManager.Instance.temporarylyDisplaySceneItem(fpsInfo); // display Leap FPS SceneText leapFpsInfo = new Scene.SceneText(0.43, 0.013, "LeapFPS:", System.Windows.Media.Color.FromRgb(255, 0, 0), 10, new System.Windows.Media.FontFamily("Arial")); SceneManager.Instance.temporarylyDisplaySceneItem(leapFpsInfo); }
public Scene.SceneText createSceneTextHeadingObjectDetectionZone(ObjectDetectionZone z, string text) { int x_offset = SettingsManager.Instance.Settings.SettingsTable.KinectDrawing_AssemblyArea.X; int y_offset = SettingsManager.Instance.Settings.SettingsTable.KinectDrawing_AssemblyArea.Y; float h = ((float)z.Height / (float)SettingsManager.Instance.Settings.SettingsTable.KinectDrawing_AssemblyArea.Height); float w = ((float)z.Width / (float)SettingsManager.Instance.Settings.SettingsTable.KinectDrawing_AssemblyArea.Width); float x = ((float)(z.X - x_offset) / (float)SettingsManager.Instance.Settings.SettingsTable.KinectDrawing_AssemblyArea.Width); float y = 1.0f - h - ((float)(z.Y - y_offset) / (float)SettingsManager.Instance.Settings.SettingsTable.KinectDrawing_AssemblyArea.Height); Color c = System.Windows.Media.Color.FromRgb(255, 255, 0); // yellow Scene.SceneText textItem = new Scene.SceneText(x, y, text, c, 10.0, new FontFamily("Arial")); return(textItem); }
//Code to be called within a certain part of the main ProccessFrame Method public void Object_ProccessFrame_Draw(bool hasToUpdateUI, Image <Bgra, Byte> pImage) { if (m_TakeScreenShotFromZone) { if (m_SelectedZone != null) { long now = DateTime.Now.Ticks / TimeSpan.TicksPerMillisecond; if (now - m_ScreenshotTakenTimestamp > 200) // take picture after 200ms - frame should be gone by then { // crop image Rectangle boundingBox = new Rectangle(m_SelectedZone.X, m_SelectedZone.Y, m_SelectedZone.Width, m_SelectedZone.Height); pImage.ROI = boundingBox; ObjectDetectionManager.Instance.SaveAndAddObjectToDatabase(pImage); SceneManager.Instance.DisableObjectScenes = false; m_TakeScreenShotFromZone = false; m_SelectedZone = null; CvInvoke.cvResetImageROI(pImage); } } } // first clear all the feedback from previous frame SceneManager.Instance.TemporaryObjectsTextScene.Clear(); // should we check for objects? if (SettingsManager.Instance.Settings.ObjectsRecognizeObject && ObjectDetectionManager.Instance.CurrentLayout != null && hasToUpdateUI) { // walk over all zones foreach (ObjectDetectionZone zone in ObjectDetectionManager.Instance.CurrentLayout.ObjectDetectionZones) { // crop image Rectangle boundingBox = new Rectangle(zone.X, zone.Y, zone.Width, zone.Height); pImage.ROI = boundingBox; Image <Gray, byte> grayscaleImage = pImage.Copy().Convert <Gray, byte>(); CvInvoke.cvResetImageROI(pImage); // walk over all objects foreach (TrackableObject obj in Database.DatabaseManager.Instance.Objects) { if (ObjectDetectionManager.Instance.RecognizeObject(obj.EmguImage, grayscaleImage)) { // YAY we found an object // trigger stuff WorkflowManager.Instance.OnObjectRecognized(obj); // update last seen timestamp obj.LastSeenTimeStamp = DateTime.Now.Ticks / TimeSpan.TicksPerMillisecond; obj.LastSeenZoneId = zone.Id; // display visual feedback Scene.SceneText textItem = ObjectDetectionManager.Instance.createSceneTextHeadingObjectDetectionZone(zone, obj.Name); SceneManager.Instance.TemporaryObjectsTextScene.Add(textItem); } } } } CvInvoke.cvResetImageROI(pImage); if (ObjectDetectionManager.Instance.CurrentLayout != null) { if (SettingsManager.Instance.Settings.ObjectsVisualFeedbackDisplay && (ObjectDetectionManager.Instance.CurrentLayout.ObjectDetectionZones.Count != 0)) { //write boxes MCvFont font = new MCvFont(Emgu.CV.CvEnum.FONT.CV_FONT_HERSHEY_SIMPLEX, 0.5, 0.5); foreach (ObjectDetectionZone z in ObjectDetectionManager.Instance.CurrentLayout.ObjectDetectionZones) { // draw ID pImage.Draw(z.Id + "", ref font, new System.Drawing.Point(z.X, z.Y), new Bgra(0, 0, 0, 0)); // draw Frame if (z.wasRecentlyTriggered()) { pImage.Draw(new Rectangle(z.X, z.Y, z.Width, z.Height), new Bgra(0, 255, 255, 0), 0); } else { pImage.Draw(new Rectangle(z.X, z.Y, z.Width, z.Height), new Bgra(255, 255, 255, 0), 0); } } } UtilitiesImage.ToImage(image, pImage); if (SettingsManager.Instance.Settings.ObjectsVisualFeedbackProject) { SceneManager.Instance.TemporaryObjectsScene.Clear(); // add a temporary scene for each box foreach (ObjectDetectionZone z in ObjectDetectionManager.Instance.CurrentLayout.ObjectDetectionZones) { // false = call from the display loop SceneManager.Instance.TemporaryObjectsScene.Add(ObjectDetectionManager.Instance.createSceneBoxForObjectDetectionZone(z, false)); } } else { SceneManager.Instance.TemporaryObjectsScene.Clear(); } } }