/// <summary> /// Callback that handles results from the Wizard Labeler. The SocketClient /// forwards each full sketch received to the recognizer. This method /// unmarshalls the received sketch and stores it internally; a /// recognition event is fired only when the user has antecedently /// triggered recognition. /// </summary> /// <param name="xmlStr">The XML string that the Wizard Labeler sent.</param> private void socketClient_SketchRecievedEvent(string xmlStr) { // Read the XML string and fetch the sketch XmlTextReader xmlReader = new XmlTextReader(new StringReader(xmlStr)); xmlReader.WhitespaceHandling = WhitespaceHandling.None; ReadXML readXml = new ReadXML(xmlReader); this.currentSketch = readXml.Sketch; this.lastSketchReceived = DateTime.Now; // Apply error to current sketch before constructing // a recognition result this.applyErrorToCurrentRecognitionResult(); // Construct a recognition result this.currentRecognitionResult = new RecognizerEventArgs(); this.currentRecognitionResult.eventTime = DateTime.Now; this.currentRecognitionResult.recognitionResults[0] = this.currentSketch; this.currentRecognitionResult.userTriggered = waitingOnWizard; // If we were waiting for the Wizard to finish labeling a sketch, // then fire a recognition event. In the future, we might // 'fade in' recognition results as they are received. if (waitingOnWizard) { waitingOnWizard = false; RecognitionEvent(this, this.currentRecognitionResult); } }
/// <summary> /// When the user manually triggers recognition, label everything /// in the sketch as a wire. /// </summary> void Recognizer.recognize(Sketch.Sketch sketch, Sketch.Stroke[] selectedStrokes, bool userTriggered) { // Only operate on user triggered recognition events if (!userTriggered) { return; } lastLabeledSketchArgs = new RecognizerEventArgs(); foreach (Sketch.Stroke selectedStroke in selectedStrokes) { if (selectedStroke == null) { // The recognition triggerer left empty elements in // the selected strokes array. Here we just ignore // the lack of a stroke. continue; } // Get the corresponding stroke in the sketch to make sure we label // the right substrokes Sketch.Stroke sketchStroke = sketch.GetStroke((System.Guid)selectedStroke.XmlAttrs.Id); if (sketchStroke == null) { // The selected stroke is not in the sketch. // In some scenarios, we might want to throw an exception, // but in this case we just skip the stroke continue; } // Now label the substrokes Sketch.Substroke[] selectedSubstrokes = sketchStroke.Substrokes; foreach (Sketch.Substroke selectedSubstroke in selectedSubstrokes) { if (selectedSubstroke.GetLabels().Length > 0) { continue; } // Apply wire label or error label using simulated error rate if (randobj.NextDouble() < UIConstants.ErrorLabelErrorRate) { sketch.AddLabel(selectedSubstroke, UIConstants.ErrorLabel, 1.0); } else { sketch.AddLabel(selectedSubstroke, UIConstants.WireLabel, 1.0); } } } lastLabeledSketchArgs.recognitionResults[0] = sketch; lastLabeledSketchArgs.eventTime = DateTime.Now; lastLabeledSketchArgs.userTriggered = true; RecognitionEvent(this, lastLabeledSketchArgs); }
public DummyRecognizer() { // Read in the sketch Sketch.Sketch dummySketch = (new ReadXML(UIConstants.DummyRecognitionFilepath)).Sketch; // Construct the recognition results to return dummyRecognitionResults = new RecognizerEventArgs(); dummyRecognitionResults.recognitionResults[0] = dummySketch; dummyRecognitionResults.eventTime = DateTime.Now; dummyRecognitionResults.userTriggered = true; }
/// <summary> /// When the user manually triggers recognition, label everything /// in the sketch as a wire. /// </summary> void Recognizer.recognize(Sketch.Sketch sketch, bool userTriggered) { // Only operate on user triggered recognition events if (!userTriggered) { return; } foreach (Sketch.Substroke substroke in sketch.Substrokes) { sketch.AddLabel(substroke, UIConstants.WireLabel, 1.0); } lastLabeledSketchArgs = new RecognizerEventArgs(); lastLabeledSketchArgs.recognitionResults[0] = sketch; lastLabeledSketchArgs.eventTime = DateTime.Now; lastLabeledSketchArgs.userTriggered = true; RecognitionEvent(this, lastLabeledSketchArgs); }