public void Initialize3D() { try { xdModels.Load("../../models.xml"); foreach (XmlNode xnNode in xdModels.DocumentElement.ChildNodes) { if (xnNode.NodeType != XmlNodeType.Element) { continue; } XmlElement xeNode = (XmlElement)xnNode; MyModel mm = new MyModel(); mm.id = Int32.Parse(xeNode.Attributes["id"].Value); mm.trans = bool.Parse(xeNode.Attributes["trans"].Value); mm.path = xeNode.Attributes["path"].Value; mm.code = xeNode.Attributes["code"].Value; mm.rotX = Int32.Parse(xeNode.Attributes["rotX"].Value); mm.rotY = Int32.Parse(xeNode.Attributes["rotY"].Value); mm.rotZ = Int32.Parse(xeNode.Attributes["rotZ"].Value); mm.sizeX = Int32.Parse(xeNode.Attributes["sizeX"].Value); mm.sizeY = Int32.Parse(xeNode.Attributes["sizeY"].Value); mm.sizeZ = Int32.Parse(xeNode.Attributes["sizeZ"].Value); mm.offX = Int32.Parse(xeNode.Attributes["offX"].Value); mm.offY = Int32.Parse(xeNode.Attributes["offY"].Value); mm.offZ = Int32.Parse(xeNode.Attributes["offZ"].Value); FileStream fs = new FileStream(mm.path, FileMode.Open, FileAccess.Read); // /* Viewbox vb = (Viewbox)XamlReader.Load(fs); fs.Close(); mm.root = vb; //for INameScope Viewport3D v3d = (Viewport3D)vb.Child; */ Viewport3D v3d = (Viewport3D)XamlReader.Load(fs); fs.Close(); mm.root = v3d; // extract storyboard if (v3d.Triggers.Count > 0) { var trigger = (EventTrigger)v3d.Triggers[0]; var beginSb = (BeginStoryboard)trigger.Actions[0]; mm.sb = beginSb.Storyboard; } ModelVisual3D mv3d = (ModelVisual3D)v3d.Children[0]; Model3DGroup m3dgScene = (Model3DGroup)mv3d.Content; Model3DGroup m3dg = (Model3DGroup)m3dgScene.Children[m3dgScene.Children.Count - 1]; mm.m3dg = m3dg; // make modelvisual3d //mv3d = new ModelVisual3D(); //mv3d.Content = mm.m3dg; //mm.mv3d = mv3d; //m3dg.Transform = null; Transform3DGroup t3dg = new Transform3DGroup(); m3dg.Transform = t3dg; //change size double scaleX = mm.sizeX / m3dg.Bounds.SizeX; double scaleY = mm.sizeY / m3dg.Bounds.SizeY; double scaleZ = mm.sizeZ / m3dg.Bounds.SizeZ; scaleX = FixDouble(scaleX); scaleY = FixDouble(scaleY); scaleZ = FixDouble(scaleZ); ScaleTransform3D stransform3D = new ScaleTransform3D(scaleX, scaleY, scaleZ); mm.scaleTransform = stransform3D; t3dg.Children.Add(stransform3D); //move to origin double offX = (-1 * m3dg.Bounds.X) - (m3dg.Bounds.SizeX / 2); double offY = (-1 * m3dg.Bounds.Y) - (m3dg.Bounds.SizeY / 2); double offZ = (-1 * m3dg.Bounds.Z) - (m3dg.Bounds.SizeZ / 2); offX = FixDouble(offX); offY = FixDouble(offY); offZ = FixDouble(offZ); TranslateTransform3D ttransform3d = new TranslateTransform3D(offX, offY, offZ); mm.translateTranform = ttransform3d; t3dg.Children.Add(ttransform3d); //rotate t3dg.Children.Add(new RotateTransform3D(new AxisAngleRotation3D(new Vector3D(1, 0, 0), mm.rotX))); t3dg.Children.Add(new RotateTransform3D(new AxisAngleRotation3D(new Vector3D(0, 1, 0), mm.rotY))); t3dg.Children.Add(new RotateTransform3D(new AxisAngleRotation3D(new Vector3D(0, 0, 1), mm.rotZ))); //move to top of Z t3dg.Children.Add(new TranslateTransform3D(0, 0, m3dg.Bounds.SizeZ / 2)); //t3dg.Children.Add(new TranslateTransform3D(0, m3dg.Bounds.SizeY / 2, 0)); //move to offset t3dg.Children.Add(new TranslateTransform3D(mm.offX, mm.offY, mm.offZ)); //0,0,0 AddModel(mm); dicModels.Add(mm.id, mm); } Console.WriteLine("{0} Models added to the 3D model dictionary.", dicModels.Count); // Map 3d models to images ModelMapping(); } catch (Exception ex) { MessageBox.Show(ex.ToString()); } previousMarkerInfo = new MarkerInfo(-1, new Point3D()); currentMarkerInfo = previousMarkerInfo; }
private void CompositionTarget_Rendering(object sender, EventArgs e) { // Clear views this.detectedImage.Source = null; this.recognizedImage.Source = null; this.progressBar_confidence.Value = 0; this.label_tanimoto.Content = ""; // mindwave if (thinkGear != null) { thinkGear.UpdateState(); float attention = thinkGear.ThinkGearState.Attention; float meditation = thinkGear.ThinkGearState.Meditation; this.progressBar_attention.Value = attention; this.progressBar_meditation.Value = meditation; this.label_attention.Content = attention; this.label_meditation.Content = meditation; if (attention > 50 && meditation > 50) { if(JediMode) Energized = true; this.button_jedi.Background = Brushes.Green; } else { Energized = false; this.button_jedi.Background = Brushes.Red; } } textBlock_timeout.Text = stopwatch_model.ElapsedMilliseconds.ToString(); if (stopwatch_model.ElapsedMilliseconds > modelLife) { //MyModel mm = dicModels[currentMarkerInfo.modelId]; modeler.Children.Clear(); isFlushed = true; previousMarkerInfo.modelId = -1; } if (cameraRunning == true) { #region FPSMeasurement if (frameCounter++ == 0) { // Starting timing. stopwatch.Start(); } // Determine frame rate in fps (frames per second). long frameRate = (long)(frameCounter / this.stopwatch.Elapsed.TotalSeconds); if (frameRate > 0) { // Update elapsed time, number of frames, and frame rate. this.textBlock_VideoPerformance.Text = string.Format("Elapsed : {0}, Frame : {1}, FPS : {2}", stopwatch.Elapsed.ToString(), frameCounter, frameRate); } #endregion FPSMeasurement cam.InitializeCapture(); cam.getFrame(); int id = -1; using (IplImage image = cam.getFrame()) { if (image != null) { // Detection CvRect roi; CvPoint[] pts; IplImage detected = DetectImage(image, out roi, out pts); if (takeSnapShotDetected) { Cv.SaveImage(@"C:\Users\Pye\Desktop\TrainingSet\detected.bmp", detected); takeSnapShotDetected = false; } int roiArea = roi.Size.Width * roi.Size.Height; //Console.WriteLine(roiArea.ToString()); // Debug if (detected != null && roiArea > 10000) { OpenCVSharpHelper.CorrectGamma(detected, detected, slider_Gamma.Value); detectedImage.Source = OpenCVSharpHelper.ToBitmapSource(detected); // Recognition if (_som.IsTrained) { id = RecognizeImage(detected); } // Draw ROI (after recognition) if (displayROICheckbox.IsChecked == true) { OpenCVSharpHelper.DrawROI(image, roi, pts); } detected.Dispose(); } // Display 3D if (Render3DCheckbox.IsChecked == true) { if (id != -1) Cv.FillPoly(image, new CvPoint[][] { pts }, CvColor.Gray); // Find the center of roi CvPoint renderPt = new CvPoint(roi.Left + (roi.Width / 2), roi.Top + (roi.Height / 2)); Point3D point3D = GetPoint3D(new Point(renderPt.X, renderPt.Y), MainViewport); previousMarkerInfo = currentMarkerInfo; currentMarkerInfo = new MarkerInfo(id, point3D); UpdateViewport(); } video.Source = OpenCVSharpHelper.ToBitmapSource(image); } } } else { stopwatch.Reset(); cam.DisposeCapture(); } /*/ Debug 3D CvPoint tmpPt = new CvPoint(200, 200); Point3D pt3D = GetPoint3D(new Point(tmpPt.X, tmpPt.Y), MainViewport); previousMarkerInfo = currentMarkerInfo; currentMarkerInfo = new MarkerInfo(5, pt3D); UpdateViewport(); */ }